发布时间 : 星期二 文章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
{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
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
{printf(“%d\\n”,++*x);} void main() {
int a=25;prtv(&a); }
9、以下程序的输出结果是(B)。
A、运行出错 B、100 C、a的地址 D、b的地址 #include
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
{ 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 -