第七节 函数.pptVIP

  • 29
  • 0
  • 约8.09千字
  • 约 55页
  • 2017-06-03 发布于湖北
  • 举报
main() { int c,n; scanf(%d,n); c=a(n); printf(%d,c); getch(); } int a(m) int m; { int z; if(m==1) z=10; else z=a(m-1)+2; return(z); } 举例:利用递归方法求 n! 递归公式 n!= 1 n=0,1 n*(n-1)! n1 从递归函数的程序编写角度看,有两个关键点: 1、递归的出口: 即递归的结束条件,到何时不再递归调用下去。 2、递归表达式:如 fact(n)=n*fact(n-1) §7.6 数组作为函数参数 P182---185 一、数组元素作为函数参数 数组元素作为实参的函数调用与变量作为实参的函数调用参数的使用上完全相同。 二、用数组名作为函数参数 数组名作为函数参数时不进行值传送而进行地址传送。 main() {int a; scanf(%d,a); add(a); printf(%d ,a); getch(); } add(b) int b; {b=b+1;} main() {int a[10],i; for(i=0;i10;i++) scanf(%d,a[i]); add(a); for(i=0;i10;i++) printf(%d ,a[i]); getch(); } add(b) int b[10]; {int i; for(i=0;i10;i++) b[i]=b[i]+1; } 总结: 3、形、实参数组类型应一致保证正确读取数据。 2、形参数组通过获得实参数组首地址获得实参数组数据。 1、数组名作为形、实参的函数调用----传址调用。 4、形、实参数组长度应相同保证读取全部有效数据。 5、数组名作为形、实参是传址调用。形参数组中各元素的值发生变化会使实参数组元素的值同时发生变化。 main() {static char str[100]; gets(str); inverse(str); puts(str); getch(); } 例:写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。 inverse(str) char str[ ]; {char t; int i; for(i=0;istrlen(str)/2;i++) {t=str[i]; str[i]=str[strlen(str)-i-1]; str[strlen(str)-i-1]=t;} } §7.7 局部变量和全局变量 (P102) 局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内, 离开该函数后再使用这种变量是非法的。 1、 主函数中定义的变量也只能在主函数中使用,不能在其它函数中使用。同时,主函数中也不能使用其它函数中定义的变量。 一、局部变量 2、形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量。 3、允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰,也不会发生混淆。 4、在一个函数的内部,可以在复合语句中定义变量,这些变量值只能在本复合语句中有效,这些变量在离开复合语句时失效,释放内存变量。 二、全局变量 全局变量也称为外部变量,它是在函数外部定义的变量。 它不属于哪一个函数,它属于一个源程序文件。其作用域是从定义变量的位置开始到本源文件结束。 全局变量作为函数间数据联系的补充通道 主调函数通过全局变量使用被调函数中的多个数据。 被调函数通过全局变量使用主调函数中的数据。 3、外部变量可加强函数模块之间的数据联系, 但是又使函数要依赖这些变量,因而使得函数的独立性降低。从模块化程序设计的观点来看这是不利的, 因此在不必要时尽量不要使用全局变量。 1、如果定义外部变量的位置在引用变量的函数之后,应该用extern进行说明。 2、在同一源文件中,允许全局变量和局部变量同名。在局部变量的作用域内,全局变量不起作用。 例如:有一个一维数组,内放10个同学成绩,写一个函数,求出平均分、最高分和最低分。 float max,min; main() {int i; float aver,a[10]; float average(); for(i=0;i10;i++) scanf(%f,a[i]); aver=average(a); printf(max=%f,min=%f,aver=%f\n,max,min,aver); getch();} float average(a) float a[10]; {float aver,sum; int

文档评论(0)

1亿VIP精品文档

相关文档