第三章模块化程序设计_第1页
第三章模块化程序设计_第2页
第三章模块化程序设计_第3页
第三章模块化程序设计_第4页
第三章模块化程序设计_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章模块化程序设计3.1模块化程序设计思想3.2函数的定义3.3函数调用3.4函数的原型与声明3.5函数嵌套与递归3.6库函数的使用3.7变量的作用域与存储类型3.8指针与函数3.9典型例题5/24/20231C语言程序设计函数是C程序的基本单位,每一个函数模块用来实现一个特定的功能。[教学要求]1.理解函数的功能。2.掌握函数定义的一般形式。3.掌握函数的形参与实参的对应关系、参数传递方法及函数返回值的概念。4.掌握函数调用的几种形式。5.掌握函数嵌套调用的一般过程。6.掌握指针的定义、使用以及指针作为函数的参数。7.掌握返回指针值的函数。8.掌握局部变量与全局变量的概念及它们的使用特点。5/24/20232C语言程序设计函数:main(),getchar(),putchar(),printf(),scanf(),exp(),fabs(),sqrt(),gets(),puts(),strcpy(),strcmp(),strcat(),strupr(),strlwr(),strlen()等。3.1模块化程序设计的思想例:从键盘中输入两个数,分别求出这两个数的最小公倍数和最大公约数。考虑:在主函数中完成数据x,y的输入和结果的输出;求解最小公倍数和求解最大公约数分别有两个自定义函数实现。5/24/20233C语言程序设计intgys(intx,inty){}intgbs(intx,inty){}#include<stdio.h>voidmain(){inta,b,m,n;printf(“input2numbers:\n”);scanf(“%d,%d”&a,&b);m=gys(a,b);n=gbs(a,b);printf(“gys=%d,gbs=%d\n”,m,n);}5/24/20234C语言程序设计结构化程序设计方法:自上向下、逐步分解、分而治之源程序文件1预编译命令说明部分执行部分函数1函数n源程序文件i源程序文件nC程序C程序结构必须有且只能有一个名为main的主函数C程序的执行总是从main函数开始,在main中结束函数不能嵌套定义,可以嵌套调用5/24/20235C语言程序设计模块化程序设计的特点:(1)模块相对独立,功能单一。编写相对简单,可以独立编写调试。(2)可集体开发,缩短开发周期。不同的模块可以由不同的人员开发,最终能够合成完整的程序。(3)开发出的模块,可在不同的应用程序中多次使用,减少重复劳动,提高开发效率。(4)测试、更新以模块为单位进行而不会影响其他模块。

5/24/20236C语言程序设计函数分类从用户角度标准函数(库函数):由系统提供用户自定义函数从函数形式无参函数有参函数使用库函数(见教材附录D)应注意:1、函数功能2、函数参数的数目和顺序,及各参数意义和类型3、函数返回值意义和类型4、需要使用的包含文件3.2函数的定义5/24/20237C语言程序设计1、函数定义的一般形式:<数据类型>函数名(<参数表>){<说明语句><执行语句>}函数体当前函数返回主调函数的数据类型(即函数运行结果的数据类型)编写方法与主函数的编写方法一样5/24/20238C语言程序设计例3.1:计算整数x的y次方longpower(intx,inty){intn;longp=1;for(n=1;n<=y;n++)p=p*x;

return(p);}函数类型参数列表返回值voidmain(){inta,b;longc;scanf(“%d%d”,&a,&b);

c=power(a,b);

printf(“c=%ld\n”,c);}5/24/20239C语言程序设计定义形式:void函数名(){说明语句;语句;}例3.2voidprint1(){printf(“WelcometoChina!\n”);}main(){

print1();print1();print1();}无返回值函数的调用函数可以无参数2、无参函数5/24/202310C语言程序设计3.3函数调用

3.3.1函数调用的形式函数语句:例printstar();printf(“Hello,World!\n”);函数表达式:例m=max(a,b)*2;函数参数:例printf(“%d”,max(a,b));m=max(a,max(b,c));5/24/202311C语言程序设计例3.3:用函数实现两个数的数值交换#include<stdio.h>voidswap(inta,intb){intt;t=a;a=b;b=t;printf(“result:x=%dy=%d\n”,a,b);}voidmain(){intx=10,y=5;printf(“x=%d,y=%d\n”,x,y);swap(x,y);}形式参数实际参数3.3.2函数间的参数传递5/24/202312C语言程序设计形参与实参形式参数:定义函数时函数名后面括号中的变量名实际参数:调用函数时函数名后面括号中的表达式说明

实参必须有确定的值,可以是常量、变量、表达式、函数等;形参必须指定类型;形参与实参类型一致,个数相同;形参在函数被调用前不占内存;函数调用时为形参分配内存;调用结束,内存释放。5/24/202313C语言程序设计参数传递方式值传递方式方式:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值特点:形参与实参占用不同的内存单元单向传递,实参的值传给形参5/24/202314C语言程序设计c=max(a,b);(main函数)

(max函数)max(intx,inty){intz;z=x>y?x:y;return(z);}例3.4比较两个数并输出大者#include<stdio.h>voidmain(){inta,b,c;scanf("%d,%d",&a,&b);

c=max(a,b);printf("Maxis%d",c);}intmax(intx,inty){intz;z=x>y?x:y;return(z);}实参形参5/24/202315C语言程序设计例3.锁5计算x的立统方#i餐nc贺lu蜓de愉<st银di好o.滴h>fl忍oa妄t干cu所be筛(fl免oa忍t双x){测re如tu绕rn滴(x刊*x尝*x姐);}ma艺in救(){搏fl斯oa劈燕t疮a贤,因pr世od站uc肢t;pr培in耽tf楚("滤Pl抓ea胀sein循pu汤t罢va歇lu方e芒of吴a弱:"倦);sc弄an蛇f(驳"%炊f"滴,&特a);pr禽od赠uc惑t=cu赵be挽(a骄);pr至in烫tf奏(”咽Cu棕beof米%便.4嫌f杠is奴%羡.4活f\毙n"蛇,a蛛,p田ro唱du响ct邻);}xaproduct××××1.庆21.21.例72语85/角18成/2肤02欢316C语言冒程序你设计例3.裕6从键山盘中闭输入盟一个桥年份察,判幕断该府年是糊否是送闰年贺。#i仅nc休lu枣de丘<st呢di耳o.睛h>vo茂id咳m育ai反n(免){蚀i谦ntye罩ar衣,s气t;pr枯in父tf沸(“仁In肤pu葱ta艺ye和ar宰:疼\n胁”)涌;sc辆an斗f(绵“%梁d”请,&挖ye雾ar);st=l桥ea烟p(拢ye骆ar老);if编(s缴t==森1)pr俊in永tf便(“辉\n甩%disru桥nn萄ia亏n\芳n”贝,y沈ea斥r);el勤sepr艰in惑tf研(“惭\n换%dis蹦n酬otru借nn颗ia贿n\节n”纵,y杆ea离r);}in漆tle料ap(i筋ntye厦ar冈){截i贯ntst;if临(y激ea骄r%遍4=灭=0互&&语y斧ea仰r%鼓10奖0!暖=0爸||娱ye幸ar注%4做00剧==突0)st=1行;el皆sest=0禽;re寺tu息rn市(s群t);}函数深调用自定纱义函部数实际参数形式参数5/赶18芝/2患02洒317C语言滩程序香设计3.俘3.市3函数昌的返无回值形式:re峰tu鼓rn中(表达成式)刚;或re须tu否rn表达演式;或re稿tu泻rn罢;功能:使挣程序微控制巡寿从被沈调用兆函数钉返回伪到调奶用函平数中方,同滩时把帜返值贞带给水调用杨函数说明:函数抗中可茶有多摊个re祸tu臣rn语句,一旦大遇到稳一个re塞tu院rn语句扮,就慌立即奋返回莲到主桂调函茎数。若无re奋tu耕rn语句辨,遇}时,疫自动卷返回核调用色函数若函月数类避型与re醉tu淘rn语句仿中表垒达式驼值的孩类型鄙不一锅致,扎按前踪蝶者为乡丰准,黄自动是转换良--渔--朋--函数血调用摸转换vo戒id型函煎数in预tma恳x(队in车tx,卵in间ty){i锯f(禽x>岩y)re袋tu剂rn姐(x酸);re快tu箱rn徐(y气);}vo倍id赶m台ai兔n(宽){i缘瑞nt健a有,b虎,c午;sc备an拔f(蛾“%悲d,径%d素”,霜&a夏,&想b);c=笑ma拨x(粘a,冈b)伏;pr偏in怪tf羡(“赛ma说xis弊%食d”潜,c剥);}5/奇18栋/2棕02荣318C语言挠程序割设计例3.才7函数晴返回侨值类生型转披换#i谋nc葡lu担de赖<st贯di盘o.面h>in俊tma昌x(f蔬lo块atx,树f宝lo蔽at继y脖){省fl复oa待t掩z;z=贩x>y?查x:格y;re认tu食rn绪(z);}vo英id泼m围ai僚n(恩){密fl落oa味t菌a,互b;in复tc;sc范an婆f(摘"%贿f,饶%f职",乘&a胳,&示b);c=准ma捡x(惊a,淘b)线;pr袜in隔tf舟("糠Ma通xis歌%觉d\攀n"烟,c财);}输入腥:23著.0堡,6华6.福0输出漫:665/苦18错/2虽02哥319C语言锐程序耗设计例3.或8:从遇键盘严中输驴入两毫个数武,分计别求娘出这家两个暂数的州最小弟公倍尾数和躬最大欲公约豆数。in福tgy晶s(公in宁tx,钱in摇ty){}in万tgb绍s(麦in把tx,舰in虾ty){}re蛮tu泥rn骡(x敢*y/龄gy识s(得x,什y))扶;in谦t朱s;s=筋x说*y/弟gy美s(剩x,持y);re牌tu贵rn牵(s里);in掩t皂t,嘴s;if郊(x舱>y野){t旬=x制;x殃=y旱;y镇=t跨;}wh肥il掉e(伙(s圈=y羽%x际)!截=0择){y惑=x伙;x全=s殖;}re毕tu政rn聋(x屯);函数累嵌套蝴调用5/剩18修/2眯02替320C语言吵程序六设计一、沃一般隆形式:函数望类型取函数拼名(形参杏类型[形参掘名],劣….竭.通)作用:告诉码编译两系统函数针类型杆、参饰数个紫数及累类型材,以届便检矛验3.馋4函数讨的原烟型与怎声明函数渡声明禽中,僻由于划编译便系统愤不检紫查参扣数名狂,所娃以可钢以只拔写形锣参的扬数据耐类型常,而奖不写趟形参漆名5/见18橡/2筐02绑321C语言畜程序剪设计二、纠说明1、函数除定义与函数坡声明不同若。2、函数课声明剥位置:程序定的数剃据说疾明部茎分,蒜(1)在宾主调寸函数乓中;顺(2)在救所有予函数仍的外肌部(身推荐移使用曾)。3、下列钩情况从下,尖可不宇作函选数声明(1)若屑函数裹返值界是ch鸟ar或in绝t型,系统远自动像按in辞t型处瓣理(2)被调坝用函让数定钥义出棒现在跟主调浆函数汁之前有些风系统(如Bo拔rl矿an妈d喝C+蛮+)要求经函数翻声明封指出晃函数慈返值评类型歌和形抽参类物型,鹅并且扬对vo虏id和in灯t型函泼数也贱要进症行函量数声呼明5/拾18京/2灾02步322C语言方程序扛设计例3.厉9函数粘声明华举例#include<stdio.h>voidmain(){inta,b;intc;scanf("%f,%f",&a,&b);c=max(a,b);printf("Maxis%d\n",c);}intmax(intx,inty){intz;z=x>y?x:y;return(z);}int型函数可不作函数声明(BorlandC++不行)#include<stdio.h>floatadd(floatx,floaty){floatz;z=x+y;return(z);}voidmain(){floata,b,c;scanf("%f,%f",&a,&b);c=add(a,b);printf("sumis%f",c);}被调函数出现在主调函数之前,不必函数声明#include<stdio.h>voidmain(){floatadd(float,float);/*函数声明*/floata,b,c;scanf("%f,%f",&a,&b);c=add(a,b);printf("sumis%f",c);}floatadd(floatx,floaty){floatz;z=x+y;return(z);}或floatadd(floatx,floaty);函数声明在主调函数中#include<stdio.h>doubletest1(inta,intb);inttest2(charc,intd);chartest3(doublee,floatf);voidmain(){…/*调用函数test1,test2,test3*、}doubletest(inta,intb){…}inttest2(charc,intd){…}chartest3(doublee,floatf){…}函数的外部声明5/顽18虏/2劫02着323C语言偶程序也设计上节滚回顾函数拣的组仙成部车分?如何握确定群函数窑的数乌据类伍型?函数震调用柱的方疯法有龄哪几醋种?简述但参数猎的“口值传屠递方栗式”编?<数据丧类型>函数膊名(<参数终表>){<说明冲语句><执行饱语句>}当前贡函数组返回等主调代函数托的数据捎类型挎(即猜函数廉运行起结果的秤数据通类型历)函数抬语句:例pr客in洽ts要ta旗r()同;pr唯in凑tf驳(“快He善ll是o,椒Wo赛rl支d!晒\n”)弱;函数舍表达奏式:例m=休ma涛x(炸a,呀b)鞋*2绳;函数伯参数:例pr错in弓tf树(“面%d贷”,忌ma善x(霜a,意b))旱;m=往ma貌x(胡a,煮ma昌x(蛇b,遵c)曾);函数述调用侨时,为形仅参分图配单赛元,并将墓实参的值复制到形驾参中勒;调升用结皱束,笔形参同单元被炸释放味,实校参单由元仍握保留勿并维早持原听值5/落18音/2珍02朽324C语言总程序距设计5、函赤数定伞义的垒一般良形式仅:<数据梳类型>函数珍名(<参数朗表>){<说明反语句><执行妙语句>}函数体当前徐函数逐返回宽主调宾函数扎的数汤据类专型(微即函妇数运率行结第果的北数据尖类型屋)编写使方法且与主胃函数胃的编召写方推法一肥样6、函报数生惰命的荒一般碗格式函数植类型弱函数个名(形参泉类型[形参虫名],蓄….孝.翁)5/基18离/2且02渠325C语言作程序况设计3.赛5函数筋嵌套屑与递要归一、碰函拉数的填嵌套营调用C规定牙:函数罩定义晨不可翠嵌套,但可以朵嵌套版调用函数main()调用函数a结束a函数b函数调用函数b5/惊18团/2柜02叛326C语言惨程序唉设计例3.爪10求三复个数某中最魂大数舌和最想小数哪的差事值#i泊nc姥lu敞de胃<st忙di想o.捉h>in山tdi屯f(深in永tx,崖in辉ty,注in狸tz)辜;in醉tma枕x(封in默tx,显in冰ty,放in铸tz)商;in杆tmi宗n(锈in恼tx,富in顽ty,电in批tz)劫;vo撑id倘m越ai寻n(筑){in瞒ta,鹊b,趋c,自d;sc卵an府f(塞"%杰d%榜d%鼻d"舍,&限a,来&b胖,&叫c);d=号di叉f(宗a,意b,旧c)川;pr无in鼻tf余("滴Ma波x-M存in棚=%增d\湾n"涛,d共);}in税tdi恼f(经in厉tx,圆in幼ty,菊in筐tz){婆r基et托ur弟n垂ma任x(财x,狸y,巩z)量-m询in捞(x载,y枕,z鞋);荒}in菜tma拘x(醒in绣tx,舱in拘ty,挣in猛tz){射i宽nt戒r音;r=榜x>亿y?肥x:慨y;re胖tu膜rn桃(r蝇>z渐?r槐:z屑);}in抬tmi虫n(移in腔tx,炮in倒ty,醋in闲tz){in损tr;r=袭x<悉y?璃x:敢y;re嘉tu蒙rn膏(r久<z万?r佣:z墙);}main()调用函数dif输出结束dif函数max函数调用函数max调用函数minmin函数5/序18偿/2辉02疏327C语言漆程序唱设计二、策拓扑办算法——递归定义宇:函泪数直嘴接或盐间接仰的调它用自叨身叫陈函数谷的递柱归调葵用f()调f调f2调f1f1()f2()in吉tf(悄in骆tx){扫i祝nt眨y资,z公;……z=社f(毛y)体;……素.re乔tu第rn帆(2反*z亲);}intf1(intx){inty,z;……

z=f2(y);…….return(2*z);}intf2(intt){inta,c;……

c=f1(a);…….return(3+c);}5/经18港/2前02仁328C语言围程序哀设计例3.诉11唇_1求n的阶贫乘(采用痒非递积归算练法)#i穗nc养lu说de警<st喘di利o.拔h>in军tfa北c(灾in沈tn){强in杠t青f,脾i;f=辜1;fo牢r然(i锐=备1;镇i<烦=n嫌;i谦++膨)f=墓f*勉i;re坚tu丝式rn馅(f乎);}vo煮id副m酸ai朱n(鸭){in搭tn,丢y冲;pr艘in交tf飞("圈In洪pu著ta附in拐te顾ge擦r馅nu父mb尚er枕:"闸);sc切an迟f(奶"%刺d"弦,&艇n);y=fa姨c(百n);pr涌in悄tf辱("串%d!拾=%辩15绩d"扛,n缴,y拣);}5/宅18屯/2樱02馅329C语言节程序祥设计[分析]一般扑来说鸦,将n!描述专成为杆:n!温=1宁*2崭*3则….层*(突n-辫1)定*n但是夺,只字要稍俩稍变益换一艺下,窄就可遮以将迅其描写述成核为:n!晃=n担*(n性-1勺)…选.3抹*2危*1=n礼*(n-已1)!这样评,一涌个整课数的户阶乘谜就被拉描述锦成为袖一个规模括较小没的阶当乘与一胞个数的积昨。同性样,陶可以咳将(n-姜1)!描述状成(n-碎1)*短(n-停2)!。依次磨类推晋。于宽是,推一个丈问题疮就被恨描述装成了末一个徐较小盏规模星的同娇样类览型的婚问题屑了。5/促18届/2晋02乡丰330C语言塌程序交设计用递届归的去方法叨求n!非法n<01n=0,1n*(n-1)!n>0

n!=递归劳的终睬止条获件递归起方式4!告=4冶*(4既-1钟)!返回蹄值6返回渐值2返回闪值13!法=3去*(凡3-骄1)视!2!愚=2捎*(风2-诊1)参!1!卵=1主调能函数返回垮值24调用5/锦18犯/2陡02烛331C语言陷程序屯设计例3.滴11究_2求n的阶宫乘(采用蔬递归吗算法)#i饰nc拐lu悔de绣<st熄di事o.宫h>in间tfa棋c(匆in两tn){大in状t锦f;if奸(n拣<0畅)pr膜in联tf梯("柏n<0山,d斯at欠a谷er林ro深r!汽")剧;el调se蛮i叔f(汇n=贵=0箱||霜n=搜=1是)加f乞=1缓;el兄sef=卷fa惜c(鞋n-篇1)金*n辉;re董tu暴rn铃(f急);}ma以in滑(){窝in气t染n,被y责;pr谈in奏tf赴("撞In驰pu踪蝶ta端in絮te过ge搁r查nu虎mb臂er挎:"速);sc惠an混f(瓜"%咳d"返,&骑n);y=fa鼓c(丘n);pr荣in俗tf意("床%d!鸦=%萝15签d"隙,n繁,y凉);}5/艳18闪/2喉02察332C语言创程序则设计ma目in函数输入m药③y=fa淘c(昆m)输出y宋⑥调用fa蛾cmn敌③因3!渗=0命,1f=董3*fa丈c(特3-傲1)返回f抗⑥调用fa艳cmn能②返回f萍②返回f同①因2!宇=0芝,1f=欲2*fa烧c(嗽2-越1)调用fa凯cmn呼①因1=袄=1f=棋1结束递归龙调用浩过程:5/吹18罗/2备02擦333C语言愉程序踪蝶设计ma宁in雷()侍fa绵c(担3)狱f脱ac玩(2埋)璃f获ac尖(1炕)fa诸c(热3)暂*4眉fa递c(塞2)牌*3妥fa公c(胞1)竞*2621结果塔:245/叮18帖/2超02规334C语言瞧程序砖设计3.恼6库函话数的悬使用驴(自赤学)使用库函萌数应注酱意:1、函棕数功闯能2、函惑数参毁数的幅数目粮和顺浑序,格及各炭参数岛意义撇和类发型3、函妻数返齐回值雁意义微和类拳型4、需喊要使防用的健包含均文件见教偏材例赠附录A5/某18撞/2右02哑335C语言旦程序嘉设计3.董7变量鞠的作春用域猪与存撒储类也型3.恩7.吃1变量榨的作四用域所谓栋变量等的作战用域昆是指爬该变邻量有回效的垄区域畜。按缝照变巧量的愉作用盾域,告将C语言恨的变堡量分醉为局务部变耽量和伙全局给变量慌。一、块局部巧变量--缸-内部刊变量位于赏一对窄花括冠号之国间的外所有要语句喉称为应一个烧代码器块(衡也称翅为复棚合语留句)伙。定义:出铲现在薪代码森块开核始位也置的宰变量蛛。说明:局部诊变量惰的作闸用域窄仅限假于定芒义它研的代戏码块第内ma且in中定序义的记变量筝只在ma迷in中有葬效不同亚函数额中同疼名变准量,轧占不涛同内纤存单唇元形参控属于秃局部蜻变量可定笔义在斤复合室语句区中,且只狂在该股复合庙语句序中有效均的变丧量floatf1(inta){intb,c;…….}charf2(intx,inty){inti,j;……}main(){intm,n;…….}a,b,c有效x,y,i,j有效m,n有效5/换18串/2挽02蕉336C语言棋程序挖设计运行粒结果派:ma错in铁:a调=3愚,b耀=4su匪b:片a=悉6,却b=网7ma年in念:a局=3驳,b逆=4#include<stdio.h>voidmain(){inta,b;a=3;b=4;printf("main:a=%d,b=%d\n",a,b);voidsub();printf("main:a=%d,b=%d\n",a,b);}voidsub(){inta,b;a=6;b=7;printf("sub:a=%d,b=%d\n",a,b);}例3.12不同函数中相同的变量5/亮18输/2坐02塞337C语言兵程序愁设计例3.13复合语句中变量#include<stdio.h>#defineN5voidmain(){inti;inttemp=0;inta[N]={1,2,3,4,5};for(i=0;i<N/2;i++)

{

inttemp; temp=a[i]; a[i]=a[N-i-1]; a[N-i-1]=temp;

}for(i=0;i<N;i++)printf("%d",a[i]);printf(“\n%d\n”,temp);}运行露结果串:4怒3驶2勾1te押mp雷=05/驰18飘/2茧02甚338C语言托程序怀设计定义:任全何在舒所有责代码庭块之熔外定从义的优变量右。有效卫范围:从定义哭变量齿的位答置开妥始到本遮源文播件结谋束应尽亭量少谋使用虽全局绳变量积,因凤为:全局叠变量技在程乖序全术部执妙行过经程中尿占用参存储四单元降低枣了函础数的绍通用坛性、况可靠香性,积可移钻植性降低性程序骨清晰络性,预容易沸出错注意艳:若庆全局国变量童与局疲部变暑量同材名,声则全怎局变早量被碗屏蔽跨!二、巨全局星变量--蠢-外部贪变量说明:全局霉变量伶的作约用是多增强钻函数蒸之间材联系送的渠翻道为便腐于区或分全瓶局与热局部笛变量拦,将犯全局赖变量伶名的伍第一港个字节母大云写5/池18斩/2刻02求339C语言渠程序怎设计上节摊回顾1、函廉数嵌处套调零用:ma忍in蔽(扬)调用抗函数a结束a函数b函数调用炕函数b函数b(去){开}函数a(担){函数b;}ma栽in暖(){函数a;}5/跳18糟/2炊02梯340C语言朱程序赠设计#i析nc情lu另de脆<st从di韵o.蜂h>in禽tfa晌c(而in挨tn){旋in哨t滥f;if葡(n检<0炸)pr杠in登tf楚("恋n<0码,d浪at藏a尊er木ro怎r!备")叉;el度se奸i充f(纵n=川=0宴||说n=约=1共)递f孕=1缘瑞;el矛sef=恋fa价c(损n-毛1)钻*n师;re荒tu赴rn外(f虫);}ma杯in谅(){铃in润t症n,嗓y久;pr言in归tf稠("芬In智pu拌ta肌in聋te废ge直r历nu牢mb敢er逆:"套);sc楼an荣f(处"%行d"咽,&遗n);y=fa腔c(机n);pr怪in禽tf痰("星%d!颠=%裹15纤d"仗,n躲,y冰);}2、函趴数递夸归调港用:ma锋in腥()级f已ac欠(3但)图fa竖c(飘2)孙fa启c(惜1)fa价c(杀3)箭*4服fa贤c(鬼2)理*3民fa读c(罪1)勉*26复2钢1结果暗:245/斗18雄/2阻02贤341C语言蒸程序橡设计3、局司部变何量和葵全局烂变量ma排in中定迈义的剃变量茄只在ma望in中有常效不同材函数香中同萄名变亏量,隆占不狐同内瓜存单键元形参暑属于路局部沾变量可定还义在尸复合蜘语句丑中,且只悉在该躺复合急语句掠中有效神的变决量定义:在函数内定义,只在本函数内有效定义:在函数外定义,可为本文件所有函数共用5/驶18偏/2肤02纲342C语言贫程序脖设计#i修nc垮lu料de胸<st竖di妹o.驴h>fl淡oa长t疫Ma为x=旨0,云Mi户n=汁10性0;fl抱oa追tav殿er但ag通e(望in疾tn){泳in馆t晃i;闹f暮lo滤at据s,压av邀er粉1,咳su篇m=上0;fo群r(知i=嫩1;钢i<具n;项i+达+){sc拍an拦f(狮“%稳f”张,&躁s);恳/*输入疮一个袖学生弄成绩句*/if来(s宇>M阅ax敢)Ma浆x=s疫;el导se添i谷f(始s<刃Mi茧n)Mi呜n=s酒;su郊m+师=s进;}re庸tu宫rn暖(s鱼um病/n剑);}vo芦id仪m贼ai驶n(牛){in嗽tn;驾f怀lo猾at劫a顾ve预r2唯;sc胖an责f(铜“%傍d”永,&伯n);族/*输入写班级妈人数妙*/av侍er舰2=av氧er垄ag恨e(似n)援;pr舱in设tf振(“哗Ma蜡x=%悉6.锁2f绞\n摧Mi沃n=率%6惩.2贱f\柔nav素er状ag遵e=便%6贯.2倘f\干n"袖,Ma依x,度Mi救n,av含er汁2)利;}作用域MaxMin例3.丸145/址18凑/2裁02软343C语言失程序介设计例3.头15全局梅变量进定义哀与声劣明#i晋nc权lu当de脑<st兆di接o.按h>in韵tma叨x(谱in士tx,梨i灭nt笔y不){善i柱nt妇z诱;z=市x>端y?息x:雷y;re煮tu你rn驻(z电);}vo匀id概m振ai乒n(惜){pr福in兵tf枝("浆ma鸣x=%企d"筝,ma罢x(询a,绵b)嘱);}in获t洗a=傻13储,b以=-引8;运行哥结果寇:ma坐x=副13#i摇nc妄lu聚de邀<st落di这o.陡h>in膛t粮a=驾13具,b涂=-希8;in轧tma猜x(强){味i萝nt斗z热;z=a>亿b?庭a:计b;re盒tu获rn中(z夺);}vo太id户m剧ai删n(吸){pr持in皱tf抢("盛ma堤x=%重d"拿,m台ax拥()与);}编译戚出错5/运18猛/2汽02服344C语言汇程序芦设计#i于nc搬lu宫de撒<st夫di接o.盛h>in代t埋a=监3,螺b=继5;in而tma却x(in馅ta,涌i亦nt搭b){枣in秃t数c;c=串a>诵b?歇a:继b;re泛tu历rn哑(c炒);}vo良id籍m好ai给n(际){in欲t配a=猫8;pr豆in挥tf附("品ma颈x=%渴d"铜,m便ax锡(a态,b拖))猪;}例3.盒16全局叫变量沙与局穷部变奇量重扫名时运行境结果垄:ma咽x=胞8a,棋b为全致局变抹量a,冤b为局效部变家量a为局灯部变倘量局部变量a全局变量b作用范围行参a、b作用范围5/唱18中/2纽奉02膜345C语言乒程序触设计#i涂nc竭lu类de魄<st冬di较o.劝h>in概t根i旱;vo蹄id衬m四ai铁n(浩){纽奉vo狠idpr捕t()冤;fo葵r(鸡i=修0;匆i<邮5;俱i+趴+)pr洒t()典;}vo西idpr凳t(){fo钓r(形i=躺0;酸i<债5;洒i+馅+)pr煌in趁tf(“丸*”手);pr挨in联tf汽(“爬\n”)拐;}例3.松17全局胆变量枯副作盒用运行唱结果驾:?**燃**勾*5/宾18掉/2侦02草346C语言蹈程序痛设计3.慌7.鬼2变量颠的存歪储类奴型变量疲的存葬储类女型:存与储变报量值六的内议存类贱型。变量槽的存启储类蚀型决商定变欢量何狡时创筝建、县何时痛销毁苏及它安的值且将保贼持多包久。分为钟:静态袍存储和动态鲁存储两种孟类型1、自脂动变哭量(au脾to变量黑)C语言级中使模用最出广泛辜的一绪种类样型。想函数籍内凡魄是未磁加类亦型说钱明的塌变量舅均视全为自咳动变梯量。5/肥18吩/2刘02葵347C语言飘程序唐设计例如脚:in短tx,牙y编;等价罚于:au考toin译tx,脉y碍;说明:①营自动陵变量稿的作它用域仍仅限矛于定慕义该镜变量渐的个秋体内钢。②丛当程科序执季行到淘定义冬自动持变量遵的代酸码块蓝时,味该自惕动变孕量才终被创劳建,文当程没序的洒执行撤离开踏该代杯码块处时,掉这些嫌自动警变量每便自抹行销拢毁,打所以嗽自动才变量坟属于表动态脖存储主方式京。③膏函数忽的形源式参业数也仔是自肃动变哄量。5/晋18絮/2护02油348C语言芳程序雾设计2、寄烈存器功变量够(re缎gi腿st绑er变量隐)以前情介绍浅的变猎量都唇存放设在内踏存里聚。当一鸡个变萍量频践繁读抚写时主,要袍反复篇访问视内存吃,从蹲而花却费大吐量的舌存取槐时间纹。C语言追提供捕另一监种变倒量,煎即寄存填器变壤量。存放政在CP锈U中,踢使用鸡时不宿访问逝内存设,而钥直接剂从寄馆存器疑中读汇写。5/院18闷/2喊02纪349C语言奥程序猎设计例如锦:re听gi吓st嫁erin乓tx,崇y;说明锹:①寄笋存器剩变量齐属于特动态极存储快方式孟,只驻有局露部自皇动变袍量和形形式肆参数糕才可纷以定底义为奋寄存杨器变住量。②石由于CP欣U中寄追存器奸的个鞭数是洲有限教的,逢所以弓编译专器可携以忽天略re街gi烟st咸er关键普字,梨当有损太多瓶的变松量声欠明为re永gi初st各er时,辫只有刊个别粥的变厅量会未存储芝在寄虑存器伯中,丈其余犁的编昼译器泽会按套普通仔自动加变量酱处理降。在镰变量乱的定义意中,一般垮并不糟需要迟使用re劲gi弦st社er关键闹字。5/魂18肠/2陵02咱350C语言支程序彼设计3、静讨态st访at尖ic静态截变量岔赋初狠值,培只执对行一婆次再滥次调并用函嫂数时血保留古上次蠢函数说调用睡结束燃时的旨值。例如阵:编奇写一衡个函筝数实刷现值壳自增1。在克主函贺数中猫循环妥调用贡三次灭该函曲数,怖并输栽出结牧果。#i供nc乔lu药de聚<st书di敲o.扰h>in懂t收ad找d(须)给;vo姜id煌m俊ai予n(筛){in飘t纹i,睡r钻es氏ul睛t;fo杏r(末i=1右;渠i<墨=3浊;剃i+耗+){re等su招lt拥=秤a击dd涉()进;pr犁in篮tf呼("肢%d",拒r影es朗ul剥t)茎;}}in家t的ad乏d(幻玉){au酱to盒i胸nt问n埋um绍=虎5县;芽/删/自动粒局部眯变量nu糠m+们+;re壮tu昌rn袋n贤um音;}#i顿nc贸lu标de淹<st勾di件o.岩h>in讲t声ad押d(岛)壳;vo郑id燥m舅ai唤n(颤){in止t既i,悠r场es谋ul免t;fo比r(殃i=1楚;狠i<出=3弊;幅i+通+){re陪su诞lt偷=没a敢dd程()稻;pr美in董tf碑("错%d",夕r化es荒ul眯t)心;}}in校t搁ad野d(马){st启at辩ic订i燃nt轮n店um座=王5水;陪/*静态艇局部球变量臣*/nu自m+漫+;re膝tu送rn移n胜um欺;}结果跑:6到6谨6结果希:6左7荒85/舞18跟/2帅02猜351C语言胁程序损设计说明爪:①静庸态局嘱部变幕量在嚼函数怪内定艺义,需始终租占用亦内存尸空间所,直捡到整边个源喜程序啦退出折时才效释放驰。②静误态局益部变释量仅系赋一蹦次初爆值。③助静态痕局部舞变量恒虽然日在整锈个源披程序捉都存北在,甘但是索其作偶用域岛仍与恨自动诱变量匙相同有,即摇只能洽在定冒义该袋变量摸的函奴数内央使用两该变顽量。站退出狂该函神数后菌,尽泳管该氏变量苏还继置续存妙在,摧但不数能使商用它蝴。④骄静态僵局部蔽变量完若在斗声明春时未选赋初开值,揪则系密统自家动初功始化节为0(对拐数值奋型变寇量)墨或’\0粱’(对戴字符杯变量忆)。5/柏18把/2骨02珠352C语言络程序磁设计⑤如果翅一个挥文件合中的伍全局捷变量愈不允绑许其猴他文汁件的学函数穿引用另,则削该变忍量要成用st云at泡ic声明桌。或效者说啦一个璃文件琴中的宿静态丛全局喇变量隔不允糊许其变它文茎件中岭的函也数引答用。⑥如果笼一个沃函数宽前用st牙at吐ic声明么,则增这个华函数替不能砌被其边他文夺件中筹的函科数调容用,尊称为内部哲函数抱或静侮态函涂数。staticintsort;main(){……}file1.c5/港18缝/2破02岔353C语言鸭程序疑设计4、外杜部声无明ex塘te纪rn外部乐变量览是在甚函数悔的外驻部定驳义的销全局酸变量酱。(1)如扰果想起在定饺义之盖前的偿函数僵中引陷用全示局变踢量,鞠则在棒函数顶中用色关键趣字ex稍te缓rn声明定。#i晶nc笋lu饰de粗<st谦di某o.督h>vo仅id绢m尚ai云n(码){近e烦xt肌er殊n茅in舅t魔a,再b;pr养in惯tf睛(”株%d想”,剃ma狱x(鉴a,叼b);}in殊ta=角13蓬,b溜=-规8;a,校b的作场用域桨扩展竿到整夜个ma砖in函数5/羞18赌/2揉02锐354C语言初程序侵设计(2)、脂如果冻一个C程序译有多舌个源劈燕程序往文件室组成志,则闯一个撤文件循定义师了全立局变怠量,则另矩一个示文件酷如果看要引字用它皂的全扶局变捧量,南就要鸽用ex签te白rn作声险明;file1.cfile2.cintsort;main(){……}externintsort;intfunc(){……}5/定18彼/2运02跨355C语言胜程序锣设计(3)、并如果狗一个天函数叨前用ex辽te呜rn声明膨,则眉这个卷函数棵可以纠被其蔽他文凶件中绝的函余数调莲用,对称为外部颈函数紧。例:/*file1.c*/main(){intc,a=2;

externintfac(intx);……c=fac(a);……}/*file2.c*/externintfac(intx){……}5/断18推/2肆02催356C语言舍程序户设计3.咱8指针栋与函偷数3.瞒8.漆1指针令作为州函数添参数值传疗递地址窃传递指针薪变量就是库存放浪变量季地址增的变渴量。变量栗的指日针就是秩变量惹的地灾址。举例冷:in其t由*猴p1议,旷*p能2,a;fl仗oa强t桐*p巷3,b;例3.锅3vo胶idsw饼ap吗(i喇nta,寺in抛tb){谢in侨t誓t;t=粪a;霜a=鲁b;泡b=宰t;pr准in巷tf血("维re狱su序lt:x欣=%仆d移y=锅%d耍\n授",脑a,暖b)狸;}vo杂id汗m危ai斑n(洞){录i瞧nt种x捕=1鸭0,陪y=戒5;pr并in敏tf述("忽x=%拌d,村y=受%d太\n责",缠x,拔y)再;sw汇ap邻(x妹,y颜);}例3.3-1#include<stdio.h>main(){intx=7,y=11;printf("x=%d,\ty=%d\n",x,y);printf("swapped:\n");swap(x,y);printf("x=%d,\ty=%d\n",x,y);}swap(inta,intb){inttemp;temp=a;a=b;b=temp;}输出:?5/学18未/2描02茄357C语言朴程序绿设计指针退变量眨作为造函数候的参骑数:类型非名撞函数恳名(颠类型害名孩*形拦式参齐数1,类危型名愈*队形式克参数2,…){说明婶部分俘;语句夺;}说明参数久的传茅递是雷值传白递,谅单向酒的(跌从实舍参到源形参期)。挣那么雷如何桨理解罚通过蔬指针雀作为宫参数曲可以蛙改变海主调回函数脸中变问量的嚼值呢熊?形参围得到穿实参震的值泪即一戏个地床址,掌函数辜中可糊以通索过形愉参引缺用该爪地址丹,从动而可钉以改隙变该四地址溜对应替变量预的值超。5/让18竖/2胃02趟358C语言锡程序侨设计711x:y:调用前:调用结束:711x:y:#i犬nc筛lu握de叛<st勿di孟o.爆h>ma客in字(){统in芝t减x=弦7,冬y=酷11沫;pr描in锐tf腐("进x=%d,伶\t竿y=%屡d\坑n"妥,x誓,y娘);pr简in约tf卸("潜sw公ap躲pe忆d:殃\n")篇;sw汤ap读(x锡,y湖);pr刺in窃tf饮("焰x=%d,料\t骗y=%渠d\棍n"屈,x搂,y扫);}sw葛ap樱(i槽nta,欺in惊tb){彩in甘t肌te浮mp蚕;te扭mp松=a抗;秆a=水b;少b魔=t探em附p;}调用:711a:b:711x:y:swap:711x:y:117a:b:temp例3.茎185/室18辩/2睡02桨359C语言咏程序下设计例3.荣18交换储两个鸦数的蚁值#i驼nc胃lu板de投<st贿di市o.躁h>ma仍in投(){狭in尖t钢x=锄7,输y=馋11亿;pr劣in修tf蛮(“偶Sw彩ap众pe茫d:念\n")雅;sw带ap牵(x谁,y茂);pr马in睬tf辰("终x=%青d,振y=侵%d阴\n境",别x,炉y)掠;}sw昆ap森(i槐nta,熄in舰tb){幸in方t倒te偏mp年;te虫mp祥=a未;盼a=铺b;敞b熊=t贝em窃p;}输出住:Sw进ap裕pe唉d:x=狮7,劝y=会11#i奴nc确lu亡de友<st左di炮o.波h>vo指idsw翅ap会(i骡nt*px唐,i相nt*py){狡i现nt挺t徒em灵p;te助mp哨=*px;讨*px=*py;室*py=t拜em芽p;}ma末in融(){in拾tx=但7,纱y=沸11重,*盏p1帮,*螺p2逐;p1例=&城x;豆p2鼓=&限y;pr涂in嚼tf纤(“第x=%寇d,族y=舒%d如”,勿x,袖y)务;pr弹in青tf睁(“餐Sw消ap诊pe蹄d:吓\n”)任;sw思ap歌(p门1,较p2端);pr五in封tf龙(“颠x=%美d,村y=笼%d浅”,朴x,易y)投;}Sw幼ap蚕pe份d:x=租11随,y啊=75/增18茅/2流02淋360C语言摇程序势设计例3.苍19求三垮个数再中的村最大视值和忌平均耐值用忧函数泡实现笨:vo拜idma封v(象in妄ta,赖in幼tb,握in臂tc,广in柳t*p铁1,钞fl牢oa速t削*p膀2){*p勿1=丢a;if植(*掠p1嫌<b规)采*p绍1=费b;if英(*扑p1沸<c丽)劝*舞p1立=c足;*p胳2=友(a抢+b株+c停)/破3.飞0;Re升tu紫rn索;}ma杂in早(){照in投t令a,蒸b,唱c,精ma顷x,徐*p队1;fl笑oa搞tav辫e,*催p2拒;sc耕an钩f(吊“%喇d%盛d%猛d”塔,&偶a,牢&b沙,&洞c);P1议=&遇ma坚x;让P2分=&av喇e;mav(糖a,扇b,快c,长p1创,p点2)律;Pr耀in歇tf晨(“徐ma钱x=%坟d,av去e=%胜f”,ma辜x,av迫e);}主函擦数的公变量耍:1257子函敏数的剂变量诵:&av周e&m丧ax7512&av东e&m骗axacbap2p1cbp2p1av歌ema慨x128.贺0举例5/赶18若/2毯02剃361C语言芹程序芹设计上节宇回顾(1晓)指针壶变量(2墙)变量丽的指梢针(3院)in仗t贫a=鼠4,摊*境s;s=鞠&a亩;则,勉*s=盘?(4炸)值传蚂递方漫式vs地址慎传递瓶方式就是绞存放镇变量柜地址惯的变转量。就是托变量税的地尺址。4#i搬nc沈lu现de娇<st印di扛o.格h>vo添idsw芝ap签(i蹄nt*px,i童nt*py){率i虫nt次t砖em结p;te璃mp袭=*px;泽*px=*py;打*py=t急em命p;}ma跪in悉(){in纽奉tx=难7,梨y=菌11概,*嫌p1涂,*低p2县;p1造=&膜x;业p2盒=&品y;pr称in旷tf案(“榆x=%州d,庭y=漂%d载”,的x,闹y)缠;pr涂in叫tf默(“削Sw走ap愤pe呢d:旧\n”)裹;sw谋ap浪(p1,p2);pr筝in丸tf辱(“盖x=%些d,桃y=飞%d洗”,艰x,愤y)践;}5/来18卡/2和02霸362C语言灿程序舰设计3.嫁8.坑2返回齿指针篇值的横函数(自学)一般迎定义崭形式茧为:类型裹名刃*则函数婶名(晌类型节名叫*形篮式参像数1,*娃类型宽名雅*形奔式参联数2)例如诸:in级t竖*a(街in戏tx,森in劣ty)岗;a是函蹄数名牙,调得用它手以后渴能得掠到一汤个指笔向整布型数吵据的遭指针食(地暮址)葱,x、y是函善数的阅形参自,为腊整型狭。返回呜指针甜值的象函数:一个迟函数罢可以饱带回树一个圈整数浑值、吗字符尖值等法,也上可以曲带回僻指针雪型的腿数据煌,即查地址浩。5/繁18岛/2算02都363C语言有程序萝设计例3.书12编写密一个忙函数机求某推班级颗学生土成绩模的最床高分钉、最鼓低分岂和平透均分vo足idfu嫩nc嗓(i丸ntn,局fl陈oa笑t笋*a奥ve王r,笋fl顾oa永t度*m耐ax拥,f坏lo惰at强*庭mi苗n){瘦in虽t柔i;蛙fl踏oa浩t黎s;fo孕r(液i=地1;疏i<牛=n雪;i东++禾){pr犬in掩tf周(“拍in拾pu斗ta羽sc期or励

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论