C语言程序设计习题参考答案!(第二版 杜友福)(6)

2019-03-28 11:32

二.填空题

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 static int a=5; a=5 main() a*a=25 { printf(“a=%d\\n”,a); p1(); p2();} a*a*a=8 p1()

{ printf(“a*a=%d\\n”,a*a); a=2;} p2()

{ printf(“a*a*a=%d\\n”,a*a*a);}

8. 下列程序的输出结果是 20,10 。

#include main()

{ 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 int x=10;int y=10; void add(void)

{ 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 int x=10;int y=10;

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 void main() { int m,n;

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

{int m;

m=a>b?a:b; m=m>c?m:c; return m; }

void main() { int m,n,k;

printf(\ scanf(\

printf(\ printf(\}

3. 输入一个整数m,判断它能否被3整除。要求利用带参的宏实现。

#include

#define DIVIDEDBY3(m) (m)%3==0 void main() { int m;

printf(\ scanf(\ if(DIVIDEDBY3(m)) printf(\ else printf(\}

习题十 指针

一.填空题

1. 指针变量是把内存中另一个数据的 首地址 作为其值的变量。 2. 能够直接赋值给指针变量的整数是 0 。 3. 如果程序中已有定义:int k;

1) 定义一个指向变量k的指针变量p的语句是 int *p=&k; 。 2) 通过指针变量,将数值6赋值给k的语句是 *p=6; 。

3) 定义一个可以指向指针变量p的变量pp的语句是 int **pp; 。 4) 通过赋值语句将pp指向指针变量p的语句是 pp=&p; 。

5) 通过指向指针的变量pp,将k的值增加一倍的语句是 (**pp)*=2; 。 4. 当定义某函数时,有一个形参被说明成int *类型,那么可以与之结合的实参类型可以是 整型数组名 、

指向整型数据的指针值 等。 5. 以下程序的功能是:将无符号八进制数字构成的字符串转换为十进制整数。例如,输入的字符串为:556,则输出十进制整数366。请填空。 #include main( )

{ char *p,s[6]; int n; p=s; gets(p); n=*p-'0';

while( *(p++) != '\\0') n=n*8+*p-'0'; printf(\ }

29

二.选择题

1—10: BCADC AAABB 11-15: CBCDC

16. 以下count函数的功能是统计substr在母串str中出现的次数。 int count(char *str,char *substr) { int i,j,k,num=0;

for(i=0; ① ;i++)

{for( ② ,k=0;substr[k]==str[j];k++,j++) if(substr[ ③ ]==?\\0?) {num++;break;}

}

return num; }

① A) str[i]==substr[i] B) str[i]!=‘\\0’ C) str[i]==?\\0? D) str[i]>substr[i]

② A) j=i+1 B) j=i C) j=i+10 D) j=1 ③ A) k B) k++ C) k+1 D) ++k

17. 以下Delblank函数的功能是删除字符串s中的所有空格(包括Tab、回车符和换行符)。

void Delblank(char *s) { int i,t;

char c[80];

for(i=0,t=0; ① ;i++)

if(!isspace( ② ))c[t++]=s[i]; c[t]=?\\0?; strcpy(s,c); }

① A) s[i] B) !s[i] C) s[i]=?\\0? D) s[i]==?\\0? ② A) s+i B) *c[i] C) *(s+i)=?\\0? D) *(s+i)

18. 以下conj函数的功能是将两个字符串s和t连接起来。

char *conj(char *s,char *t) { char *p=s;

while(*s) ① ; while(*t)

{*s= ② ;s++;t++;} *s=?\\0?;

③ ; }

① A) s-- B) s++ C) s D) *s ② A) *t B) t C) t-- D) *t++ ③ A) return s B) return t C) return p D) return p-t

19. 下列程序的输出结果是 。

#include main()

{int **k,*a,b=100;a=&b; k=&a;printf(“%d\\n”,**k);}

A) 运行出错 B) 100 C) a的地址 D) b的地址 20. 下列程序的输出结果是 。 #include

30


C语言程序设计习题参考答案!(第二版 杜友福)(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: