当前位置:首页 > C语言程序设计习题参考答案!(第二版 杜友福)
f=p(x,n-1)+pow(-1,n-1)*pow(x,n); return f; }
main() {
printf(\}
17. 采用递归的方法计算x的n次方。 答:程序参见文件Cprogram\\xt7_3_17.c
#include \#include \float p(float x,int n) {float f; if(n==0) f=1; else
f=p(x,n-1)*x; return f; }
main() {
printf(\}
18. 根据勒让德多项式的定义计算Pn(x)。n和x为任意正整数,把计算Pn(x)定义成递归函数。 1 n=0 Pn(x) = x n=1 ((2n-1)Pn-1(x)-(n-1)Pn-2(x))/n) n>1 答:程序参见文件Cprogram\\xt7_3_18.c
#include \float p(float x,int n) {float f; if(n==0) f=1;
else if(n==1) f=x; else
f=((2*n-1)*p(x,n-1)-(n-1)*p(x,n-2))/n; return f; }
main() {
printf(\}
习题八 用户标识符的作用域和存储类 一.选择题
1—10:ADBBC CABDB 11-20: DBABC CCDAC
25
二.填空题
1. 静态局部变量的作用域是 从定义点到函数体(或复合语句)结束 。 2. 凡在函数中未指定存储类别的变量,其隐含的存储类别为 auto 。
3. 变量的作用域是指变量的有效范围,在作用域内可以引用该变量。按作用域来说,变量可分为 ①局部 变量和 ②全局 变量。
4. 根据函数能否被其它源文件调用,函数可分为 ① 外部函数和 ②静态(或内部)函数。 5. 下列程序的输出结果是 2468 。 #include
#define MAX_COUNT 4 void fun(); main()
{ int count; for(count=1; count<=MAX_COUNT; count++) fun(); void fun()
{ static int i; i+=2; printf(\ } 6. 下列程序的输出结果是 2,5,1,2,3,-2 。
main()
{ int a=3,b=2,c=1;c-=++b; b*=a+c;
{ int b=5,c=12; c/=b*2; a-=c; printf(“%d,%d,%d,”,a,b,c); a+=--c; } printf(“%d,%d,%d\\n”,a,b,c); }
7. 下列程序的输出结果是 。
#include
{ printf(“a*a=%d\\n”,a*a); a=2;} p2()
{ printf(“a*a*a=%d\\n”,a*a*a);}
8. 下列程序的输出结果是 20,10 。
#include
{ int x=10;
{ int x=20; printf(“%d,”,x); } printf(“%d\\n”,x); }
9. 下列程序由两个文件组成,其运行结果是 x=2 。
/* 文件1 */ int x; sub()
{x=4; }
/* 文件2 */ static int x=2; main()
{sub();printf(“x=%d\\n”,x); }
10. 下列程序由两个文件组成,其运行结果是 x=25,y=25 。
26
}
/* 文件1 */
#include
{ y=x+10; x*=2;} main()
{ extern void sub(); x+=5; add(); sub();printf(“x=%d,y=%d\\n”,x,y);} /* 文件2 */ void sub(void)
{ extern int x; x-=5;}
11. 下列程序由两个文件组成,其运行结果是 。 /* 文件1 */
#include
add: y=25; sub:y=5; main: x=25; main: y=10 extern void sub(); void add(void)
{ int y=5; y=x+10; x*=2; printf(“add:y=%d; ”,y);} main()
{ x+=5; add(); sub();printf(“main:x=%d; main:y=%d\\n”,x,y);} /* 文件2 */ extern int x; void sub(void)
{ int y=5; x-=y; printf(“sub:y=%d; ”,y);} 12. 下列程序由两个文件组成,其运行结果是 。 /* 文件1 */
#include
in add1 x=4 y=6in add2 x=20 y=8 static int x=2;int y=3;
in add1 x=6 y=11in add2 x=30 y=13 extern void add2();
in main x=6 y=13 void add1(); main()
{ add1(); add2();add1();add2();printf(“in main x=%d y=%d\\n”,x,y);} void add1(void)
{ x+=2; y+=3; printf(“in add1 x=%d y=%d”,x,y);} /* 文件2 */ static int x=10; void add2(void)
{ extern int y; x+=10; y+=2; printf(“in add2 x=%d y=%d\\n”,x,y); }
习题九 编译预处理
一. 选择题
1—10: DDCBC CABBB 11-20: BBCBB 二. 填空题
1. 下列程序的输出结果是 1000 10 。
#define N 10 #define s(x) x*x
27
#define f(x) (x*x) main()
{ int i1,i2;i1=1000/s(N);i2=1000/f(N);printf(“%d %d\\n”,i1,i2);}
2. 设有如下宏定义:
#define MYSWAP(z,x,y) {z=x;x=y;y=z;}
以下程序段通过宏调用实现变量a、b内容交换,请填空。 float a=5,b=16,c;MYSWAP( c ,a,b); 3. 下列程序的输出结果是 11 。
#define NX 2+3 #define NY NX*NX main()
{ int i=0,m=0; for(;i #define MAX(x,y) (x)>(y)?(x):(y) main() { int a=5,b=2,c=3,d=3,t; t=MAX(a+b,c+d)*10; printf(“%d\\n”,t);} 5. 下列程序的输出结果是 MIN 。 #define MAX(a,b) a>b #define EQU(a,b) a==b #define MIN(a,b) a { int a=5,b=6; if(MAX(a,b)) printf(“MAX\\n”); if(EQU(a,b)) printf(“EQU\\n”); if(MIN(a,b)) printf(“MIN\\n”);} 6. 下列程序的输出结果是 0 1 1 。 #define TEST main() { int x=0,y=1,z; z=2*x+y; #ifdef TEST printf(“%d %d ”,x,y); #endif printf(“%d\\n”,z); } 三. 编程题 1. 定义一个带参的宏,求两个整数的余数。通过宏调用,输出求得的结果。 #define R(m,n) (m)%(n) #include printf(\ scanf(\ printf(\} 2. 分别用函数和带参的宏,从3个数中找出最大者。 #include #define MAX(a,b) ((a)>(b)?(a):(b)) // implementation by MACRO int max3(int a,int b,int c) //implementation by function 28
共分享92篇相关文档