C语言--函数与编译预处理.pptVIP

  • 4
  • 0
  • 约1.66万字
  • 约 64页
  • 2019-11-06 发布于广东
  • 举报
* 7.5 多文件程序的调试方法(续) file3.c #include file2.c #include file3.c file1.c A file2.c B C B C A file1.c 预处理前 预处理后 * * * 解释:函数的定义和函数的说明二词的区别。 例题说明: 1. 将例6_102中main函数中函数类型说明语句“ void disp();”删除。这时 编译出错:类型不匹配。 2. 将disp函数的定义移到main函数之前,编译通过并执行。 从而到处关于对被调函数说明的规则。 * 解释: “值传递”的含义是,在调用函数时,将实参变量的值取出来,复制给形参变量,使形参变量在数值上与实参变量相等。在函数内部使用从实参中复制来的值进行处理。 C语言中的实参可以是一个表达式,调用时先计算表达式的值,再将结果(值)复制到形参变量中,一旦函数执行完毕,这些存储单元所保存的值不再保留。 形式参数是函数的局部变量,仅在函数内部才有意义。 函数间形参变量与实参变量的值的传递过程类似于日常生活中的“复印”操作。 * 解释: 1. 用以前的一个例题,介绍程序调用的执行过程, 函数名是函数的入口地址。 函数调用时,在堆栈中存储返回地址。 2. 函数内部定义的变量在函数内部有效。 * (2)递归函数的执行过程 【例7.16】编一递归函数求n!。 思路:以求4的阶乘为例: 4!=4*3!,3!=3*2!,2!=2*1!,1!=1,0!=1。 递归结束条件:当n=1或n=0时,n!=1。 递归公式: n! = 1 (n=0, 1) n×(n-1)! (n1) * 程序如下: float fact (int n) { float f=0; if(n0) printf(n0,error!); else if (n==0 || n==1) f=1; else f=fact(n-1)*n; return (f); } main( ) { int n; float y; printf(\nInput n:); scanf(%d,n); y=fact(n); printf(%d!=%-10.0f\n,n,y); } 运行情况如下: Input a integer number:4? 4!=24 * 递归调用过程 回 推 main( ) fact(4) fact(3) fact(2) fact(1) { { { { { … … … … … y=fact(4); f=4*fact(3); f=3*fact(2); f=2*fact(1); f=1; … … … … … return 24 return 6 return 2 return 1 } } } } } 递 推 * 7.3 局部变量和全局变量及其作用域 7.3.1 变量的作用域 1.

文档评论(0)

1亿VIP精品文档

相关文档