当前位置:首页 > C语言程序设计教程第四章练习题解析(1)
return n + add(n - 1); }
void main() { int n = 5; int sum = add(5);
printf(“结果为:%d\\n”,sum); }
答案:15
解析:add()函数进行递归调用,传入的参数5,会一直递减相加直到递减至1。
10、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。 void fun(int n) {
if (n>0) { printf(\ fun(--n); } }
void main() { int a = 5; fun(a); }
答案:5 4 3 2 1
解析:fun()函数递归调用,每打印一次就自减再调用一次自己。 11、请阅读下面的程序,在空白处填写正确的代码,实现下列功能。 用递归方法求出n!。 int fac(int n) { int t; if( ) return 1; else { t = ; return t; } }
void main() {
int m, y; printf(\
}
scanf(\if (m<0) printf(\else { y = fac(m); printf(\}
答案:(n == 1) || (n == 0) n*fac(n - 1)
解析:实现n的阶乘,当n =0或者n=1时,阶乘没有意义,当n>1时,实现阶乘,则为
n*fun(n-1);
12、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。 int x = 5;
static void cude() { x = x*x*x; }
void main() { cude(); printf(\}
答案:125
解析:全局变量x,当调用cude()内部函数时,并没有传入参数,没有复制,所以x值的
变化直接改变了x本身的值
13、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。 first.c文件
int func(int a, int b) {
return a + b; }
second.c文件
static int func(int a, int b) {
return a – b; }
void main() {
int x = 5, y = 2;
printf(“%d\\n”,func(5, 2));
}
答案:3
解析:当内部函数与外部函数重名时,会优先调用内部函数
14、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。 first.c源文件
int func(int a, int b) {
return a + b; }
second.c源文件
extern int func(int a, int b); void main() {
int x = 5, y = 2;
printf(“%d\\n”,func(5, 2)); }
答案:7
解析:在second.c中声明了int func(int a, int b);函数原型,可以调用first.c中的函数。 15、请阅读下面的程序,在空白处填写正确的代码,实现下列功能。
有一个外部函数,用户输入一个数字,可以实现奇偶数的判断。实现在主函数中调用这个外部函数。 first.c源文件 void func(int num) {
if(num %2 == 0)
printf(“这是一个偶数!\\n”); }
second.c源文件
; void main() {
int num;
scanf(“%d”,&num); func(num); }
答案:extern void func(int num);
解析:调用外部函数,可以包含函数所在的头文件,也可以在本文件中声明函数原型。 16、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。 void show() { int x = 0; }
void main() {
printf(\的值为:%d\\n\}
答案:不能运行
解析:变量x为函数show()的局部变量,只在show()函数范围内有效,在main()中无法调
用。
17、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。 int show() { int x = 0; return x; }
void main() {
int x = 10; show();
printf(\的值为:%d\\n\}
答案:x的值为:10
解析:main()函数中的x是局部变量,不受show()函数调用的影响。
18、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。 int x = 10; void main() {
int x = 100; printf(“%d”,x); }
答案:100
解析:当全局变量与局部变量重名时,全局变量会被屏蔽掉。
19、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。 int x = 2;
void func(int x) { x = x * x * x; }
void main() { func(x); printf(\
共分享92篇相关文档