第十章 预处理命令《C语言程序设计教程》(清华大学出版社第三版) 章节关过卷

2025-07-08
| 2份
| 16页
| 89人阅读
| 0人下载

内容正文:

<C语言程序设计教程>清华大学出版社(第3版) 第十章 预处理命令 章节过关卷 考试时间:90分钟 满分:100分 姓名 班级 学号 1、 选择题(共10题,每小题2分,共20分) 1、 关于宏定义说法错误的是 。 A、 宏替换的操作是在预编译时进行的。 B、 宏定义时宏名必须要用大写,以此来区分变量名。 C、 定义宏时以#define打头。 D、 宏定义可以带参数,也可以不带参数。 A、 2、 若有定义如下,则下面说法错误的是 。 #define N 5 #define M N*10 #define L L+N*M #define LONG “this is a very long string\ that is used as an example” A、 N、M、L、LONG都是宏名,代表后面的单词串 B、 LONG定义中,”\”表示续行符,当单词串太长,使用续行符可分对行书写。 C、 在编译预处理时,宏M被5*10替换。 D、 宏L定义是正确,宏可以递归定义 3、 若有语句如下,输出结果是 。 #define LIN 12345 printf(“LIN”); A、12345 B、 “12345” C、 LIN D、 定义出错,无法输出 4、 下列关于条件编译正确是 。 A、 if后面的条件必须是常量表达式,通常会用到宏名,条件可以不加括号()。 B、 在使用了#if、#ifdef、#ifndef后,#endif语句可写可不写。 C、 #elif和#else语句必须要有。原创精品资源学科网独家享有版权,侵权必究! D、 #ifned...#endif形式,如果宏名被#define行定义,则编译#ifned下的程序段。 5、 在宏定义#define NUM 123.56中,宏名NUM代替的是 。 A、 单词串 B、float型数据 C、double 型数据 D、常量 6、 若有以下定义,则输出结果是 。 #define N 3 #define M(x) (N+x*2) printf(“%d”,M(N*2)+3); A、12 B、15 C、18 D、语句有错 7、 若有以下定义,则输出结果是 。 #define MOD(x,y) x%y int a=-7,b=26,z; z=MOD(a,b); printf(“%d”,++z); A、6 B、-4 C、8 D、-6 8、 若有以下定义,则输出结果是 。 #define Y 5 #ifndef Y int a=-5; printf(“%d”,a>>1); #else printf(“Y==5”); #endif A、 -3 B、-2 C、Y==5 D、无法确定值 9、 若有以下定义,则输出结果是 。 #define LIN 5 #ifdef LIN printf("%d",strlen("ab\08\abce")); #else printf("%d",sizeof("ab\08\abce")); #endif } 原创精品资源学科网独家享有版权,侵权必究! A、8 B、2 C、9 D、无法确定值 10、 若有以下定义,则输出结果是 。 #define N 2 #define M(x) N<<1+x int y=3; printf("%d",M(y/2)-1); A、4 B、5 C、7 D、8 二、填空题(共6空,每空2分,共12分) 1、条件编译必须以 命令结束。 2、 预处理命令必须以 开头。能以 命令终止宏的作用域。 3、 若有以下宏定义: #define F(a,b,c) a+b*c int a=1,b=2,c=3,s; s=F(++a,a+b++,b+c);则s值为 。 4、 #if和#elif常常与 命令配合使用。 5、 若有以下宏定义: #define X 10 #define Y (X+1)*3 int a=Y+1; printf(“%d”,a--); 则输出结果为 。 三、程序运行题(共6题,每小题3分,共18分) 1、以下程序的运行结果是 。 #include<stdio.h> #define N 20 #define L N*2+5 void main() { if(!(N%2)) printf("%d",N+1); printf("%d ",L+N) } 2、以下程序的运行结果是 。 #include<stdio.h> #define PR(x,y) printf("%d,%d,",x,y) 原创精品资源学科网独家享有版权,侵权必究! void main() { int *p1, *p2,*p3; int x=12,y=6; p2=&x,p3=&y; if(*p2>*p3){p1=p2,p2=p3,p3=p1;} PR(x,y); PR(*p2,*p3); } 6、 以下程序的运行结果是 。 #include<stdio.h> #define MAX(x,y) x>y?"yes":"no" #define PR(x) printf("result=%s ",x) void main() { int x=30; unsigned y=-30; PR(MAX(x,y)); } 4、以下程序的运行结果是 。 #include<stdio.h> #define AND + void main( ) { int a=15,b=20; #define OK 1 #ifdef OK a=3; if(OK!=a) printf("%d,",a AND b); #else a=1;b=21; if(a==OK) b=b AND 1; printf(“%d,”,b); #endif printf("%d ",b); }原创精品资源学科网独家享有版权,侵权必究! 5、以下程序的运行结果是 。 #include<stdio.h> #include<ctype.h> #define LEN 1 void main() { char str[30]="bs12UDR154xsfB"; int i,count1=0,count2=0; for(i=0;str[i]!='\0';i++) { #if LEN if(isalpha(str[i])) count1++; #else if(str[i]>='0'&&str[i]<='9') count2++; #endif } printf("count1=%d,count2=%d ",count1,count2); } 6、 以下程序的运行结果是 。 #include<stdio.h> #define N 3 #define M(x) N*x+1 void fun(int *a,int n) { int i; for(i=0;i<5;i++) a[i]=i+M(i); } void main() { int a[5]={1,2,3,4,5},i; fun(a,5); for(i=0;i<5;i++) printf("%4d",*(a+i)); } 原创精品资源学科网独家享有版权,侵权必究! 四、程序填空题(共6空,每空5分,共30分) 1、程序功能:求a,b,c的最大值,并输出。请填空。 #include<stdio.h> //宏定义参数为a,b #define PRINT(X) printf(“max=%d”,X) void main() { int a,b,c,max; scanf(“%d,%d,%d”,&a,&b,&c); max= max=MAX(max,c); ; //输出最大值max } 2、 程序功能:如果条件为真,则求x,y两数的和,否则求x,y两数的余数。请填空。 #include<stdio.h> #define INT 1 #define ADD(a,b) a+b #define MOD(a,b) a%b void main() { int a,b,s,y; scanf("%d,%d",&a,&b); INT==1 s=ADD(a,b); printf("s=%d ",s); #else y= ; printf("y=%d ",y); } 原创精品资源学科网独家享有版权,侵权必究! 五、程序改错题(共20分) 1、程序功能:输出字符数组str中出现数字字符和字母字符的个数。请在找出错误语句,并写出完整的正确语句。(找出错误2分,改正错误3分) L1 #include<stdio.h> L2 #define N 30; L3 void main() L4 { char str[N]; L5 int i=0,count1=0,count2=0; L6 gets(str); L7 while(*(str+i)!='\0') L8 { if(str[i]>='0'&&str[i]<='9') count1++; L9 if(str[i]>='A'&&str[i]<='Z'&&str[i]>='a'&&str[i]<='z') count2++; L10 i++; } L11 printf("count1=%d,count2=%d ",count1,count2); } 2、程序功能:利用宏定义,给一维数组a元素赋值为奇数数列,从1开始。请在找出错误语句,并写出完整的正确语句。(找出错误2分,改正错误3分) L1 #include<stdio.h> L2 #define N 10 L3 #define JS(x) x*2+1 L4 #define PRINT(Y) printf("%4d",a[i]) L5 void main() L6 { int a[N],i; L7 for(i=0;i<N;i++) L8 a[i]=JS; L9 for(i=0;i<N;i++) L10 PRINT(a[i]); } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $$ <C语言程序设计教程>清华大学出版社(第3版) 第十章 预处理命令 章节过关卷 考试时间:90分钟 满分:100分 姓名 班级 学号 1、 选择题(共10题,每小题2分,共20分) 1、 关于宏定义说法错误的是 。 A、 宏替换的操作是在预编译时进行的。 B、 宏定义时宏名必须要用大写,以此来区分变量名。 C、 定义宏时以#define打头。 D、 宏定义可以带参数,也可以不带参数。 A、 【答案】B 【解析】宏定义时宏名通常用大写,以此来区分变量名。故选B。 2、 若有定义如下,则下面说法错误的是 。 #define N 5 #define M N*10 #define L L+N*M #define LONG “this is a very long string\ that is used as an example” A、 N、M、L、LONG都是宏名,代表后面的单词串 B、 LONG定义中,”\”表示续行符,当单词串太长,使用续行符可分对行书写。 C、 在编译预处理时,宏M被5*10替换。 D、 宏L定义是正确,宏可以递归定义 【答案】D 【解析】D选项中,宏不可以递归定义,但是可以嵌套定义。故选D。 3、 若有语句如下,输出结果是 。 #define LIN 12345 printf(“LIN”); A、12345 B、 “12345” C、 LIN D、 定义出错,无法输出 原创精品资源学科网独家享有版权,侵权必究! 【答案】C 【解析】C语言中双引号括起来的是字符串,不作为宏进行替换。故选C。 4、 下列关于条件编译正确是 。 A、 if后面的条件必须是常量表达式,通常会用到宏名,条件可以不加括号()。 B、 在使用了#if、#ifdef、#ifndef后,#endif语句可写可不写。 C、 #elif和#else语句必须要有。 D、 #ifned...#endif形式,如果宏名被#define行定义,则编译#ifned下的程序段。 【答案】A 【解析】B选项,在使用了#if、#ifdef、#ifndef后,必须以#endif命令结尾;C选项,#elif和#else语句可以没有;D选项,D、#ifned...#endif形式,如果宏名没有被#define行定义,才编译#ifned下的程序段。故选A。 5、 在宏定义#define NUM 123.56中,宏名NUM代替的是 。 A、 单词串 B、float型数据 C、double 型数据 D、常量 【答案】A 【解析】宏名代替后面的单词串。故选A 6、 若有以下定义,则输出结果是 。 #define N 3 #define M(x) (N+x*2) printf(“%d”,M(N*2)+3); A、12 B、15 C、18 D、语句有错 【答案】C 【解析】宏M被3+3*2*2替换,算出结果后在加3,最终结果为18。故选C。 7、 若有以下定义,则输出结果是 。 #define MOD(x,y) x%y int a=-7,b=26,z; z=MOD(a,b); printf(“%d”,++z); A、6 B、-4 C、8 D、-6 【答案】D 【解析】-7%26=-7,-7+1=-6。故选D。原创精品资源学科网独家享有版权,侵权必究! 8、 若有以下定义,则输出结果是 。 #define Y 5 #ifndef Y int a=-5; printf(“%d”,a>>1); #else printf(“Y==5”); #endif A、 -3 B、-2 C、Y==5 D、无法确定值 【答案】C 【解析】#ifndef...#endif形式,如果宏名没有被#define行定义,才编译#ifndef下的程序段,所以执行#else后的程段,结果为Y==5。故选C。 9、 若有以下定义,则输出结果是 。 #define LIN 5 #ifdef LIN printf("%d",strlen("ab\08\abce")); #else printf("%d",sizeof("ab\08\abce")); #endif } A、8 B、2 C、9 D、无法确定值 【答案】B 【解析】#ifdef...#endif形式,#ifdef如果宏名被#define行定义,执行#ifdef下的程序段,strlen返回字符串长度,遇到’\0’结束。故选B。 10、 若有以下定义,则输出结果是 。 #define N 2 #define M(x) N<<1+x int y=3; printf("%d",M(y/2)-1); A、4 B、5 C、7 D、8 【答案】C 【解析】宏M被2<<1+3/2替换,运算符+的优先级高于<<,得到结果8后,再减1得7。故选C。原创精品资源学科网独家享有版权,侵权必究! 原创精品资源学科网独家享有版权,侵权必究! 二、填空题(共6空,每空2分,共12分) 1、条件编译必须以 命令结束。 【答案】#endif 2、 预处理命令必须以 开头。能以 命令终止宏的作用域。 【答案】# #undef 3、 若有以下宏定义: #define F(a,b,c) a+b*c int a=1,b=2,c=3,s; s=F(++a,a+b++,b+c);则s值为 。 【答案】11 4、 #if和#elif常常与 命令配合使用。 【答案】defined 5、 若有以下宏定义: #define X 10 #define Y (X+1)*3 int a=Y+1; printf(“%d”,a--); 则输出结果为 。 【答案】34 三、程序运行题(共6题,每小题3分,共18分) 1、以下程序的运行结果是 。 #include<stdio.h> #define N 20 #define L N*2+5 void main() { if(!(N%2)) printf("%d",N+1); printf("%d ",L+N) } 【答案】2165 2、以下程序的运行结果是 。 #include<stdio.h> #define PR(x,y) printf("%d,%d,",x,y) void main() { int *p1, *p2,*p3; int x=12,y=6; p2=&x,p3=&y; if(*p2>*p3){p1=p2,p2=p3,p3=p1;} PR(x,y); PR(*p2,*p3); } 【答案】12,6,6,12, 6、 以下程序的运行结果是 。 #include<stdio.h> #define MAX(x,y) x>y?"yes":"no" #define PR(x) printf("result=%s ",x) void main() { int x=30; unsigned y=-30; PR(MAX(x,y)); } 【答案】result=no 4、以下程序的运行结果是 。 #include<stdio.h> #define AND + void main( ) { int a=15,b=20; #define OK 1 #ifdef OK a=3; if(OK!=a) printf("%d,",a AND b); #else a=1;b=21; if(a==OK) b=b AND 1; printf(“%d,”,b); #endif原创精品资源学科网独家享有版权,侵权必究! printf("%d ",b); } 【答案】23,20 5、以下程序的运行结果是 。 #include<stdio.h> #include<ctype.h> #define LEN 1 void main() { char str[30]="bs12UDR154xsfB"; int i,count1=0,count2=0; for(i=0;str[i]!='\0';i++) { #if LEN if(isalpha(str[i])) count1++; #else if(str[i]>='0'&&str[i]<='9') count2++; #endif } printf("count1=%d,count2=%d ",count1,count2); } 【答案】count=9,count=0 6、 以下程序的运行结果是 。 #include<stdio.h> #define N 3 #define M(x) N*x+1 void fun(int *a,int n) { int i; for(i=0;i<5;i++) a[i]=i+M(i); } void main() { int a[5]={1,2,3,4,5},i; fun(a,5); for(i=0;i<5;i++)原创精品资源学科网独家享有版权,侵权必究! printf("%4d",*(a+i)); } 【答案】1 5 9 13 17 四、程序填空题(共6空,每空5分,共30分) 1、程序功能:求a,b,c的最大值,并输出。请填空。 #include<stdio.h> //宏定义参数为a,b #define PRINT(X) printf(“max=%d”,X) void main() { int a,b,c,max; scanf(“%d,%d,%d”,&a,&b,&c); max= max=MAX(max,c); ; //输出最大值max } 【答案】#define MAX(a,b) a>b?a:b MAX(a,b); PRINT(max) 2、 程序功能:如果条件为真,则求x,y两数的和,否则求x,y两数的余数。请填空。 #include<stdio.h> #define INT 1 #define ADD(a,b) a+b #define MOD(a,b) a%b void main() { int a,b,s,y; scanf("%d,%d",&a,&b); INT==1 s=ADD(a,b); printf("s=%d ",s); #else y= ; printf("y=%d ",y);原创精品资源学科网独家享有版权,侵权必究! } 【答案】#if MOD(a,b) #endif 五、程序改错题(共20分) 1、程序功能:输出字符数组str中出现数字字符和字母字符的个数。请在找出错误语句,并写出完整的正确语句。(找出错误2分,改正错误3分) L1 #include<stdio.h> L2 #define N 30; L3 void main() L4 { char str[N]; L5 int i=0,count1=0,count2=0; L6 gets(str); L7 while(*(str+i)!='\0') L8 { if(str[i]>='0'&&str[i]<='9') count1++; L9 if(str[i]>='A'&&str[i]<='Z'&&str[i]>='a'&&str[i]<='z') count2++; L10 i++; } L11 printf("count1=%d,count2=%d ",count1,count2); } 【答案】 L2 #define N 30 L9 if(str[i]>='A'&&str[i]<='Z'||str[i]>='a'&&str[i]<='z') count2++; 2、程序功能:利用宏定义,给一维数组a元素赋值为奇数数列,从1开始。请在找出错误语句,并写出完整的正确语句。(找出错误2分,改正错误3分) L1 #include<stdio.h> L2 #define N 10 L3 #define JS(x) x*2+1 L4 #define PRINT(Y) printf("%4d",a[i]) L5 void main() L6 { int a[N],i; L7 for(i=0;i<N;i++) L8 a[i]=JS; L9 for(i=0;i<N;i++) L10 PRINT(a[i]); }原创精品资源学科网独家享有版权,侵权必究! 【答案】L4 #define PRINT(Y) printf("%4d",Y) L8 a[i]=JS(i); 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $$

资源预览图

第十章 预处理命令《C语言程序设计教程》(清华大学出版社第三版) 章节关过卷
1
第十章 预处理命令《C语言程序设计教程》(清华大学出版社第三版) 章节关过卷
2
第十章 预处理命令《C语言程序设计教程》(清华大学出版社第三版) 章节关过卷
3
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。