C语言程序设计 第8章 函数

上传人:E**** 文档编号:89381834 上传时间:2019-05-24 格式:PPT 页数:42 大小:128KB
返回 下载 相关 举报
C语言程序设计 第8章  函数_第1页
第1页 / 共42页
C语言程序设计 第8章  函数_第2页
第2页 / 共42页
C语言程序设计 第8章  函数_第3页
第3页 / 共42页
C语言程序设计 第8章  函数_第4页
第4页 / 共42页
C语言程序设计 第8章  函数_第5页
第5页 / 共42页
点击查看更多>>
资源描述

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

1、第八章 函数 81 概述 C语言的程序除主函数外,还可以有若干个其他函数块状结构。 一般把其中相对独立的算法和功能定义成一个独立的函数,以供需要的地方调用。 优点: (1) 减少代码的重复现象。 (2) 便于分工合作。 (3) 便于阅读。 (4) 便于独立算法的代码移植。,82 函数的定义和调用 举例说明: 对于求两个数中的最大值,有三个步骤: (1)从键盘输入两个数给a和b。 (2)求a和b中的最大值。 (3)输出结果。 把求最大值的算法部分定义成一个独立的函数:,函数类型 函数名 函数参数(形参) int max(int x,int y) main() int z; int a,b,c;

2、if(xy)z=x; scanf(“%d%d”, x y z a b c,3,5,说明: (1)程序由两个函数组成,它们逻辑上相互独立(功能、变量)。 (2)程序的执行总是从主函数开始,主函数总是被执行一次,其他函数只有在被调用时才获得控制。 (3)函数调用有两个作用:转移控制权和传递参数。 (4)return的作用也有两个:交回控制权和返回结果。 (5)实参可以是常量、变量或表达式,但类型要一致。,定义一个函数除考虑算法外就是:如何设计函数的参数,通过何种途径交回结果。 例:求自然数1100中的素数之和。 ? prime( ? ) main() int i; int i,s=0; for(i

3、=2;im;i+) for(i=1;i=100;i+) if(m%i=0) ? if(prime(i) ) s+=i; ? printf(“n %d”,s); ,int m),int,return 0;,else return 1;,return 1;,例:求5!+7!+4!的值。 ? fac( ? ) int i,s=1; for(i=1;i=n;i+) s*=i; return(s); main() printf(“n%d”,fac(5)+fac(7)+fac(4); ,int n,int,main() float s,fac(); 对被调函数声明 s=fac(5)+fac(7)+fac(

4、4); printf(“n%f”,s); float fac(int n) int i; float s=1; for(i=1;i=n;i+) s*=i; return(s); 不需声明的情况:int char 主调函数在后,若被调用的函数是库函数,则应用#include命令将所调用函数的有关信息包含进来,如: 例: #include “math.h” main() float x,y; scanf(%f”, ,83 函数的嵌套调用 C语言的函数定义虽然相互平行、相互独立的,但可以嵌套调用,形如: 主函数 函数A 函数B,例:求多项式 S= i!+ i!+ i!的值。 float fac(in

5、t n) ? sum( ? ) int i; float s=0; for( i=? ) s+=fac(i); return(s); main() printf(“%f”,sum(1,5)+sum(7,11)+sum(15,20); ,1,5,7,11,15,20,int a, int b,float,i=a;i=b;i+,84 函数的递归调用 在函数调用的过程中,出现直接或间接地调用该函数本身。如: f1() f2() f3() f1(); f3(); f2(); 直接 间接 递归调用 递归调用,在实际应用中,有些问题既可用递归实现,也可不用递归(如求n!); 也有些问题非有递归不可(如汉诺

6、塔问题);不少问题使用递归显得很方便。 用递归方法求n! : 递推公式: 1 当n=0或n=1时 n!= n(n-1)! 当n1时,float fac(int n) main() float f; float f; if(n=0|n=1) f=1; f=fac(4); else f= ? printf(“n%f”,f); return(f); 递归调用的执行过程:,n*fac(n-1);,主函数 函数fac 函数fac 函数fac 函数fac 问题:4个return的执行顺序?后进先出!,f=fac(4);,n=4 if(n=0|n=1)f=1; else f=n*fac(n-1); retu

7、rn(f),n=3 if(n=0|n=1)f=1; else f=n*fac(n-1); return(f ),n=2 if(n=0|n=1)f=1; else f=n*fac(n-1); return(f),n=1 if(n=0|n=1)f=1; else f=n*fac(n-1); return(f),85 数组作为函数的参数 当要传递的参数较少时,用简单变量作为函数的参数是方便的,但当要传递的参数是批量时,需要用数组作为函数的参数。,例:编写函数,求100个数的平均数。 float aver(int a100) int i; float s=0; for(i=0;i100;i+) s+=

8、ai ; return(s/100); main() int x100; float av; 输入x; av=aver(x); ,对应的实参也应为数组 型参数组的长度可省略,a,通用函数考虑: float aver(int a,int n) main() int i; float s=0; int x100,n=100; for(i=0;in;i+) float av; s+=ai; 输入x return(s/n); av=aver(x,n); ,x,a,100,n,n,值传递 地址传递,100,n=5;,5,a0=3 ;,3,例:阅读程序: main() swap(int a, int b)

9、 int a=3,b=5; int t; swap(a,b); t=a; a=b; b=t; printf(“n%d,%d”,a,b); printf(“n%d,%d”,a,b); a b a b,3,5,以下程序的运行结果是 ? main() f ( int b, int x) int a2=2,4, x=5; x+; f (a,x); b0+=2; printf(“%d,%d,%d”, b1+=3; x,a0,a1); A) 5,2,4 B) 6,4,7 C) 6,2,4 D) 5,4,7,例:排序。 void sort(int a, int n) int i,j,t; for(i=0;i

10、aj)t=ai;ai=aj; aj=t; main() int x5,i; for(i=0;i5;i+) scanf(“%d”, ,x,a,例:方阵转置(二维数组情况)。 at(int a33) x a int i,j,t; for(i=0;i3;i+) for(j=i+1;i3;i+) t=aij; aij=aji; aji=t; int x33; at(x); 行长不等情况?通用函数的处理?,通用函数,按一维数组处理: at(int a,int n) int i,j,t; for(i=0;in;i+) for(j=i+1;in;i+) t=ai*n+j; ai*n+j=aj*n+i; aj

11、*n+i=t; int x33; at(x,3);,86 局部变量和全局变量 1、局部变量 在函数内定义的变量称局部变量。 局部变量只在该函数内使用。 float f1(int x) int f2() main() int i,j; int a,b,c; int m,n; int i,j; ,说明: (1)任何函数(包括主函数)内定义的变量都是局部变量。 (2)不同函数内定义的变量即使同名也互不干扰。 (3)复合语句中定义的变量只在该复合语句中有效。,2 、 全局变量 在函数以外定义的变量,也称外部变量。 全局变量可以为为本文件中其它函数所共用。它的作用范围是从定义变量的位置开始到本源文件结束

12、。,int p=1,q=5; float f1(int a) int b,c; char c1,c2; char f2(int x,int y) int i,j; main() int m,n; ,全局变 量c1,c2 的作用 范围,全局 变量 p,q的 作用 范围,全局变量主要用于作为不同函数间数据传递的桥梁。 例:编写一个函数,求n个数中的最大值、最小值和平均值。并编写主函数完成:输入100个数,调用该函数进行统计,输出结果。,int max,min; float aver(int a,int n) int i; float s=0; for(i=0;imax)max=ai; if(aim

13、in)min=ai; s+=ai; return (s/n); main() int x100,i; float av; for(i=0;i100;i+) scanf(“%d”, ,用全局变量传递结果,分析不用全局变量的情况: float aver(int a,int n) int i; float s=0; int max,min; for(i=0;imax)max=ai; if(aimin)min=ai; s+=ai; return (s/n); main() int x100,i; float av; int max,min; for(i=0;i100;i+) scanf(“%d”, ,int max,min; float aver(int a,int n) int i; float s=0; for(i=0;imax)max=ai; if(aimin)min=ai;

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

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

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