C语言全部章节习题集及答案 联系客服

发布时间 : 星期二 文章C语言全部章节习题集及答案更新完毕开始阅读2b905885bed5b9f3f80f1c0a

z=x+y; return(z); }

程序运行后输出: 3,4,7

9 预处理命令

一、单项选择题

1、 以下不正确的叙述是(D)

A、宏替换不占用运行时间。 B、宏名无类型。

C、宏替换只是字符替换。 D、宏名必须用大写字母表示。 2、 C语言的编译系统对宏命令的处理(D)

A、在程序运行时进行的。 B、在程序连接时进行。 C、和C程序中的其它语句同时进行编译的。

D、在对源程序中其它语句正式编译之前进行的。 3、以下程序的输出结果是(C)。

A、15 B、100 C、10 D、150 #define MIN(x,y) (x)<(y)?(x):(y) void main() {

int I,j,k;

i=10;j=15;k=10*MIN(i,j); printf(“%d\\n”,k); }

4、以下叙述中正确的是(D)

A、 用#include包含的文件的后缀必须是“.h”。

B、 若一些源程序中包含某个头文件;当该文件有错时,只需对该头文件进行修改,包含此头文件的所有源程序不必重新进行编译。 C、 宏命令行可以看作是一行C语句。 D、 预处理是在编译之前进行的。 5、以下叙述中正确的是(C)

A、源程序中所有的行都参加编译。

B、宏定义常量与const定义常量是一样的。

C、宏定义可以嵌套定义,即在宏定义中的字符串可以引用另一个宏定义的标识符。 D、以上都不正确。 二、 填空题

1、 以下程序中for 循环执行的次数是 6 。

- 29 -

#define N 2 #define M N+1

#define NUM (M+1)*M/2 void main() {

int i;

for(i=1;i<=NUM;i++); printf(“%d\\n”,i); }

2、以下程序的输出结果是 x=93 。 #define A 3

#define B(a) ((A+1)*a) void main() {

int x;

x=3*(A+B(7));

printf(“x=%d\\n”,x); } B部分(

编程:请写出一个宏定义MYALPHA(c),用以判断c是否是字母字符,若是,得1,否则,得0。

解:#define MYALPHA(c) ((c>=’A’&&c<=’Z’)||( c>=’a’&&c<=’z’)?1:0)

第十章 指针 A部分) 一、选择题

1、若有定义:int x,*pb;则以下正确的表达式是(A)

A、pb=&x B、pb=x C、*pb=&x D、*pb=*x 2、以下程序的输出结果是(B)

A、因变量无定义输出不定值 B、0 C、-1 D、1 #include void main()

{printf(“%d\\n”,NULL);} 3、以下程序的输出结果是(B)

A、5,2,3 B、-5,-12,-7 C、-5,-12,-17 D、5,-2,-7 #include

void sub(int x,int y,int *z) {*z=y-x;}

- 30 -

void main() {

int a,b,c;

sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf(“%d,%d,%d\\n”,a,b,c); }

4、以下程序的输出结果是(C)

A、4 B、6 C、8 D、10 #include void main() {

int k=2,m=4,n=6;

int *pk=&k,*pm=&m,*p; *(p=&n)=*pk*(*pm); printf(“%d\\n”,n); }

5、已知指针p的指向(图一)的a[1],则执行语句*p++;后,*p的值是(B)。 A、20 B、30 C、21 D、31

a[0] a[1] a[2] a[3] a[4] 10 20 30 40 50 (图一) 6、已知指针p的指向(图一)的a[1],则表达式*++p的值是(B)。 A、20 B、30 C、21 D、31

7、已知指针p的指向(图一)的a[1],则表达式++*p的值是(C)。 A、20 B、30 C、21 D、31 8、以下程序的输出结果是(D)。

A、23 B、24 C、25 D、26 #include void prtv(int *x)

{printf(“%d\\n”,++*x);} void main() {

int a=25;prtv(&a); }

9、以下程序的输出结果是(B)。

A、运行出错 B、100 C、a的地址 D、b的地址 #include void main() {

int **k,*a,b=100;

- 31 -

a=&b;k=&a;

printf(“%d\\n”,**k); }

10、以下程序运行后,输出结果是(D)。

A) 8 B) 7 C) 6 D) 5 #include ss(char *s)

{ char *p=s; while(*p) p++; return(p-s); }

main()

{ char *a=\ int i; i=ss(a);

printf(\ }

二、填空题

1、若有定义:char ch;

(1)使指针p指向变量ch的定义语句是 char *p=&ch; 。

(2)若已定义char *p;,使指针p指向变量ch的赋值语句是 p=&ch; 。

(3)在(1)的基础上,通过指针p给变量ch读入字符的scanf调用语句是 scanf(“%c”,p); 。

(4)在(1)的基础上,通过指针p给变量ch赋字符’a’的语句是*p=’a’; 。 (5)在(1)的基础上,通过指针p用格式输出函数输出ch中字符的语句是printf(“%c”,*p); 。

2、以下程序输出的是 C 。 void main( ) { int i=3, j=2;

char *a=\DCBA\

printf(\ }

3、以下函数的功能是,把两个整数指针所指的存储单元中的内容进行交换。请填空。 void exchange(int *x, int *y) { int t;

t=*y; *y= *x ; *x= t ; }

B部分

- 32 -

程序填空:

1、下面程序的输出结果是 A B C D B C D C D D 。 char b[]=\ABCD\ void main() { char *chp;

for(chp=b; *chp: chp+=2) printf(\ printf(\ }

2、 下面是一个字符串连接函数,请补充完整。 void mystrcat(char *s1,char *s2) {

char *p,*q;

for(p=s1; *p ; p++ );

for( q=s2 ;*q;q++) *p++=*q ; *p=’\\0’ ; }

- 33 -