C语言程序设计PPT课件_第6章_函数程序设计

上传人:zw****58 文档编号:51478806 上传时间:2018-08-14 格式:PPT 页数:43 大小:626KB
返回 下载 相关 举报
C语言程序设计PPT课件_第6章_函数程序设计_第1页
第1页 / 共43页
C语言程序设计PPT课件_第6章_函数程序设计_第2页
第2页 / 共43页
C语言程序设计PPT课件_第6章_函数程序设计_第3页
第3页 / 共43页
C语言程序设计PPT课件_第6章_函数程序设计_第4页
第4页 / 共43页
C语言程序设计PPT课件_第6章_函数程序设计_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《C语言程序设计PPT课件_第6章_函数程序设计》由会员分享,可在线阅读,更多相关《C语言程序设计PPT课件_第6章_函数程序设计(43页珍藏版)》请在金锄头文库上搜索。

1、 C语言程序设计(第3版)张磊编著, 2012年10月清华大 学出版社出版。 该教材面向程序设计初学者编写, 适合将C语言作为第一门程序设计语言的高校学生。该教材理论教学和实验教学合二为一, 在每章之后均设有实验指导。实验指导分为基础实验和综合实验两部分。 基础实验紧 密结合教材中的例题程序设置,以“理解验证完善扩充提 高”为实验教学线索,重在巩固课堂教学知识,提高调试程序及完善程序的能力; 综合实验以算法设计和程序实现为重点,训练运 用所学知识解决实际问题的能力。该教材同时配有程序资源和试题库。Email:C C语言程序设计语言程序设计( (第第3 3版版) )课件课件语言程序设计(第语言程

2、序设计(第3 3版)张磊编著版)张磊编著 清华大学出版社清华大学出版社C C语言程序设计语言程序设计第第6 6章章 函数程序设计函数程序设计 C语言程序设计(第3版) 张 磊 编著21世纪高等学校规划教材 清华大学出版社语言程序设计(第语言程序设计(第3 3版)张磊编著版)张磊编著 清华大学出版社清华大学出版社第6章 数组程序设计u6.1 函数概述 u6.2 自定义函数示例u6.3 函数定义及调用 u6.4 函数嵌套和递归函数u6.5 数组作为函数的参数u6.6 函数应用举例语言程序设计(第语言程序设计(第3 3版)张磊编著版)张磊编著 清华大学出版社清华大学出版社6.1 函数概述l lC C

3、语言程序的特点:函数化结构语言程序的特点:函数化结构l l函数分类:系统函数、用户函数函数分类:系统函数、用户函数 系统函数:系统函数:printfprintf() ()、scanfscanf() ()、sqrtsqrt() ()等等 用户函数:用户函数:在程序中编写的函数在程序中编写的函数,又称,又称自定义函数自定义函数。 用户函数的特例:用户函数的特例:main()main()函数函数l l如果在程序中经常需要某种处理,就可以编写一个函数,在需要这如果在程序中经常需要某种处理,就可以编写一个函数,在需要这 种处理时,就调用该种处理时,就调用该函数函数。l l示例示例 计算a!+b!+c!

4、语言程序设计(第语言程序设计(第3 3版)张磊编著版)张磊编著 清华大学出版社清华大学出版社6.2 6.2 自定义函数示例自定义函数示例例例6-16-1编程计算表达式a!+b!+c!的值。 l 程序结构只有main()函数的阶乘程序 #include void main() int a,b,c,i; long t,sum; printf(“Input a,b,c:“); scanf(“%d,%d,%d“, for(t=1,i=1;i void main() long f(int n); int a,b,c,i; printf(“Input a,b,c:“); scanf(“%d,%d,%d“,

5、 printf(“SUM=%ldn“,f(a)+f(b)+f(c); long long f(intf(int n) n) /* /* 计算阶乘的函数计算阶乘的函数 * */ / long t;long t; intint i; i; for(tfor(t=1,i=1;iy?x:y; return(mreturn(m); ); float max(float x,float y) if(xy) return x;return x; else return y;return y; 语言程序设计(第语言程序设计(第3 3版)张磊编著版)张磊编著 清华大学出版社清华大学出版社6.3.2 函数值和re

6、turn命令例例6-56-5int sum(int n) int s,i; for(s=0,i=1;i void main() void p_star50(void);void p_star50(void); int k; for(k=1;k void main()void main() void void p_star(intp_star(int n); n); intint k; k; for(kfor(k=1;k void main()void main() intint sum(intsum(int); ); printf(“%dn“,printf(“%dn“,sum(20)+sum(

7、50);sum(20)+sum(50); intint sum(intsum(int n) n) intint s,is,i; ; for(sfor(s=0,i=1;i void main() float max(float,float); float a,b,c; printf(“a,b,c: “); scanf(“%f,%f,%f“, printf(“Max=%fn“,max(max(max(a,b)max(a,b),c,c);); float max(float x,float y) float m; m=xy?x:y; return(m); 函数调用作为函数调用作为 函数的实参函数的实

8、参语言程序设计(第语言程序设计(第3 3版)张磊编著版)张磊编著 清华大学出版社清华大学出版社6.3.3 函数调用l l注意注意函数调用时,实 参和形参按照在参 数表中的位置对应 传值。例例6-106-10 编写输出 n个连续的任意字 符的函数 p_string(),并调 用该函数输出一个 5行的“*”三角形图 案 #include void main()void main() void void p_string(int,charp_string(int,char); ); intint k; k; for(kfor(k=1;k void main() long fac(int); long

9、 cmn(int,int); int m,n; printf(“m,n=“); scanf(“%d,%d“, printf(“C(%d,%d)=%ldn“,m,n,cmn(m,ncmn(m,n) ); long fac(int k) /* 定义求k!的函数 */ int i; long t; for(i=1,t=1;i1n1时,其值为时,其值为sum(n-1)+nsum(n-1)+n。由此,定义递归函数:。由此,定义递归函数: long long sum(intsum(int n) n) if(nif(n=1)=1) return(1);return(1); else else return(

10、sum(n-1)+n);return(sum(n-1)+n); 语言程序设计(第语言程序设计(第3 3版)张磊编著版)张磊编著 清华大学出版社清华大学出版社6. 4. 2 递归函数n n 计算计算sum(3)sum(3)的处理过程的处理过程 高到低进行递推描述。高到低进行递推描述。 调用调用sum(3)sum(3),将其描述为,将其描述为sum(2)+3sum(2)+3; 调用调用sum(2)sum(2),将其描述为,将其描述为sum(1)+2sum(1)+2; 调用调用sum(1)sum(1),问题已到最低层,有确定值:,问题已到最低层,有确定值:sum(1)=1sum(1)=1; 由低到高

11、逐级求得上层结果由低到高逐级求得上层结果。 由由sum(1)+2sum(1)+2求得求得sum(2)sum(2); 由由sum(2)+3sum(2)+3求得求得sum(3)sum(3);完整程序代码完整程序代码 #include void main()void main() long long sum(intsum(int); ); intint n; n; printf(“nprintf(“n=“);=“); scanf(“%d“, ); printf(“Sumprintf(“Sum=%=%dn“,sum(ndn“,sum(n);); long long sum(intsum(int n)

12、n) if(nif(n=1)=1) return(1);return(1); else else return(sum(n-1)+n);return(sum(n-1)+n); 语言程序设计(第语言程序设计(第3 3版)张磊编著版)张磊编著 清华大学出版社清华大学出版社6. 4. 2 递归函数2非公式递归问题 有的问题不能直接用一个递归公式进行描述,但可以用递归方法进行 描述,我们将其归类为非公式递归问题。例例6-146-14 汉诺塔问题。 有三个柱和n个大小各不相同的盘子,开始时,所有盘子以塔状叠放 在柱A上,要求按一定规则,将柱A上的所有盘子移动到柱B上,柱C为移 动缓冲住。移动规则: 一次

13、只能移动一个盘子。 任何时候不能把盘子放在比它小的盘子的上面。语言程序设计(第语言程序设计(第3 3版)张磊编著版)张磊编著 清华大学出版社清华大学出版社6. 4. 2 递归函数n n 汉诺塔问题递归实现过程汉诺塔问题递归实现过程 若只有一个盘子若只有一个盘子,则直接从,则直接从 A A 移到移到 B B,问题结束;,问题结束; 若有若有n n(n1n1)个盘子)个盘子,则须经过如下三个步骤:,则须经过如下三个步骤: 第一步:按照移动规则,把第一步:按照移动规则,把A A上面的上面的 n-1 n-1 个盘子,移到个盘子,移到C C。 第二步:将第二步:将A A上仅有的一只盘子(也就是最大的一只

14、)直接移到柱上仅有的一只盘子(也就是最大的一只)直接移到柱B B上。上。 第三步:用第一步所述方法,将第三步:用第一步所述方法,将C C柱上的柱上的n-1n-1个盘子移到个盘子移到B B柱上。与第一柱上。与第一 步一样,这一步实际上是由一系列更小的一次仅移一个盘子的操作组成。步一样,这一步实际上是由一系列更小的一次仅移一个盘子的操作组成。BA汉诺塔问题的递归算法:汉诺塔问题的递归算法: hanoi(nhanoi(n个盘个盘,AB,AB,缓柱缓柱C)C) if (n=1) if (n=1) 直接从直接从A A移到移到B Belse else hanoi(n-1 hanoi(n-1个盘个盘,AC,

15、AC,缓柱缓柱B) B) 移动移动n n号盘子:号盘子:ABABhanoi(n-1 hanoi(n-1个盘个盘,CB,CB,缓柱缓柱A)A) #include void main()void main() intint disks; disks;void void hanoi(int,char,char,charhanoi(int,char,char,char););printf(“Numberprintf(“Number of disks: “); of disks: “);scanf(“%d“,);printf(“nprintf(“n“);“);hanoi(disks,A,B,Chanoi(disks,A,B,C);); void void hanoi(inthanoi(int n,charn,char A,charA,char B,charB,char C)C) if (n=1)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 教育学

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