函数定义的一般形式

上传人:j****9 文档编号:57477032 上传时间:2018-10-22 格式:PPT 页数:26 大小:694KB
返回 下载 相关 举报
函数定义的一般形式_第1页
第1页 / 共26页
函数定义的一般形式_第2页
第2页 / 共26页
函数定义的一般形式_第3页
第3页 / 共26页
函数定义的一般形式_第4页
第4页 / 共26页
函数定义的一般形式_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《函数定义的一般形式》由会员分享,可在线阅读,更多相关《函数定义的一般形式(26页珍藏版)》请在金锄头文库上搜索。

1、1,第八章,函 数,2,第八章 函数,一、概述 二、函数定义的一般形式 三、函数参数和函数的值 四、函数调用 五、函数的嵌套调用 六、函数的递归调用 七、数组作为函数的参数 八、局部变量和全局变量,主要内容,3,一、概述,C程序结构,4,一个C程序可由一个主函数和若干个函数构成。由主函数调用其他函数。其他函数可以相互调用。同一函数可以被一个或多个函数调用任意多次。,第八章 函数,基本概念,分类,从用户使用的角度看:标准函数和用户自定义函数 从函数的形式看:无参函数和有参函数,5,(一)、举例 (二)、函数的定义,第八章 函数,二、函数定义的一般形式,6,(一)、举例,先来看一个函数使用的例子,

2、输入两个数,输出最大值。(判断的两个数的最大值用函数),int max(int a,int b); main() int a,b,c; c=max(a,b);printf(“The max is %d”,c); int max(int x,int y) int z;if (xy) z=x;else z=y;return(z); ,第八章 函数,函数调用,函数定义,7,(二)、函数定义,第八章 函数,类型标识符 函数名(形参列表 )声明部分语句部分,int max(int x,int y) int z;if (xy) return x ;else return y;,函数首部,函数体,格式,in

3、t: 函数类型 max:函数名 int x,int y: 形参及其定义,声明部分: int z; 说明函数内部用到的变量。语句部分: if . 说明函数的功能 return(z) 返回函数的结果,8,(二)、函数定义,第八章 函数,1、函数的返回值是通过函数中的return语句获得的。一个函数中可以有一个以上的return语句。只有一个起作用。,2、return (z); return z;,3、如果函数值的类型和return语句中表达式的值不一致,则以函数类型为准。,4、如果被调用函数中没有return语句,一般表示此函数完成一定操作,并不带回任何值。,5、为了明确表示“不带回值”,可以用“

4、void”定义“无类型”。,函数的返回值,9,三、函数参数和函数的值,函数参数形参与实参,形参:定义函数时函数名后面括号中的变量名 实参:调用函数时函数名后面括号中的表达式 说明: (1)形参在函数被调用前不占内存; (2)函数调用时为形参分配内存;调用结束,释放内存 (3)实参可以是常量、变量或表达式 (4)在被定义的函数中,必须指 定形参的类型 (5)形参与实参类型一致,个数相同 (6)若形参与实参类型不一致,自动按形参类型转换(函数调用转换) (7)实参对形参与进行“值传递” (8)形参与实参占用不同的内存单元, 单向传递,10,函数的返回值,返回语句 形式: return (表达式);

5、 或 return 表达式 ; 说明: 函数中可有多个return语句 若函数类型与return语句中表达式值的类型不一致,自动转换为函数类型-函数调用转换 函数返回值类型 缺省 int 型 函数无返回值 void型,11,例 无返回值函数void swap(int x,int y) int temp;temp=x;x=y;y=temp;,printstar( ) printf(“*“); main( ) int a;a=printstar( );printf(“%d“,a); ,void printstar( ) printf(“*“); main( ) int a;a=printstar(

6、 );printf(“%d“,a); ,正确。函数printstar()没有说明类型表示整型,在main()中,语句a=printstar( );执行函数调用,因为在函数定义时没有定义返回值,所以返回一个随机整数。运行结果: *10 10就是返回的随机整数。,错误!在编译时将提 示下列信息: cannot convert fromvoid to int 即不能将void转换为 int,举例,12,四、函数调用,格式,函数名(实参列表 ),第八章 函数,方式,1。函数语句 printstar(); 2。函数表达式 c=a*max(a,b); 3。函数参数 m=max(a,max(b,c),mai

7、n() int a,b,c;c=max(a,b);printf(“The max is %d”,c); ,函数调用,13,四、函数调用,实际参数与形式参数的关系,第八章 函数,对应关系,个数对应 顺序对应 类型对应(类型相同或赋值相容),传递关系,实参传递给形参 值传递(单向传递),14,四、函数调用,对被调用函数的声明和函数原型,第八章 函数,标准函数,函数外使用#include调用有关库函数。 #include #include ,用户自定义函数,1。当函数定义出现在函数调用之后时,在主调函数中,采用函数原型对被调用函数进行声明。,P153,2。在以下情况下可不用进行函数声明。函数定义出现

8、在函数调用之前函数定义出现在函数调用之后,但函数类型为整形在所有函数定义之前,在函数外部做了函数声明,则在主调函数中不必对所调用的函数再作声明。,15,四、函数调用,举例,第八章 函数,C(m,n)=m!/(n!*(m-n)!) (mn),main() float c;int m,n;float fac(int x);printf(“input m,n:”);scanf(“%d%d”, ,input m,n:5 3,The result is 10.0,16,五、函数的嵌套调用,嵌套调用 C规定:函数定义不可嵌套,但可以嵌套调用函数。,17,例 求三个数中最大数和最小数的差值,int dif(

9、int x,int y,int z);int max(int x,int y,int z);int min(int x,int y,int z);void main() int a,b,c,d;scanf(“%d%d%d“,int dif(int x,int y,int z) return max(x,y,z)-min(x,y,z); int max(int x,int y,int z) int r;r=xy?x:y;return(rz?r:z);int min(int x,int y,int z) int r;r=xy?x:y;return(rz?r:z);,18,六、函数的递归调用,在调用

10、一个函数的过程中又出现直接或间接地调用该函数本身,成为函数的递归调用。 举例:用递归方法求n!。,float fac(int n) float f; if(n0)printf(“n0,dataerror!“);f=-1; else if(n=0 | n=1) f=1; else f=fac(n-1)*n; return (f); ,void main() int n;float y; printf(“input a inter numer:“); scanf(“%d“, ,19,七、数组作为函数的参数,数组元素作函数实参 值传递 数组名作函数参数 地址传递 在主调函数与被调函数分别定义数组,且

11、类型应一致 形参数组大小(二维数组的第一维)可不指定 形参数组名是地址变量,20,例 数组元素与数组名作函数参数比较 (数组元素作为参数),void swap( int x,int y ) int z;z=x; x=y; y=z; main( ) int a2=1,2;swap(a0,a1);printf(“a0=%dna1=%dn“,a0,a1); ,值传递,21,例 数组元素与数组名作函数参数比较 (数组名作为参数),void swap( int *x ) int z;z=*(x+0); x0=x1; x1=z; main( ) int a2=1,2;swap(a);printf(“a0=

12、%dna1=%dn“,a0,a1); ,地址传递,22,例 (数组名作函数参数)求学生的平均成绩,#include float average(int stu10, int n);void main() int score10, i;float av;printf(“Input 10 scores:n“);for( i=0; i10; i+ )scanf(“%d“, ,float average(int stu10,int n) int i;float av,total=0;for( i=0; in; i+ )total += stui;av = total/10;return av;,int

13、 stu ,23,八、局部变量和全局变量,局部变量 定义:在函数内定义,只在本函数内有效 说明: main中定义的变量只在main中有效 不同函数中同名变量,占不同内存单元 形参属于局部变量 局部变量可用存储类型:auto register static (默认为auto),全局变量-外部变量 定义:在函数外定义的变量 有效范围:从定义变量的位置开始到本源文件结束 应尽量少使用全局变量,24,25,例 不同函数中同名变量(局部变量),main( ) int a,b;a=3;b=4;printf(“main:a=%d,b=%dn“,a,b);sub();printf(“main:a=%d,b=%

14、dn“,a,b); sub( ) int a,b;a=6;b=7;printf(“sub:a=%d,b=%dn“,a,b); ,运行结果: main:a=3,b=4 sub:a=6,b=7 main:a=3,b=4,26,float max,min; float average(float array, int n) int i; float sum=array0;max=min=array0;for(i=1;imax) max=arrayi;else if(arrayimin) min=arrayi;sum+=arrayi;return(sum/n); main() int i; float ave,score10;/*Input */ ave=average(score,10);printf(“max=%6.2fnmin=%6.2fnaverage=%6.2fn“,max,min,ave); ,例 全局变量,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号