1、C语言从入门到精髓,第九讲:函数,课程安排,函数的定义与声明 函数的调用 函数的调用格式 函数的嵌套调用 函数的递归调用 函数参数传递 形式参数与实际参数 参数传递 数组与函数 数组元素作为函数参数 一维数组名作为函数参数 二维数组名作为函数参数 变量的存储类别,函数定义与声明,函数定义的一般形式:函数返回值的类型名 函数名 (形式参数表列)声明部分语句部分 函数声明的形式返回值类型名 函数名 (参数列表);,函数的调用,函数的调用形式 函数名 (实参表列); 调用方式 把函数作为语句独立出现,指是的把函数作为一条语句来处理 表达式中出现函数调用,这时要求有返回值参与运算 函数调用作为函数的实
2、参 9_3.cpp(函数调用作为函数的实参求三个数的最大值),举例:函数调用作为函数的实参求三个数的最大值 9_3.cpp,#include int max(int a,int b); main() int x,y,z;int m;printf(“Please enter the value of x y zn“);scanf(“%d%d%d“, ,函数的嵌套调用,函数的调用,已经介绍过的是在主函数中调用自定义的一些函数,可是我们知道函数的定义是平等的。定义函数是不允许出现嵌套定义的,但是嵌套调用这是可以的。可以在调用一个函数的时候,该被调用的函数又调用另一个函数。 举例9_4.cpp,#in
3、clude long c(int a,int b); long fac(int m); main() printf(“C(8,3)=%d“,c(8,3); long c(int a,int b) float t;t=fac(a)/(fac(b)*fac(a-b); return t; long fac(int m) int i;long n=1; for(i=1;i=m;i+)n=n*i; return n;,函数的递归调用,递归调用 举例9_5.cpp,#include long fac(int); main() long s;s=fac(5);printf(“5!=%ld”,s); lon
4、g fac(int n) long f; if(n= =0|n= =1) f=1; else f=n*fac(n-1); return f; ,函数参数传递,形式参数与实际参数 参数传递 形式参数在没有进行函数调用时,形参并不占用内存的,只在进行函数调用时,函数中的形参才会被分配内存。 在函数调用之后,形参所占的内存也被释放,而实参单元仍保留维持原值。 函数参数之间的数据传递是实参变量与形参变量之间是单向的值传递,由实际参数传给形式参数。 举例9_8.cpp,函数的调用,两数交换9_8.cpp,#include void swap(int x,int y) int temp;temp=x;x=
5、y;y=temp;printf(“x=%d,y=%dn“,x,y); main() int a,b;a=4;b=5;swap(a,b);printf(“a=%d,b=%d“,a,b); ,数组与函数,数组元素作为函数参数 数组元素作为函数实参时,在进行函数调用时,把数组元素当作函数的实参,用法与变量作实参一样,是单向的值传递。 举例 9_9.cpp一维数组名作为函数参数 9_10.cpp 二维数组名作为函数参数 9_12.cpp,变量的存储类别,动态存储与静态存储 全局变量与局部变量 在函数外定义 extern变量 static变量 局部变量 auto变量 register变量 static变量,性格决定命运, 专注成就人生, 源智天下,