资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,1,*,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,*,第,5,章 函 数,5.1,程序设计艺术,5.2,函数定义和使用,5.3,数组作函数参数,5.4,变量作用域,5.5,变量存放类别,5.6,预处理指令,第1页,一、函数概念,函数是形式上独立、功效上完整程序段(块)。在,C,程序设计中常将一些惯用功效模块编写成函数。函数能够完成特定计算或操作处理功效。,C,程序由函数组成;函数在形式上是平行,不允许嵌套定义;,C,程序只执行主函数,子函数必须经过主函数或其它子函数调用才能被执行;子函数不能调用主函数。实质上,设计程序就是设计函数。,5.1,程序设计艺术,(略),5.2,函数定义和使用,第2页,二、函数分类,(一)从用户角度分,1.,标准函数,即库函数,ANSI C,预先定义用户可直接使用函数;,使用库函数时,必须用,#include,把该函数所在头文件包含进来。,2.,用户自定义函数,是用户为了处理各种应用问题而自行设计函数,。,用户自定义函数必须先定义后使用,!,(二)从形式上分,1.,无参函数:,即无形式参数函数。如:,getchar(),2.,有参函数,即带有形式参数函数 如:,putchar(ch),、,sqrt(x),第3页,三、函数定义,1,、,无参函数定义,函数返回值类型,函数名,(void),函数体,其中:函数返回值类型表示函数返回结果值类型,函数只能有一个返回值,若函数无返回值即用,void,申明;返回函数值需使用:,return,变量,|,表示式;,函数名由用户按标识符命名规则自行给定,但不能与标准函数同名;,圆括号中关键字,void,表示函数无形式参数;,函数体是由实现函数功效必需语句组成。,第4页,例,1,:无参函数定义。,#include,void PrintMessage(void),printf(t*n);,printf(t Programming is fun.n);,printf(t*n);,int main(void),PrintMessage();,PrintMessage();,PrintMessage();,return 0;,第5页,函数返回值类型 函数名,(,数据类型 参数,1,数据类型,参数,2,),函数体,说明,:,函数返回值类型、函数名、函数体含义与无参函数相同;,形式参数格式如:数据类型 形式参数,1,形式参数(简称形参)必须单个独立定义,形参是用来接收函数被调用时对应实际参数传递值或地址,所以形参只能是变量,形参存放空间是函数被调用时暂时分配动态空间、用完即释放(不能永久存放数据)。,2,、有参函数定义,第6页,int,Average(,int,x,int,y),int,result;,result=(x+y)/2;,return,result;,函数首部,函数体,例,2,:定义有参函数计算两个整数平均。,第7页,#,include,int,Average(,int,x,int,y),int,result;,result=(x+y)/2;,return,result;,int main,(void),int,a1=12,b1=36,a2=24,b2=46,a3=5,b3=25;,int,ave1,ave2,ave3;,ave1=Average(a1,b1);,ave2=Average(a2,b2);,ave3=Average(a3,b3);,printf,(Average of%d and%d is%d.n,a1,b1,ave1);,printf,(Average of%d and%d is%d.n,a2,b2,ave2);,printf,(Average of%d and%d is%d.n,a3,b3,ave3);,return 0;,形参为整形变量,x,和,y,变量,a1,和,b1,为实际参数,第8页,1,、函数调用普通形式:,函数名(实在参数表),其中:,形参,(,形式参数)定义函数时在函数名后括号中申明参数;,实参,(,实际参数,),在主调,函数中调用函数时函数名后面括号中参数,(,或表示式,),;,调用函数时实参个数、次序、类型必须与形参一一对应(赋值相容);实参可是常量、变量、函数或表示式;,函数调用时实参和形参是采取,单向值传递,形式即将实参数值或地址单向传给对应形参。,四、函数调用,第9页,有返回值时(,即函数功效为某种计算功效,),返回值,=,函数名,(,实参表列,);,比如:以赋值语句形式调用函数,如,c=max(a,b);,比如:作为另一个函数参数形式调用函数,如,c=max(max(a,b),c);,printf(%dn,max(a,b);,无返回值时(,即函数功效是完成某种操作或处理),比如:以表示式语句形式调用函数,如,display(a,b);,函数名,(,实参表列,);,2,、详细调用形式,第10页,了解函数调用,参数传递,int main,(void),int,a=12;,int,b=24;,int,ave;,ave=Average(a,b);,printf,(,Average of%d and%d is%d.n,a,b,ave);,return 0;,#include,int Average(int x,int y),int result;,result=(x+y)/2;,return result;,第11页,例,3,:定义求,n!,函数,然后调用该函数求,sum=1!+2!+3!+m!,值。,#include,double Fac(int n),int i;,double p=1.0;,for (i=1;i n;i+),p*=i;,return p;,第12页,int main(void),int i,m;,double sum=0;,printf(,“,Please input m data:,”,);,scanf(,“,%d,”,for (i=1;i y),z=x;,else,z=y;,return(z);,int main(void),int a=45,b=78,c=99,d,e;,d=max(a,b);,printf(max1=%dn,d);,printf(max2=%dn,max(a,b);,e=c-max(a,b);,printf(e=%dn,e);,printf(max3=%dn,max(max(a,b),c);,return 0;,例,4,:函数定义与调用,max1=78,max2=78,e=21,max3=99,该程序输出是什么?,第14页,例,5,:,定义求素数函数,然后调用该函数求,100,到,200,之间全部素数。,#include ,#include ,int Prim(int x),int i,j,k;,k=(int)sqrt(i);,for(j=2;j=k+1),return 1;,else,return 0;,int main(void),int i;,for (i=100;i 1 age(n)=age(n-1)+2,第24页,程序以下:,#include,int age(int n),int c;,if(n=1),c=10;,else if(n 1),c=age(n-1)+2;,return c;,int main(void),printf(“%d”,age(3);,return 0;,程序执行过程以下:,int main(void),printf(“%d”,age(3);,int age(3),int c;,c=age(2)+2;,return c;,int age(2),int c;,c=age(1)+2;,return c;,int age(1),int c;,c=10;,return c;,第25页,课堂习题,#include ,void func1(int i);void func2(int i);char st =hello,friend!;,void func1(int i),printf(%c,sti);if (i 3),i+=2;,func2(i);,void func2(int i),printf(%c,sti);if (i b)c=1;else if (a=b)c=0;,else c=-1;return c;,A),1,B)0,C)1,D)2,第28页,
展开阅读全文