资源描述:
《函数定义的一般形式》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第八章函数函数定义的一般形式函数参数和函数的值函数的调用数组作为函数参数函数的嵌套调用/函数的递归调用局部变量和全局变量变量的存储类别内部函数和外部函数如何运行一个多文件的程序§8.1概述一个较大的程序一般应分为若干程序模块,每一个模块用来实现一个特定的功能。所有的高级语言中都有子程序这个概念,用子程序实现模块的功能。一个C程序可以由一个主函数和若干个函数构成,由主函数调用其他函数,其他函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次Main()scanf()printf()max()
2、x()printf()y()getchar()max()main(){star();message();star();}star(){printf("*************");}message(){printf("gameover!");}说明:1、一个源文件由一个或多个函数组成,是一个编译单位2、一个C程序由一个或多个源文件组成3、C程序的执行由main函数开始,调用其他函数后回到main函数4、所有的函数都是平行的,在定义的时候相互独立。一个函数并不从属于另一个函数,函数间可以相互
3、调用5、从用户角度看,函数有两种:标准函数(库函数)、用户自定义函数有返回值无返回值无参函数:在调用无参函数时,主调函数并不将数据传送给被调用函数有参函数:在调用函数时,在主调函数和被调用函数之间有数据传递函数的分类:1、根据有无返回值分:2、根据函数有无参数来分:§8.2函数定义的一般形式1.无参函数定义一般形式类型标识符函数名(){说明部分语句}例如:nihao()/*nihao函数,功能:显示一字符串*/{printf("Howdoyoudo!");}该函数无形式参数列表类型标识符指定函数
4、值的类型,即函数带回来的值的类型,无参函数一般不需要带回函数值,因此可以不写类型标识符例如:intmax(intx,inty){intz;/*函数内部定义的变量*/z=x>y?x:y;return(z);/*return语句使函数结束执行,返回主调函数,括号内的z值作为函数带回的值(返回值)*/}2.有参函数定义一般形式类型标识符函数名(形式参数列表){说明部分语句}类型标识符函数名形式参数列表,该函数有两个形式参数,均为整型3、函数定义的其他形式1).可以有空函数intdummy(){}2).无返
5、回值函数[void]doit(...){......}类型标识符说明为void,表示函数无返回值,即该函数执行后不返回任何值。无形式参数函数体中无任何语句,称为“空函数§8.3函数参数和函数的值一、形式参数和实际参数形式参数:在定义函数时使用的参数,简称“形参”,形参是一个变量.实际参数:在调用函数时使用的参数,简称“实参”,实参是一个表达式.主调用函数与被调用函数之间的数据传递,就是通过形参与实参之间的数据传递实现的。例8.2、输入两个整数,求它们的最大值。求最大值用函数max实现。main(){
6、inta,b,c;scanf("%d,%d",&a,&b);c=max(a,b);printf("maxis%d",c);}intmax(intx,inty){intz;z=x>y?x:y;return(z);}max(a,b)main()函数max函数max(x,y)return(z)计算zx和y是形式参数a和b是实际参数关于形参与实参的说明:1、在定义函数中指定的形参,在未发生函数调用时,不占内存空间。它们是动态分配的2、实参可以是常量、变量或表达式,但是要求有确定的值,在函数调用时,将实参
7、的值传给形参变量(如果形参是数组名,则传递的是数组首地址而不是数组的值)3、在被定义的函数中,必须指定形参的类型如:intmax(intx,inty)4、实参与形参的类型应相同或赋值兼容如果类型不相同,按第二章介绍的不同类型数值的赋值规则进行转换例如:实参值a为3.5,而形参x为整型,则将实数3.5转换成整数3,然后送到形参x5、C语言规定,实参变量对形参变量的数据传递是“值传递”,既单向传递,只有实参传给形参,而不能由形参传回来给实参。如下图:2323abxy2332abxy在调用函数时,给形参分
8、配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留并维持原值二、函数的返回值通过函数调用使主函数能得到一个确定的值,这就是函数的返回值函数的返回值是通过函数中的return语句获得的,return语句将被调用函数中的一个确定值带回主调函数中去1、函数中的return语句返回函数的值,一个函数可以有一个以上的return语句,执行到哪一个return语句,哪个return语句就起作用例如:max(intx,inty){return(x>y