- 1、本文档共52页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c语言-第7章应用函数编制程序
┌──┐ │n4= 4│ └──┘ fac(int n) int f; if(n= =1) f=n*fac(n-1) ┌──┐ │n3= 3│ └──┘ fac(int n) int f; f=n*fac(n-1) if(n= =1) ┌──┐ │n2= 2│ └──┘ ┌──┐ │n1= 1│ └──┘ fac(int n) fac(int n) int f; int f; if(n= =1) if(n= =1) f=n*fac(n-1) f=1 return(1) return(2) return(6) return(24) 1 2 3 4 4 3 2 1 递归调用的执行过程 如:给定整数是 12345,要求输出 54321。 这是非数值问题,根据递归方法解决非数值的思路: “有明确解法部分 + 性质相同的小问题”分析: (1) 输出给定的 N 位整数的个位上的数字, (2) 前 N - 1 位除以十, (3) 原问题被缩减为 N - 1 位整数反向输出问题。 (4) 如果 ?(结束条件)执行(6), 否则循环再执行(2)。 (5) 递归调用结束。 反向输出给定的整数 1 2 3 4 5 5 1 2 3 4 5 4 1 2 3 5 4 3 1 2 5 4 3 2 1 5 4 3 2 1 反向输出(整数 N) { if(N =10)then { 输出最后一位; 调用反向输出( NN-1); (N 除以10取整 NN-1) }else 输出 N; } 最后一位:y = N % 10 main( ) { int x; printf(“\n Enter N=”); scanf(“%d”,x); int turn(x); } int turn(n) int n; { if(n=10) { printf(“%d ”,n%10); int turn(n/10); } else printf(“%d”,n); } 程序如下 函数自身调用 §7-5 函数应用实例 例1: 应用函数求5!+16+27! main( ) { float jiec( ); /*被调函数说明*/ float a,b,c; a=jiec(5); b=jiec(16); c=jiec(27); printf (5!+16!+27!=%e \n,a+b+c); } float jiec(int n) /*求任意数n的阶乘的函数*/ { float y=1; int i; for (i=1;i=n;i++) y=y*i; return (y); } 例2: 数组score存放10个学生成绩,求其平均成绩。 float average(float array[10]) { int i ; float aver,sum=array[0]; for(i=1;i10;i++) sum=sum+array[i]; aver=sum/10; return(aver); } main( ) { float score[10],aver; int i; for(i=0;i10;i++) scanf(“%d”,score[i]); aver=average(score); printf(“%.2f”,aver); } 形参数组可不用指定大小,定义时跟空方括号float array[]; 注意:实参与形参之间不是值传递,而是地址传递。 一、局部变量 §7-6 局部变量和全局变量 1. 在功能函数(或复合语句)内定义。 2 . 在定义它的函数(或复合语句)内有效。 3. 只有当函数被调用时,才有值,函数调用结束,值不被保留。 4. 对其他函数不可见(其他函数不可访问)。 float f(a) int a; { int b,c; …} a,b,c 为局部变量 5. 说明:形参为局部变量 。 不同函数中的局部变量可以重名 f( ) { int x=1; { int x=2; { int x=3; printf(“*%d\n”,x); } printf(“**%d\n”,x); } printf(“***%d\n”,x); } 结果: *3 **2 ***1 复合语句内定义, 复合语句内有效 。 练习:写出一下函数的运行结果。 二、全局变量 程序的编译单位是源文件(
文档评论(0)