您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > C程序设计课函数数组指针
1第五章函数与编译预处理2概述函数是程序代码的一个自包含单元,用于完成某一特定的任务。C++是由函数构成的,函数是C++的基本模块。有的函数完成某一操作;有的函数计算出一个值。通常,一个函数即能完成某一特定操作,又能计算数值。3为什么要使用函数?1、避免重复的编程。2、使程序更加模块化,便于阅读、修改。参数(多个)函数值(唯一)函数体所编写的函数应尽量少与主调函数发生联系,这样便于移植。4说明:1、一个源程序文件由一个或多个函数组成,编译程序以文件而不是以函数为单位进行编译的。2、一个程序可以由多个源文件组成,可以分别编译,统一执行。3、一个程序必须有且只有一个main()函数,C++从main()函数开始执行。4、C++语言中,所有函数都是平行独立的,无主次、相互包含之分。函数可以嵌套调用,不可嵌套定义。5、从使用角度来说,分标准函数和用户自定义函数;从形式来说,分无参函数和有参函数。5库函数是C++编译系统已预定义的函数,用户根据需要可以直接使用这类函数。库函数也称为标准函数。为了方便用户进行程序设计,C++把一些常用数学计算函数(如sqrt()、exp()等)、字符串处理函数、标准输入输出函数等,都作为库函数提供给用户,用户可以直接使用系统提供的库函数。库函数有很多个,当用户使用任一库函数时,在程序中必须包含相应的头文件。如#includeiostream.h等。6用户在设计程序时,可以将完成某一相对独立功能的程序定义为一个函数。用户在程序中,根据应用的需要,由用户自己定义函数,这类函数称为用户自定义的函数。根据定义函数或调用时是否要给出参数,又可将函数分为:无参函数和有参函数。7函数定义的一般形式一、无参函数主调函数并不将数据传给被调函数。类型说明函数名(void){函数体}无参函数主要用于完成某一操作。不传递参数参数(多个)函数值(唯一)函数体8voidmain(void){printstar();print_message();printstar();}voidprintstar(void){cout“***********\n”;}voidprint_message(void){cout“Howdoyoudo!\n”;}调用函数调用函数调用函数函数类型函数名函数体两个被调函数主要用于完成打印操作。910输出:***********Howdoyoudo!***********11二、有参函数主调函数和被调函数之间有数据传递。主调函数可以将参数传递给被调函数,被调函数中的结果也可以带回主调函数。类型说明函数名(形式参数列表说明){函数体}12intmax(intx,inty){intz;z=(xy)?x:y;returnz;}voidmain(void){inta,b,c;cinab;c=max(a,b);cout“Themaxis”cendl;}主调函数调用函数函数类型函数名函数体形参列表说明函数值实际参数将实际值a,b传给被调函数的参数x,y,计算后得到函数值z返回13intmax(intx,inty){intz;z=(xy)?x:y;returnz;}voidmain(void){inta,b,c;cinab;c=max(a,b);cout“Themaxis”cendl;}ab23c3xy23z314函数参数和函数的值形参是被调函数中的变量;实参是主调函数赋给被调函数的特定值。实参可以是常量、变量或复杂的表达式,不管是哪种情况,在调用时实参必须是一个确定的值。形参与实参类型相同,一一对应。形参必须要定义类型,因为在定义被调函数时,不知道具体要操作什么数,而定义的是要操作什么类型的数。15intmax(intx,inty){intz;z=(xy)?x:y;returnz;}voidmain(void){inta,b,c;cinab;c=max(a+b,a*b);cout“Themaxis”cendl;}先计算,后赋值若a为3,b为5,则实参为8,15,分别送给形参x,y。16说明:1、在未出现函数调用时,形参并不占内存的存储单元,只有在函数开始调用时,形参才被分配内存单元。调用结束后,形参所占用的内存单元被释放。2、实参对形参变量的传递是“值传递”,即单向传递。在内存中实参、形参分占不同的单元。3、形参只作用于被调函数,可以在别的函数中使用相同的变量名。5a8b实参xy形参5817voidfun(inta,intb){a=a*10;b=b+a;couta‘\t’bendl;}voidmain(void){inta=2,b=3;fun(a,b);couta‘\t’bendl;}ab23ab23202320232318voidfun(intx,inty){x=x*10;y=y+x;coutx‘\t’yendl;}voidmain(void){inta=2,b=3;fun(a+b,a*b);couta‘\t’bendl;}ab23xy565056505623形参实参类型相等,一一对应5619形参必须要定义类型,因为在定义被调函数时,不知道具体要操作什么数,而定义的是要操作什么类型的数。形参是被调函数中的变量;实参是主调函数赋给被调函数的特定值。在函数调用语句中,实参不必定义数据类型,因为实参传递的是一个具体的值(常量),程序可依据这个数值的表面形式来判断其类型,并将其赋值到对应的形参变量中。20函数的返回值函数的返回值通过return语句获得。函数只能有唯一的返回值。函数返回值的类型就是函数的类型。return语句可以是一个表达式,函数先计算表达式后再返回值。return语句还可以终止函数,并将控制返回到主调函数。一个函数中可以有一个以上的return语句,执行到哪一个return语句,哪一个语句起作用。21intadd(inta,intb){return(a+b);}intmax(inta,intb){if(xy)returnx;elsereturny;}若函数体内没有return语句,就一直执行到函数体的末尾,然后返回到主调函数的调用处。先计算,后返回可以有多个return语句22不带返回值的函数可说明为void型。函数的类型与函数参数的类型没有关系。doubleblink(inta,intb)如果函数的类型和return表达式中的类型不一致,则以函数的类型为准。函数的类型决定返回值的类型。对数值型数据,可以自动进行类型转换。既然函数有返回值,这个值当然应属于某一个确定的类型,应当在定义函数时指定函数值的类型。intmax(floata,floatb)//函数值为整型函数返回值的类型,也是函数的类型23参数(多个)函数值(唯一)函数体intmax(inta,intb){intz;z=xy?x:y;returnz;}如果有函数返回值,返回值就是函数值,必须惟一。如果有函数返回值,函数的类型就是返回值的类型函数体的类型、形式参数的类型必须在函数的定义中体现出来。24函数的调用函数调用的一般形式函数名(实参列表);形参与实参类型相同,一一对应。i=2;f(i,++i);函数调用的方式作为语句printstar();作为表达式c=max(a,b);作为另一个函数的参数coutmax(a,b);实际调用:f(3,3);251)被调用的函数必须是已存在的函数2)如果使用库函数,必须用#includemath.h在一个函数中调用另一函数(即被调用函数)需要具备哪些条件呢?3)函数调用遵循先定义、后调用的原则,即被调函数应出现在主调函数之前。26floatmax(floatx,floaty){floatz;z=(xy)?x:y;returnz;}voidmain(void){floata,b,c;cinab;c=max(a+b,a*b);cout“Themaxis”cendl;}被调函数先定义定义之后再调用形参必须说明参数类型实参传递的是一个具体的值,不必说明参数类型274)如果使用用户自己定义的函数,而该函数与调用它的函数(即主调函数)在同一个程序单位中且位置在主调函数之后,则必须在调用此函数之前对被调用的函数作声明。28floatmax(floatx,floaty){floatz;z=(xy)?x:y;returnz;}voidmain(void){floata,b,c;floatmax(float,float);cinab;c=max(a,b);cout“Themaxis”cendl;}函数原型说明函数定义定义是一个完整的函数单位,而原型说明仅仅是说明函数的返回值及形参的类型。29voidmain(void){inti=2,x=5,j=7;voidfun(int,int);fun(j,6);couti‘\t’j‘\t’xendl;}voidfun(inti,intj){intx=7;couti‘\t’j‘\t’xendl;}2i5x7j676jxi7输出:76727530voidmain(void){intx=2,y=3,z=0;voidadd(int,int,int);cout“(1)x=“x“y=“y“z=“zendl;add(x,y,z);cout(“(3)x=“x“y=“y“z=“zendl;}voidadd(intx,inty,intz){z=x+y;x=x*x;y=y*y;cout(“(2)x=“x“y=“y“z=“zendl;}2x3y0zxyz230495(1)x=2y=3z=0(2)x=4y=9z=5(3)x=2y=3z=031编写程序,分别计算下列函数的值(x从键盘输入)123231xxxf1222xxxf32floatf1(floatx){floaty;y=3*x*x*x+2*x*x-1;returny;}voidmain(void){floatx,y;cinx;y=f1(x);cout“x=“x“,y=“yendl;}33编写程序,分别计算下列函数的值(x从键盘输入)1111132xxxxs当最后一项小于0.00001时,累加结束。34floatfun(floatx){floats=1,t=1;do{t=t/x;s+=t;}while(t0.00001);returns;}voidmain(void){floatx;cinx;cout“s=“fun(x)endl;}35计算100~200之间的素数,用函数prime()判断一个数是否是素数,若是该函数返回1,否则返回0。voidmain(void){for(inti=100;i=200;i++)if(prime(i)==1)couti‘\t’;}intprime(intx){for(inti=2;ix/2;i++)if(x%i==0)return0;return1;}36计算输入两个数的最大公约数voidmain(void){intx,y;cinxy;coutgys(x,y)endl;}intgys(inta,intb){intr;if(ab){r=a;a=b;b=r;}while(r=a%b){a=b;b=r;}returnb;}37计算输入三个数的最大公约数voidmain(void){intx,y,z;cinxyz;coutgys(x,y,z)endl;}intgys(inta,intb,intc){intr;if(ab){r=a;a=b;b=r;}r=rc?r:c;for(inti=r-1;i=1;i--){if(a%i==0&&b%i==0&&c%i==0)break
本文标题:C程序设计课函数数组指针
链接地址:https://www.777doc.com/doc-4612968 .html