文档详情

计算机软件基础(自考本科函数).ppt

发布:2018-12-15约1.26万字共51页下载文档
文本预览下载声明
float f82(float x[ ],int n) {float s=0.0; int i; for(i=0;i=n;i++) s=s+x[i]; s=s/(n+1); return s; } main() /*程序由此开始*/ { float a[N],ave; int i; for(i=0;i=N;i++) scanf(%f,a[i]); max=min=a[0]; f81(a,N); ave=f82(a,N); printf(max=%f,min=%f,ave=%f\n,max,min,ave); } 四、函数的调用 例4-12 int x=3 ,y=8; /*定义x,y为全局变量*/ f9 (int x,int y) /*形参x、y为局部变量,仅在f9函数中有效*/ { int m; m=x+y; /*m、x、y有效范围*/ return(m); } main() {int y=10; /*局部变量y仅在主函数中有效*/ printf(%d\n,f9(x,y)); /*全局变量x=3仅在主函数中有效*/ } 无分号 六、用static声明的局部变量 auto register static 类 型 自动型 寄存器型 静态型 存储区 内存的堆栈区 CPU的寄存器区 内存的数据区 特 点 在调用函数时,分配一个临时的存储空间,而且调用结束时将所分配的临时存储空间收回;如果不赋初值,则其中是一个不确定的值。 访问效率高; 调用函数结束时,所占用的寄存器被回收。 函数调用结束时,所占用的存储区不会被回收,即变量的值不会因为函数调用结束而消失。 四、函数的调用 例4-13计算并输出1~4的阶乘 main() {int i; for(i=1;i=4;i++) printf(%1d!=%d\n,i,fl0(i)); } int fl0(int n) {static int f=1; f=f*n; return(f); } 四、函数的调用 例4-14 main() {int k=4,m=1,p; p=f11(k,m); printf(%d,,p); p=f11(k,m); printf(%d,p); } f11(a,b) int a,b; { static int m,i=2; i*=m+2; m=i+a+b; return(m); } 七、函数的递归调用 程序设计中常常要用到递归的方法,递归过程结构清晰,思路明了,程序易读。 如果在一个函数的定义中又引用了自身,那么这个函数称为是递归定义的。 例如自然数的集合可递归定义为: 1)1是自然数。 2)一个自然数的后继仍为一个自然数。 又比如n!的递归定义为: 七、函数的递归调用 例4-15采用归递方法,编程将一个正整数逆序输出。例如,若输入1234,则输出4321。 void f12 (int n) {if(n10) printf(%1d,n); /*余下1位数输出,函数执行完毕*/ else {printf(%ld,n%10); /*输出右边的数*/ f12(n/10);} /*去掉右边数后余下的数,直接调用本函数fl2*/ } /*返回*/ main( ) /*主程序开始*/ {int n; scanf(%d,n); /*输入整数*/ f12(n); /*调用f12函数*/ } 七、函数的递归调用 例4-16编写求n!的递归程序。 七、函数的递归调用 float f13(int n) { if(n==0||n==1) return(1.0); else return(n*f13(n-1)); } main( ) {int n; float w; scanf (%d,n); w=f13(n); printf(%d!=%f\n,n,w); } 七、函数的递归调用 例4-17用梯形法计算 七、函数的递归调用 七、函数的递归调用 例4-17用梯形法计算 float f14(float x) { float y; y=2.0*x*x+3.0*x+1.0; return(y); } main() {float a,b,h,w,s=0.0,y1,y2; int i,n;
显示全部
相似文档