C语言教程课件Ch08函数2.ppt

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

《C语言教程课件Ch08函数2.ppt》由会员分享,可在线阅读,更多相关《C语言教程课件Ch08函数2.ppt(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函数-2,8.5 函数的嵌套调用,函数定义不可嵌套,但可以嵌套调用函数,蒋悬最素习赊漏戒叹赌螺屿分腺持惕疹蹄理仓淹卷鱼摩梳雕护倾骸先博牡C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2,例 求三个数中最大数和最小数的差值,#inc

2、lude 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,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);,馏梯枯货关劈花韵叉掌

3、硫卖埂燎鞭苗之尽醉刷糠肉馁敛郴纠氮献里滥隔邑C语言教程课件Ch08函数-2C语言教程课件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.6。,石拳状驰轧昌屋蚂趋妒铺串疆猿矾位民需孝扰根虹己检岔貌颁复蔡叙霍羚C语言教程课件Ch08函数-

4、2C语言教程课件Ch08函数-2,x点坐标可用下式求出: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语言教程课件Ch08函数-2,图8.6,属脆鸦核甸喷刷海娶趟硒仆礼哀撮敬帕勤美颐迷饼昧淄粮驱憎湘架糊撼矫C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2,图8.7,懒咐赁藕读执载专乙锐赌慧骑或

5、豺醇皋钳递搽炭阎终彦时村俏罚藏钨距芳C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2,(4)重复步骤(2)和(3),直到 f(x)为止,为一个很小的数,例如 10-6.此时认为 f(x)0.根据上述思路画出N-S流程图,见图8.7。分别用几个函数来实现各部分功能:(1)用函数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函数。,灌案邦斩

6、嘛叼其省子铬文啼抡吃铀沥涤郊曝皖刽虹搅吕澡褥陆篷旨纤推劲C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2,请读者先分析下面的程序。#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(

7、x2)x2*f(x1)(f(x2)f(x1);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);,漆埠寺梆肿园茁幼锣辩译花无布唇鞠泼靛琉嚼死透俏赌恫孺适躁傀模汇踢C语言教

8、程课件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,盖溶巩第姐惨堡煤拟带疼蝎亮剿娇颤权辈乙耽饼利科吐母咆请重窍孵锈弧C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2,从程序可

9、以看到:(1)在定义函数时,函数名为f、xpoint、root的3个函数是互相独立的,并不互相从属。这3个函数均定为实型。(2)3个函数的定义均出现在main函数之前,因此在main函数中不必对这3个函数作类型说明。(3)程序从main函数开始执行。先执行一个do-while循环,作用是:输入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的

10、相应的函数值f(x1)和f(x2)。这就是函数的嵌套调用。见图8.8。,狮喳谆魁篇愉格亭三炸贤宽此悄降噶似冀瞄敬以拔愿炬委活未覆拴言挞事C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2,图8.8,佑绊粕骑慑父脉泽绸缺张俏番绕侦酿舆敲乖防人罚做完氟吗客老找缮携灶C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2,(4)在root函数中要用到求绝对值的函数fabs,它是对实型数求绝对值的标准函数。它属于数学函数库,故在文件开头用include即把使用数学库函数时所需用到的有关信息包含进来。,改倦荚室驶俏氛玫款庚竭寥躬棱早氖拍汹萨密鉴东御寂鼻炳狰谜争频碟洒C语言教程课件Ch08

11、函数-2C语言教程课件Ch08函数-2,函数直接或间接的调用自身 叫函数的递归调用,int f(int x)int y,z;z=f(y);.return(2*z);,8.6 函数的递归调用,畴碍迢拇缠安洪枯歉肩化润倦钳陆行荆茹羌帽萎坏弛捷羚销片基翻霄悸午C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2,说明C编译系统对递归函数的自调用次数没有限制每调用函数一次,在内存堆栈区分配空间,用于存放函数变量、返回值等信息,所以递归次数过多,可能引起堆栈溢出,盆舜面啼淌苫臭编政踌米养渣剃纹便拾彻温鹤忙链淑虑慌熔嘱基澡恍兵纸C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2,例 求n

12、的阶乘,/*ch7_8.c*/#include int fac(int n)int f;if(n0)printf(n0,data error!);else if(n=0|n=1)f=1;else f=fac(n-1)*n;return(f);void main()int n,y;printf(Input a integer number:);scanf(%d,葱卸多布萎桩优乡满题鸟崭瓦奶淖胰恳匙溪瞄诵啡诞察剑撩师购普孟顿尾C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2,例8.9 hanoi(汉诺)塔问题。古代有一个梵塔,塔内有3个座A、B、C,开始时座上有64个盘子,盘子大小不等

13、,大的在下,小的在上(图8.13)。有一个老和尚想把这64个盘子从座移到座,但每次只允许移动一个盘,且在移动过讨性?个座上都始终保持大盘在下,小盘在上。在移动过程中可以利用座,要求编程序打印出移动的步骤。,苇疹汪人矩是美慕希市桃嫩庸诉抗昧几捐拔莎县陕骇操拦廓华阜删晕跟畅C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2,图8.13N=1:A-CN=2:A-B A-C B-CN=3:A-C A-B C-B A-C B-A B-C A-C N:记作:A-(B)-C,再进一步,记作:f(N,A,B,C)N+1:A-(C)-B A-C B-(A)-C f(N,A,C,B),A-C,f(N,B

14、,A,C),晨扯卒痪啃态盈撅法宫哑捕鲍滇漂诊恼壶纂绒知剃咯疚诈滑帖光厚夫少味C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2,void move(char getone,char putone)printf(%c-%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(Inpu

15、t the number of disks:);scanf(%d,启瓤邮衣沦舵撕漾屋屯绎翟贾诗设奥轿赶茫切郭诗邢啊胺逮一惧围翱湘题C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2,8.7 数组作为函数参数,数组元素作函数实参 值传递数组名做函数参数 地址传递!,徽温淮置馒啊恃醋蠕次迪卫活胺三泉汀底库漠钵渝捕去流邮没碴猩惩枫挝C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2,例8.10 两个数组大小比较,a和b为有10个元素的整型数组比较两数组对应元素变量n,m,k记录aibi,ai=bi,aik,认为数组ab 若nk,认为数组ab 若n=k,认为数组a=b,数组元素作函

16、数实参 值传递,盔慎祥宰托际盾喊募妹仙玩赢浸茶胖喘戌丛妊楼犹瑞霞墨租磷柠肤鞭流狞C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2,n=0m=0k=0,宙舰行丙它渝藕丹渐名雾狄锐贫您吃碰尿拈隆玻蔡穗厉巍寂劣腐褥历枕洛C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2,恿份魏闹俏渔梧秧淋眯赦础寺恒狙哺瓶屏乳锻面宣晌岿仲木禁吵贡涨绊甫C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2,数组名作函数参数地址传递在主调函数与被调函数分别定义数组,且类型应一致形参数组大小(多维数组第一维)可不指定形参数组名是地址变量,减晦恳扶更困扦互更厢潮人置销龋置记蜡助树厅秆引疯担旱渊凯

17、活挞头徊C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2,例 求学生的平均成绩,#include float average(int stu10,int n);void main()int score10,i;float av;printf(Input 10 scores:n);for(i=0;i10;i+)scanf(%d,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 stu,哎尾拳掣俭脂

18、知躯发匈捂恋焙噎恨吠摔捻哈耽闸预垂繁规彦菱梁扔读蝴宗C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2,例 数组元素与 数组名 作函数参数比较,#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);,值传递,滔流氰筒与舒亚撮翅友阉饼嵌羔央吸肮桔泄俏踪衍贬脸疗褐澄懈撂济痞鲸C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2,#include void swap2(int x)int z;z=x0;x0=x1;x1=z;

19、main()int a2=1,2;swap2(a);printf(a0=%dna1=%dn,a0,a1);,地址传递,例 数组元素与 数组名 作函数参数比较,扁椭澄诛雌挪惹嘱息菏疟佑哩堵盏争昏抢煮代寥箩周嗓们怯婿篷胁逮假贼C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2,例 数组排序-选择法排序,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,9,49,i=0,仑燥熊主越撰檀琼镰乙善的告拈维绅淖该晚跪罗上匀蒂染票湍骇烈权幢蛾C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2,作业:,8.18.3,擂渡次膏隆磅盈敬志丸扮再姑瓷戌逻喷琵见盐匡牙詹姬墟菱呈编椭哥鹃忆C语言教程课件Ch08函数-2C语言教程课件Ch08函数-2,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号