您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > C语言--第7章--函数
大学计算机基础1第七章函数大学计算机基础2一个C语言程序由一个main()主函数和若干个子函数构成。主函数调用其他函数,其他函数之间也可互相调用。7.1函数概述mainabcdefdc大学计算机基础3程序运行后的输出为****************************************Howareyou****************************************main()/*li814.c*/{}printf(“*********************”);printf(“*********************”);printf(“*********************”);printf(“*********************”);printf(“Howareyou?”);大学计算机基础4main(){star();star();Printmessage();star();star();}star(){printf(“*********************”);}printmessage(){printf(“Howareyou?”);}printf(“*********************”);printf(“*********************”);printf(“*********************”);printf(“*********************”);}printf(“Howareyou?”);大学计算机基础5从上例程中不难看出:(1)函数分为标准函数和自定义函数.例如:函数标准函数自定义函数scanf()printf()sqrt(x)sin(x)Printmessage()star()(2)程序的执行从main()函数开始,调用其他函数后又返回到main()函数,在main()函数中结束程序的运行.标准函数:是系统定义好的函数,我们可以直接从函数库中取出来调用。如:“stadio.h”,“math.h”库自定义函数:是程序设计者为满足自己的实际需要而自己定义的特殊功能的函数大学计算机基础6小结:1.一个C源程序文件由一个或多个函数组成(C以原程序文件为编译单位)。2.一个C程序由一个或多个源程序文件组成。3.C程序的执行从main()函数开始,到用其他函数后流程回到main()函数,在main()函数中结束整个程序的运行。4.所有函数都是平行的。5.从用户的角度看,函数有两种:标准函数和用户自定义函数。6.从函数的形式看,函数分两类:无参函数和有参函数。大学计算机基础77.2函数的定义大学计算机基础8变量定义输入语句算法的描述输出语句main(){}求两个数中的最大值inta,b,c;Scanf(“,%d,%d”,&a,&b);变量定义输入语句算法的描述输出语句C=max(a,b);printf(“max=%d”,c);类型函数名(形参表)参数定义;{}inta,b;intz;if(ab)z=a;elsez=b;return(z);求三个数中的最大值/*li81.c*/inta,b,c,d,x;Scanf(“%d,%d,%d”,&a,&b,&c);x=max(a,b);d=max(x,c);printf(“max=%d”,d);intmaxa,b形式参数实际参数大学计算机基础9main()/*li82.c*/{print();}类型函数名(参数列表)参数定义;{}变量定义输入语句算法的描述输出语句当我们只执行某个操作而不需要传递数据时可以定义无参函数。如:打印三角形intn,i,j;for(i=1;i=n;i++){printf(%*c,40-2*(i-1),'');for(j=1;j=2*i-1;j++)printf(%-2c,'*');printf(\n);}print大学计算机基础10函数的定义从形式上可分为:定义的一般形式:类型说明符函数名(){说明部分执行部分}定义的一般形式:类型说明符函数名(形式参数表列)形式参数说明部分{说明部分执行部分}1.无形式参数函数的定义2.有形式参数函数的定义算法输出部分算法输出部分大学计算机基础11定义的一般形式:类型说明符函数名(){}intmax(x,y)intx,y;{intz;z=xy?x:y;return(z);}3.空函数的定义4.对形参声明的传统方式与现代方式intmax(intx,inty){intz;z=xy?x:y;return(z);}大学计算机基础127.3函数参数和函数的值一、形式参数与实际参数在大多情况下的函数调用,主调函数和被调函数之间有数据传递关系.定义函数时的参数称为形式参数(或“形参”),调用函数时的参数称为实在参数(或“实参”).例如:数据传送方式:传值intzs(x)intx;{inti,k=1;for(i=2;ix;i++)if(x%i==0)k=0;return(k);}main()/*li83.c*/{inta,i;for(a=3,i=1;i=10;a++)if(zs(a)&&zs(a+2)){printf(%dand%d\n,a,a+2);i++;}}实参形参形参类型说明函数返回值类型说明大学计算机基础13变量作为函数参数时数据传递是单向值传递,形参与实参分别占据不同的内存单元。形参x实参a33调用zs(a)结果1形参x实参a+255调用zs(a+2)结果1大学计算机基础14关于形参与实参的说明:1.在定义函数中指定的形参,在未调用函数时,形参不占内存单元,只有函数调用发生后,形参才被分配内存单元,调用结束后,形参所占的内存单元被释放。2.在定义函数时,必须指定形参的类型。3.实参可以是常量、变量、表达式:如:zs(a),zs(a+2)sqrt(16)max(a,max(a,b)),zs(a[2])max(3,x+y);4.实参与形参个数应相等,类型应匹配,顺序一一对应。5.实参向形式参数是单向顺序地值传递大学计算机基础15二、形式参数与实际参数的结合下面,通过求三个数最大值的程序,讨论形参与实参数的结合.main()/*li84.c*/{inta,b,c,f;a=4,b=3,c=5;f=max(max(a,b),c);printf(“max=%d\n”,f);}max(a,b)inta,b;{intf;if(ab)f=a;elsef=b;returnf;}a=4,b=3,c=5;max(a,b)max(4,3)a=4,b=3;43f=4;回传4后结束.max(a,b)inta,b;{intf;if(ab)f=a;elsef=b;returnf;}4max(4,c);a=4,b=5;45f=5;max(4,5)回传5后结束.5;max(a,b)inta,b;{intf;if(ab)f=a;elsef=b;returnf;}输出:max=5f=5;形式参数与实际参数的结合实际上是将实参的值赋给形参然后又用函数来完成规定的处理,并回送结果至主调程序。大学计算机基础16课堂练习三:写出下列程序的输出结果________func(inta,intb)/*li85.c*/{intc;c=a+b;returnc;}main(){intx=6,y=7,z=8,r;r=func((x--,y++,x+y),z--);printf(%d\n,r);}A)11B)20C)21D)31675+88138C大学计算机基础17课堂练习四:下列程序的输出结果是________main()/*li86.c*/{inta,b;a=5,b=8;p(a,b);p(a+b,a);p(a/b,b);}p(intx,inty){y=x+y;printf(%d,%d\n,x,y);}5,1313,180,8p(5,8);5,13p(13,5);13,18p(0,8);0,8实参向形式参数是单向顺序地值传递,形参的改变不影响实参大学计算机基础19三.返回语句返回语句可以有.例如:返回语句中的表达式类型与函数的类型说明不一致时,以函数的类型说明为准.例如:intf1(x)intx;{inty;y=++x;returny;}返回语句也可以无.例如:voidf1(x)intx;{inty;y=++x;...}返回语句可以有表达式.例如:intf1(x)intx;{inty;y=++x;return++x;}intf1(x)/*li815.c*/floatx;{floaty;y=++x;returny;}回传类型为int格式:return(表达式);return表达式;大学计算机基础20一个函数可以含有多个return语句,当执行到其中一个return语句时就返回主调函数。例如:intisPrime(intm){inti,k;k=sqrt(m);for(i=2;i=k;i++)if(m%i==0)return(0);return(1);}大学计算机基础21例8.3返回值类型和函数类型不同main()/*li87.c*/{floata,b;intc;scanf(%f,%f,&a,&b);c=max(a,b);printf(maxis%d\n,c);}max(floatx,floaty){floatz;z=xy?x:y;return(z);}输入:1.5,2.5运行结果:maxis2float%f\n输入:1.5,2.5运行结果:maxis2.000000大学计算机基础22函数的类型函数的类型是指函数返回值的类型.定义函数时是放在函数名之前.当类型为char或int时,可以缺省函数的类型说明floatf1(x,y)floatx;…{…}doublef2(x)doubley;{…}voidf3(x)doublex;{…}longf4(x)intx;{…}intf5(x)intx;{…}函数的类型说明可缺省的函数类型说明是int或charcharf6(x)intx;{…}floatdoublevoidlongintchar大学计算机基础237.4函数的调用一、函数调用的一般形式:函数名(实际参数表列);•调用无参函数,则实参表列可以没有,但括弧不能省略。说明:•调用有参函数,则实参表列各参数间用逗号间隔。•实参与形参个数应相等,类型应一致,顺序一一对应。函数调用一般有以下三种方式:自定义函数的调用方式和标准函数的调用方式是一样的。唯一的区别就是谁编写的这个函数。标准函数的调用:x=sqrt(2*8);printf(“***”);等大学计算机基础24二、函数的调用方式:1、函数语句。(把函数调用作为一个语句)标准函数自定义函数printf(“请用心听讲”);star();2、函数出现在一个表达式中。标准函数自定义函数s=pow(x,y);c=2*max(a,b);2、函数调用作为一个函数的参数。标准函数自定义函数m=sqrt(pow(x,3));m=max(a,max(b,c));大学计算机基础25main()/*LI88.C*/{inta,b,c,s;do{printf(“Enterthreemuber,endmarkis000\n”);scanf(“%d%d%d”,&a,&b,&c);s=sum(a,b,c);printf(“sum=%d\n”,s);}while(!(a==0&&b==0&&c==0));}intsum(x,y,z)intx,y,z;{intm;m=x+y+z;return(m);}float%f%f%f”%ffloatfloat,sum();例当用户从键盘输入三个整数时,计算机显示出这三个数之和。若三数均为零,则程序结束。•注意:实参与形参个数应相等,类型应一致,顺序一一对应。实参形参float大学计算机基础26例8.4:在Visualc++中函数的求值顺序:从右到左main()/*li89.c*/{inti=2,p;p=f(i,++i);printf(“%d\n”,p);printf(%d%d\n,i,i++);}intf(inta,in
本文标题:C语言--第7章--函数
链接地址:https://www.777doc.com/doc-2908749 .html