C语言教程课件Ch08函数2

上传人:枫** 文档编号:569398492 上传时间:2024-07-29 格式:PPT 页数:31 大小:330.50KB
返回 下载 相关 举报
C语言教程课件Ch08函数2_第1页
第1页 / 共31页
C语言教程课件Ch08函数2_第2页
第2页 / 共31页
C语言教程课件Ch08函数2_第3页
第3页 / 共31页
C语言教程课件Ch08函数2_第4页
第4页 / 共31页
C语言教程课件Ch08函数2_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《C语言教程课件Ch08函数2》由会员分享,可在线阅读,更多相关《C语言教程课件Ch08函数2(31页珍藏版)》请在金锄头文库上搜索。

1、第八章第八章 函数函数8.1 概述概述8.2 函数定义的一般形式函数定义的一般形式8.3 函数参数和函数的值函数参数和函数的值8.4 函数的调用函数的调用8.5 函数的嵌套调用函数的嵌套调用8.6 函数的递归调用函数的递归调用8.7 数组作为函数参数数组作为函数参数8.8 局部变量和全局变量局部变量和全局变量8.9 变量的存储类别变量的存储类别8.10 内部函数和外部函数内部函数和外部函数庆坎甭洛卜棍盯晚呸雌剩魔聪颓昂涛果拧达诌文遮笔奇即檄山闭豢舱圈剃C语言教程课件Ch08函数-2C语言教程课件Ch08函数-28.5 函数的嵌套调用函数的嵌套调用main( )调用函数调用函数a结束结束a函数函

2、数b函数函数调用函数调用函数b函数定义不可嵌套函数定义不可嵌套,但,但可以嵌套调用可以嵌套调用函数函数蒋悬最素习赊漏戒叹赌螺屿分腺持惕疹蹄理仓淹卷鱼摩梳雕护倾骸先博牡C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2例例 求三个数中最大数和最小数的差值求三个数中最大数和最小数的差值#include int dif(int x,int y,int z); int max(int x,int y,int z); int min(int x,int y,int z);void main() int a,b,c,d; scanf(%d%d%d,&a,&b,&c); d=dif(a,b,c);

3、 printf(Max-Min=%dn,d); int dif(int x,int y,int z) return max(x,y,z)-min(x,y,z); int max(int x,int y,int z) int r; r=xy?x:y; return(rz?r:z); int min(int x,int y,int z) int r; r=xy?x:y; return(rz?r:z); main( )调用函数dif输出结束dif函数max函数调用函数max调用函数minmin函数馏梯枯货关劈花韵叉掌硫卖埂燎鞭苗之尽醉刷糠肉馁敛郴纠氮献里滥隔邑C语言教程课件Ch08函数-2C语言教程

4、课件Ch08函数-2例例8.6用弦截法求方程用弦截法求方程x3-5x2+16x-80=0的根。的根。方法如下方法如下:(1) 取两个不同点取两个不同点x1,x2,如果如果f(x1)和和f(x2)符号相反符号相反,则则(x1,x2)区间内必有一个根。如果区间内必有一个根。如果f(x1)与与f(x2)同符同符号号,则应改变则应改变x1,x2,直到直到f(x1)、f(x2)异号为止。注意异号为止。注意x1、x2的值不应差太大的值不应差太大,以保证以保证(x1,x2)区间内只有区间内只有一个根。一个根。(2) 连接连接f(x1)和和f(x2)两点两点,此线此线(即弦即弦)交交x轴于轴于x,见图见图8.

5、6。石拳状驰轧昌屋蚂趋妒铺串疆猿矾位民需孝扰根虹己检岔貌颁复蔡叙霍羚C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2x点坐标可用下式求出点坐标可用下式求出:x=x1f(x2)-x2f(x1)f(x2)-f(x1)再从再从x求出求出f(x).(3) 若若f(x)与与f(x1)同符号同符号,则根必在则根必在(x,x2)区间内区间内,此此时将时将x作为新的作为新的x1。如果。如果f(x)与与f(x2)同符号同符号,则表示根则表示根在在(x1,x)区间内区间内,将将x作为新的作为新的x2。龟闽秀自奸港仿笑熏的手洪邵搪搁忱难挠吓琢仰痈馁扳设鞍违尺匿淮棕居C语言教程课件Ch08函数-2C语言教

6、程课件Ch08函数-2图图8.6属脆鸦核甸喷刷海娶趟硒仆礼哀撮敬帕勤美颐迷饼昧淄粮驱憎湘架糊撼矫C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2图图8.7懒咐赁藕读执载专乙锐赌慧骑或豺醇皋钳递搽炭阎终彦时村俏罚藏钨距芳C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2(4) 重复步骤重复步骤 (2) 和和 (3) , 直到直到 f(x) 为止为止, 为一个很小的数为一个很小的数, 例如例如 10-6. 此时认为此时认为 f(x)0.根据上根据上述思路画出述思路画出N-S流程图流程图,见图见图8.7。分别用几个函数来实现各部分功能分别用几个函数来实现各部分功能:(1) 用函

7、数用函数f(x)来求来求x的函数的函数: x3-5x2+16x-80(2) 用函数用函数xpoint (x1,x2)来求来求f(x1)和和f(x2)的连线与的连线与x轴的交点轴的交点x的坐标。的坐标。(3) 用函数用函数root (x1,x2)来求来求(x1,x2)区间的那个实根。区间的那个实根。显然显然,执行执行root函数过程中要用到函数函数过程中要用到函数xpoint,而执行而执行xpoint函数过程中要用到函数过程中要用到f函数。函数。灌案邦斩嘛叼其省子铬文啼抡吃铀沥涤郊曝皖刽虹搅吕澡褥陆篷旨纤推劲C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2请读者先分析下面的程序。请读

8、者先分析下面的程序。 #include #include * 定义定义f函数,以实现函数,以实现f(x)x3-5x2+16x-80 * float f(float x) float y; y(x50)*x160)*x800; return(y);); 廓挞磕虑涯黍贷精抽涩衍穷姿胶匣筹鸥椒伤赵汲蜘蛇威葬钧味堕鹏蚌辈日C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2 *定义定义xpoint函数,求出弦与函数,求出弦与x轴交点轴交点 */ float xpoint(float x1,float x2) float y; y=(x1*f(x2)x2*f(x1)()(f(x2)f(x1);)

9、; return(y);); 活今森论楔修氏防屠精原布持嚏沥默瞧蓄紧娟告碘佬搐提枫研十亭桅冷逢C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2 /*定义定义root函数,求近似根函数,求近似根 * float root(float x1,float x2) int i; float x,y,y1; y1f(x1);); do xxpoint(x1,x2);); yf(x);); if(y*y10) f(x)与)与f(x1)同符号)同符号 * y1y; x1x; else x2x; while(fabs(y)00001);); return(x);); 漆埠寺梆肿园茁幼锣辩译花无布唇

10、鞠泼靛琉嚼死透俏赌恫孺适躁傀模汇踢C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2 void main()() /*主函数主函数*/ float x1,x2,f1,f2,x; do printf(input x1,x2:n);); scanf(“f,f”,x1,x2);); f1f(x1);); f2f(x2);); while(f1*f20);); xroot(x1,x2);); printf( root of equation is84f,x);); 运行情况如下:运行情况如下:input x1,x2:2,6 root of equation is50000盖溶巩第姐惨堡煤拟带

11、疼蝎亮剿娇颤权辈乙耽饼利科吐母咆请重窍孵锈弧C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2从程序可以看到:从程序可以看到:(1) 在定义函数时,函数名为在定义函数时,函数名为f、xpoint、root的的3个函数是互相独个函数是互相独立的,并不互相从属。这立的,并不互相从属。这3个函数均定为实型。个函数均定为实型。(2) 3个函数的定义均出现在个函数的定义均出现在main函数之前,因此在函数之前,因此在main函数中函数中不必对这不必对这3个函数作类型说明。个函数作类型说明。(3) 程序从程序从main函数开始执行。先执行一个函数开始执行。先执行一个do-while循环,作用循环

12、,作用是:输入是:输入x1和和x2,判别,判别f(x1)和)和f(x2)是否异号,如果不是异)是否异号,如果不是异号则重新输入号则重新输入x1和和x2,直到满足,直到满足f(x1)与)与f(x2)异号为止。然)异号为止。然后用函数调用后用函数调用root(x1,x2)求根)求根x。调用。调用root函数过程中,要调函数过程中,要调用用xpoint函数来求函数来求f(x1)与)与fx2)连线的交点)连线的交点x。在调用。在调用xpoint函函数过程中要用到函数数过程中要用到函数f来求来求x1和和x2的相应的函数值的相应的函数值f(x1)和)和f(x2)。这就是函数的嵌套调用。见图)。这就是函数的

13、嵌套调用。见图8.8。狮喳谆魁篇愉格亭三炸贤宽此悄降噶似冀瞄敬以拔愿炬委活未覆拴言挞事C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2图图8.8佑绊粕骑慑父脉泽绸缺张俏番绕侦酿舆敲乖防人罚做完氟吗客老找缮携灶C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2(4) 在在root函数中要用到求绝对值的函数函数中要用到求绝对值的函数fabs,它是,它是对实型数求绝对值的标准函数。它属于数学函数库,对实型数求绝对值的标准函数。它属于数学函数库,故在文件开头用故在文件开头用include即把使用数即把使用数学库函数时所需用到的有关信息包含进来。学库函数时所需用到的有关信息包含进来

14、。改倦荚室驶俏氛玫款庚竭寥躬棱早氖拍汹萨密鉴东御寂鼻炳狰谜争频碟洒C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2函数函数直接或间接的调用自身直接或间接的调用自身 叫叫函数的递归调用函数的递归调用f( )调调f调调f2调调f1f1( )f2( )int f(int x) int y,z; z=f(y); . return(2*z);int f1(int x) int y,z; z=f2(y); . return(2*z);int f2(int t) int a,c; c=f1(a); . return(3+c);8.6 函数的递归调用函数的递归调用畴碍迢拇缠安洪枯歉肩化润倦钳陆行荆

15、茹羌帽萎坏弛捷羚销片基翻霄悸午C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2说明说明C C编译系统对递归函数的自调用次数编译系统对递归函数的自调用次数没有限制没有限制每调用函数一次,在内存堆栈区分配每调用函数一次,在内存堆栈区分配空间,用于存放函数变量、返回值等空间,用于存放函数变量、返回值等信息,所以递归次数过多,可能引起信息,所以递归次数过多,可能引起堆栈溢出堆栈溢出盆舜面啼淌苫臭编政踌米养渣剃纹便拾彻温鹤忙链淑虑慌熔嘱基澡恍兵纸C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2例例 求求n的阶乘的阶乘/*ch7_8.c*/#include int fac(int

16、n) int f; if(n0) printf(n%cn,getone,putone); void hanoi(int n,char one,char two,char three) if(n=1) move(one,three); else hanoi(n-1,one,three,two);move(one,three);hanoi(n-1,two,one,three); void main() int m; printf(Input the number of disks:); scanf(%d,&m); printf(The steps to moving %3d disks:n,m);

17、 hanoi(m,A,B,C);启瓤邮衣沦舵撕漾屋屯绎翟贾诗设奥轿赶茫切郭诗邢啊胺逮一惧围翱湘题C语言教程课件Ch08函数-2C语言教程课件Ch08函数-28.7 数组作为函数参数数组作为函数参数1.数组元素作函数实参数组元素作函数实参 值传递值传递2.数组名做函数参数数组名做函数参数 地址传递!地址传递!徽温淮置馒啊恃醋蠕次迪卫活胺三泉汀底库漠钵渝捕去流邮没碴猩惩枫挝C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2例例8.10 两个数组大小比较两个数组大小比较a a和和b b为有为有1010个元素的整型数组个元素的整型数组比较两数组对应元素比较两数组对应元素变量变量n,m,kn,

18、m,k记录记录aibi, ai=bi,aibi, ai=bi,aibiaik,nk,认为数组认为数组abab 若若nk,nk,认为数组认为数组abab 若若n=k,n=k,认为数组认为数组a=ba=b1.数组元素作函数实参数组元素作函数实参 值传递值传递盔慎祥宰托际盾喊募妹仙玩赢浸茶胖喘戌丛妊楼犹瑞霞墨租磷柠肤鞭流狞C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2432105a562312107688432105b212343986654n=0m=0k=0in=0m=0k=1in=0m=1k=1in=1m=1k=1in=1m=1k=2in=2m=1k=2in=3m=1k=2宙舰行丙

19、它渝藕丹渐名雾狄锐贫您吃碰尿拈隆玻蔡穗厉巍寂劣腐褥历枕洛C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2#include void main() int a10,b10,i,n=0,m=0,k=0; printf(Enter array a:n); for(i=0;i10;i+)scanf(%d,&ai); printf(Enter array b:n); for(i=0;i10;i+)scanf(%d,&bi); for(i=0;iy) flag=1; else if(xy) flag=-1; else flag=0; return(flag);恿份魏闹俏渔梧秧淋眯赦础寺恒狙哺瓶

20、屏乳锻面宣晌岿仲木禁吵贡涨绊甫C语言教程课件Ch08函数-2C语言教程课件Ch08函数-22.数组名作函数参数数组名作函数参数地址传递地址传递在主调函数与被调函数分别定义数组在主调函数与被调函数分别定义数组,且类型应一致且类型应一致形参数组大小形参数组大小(多维数组第一维多维数组第一维)可不指定可不指定形参数组名是形参数组名是地址变量地址变量减晦恳扶更困扦互更厢潮人置销龋置记蜡助树厅秆引疯担旱渊凯活挞头徊C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2例例 求学生的平均成绩求学生的平均成绩 #include float average(int stu10, int n); void

21、 main() int score10, i; float av; printf(Input 10 scores:n); for( i=0; i10; i+ ) scanf(%d, &scorei); av=average(score,10); printf(Average is:%.2f, av); float average(int stu10, int n) int i; float av,total=0; for( i=0; in; i+ ) total += stui; av = total/n; return av; 实参用数组名实参用数组名形参用数组定义形参用数组定义, int

22、stu .2109score562312.88stu哎尾拳掣俭脂知躯发匈捂恋焙噎恨吠摔捻哈耽闸预垂繁规彦菱梁扔读蝴宗C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2例例 数组元素与数组元素与 数组名数组名 作函数参数比较作函数参数比较12a调用前调用前a0a112a调用调用a0a112xy21xy交换交换12a返回返回#include void swap2(int x,int y) int z; z=x; x=y; y=z;main() int a2=1,2; swap2(a0,a1); printf(a0=%dna1=%dn,a0,a1);值传递值传递滔流氰筒与舒亚撮翅友阉饼嵌羔

23、央吸肮桔泄俏踪衍贬脸疗褐澄懈撂济痞鲸C语言教程课件Ch08函数-2C语言教程课件Ch08函数-212a调用前调用前12ax调用调用21ax交换交换21a返回返回#include void swap2(int x) int z; z=x0; x0=x1; x1=z;main() int a2=1,2; swap2(a); printf(a0=%dna1=%dn,a0,a1);地址传递地址传递例例 数组元素与数组元素与 数组名数组名 作函数参数比较作函数参数比较扁椭澄诛雌挪惹嘱息菏疟佑哩堵盏争昏抢煮代寥箩周嗓们怯婿篷胁逮假贼C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2例例 数组排序

24、数组排序-选择法选择法排序排序void sort(int array,int n) int i,j,k,t; for(i=0;in-1;i+) k=i; for(j=i+1;jn;j+) if(arrayjarrayk) k=j; if(k!=i) t=arrayi; arrayi=arrayk; arrayk=t; main() int a10,i; for(i=0;i10;i+)scanf(%d,&ai); sort(a,10); for(i=0;i10;i+) printf(%d ,ai); printf(n);0123456789a4968573299927137688arraykjjjkjkjjjjj949i=0仑燥熊主越撰檀琼镰乙善的告拈维绅淖该晚跪罗上匀蒂染票湍骇烈权幢蛾C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2作业:作业:8.18.3擂渡次膏隆磅盈敬志丸扮再姑瓷戌逻喷琵见盐匡牙詹姬墟菱呈编椭哥鹃忆C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号