为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

实验15_变量的作用域与递归OK

2011-05-07 4页 doc 51KB 21阅读

用户头像

is_909436

暂无简介

举报
实验15_变量的作用域与递归OKC语言程序设计上机要求 实验15 函数的作用域、生存期、递归 实验目的: 1、​ 理解并掌握局部、全局、静态函数的作用域和生存期的概念和使用方法; 2、​ 掌握函数的嵌套调用和递归调用的方法; 实验内容: 1、​ 先阅读下程序,给出程序的输出结果。再输入、编译并运行之。若有错则改正。 实验目的:加深对局部变量作用域的理解。 改正错误后程序的输出: a=10,b=20 a=1,b=2 c=3 void fun1( ) { auto int a=10;/*自动变量*/ int b=20; /*自动变量的默认方式*/ printf(...
实验15_变量的作用域与递归OK
C语言程序设计上机要求 实验15 函数的作用域、生存期、递归 实验目的: 1、​ 理解并掌握局部、全局、静态函数的作用域和生存期的概念和使用方法; 2、​ 掌握函数的嵌套调用和递归调用的方法; 实验内容: 1、​ 先阅读下程序,给出程序的输出结果。再输入、编译并运行之。若有错则改正。 实验目的:加深对局部变量作用域的理解。 改正错误后程序的输出: a=10,b=20 a=1,b=2 c=3 void fun1( ) { auto int a=10;/*自动变量*/ int b=20; /*自动变量的默认方式*/ printf(“a=%d,b=%d\n”,a,b); } void main( ) { int a=1,b=2; fun1( ); /* 调用fun1函数*/ printf(“a=%d,b=%d\n”, a,b); { int c; /*c是块内定义的变量,其作用域为块内*/ c=a+b; printf(“c=%d\n”,c); } printf(“c=%d”,c); } 2、​ 先阅读下程序,给出程序的输出结果。再输入并运行之。 实验目的:加深对全局变量作用域的理解(全局变量从定义处开始处程序结束处均有效)。 程序的输出: 1, 0 3, 5 #define F “%5d,%5d\n” int a=1, b; void func1( ) { a=3; b=5; printf(F, a,b); } void main( ) { printf(F,a,b); func1( ); printf(F,a,b); } 3、​ 先阅读下程序,给出程序的输出结果。再输入并运行之。 实验目的:加深对全局变量与局部变量冲突时,遵循“谁的地盘谁做主”的规则的理解。 程序的输出: in main—before call f2:a=0,b=0 in f2: a=6 in main—after call f2:a=0,b=0 int a, b; void f2( int x ) { int a; a=3*x; printf(“in f2:a=%d\n”,a); } void main( ) { clrscr( ); printf(“in main—before call f2: a=%d,b=%d\n”,a,b); f2(a+2); printf(“in main—after call f2: a=%d,b=%d\n”,a,b); } 4、​  5、​ 先阅读下程序,给出程序的输出结果。再输入并运行之。 实验目的是加深对静态局部变量的有关特征的理解: (1)​ 在函数内用关键字static 定义的变量是静态局部变量; (2)​ 静态局部变量的作用域在函数内,但生存器同程序; (3)​ 静态局部变量在程序运行过程中,只进行一次初始化。 程序的输出: 7 8 9 main() { int a=2,i; for(i=0;i<3;i++) printf(“%4d”,f(a)); } f(int a) /*当函数类型为int 时,可省略函数名前的类型名。相当于:int f(int a)*/ { int b=0; static int c=3; /*c3是静态局部变量,只在本函数被首次调用时,执行此初始化语句*/ b++; c++; /*第2次调用时,保持第1次离开时的植*/ return(a+b+c); } 6、​ 下面是个展示程序嵌套调用的程序,阅读它,并给出运行结果。 实验目的:了解程序嵌套调用的过程。 程序输出:3 提示:编译正确后,用TC中的F7功能键,单步运行,查看程序的执行过程。 int f ( int x ) { return (x<0)? –x:x ; } int f1 (int a, int b ) { int x, y; x=f(a); y=f(b); return ( x+y) ; } void main( ) { int t; t=f1(-2,1); printf (“ %d\n ”, t ); } 7、​ 下程序的功能,将键盘输入的一个正整数,进行逆序输出。 实验目的:了解并掌握函数递归调用的概念和过程。 例如程序运行时输入:123 程序输出:k=321 #include void rev(int n) { printf(“%d”, n%10); /* 输出最右一位数字*/ if( n/10!=0 ) /* 求商,递归*/ rev(n/10); /* 实施递归调用*/ } void main () { int k ; printf( “k=\n”); scanf(“%d”,&k); rev( k ) ; printf(“\n”) ; } 附加题: 利用递归法编写一个求n的阶乘的函数。 例如:当n=5时,输出:5!=120 n=10 10!=3628800 函数原型和测试函数为: double fac( int n); void main( ) { int n; clrscr( ); printf(“Enter number:”); scanf(“%d”, &n); printf(“%d!=%.1f\n”, fac(n)); } double fac( int n) { } 参考解答: 题1:删除main函数中最后一个输出语句,因为此时c已无效。 附加题: if( n ==1) return 1; else return (n*fac(n-1 ));
/
本文档为【实验15_变量的作用域与递归OK】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索