1、 How do you do!函数名函数名返回值返回值类类 型型形参形参1形参形参2二二 关于关于形参与实参的说明:形参与实参的说明:1020a ab bx xy y10202010总结:总结:形参的值发生形参的值发生 改变,并不能改变,并不能 影响实参。影响实参。例如:例如:return z;或或return 0;或或return (a+b);括号可省略括号可省略有参函数的有参函数的调用形式调用形式无参函数的无参函数的调用形式调用形式例例main()int a=10,b=20,c=30,d,e;fun();d=max(a,b);printf(“max=%dn”,d);e=max(a,b)+c
2、;printf(“max=%dn”,e);printf(“max=%dn”,max(a,c);int max(int x,int y)return(xy?x;y);fun()printf(“*”);函数声明的一般形式函数声明的一般形式:函数类型函数类型 函数名函数名(参数类型参数类型1,参数类型,参数类型2,);例例:int max(int,int);或或 int max(int x,int y);说明说明:1.1.使用用户定义函数时,要对函数进行声明。使用用户定义函数时,要对函数进行声明。2.2.如果函数的返回值类型为如果函数的返回值类型为intint,可以不用声明。,可以不用声明。例例1:
3、用函数调用的方法求两个数的和。用函数调用的方法求两个数的和。float add(float x,float y)return (x+y);main()float a,b,sum;scanf(“%f%f”,&a,&b);sum=add(a,b);printf(“sum=%f”,sum);int maxnum(int x,int y,int z)int m;m=x;if(my)m=y;if(m=A&x=a&x=z)return 2;传递的是数组的首地址传递的是数组的首地址(此时形参和实参指的是同一内存单元此时形参和实参指的是同一内存单元)1.1.用数组名作函数参数,应该在主调函数和被调函数分用数组
4、名作函数参数,应该在主调函数和被调函数分 别定义数组。别定义数组。2.2.实参实参数组名数组名 形参形参数组名或指针变量数组名或指针变量 3.3.实参数组与形参数组类型应一致。实参数组与形参数组类型应一致。4.4.系统将实参数组的首地址传给形参数组系统将实参数组的首地址传给形参数组5.5.用数组名作函数参数时,形参数组的改变也可以使实用数组名作函数参数时,形参数组的改变也可以使实 参数组随之改变。参数组随之改变。int fun(int b )main()int a10;fun(a);形参还可以写形参还可以写成成int b10或或int b20float fun(float a10);main(
5、)float s10,ave;int i;for(i=0;i10;i+)scanf(“%f”,&si);ave=fun(s);printf(“ave=%.2f”,ave);float fun(float a10)int i;float sum=0,aver;for(i=0;i10;i+)sum=sum+ai;aver=sum/10;return aver;函数声明函数声明s0 s1 s2 s3 s4 s5 s6 s7 s8 s9a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 snsn和和anan指的是指的是同一单元同一单元。main()int a10,i;for(i=0;i10;i
6、+)scanf(“%d”,&ai);fun(a);for(i=0;i10;i+)printf(“%d ”,ai);void fun(int b)int i,j,k,t;for(i=0;i9;i+)k=i;for(j=i+1;jaj)k=j;if(k!=i)t=ai;ai=ak;ak=t;int fun1(int b 4)int fun2(int c34)main()int a34;fun(a);fun(a);变量按其作用域分类可分为变量按其作用域分类可分为局部变量局部变量和和全局变量全局变量。a,b,c 有效有效x,y,i,j 有效有效m,n 有效有效main()int a,b;:int c;
7、c=a+b;:局部变局部变量量c的作的作用范围用范围局部变量局部变量 a、b 的的作用范围作用范围全局变量全局变量c1,c2 的的作用范围作用范围全局全局变量变量p,q的作的作用范用范围围 当局部变量和全局变量重名时,则在局部变当局部变量和全局变量重名时,则在局部变量的作用范围内,全局变量不起作用。量的作用范围内,全局变量不起作用。全局变量全局变量p 的作用的作用范围范围全局全局变量变量 q的的作用作用范围范围局部变量局部变量p 的作用的作用范围范围044013b c第一次调第一次调用开始用开始第一次调第一次调用结束用结束第二次调第二次调用开始用开始第二次调第二次调用结束用结束51例例:打印打
8、印1到到5的阶乘值。的阶乘值。int fac(int n)static int f=1;f=f*n;return(f);main()int i;for(i=1;i=5;i+)printf(“%d!=%dn”,i,fac(i);运行结果为:运行结果为:1!=12!=23!=64!=245!=120每次调用每次调用fac(i),打印一,打印一个个i!值,同时保留这个值,同时保留这个i!的值于的值于f 中,以便下次中,以便下次再乘再乘(i+1)。(2)如果初始化后,变量只被引如果初始化后,变量只被引用而不改变其值,这时用局部静态用而不改变其值,这时用局部静态变量比较方便,以免每次调用时重变量比较方便,以免每次调用时重新赋值。新赋值。用静态存储要多占内存,降低用静态存储要多占内存,降低了程序的可读性,调用次数多时往了程序的可读性,调用次数多时往往弄不清局部静态变量的当前值是往弄不清局部静态变量的当前值是什么。因此,什么。因此,要少用局部静态变量。要少用局部静态变量。
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。