文档详情

第7章用函数实现模块化程序讲解.ppt

发布:2017-02-13约2.63万字共154页下载文档
文本预览下载声明
例7.16 考察静态局部变量的值。 #include stdio.h int main() { int f(int); int a=2,i; for(i=0;i3;i++) printf(“%d\n”,f(a)); return 0; } int f(int a) { auto int b=0; static c=3; b=b+1; c=c+1; return(a+b+c); } 仅在本函数内有效 例7.17 输出1到5的阶乘值。 解题思路:可以编一个函数用来进行连乘,如第1次调用时进行1乘1,第2次调用时再乘以2,第3次调用时再乘以3,依此规律进行下去。 #include stdio.h int main() { int fac(int n); int i; for(i=1;i=5;i++) printf(“%d!=%d\n”,i,fac(i)); return 0; } int fac(int n) { static int f=1; f=f*n; return(f); } 若非必要,不要多用静态局部变量 3. 寄存器变量(register变量) 一般情况下,变量(包括静态存储方式和动态存储方式)的值是存放在内存中的 寄存器变量允许将局部变量的值放在CPU中的寄存器中 现在的计算机能够识别使用频繁的变量,从而自动地将这些变量放在寄存器中,而不需要程序设计者指定 7.9.3 全局变量的存储类别 全局变量都是存放在静态存储区中的。因此它们的生存期是固定的,存在于程序的整个运行过程 一般来说,外部变量是在函数的外部定义的全局变量,它的作用域是从变量的定义处开始,到本程序文件的末尾。在此作用域内,全局变量可以为程序中各个函数所引用。 1. 在一个文件内扩展外部变量的作用域 外部变量有效的作用范围只限于定义处到本文件结束。 如果用关键字extern对某变量作“外部变量声明”,则可以从“声明”处起,合法地使用该外部变量 例7.18 调用函数,求3个整数中的大者。 解题思路:用extern声明外部变量,扩展外部变量在程序文件中的作用域。 #include stdio.h int main() { int max( ); extern int A,B,C; scanf(“%d %d %d”,A,B,C); printf(max is %d\n,max()); return 0; }? int A ,B ,C;? int max( ) { int m; m=AB?A:B; if (Cm) m=C; return(m); } 2. 将外部变量的作用域扩展到其他文件 如果一个程序包含两个文件,在两个文件中都要用到同一个外部变量Num,不能分别在两个文件中各自定义一个外部变量Num 应在任一个文件中定义外部变量Num,而在另一文件中用extern对Num作“外部变量声明” 在编译和连接时,系统会由此知道Num有“外部链接”,可以从别处找到已定义的外部变量Num,并将在另一文件中定义的外部变量num的作用域扩展到本文件 例7.19 给定b的值,输入a和m,求a*b和am的值。 解题思路: 分别编写两个文件模块,其中文件file1包含主函数,另一个文件file2包含求am的函数。 在file1文件中定义外部变量A,在file2中用extern声明外部变量A,把A的作用域扩展到file2文件。 文件file1.c: #include stdio.h int A; int main() { int power(int); int b=3,c,d,m; scanf(%d,%d,A,m); c=A*b; printf(%d*%d=%d\n,A,b,c); d=power(m); printf(%d**%d=%d\n,A,m,d); return 0; } 文件file2.c: extern A; int power(int n) { int i,y=1; for(i=1;i=n;i++) y*=A; return(y); } 编译和运行包括多个文件的程序,可参考《C程序设计学习辅导》一书的“C语言上机指南”部分 3.将外部变量的作用域限制在本文件中 有时在程序设计中希望某些外部变量只限于被本文件引用。这时可以在定义外部变量时加一个static声明。 file1.c stati
显示全部
相似文档