任务30:编译预处理 《编程语言-C语言》45分钟专题训练

| 2份
| 25页
| 70人阅读
| 2人下载

内容正文:

湖南省职教高考《编程语言—C语言》45分钟专题训练专辑,共43份试卷。试卷命题与高考紧密相关,精选具有代表性和典型性的高考常考题。旨在帮助学生系统地复习和巩固计算机类理论知识,熟悉高考题型和命题规律,提高解题能力和应试技巧,为高考取得优异成绩打下坚实的基础,本训练卷适用于即将参加计算机类高考的学生。与本专辑配套的还有湖南省职教高考《计算机应用基础》《计算机组装与维护》《计算机网络技术》45分钟专题训练专辑,欢迎同学和老师们下载使用。 《编程语言—C语言》 项目六: 编译预处理 第30卷: 编译预处理 时间:45分钟 总分:100分 班级___________ 姓名__________ 学号__________ 成绩________ 一、选择题(共23小题,每小题2分,共46分) 1.下列有关编译预处理的叙述中,不正确的一项是( ) A.预处理命令行只能位于源程序中所有语句之前 B.一条有效的预处理命令必须单独占据一行 C.预处理命令行必须以#开始 D.预处理命令不是C语言本身的组成部分 【答案】A 2.以下关于宏的叙述中,正确的一项是( ) A.宏名必须要使用大写字母来表示 B.宏替换时要进行语法检查 C.宏替换不占用运行时间,但占用编译时间 D.宏定义中不允许引用已有的宏名 【答案】C 3.下列有关编译预处理命令的叙述中,正确的一项是( ) A.在程序的一行上可以出现多个有效的预处理命令行 B.使用带参的宏时,参数的类型应该与宏定义时的一致 C.宏替换不占用运行时间,只占用编译时间 D.宏替换占用运行时间,不占用编译时间 【答案】C 4.下列有关宏替换的叙述中,不正确的一项是( ) A.宏替换不占用运行时间 B.宏名无类型 C.宏替换只是字符替换 D.宏名必须用大写字母表示 【答案】D 5.C语言的编译系统对宏命令的处理是( ) A.在程序运行时进行 B.在程序连接时进行 C.和C程序中的其他语句同时进行编译的 D.在对源程序中其他成分正式编译之前进行的 【答案】D 6.在文件包含预处理命令的使用形式中,当#include后面的文件名用""(双引号)括起来时,寻找被包含文件的方式是( ) A.直接按照系统设定的标准方式搜索目录 B.先在源程序所在目录搜索,再按系统设定的标准方式搜索 C.仅搜索源程序所在目录 D.仅搜索当前目录 【答案】B 7.执行以下程序段的输出结果是( ) #define ADD(x) x+x main( ) {int m=1,n=2,k=3; int sum=ADD(m+n)*k; printf("sum= %d",sum);getch();} A.sum=9 B.sum=10 C.sum=12 D.sum=18 【答案】B 8.执行以下程序段的输出结果是( ) #define M(x,y,z) x*y+z main() {int a=1,b=2,c=3; printf("%d ",M(a+b,b+c,c+a)); getch();} A.12 B.15 C.17 D.19 【答案】A 9.执行以下程序段的输出结果是( ) #define MIN(x,y) (x)<(y)?(x):(y) main( ) {int i=10,j=15,k; k=10*MIN(i,j); printf("%d ",k); getch();} A.10 B.15 C.100 D.150 【答案】B 10.在宏定义:#define PI 3.1415926中,宏名PI代替的是一个( ) A.常量 B.单精度数 C.双精度数 D.字符串 【答案】D 11.执行以下程序段的输出结果是( ) #define X 5 #define Y X+1 #define Z Y*X/2 main( ) { int a;a=Y; printf("%d,",Z); printf("%d",--a);getch();} A.7,6 B.7,5 C.12,6 D.12,5 【答案】B 12.执行以下程序段的输出结果是( ) #define N 2 #define Y(n) ((N+1)*n) main( ) { printf("%d",2*(N+Y(5))); getch();} A.34 B.35 C.70 D.68 【答案】A 13.执行以下程序段的输出结果是( ) #define MOD(x,y) x%y main( ) { int z,a=15,b=100; z=MOD(b,a); printf("%d",++z); getch();} A.6 B.8 C.10 D.11 【答案】D 14.执行以下程序段的输出结果是( ) #define MAX(A,B) (A)>(B)?(A):(B) #define PRINT(Y) printf("Y=%d\t",Y) main( ) { int a=1,b=2,c=3,d=4,t; t=MAX(a+b,c+d); PRINT(t); getch();} A.Y=0 B.Y=1 C.Y=3 D.Y=7 【答案】D 15.以下程序段中存在错误的是( ) A.#define array 100 int array1[array]; B.#define PI 3.1415926 #define S(r) PI*(r)*(r) ……area=S(a+b); C. #define PI 3.1415926 #define S(r) PI*(r)*(r) ……area=S(3.0); D. #define PI 3.1415926 #define S (r) PI*(r)*(r) ……area=S(b); 【答案】D。注意宏名的命名。 16.执行以下程序段的输出结果是( ) #define MUL(x,y) (x)*y main( ) { int a=3,b=4,c; c=MUL(a++,b++); printf("%d ",c); getch();} A.12 B.15 C.16 D.20 【答案】A 17.#define能做简单的替代,用宏替换计算多项式:4*x*x+3*x+2的值的函数f,正确的宏定义是( ) A.#define f(x) 4*x*x+3*x+2 B.#define f 4*x*x+3*x+2 C.#define f(a) (4*a*a+3*a+2) D.#define 4*x*x+3*x+2 f(x) 【答案】C 18.执行以下程序段的输出结果是( ) #define A 3 #define B(a) ((A+1)*a) main() {printf("%d",3*(A+B(7))); getch();} A.21 B.93 C.105 D.28 【答案】B 19.执行以下程序段的输出结果是( ) #define M 3 #define N (M+1) #define NN N*N/2 main() {printf("%d",NN); getch();} A.3 B.4 C.6 D.8 【答案】D 20.执行以下程序段的输出结果是( ) #define M 4 #define N M+1 #define NN N*(N/2) main() {printf("%d",NN*6); getch();} A.28 B.11 C.120 D.30 【答案】A 21.执行以下程序段的输出结果是( ) #define PT 5.5 #define S(x) PT*x*x main( ) {float a=1,b=2; printf("%4.2f ",S(a+b)); getch();} A.12.00 B.9.50 C.12.50 D.33.50 【答案】B 22.以下在任何情况下计算平方数时都不会引起二义性的宏定义是( ) A.#define power(x) x*x B.#define power(x) (x)*(x) C.#define power(x) (x*x) D.#define power(x) ((x)*(x)) 【答案】D 23.执行以下程序段的输出结果是( ) #define H1 5 #define H2 H1*2 #define H3 H1*3 main() {int n; n=H3+H2; printf("%d",n); getch();} A.15 B.20 C.25 D.30 【答案】B 二、程序运行结果题(本题共7小题,每题3分,共21分) 24.以下程序的运行结果是( ) #include <stdio.h> #include<conio.h> #define FUDGE(y) 2.84+y #define PR(a) printf("%d",(int)(a)) #define PRINT1(a) PR(a);putchar(' ') main( ) { int x=2; PRINT1(FUDGE(5)*x); getch();} 【答案】12 25.以下程序的运行结果是( ) #include <stdio.h> #include<conio.h> #define LETTER 0 main( ) {char str[20]="C Language",c; int i; i=0; while((c=str[i])!='\0') {i++; if(LETTER) if(c>='a'&&c<='z')c=c-32; else if(c>='A'&&c<='Z')c=c+32; printf("%c",c);} getch();} 【答案】C Language 26.以下程序的运行结果是( ) #include <stdio.h> #include<conio.h> #define EXCH(a,b) {int t;t=a;a=b;b=t;} main( ) {int x=5,y=9; EXCH(x,y); printf("x=%d,y=%d ",x,y); getch();} 【答案】x=9,y=5 27.以下程序的运行结果是( ) #include <stdio.h> #include<conio.h> #define POWER(x) ((x)*(x)) main( ) {int i=1; while(i<=4) printf("%d ",POWER(i++)); printf(" "); getch();} 【答案】1 9 28.以下程序的运行结果是( ) #include <stdio.h> #include<conio.h> #define MAX(a,b,c) ((a)>(b)?((a)>(c)?(a):(c)):((b)>(c)?(b):(c))) main( ) {int x,y,z; x=1;y=2;z=3; printf("%d,",MAX(x,y,z)); printf("%d,",MAX(x+y,y,y+x)); printf("%d ",MAX(x,y+z,z)); getch();} 【答案】3,3,5 29.以下程序的运行结果是( ) #include <stdio.h> #include<conio.h> #define SELECT(a,b) a<b?a:b main( ) { int m=2,n=4; printf("%d ",SELECT(m,n)); getch();} 【答案】2 30.以下程序的运行结果是( ) #include <stdio.h> #include<conio.h> #define PR(ar) printf("%d",ar) main( ) { int j,a[ ]={1,3,5,7,9,11,13,15},i=5; for(j=3;j;j--) {switch(j) {case 1: case 2:PR(a[i++]);break; case 3:PR(a[--i]); }} getch();} 【答案】9911 三、阅读程序,修改程序中的错误,不得增行或删行,也不得更改程序结构。请指出错误代码所在的行号,并给出该行修改后的程序代码。每处3分,共9分) 31.下列程序的功能是:通过带参宏实现两个整数互换,并利用它将一维数组a和b的值进行交换。程序中有三处错误,请改正。 L1 #include <stdio.h> L2 #define N 10.0 L3 #define swap(x,y) int t;t=x;x=y;y=t; L4 main( ) L5 { int i,a[N],b[N]; L6 for(i=0;i<N;i++) L7 scanf("%d",&a[i]); L8 for(i=0;i<N;i++) L9 scanf("%d",&b[i]); L10 for(i=0;i<N;i++) L11 swap(b[i]); L12 for(i=0;i<N;i++) L13 printf("%d",a[i]); L14 printf(" "); L15 for(i=0;i<N;i++) L16 printf("%d",b[i]); L17 getch();} 答案: L2 #define N 10 L3 #define swap(x,y) {int t;t=x;x=y;y=t;} L11 swap(a[i],b[i]); 四、程序填空。按照题目要求,将正确的内容填入相应位置,使得程序完整(每空3分,共24分) 32.已知计算三角形面积的公式为: ,其中 ,这里a,b,c分别为三角形的三条边。请填空。 #include <【1】 > #include <stdio.h> #include<conio.h> #define S(a,b,c) 【2】 #define AREA(a,b,c) 【3】 main( ) { float a=3,b=4,c=5; printf("%.3f ",【4】); getch();} 答案:①math.h ②((a+b+c)/2) ③sqrt(S(a,b,c)*(S(a,b,c)-a)*(S(a,b,c)-b)*(S(a,b,c)-c)) ④AREA(a,b,c) 33.下列程序的功能是:从键盘输入一行电报字符,通过条件编译命令来控制是产生明文输出程序还是密文输出程序,所谓密文是指将所有字母循环顺移一个位置,即a变成b,b变成c……。请填空。 #include <stdio.h> #include<conio.h> #define CHANGE 【1】 main() {char str[20]; int i=0; printf("请输入字符串:"); scanf("%s",str); if(CHANGE) while(【2】) {if((str[i]=='Z')||(str[i]=='z')) str[i]=【3】; else if(【4】) str[i]=str[i]+1; i++;} printf("结果为:%s ",str); getch();} 答案:①1 ②str[i]!='\0' ③str[i]-25 ④(str[i]>='a')&&(str[i]<'z')||(str[i]>='A')&&(str[i]<'Z') 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $$ 湖南省职教高考《编程语言—C语言》45分钟专题训练专辑,共43份试卷。试卷命题与高考紧密相关,精选具有代表性和典型性的高考常考题。旨在帮助学生系统地复习和巩固计算机类理论知识,熟悉高考题型和命题规律,提高解题能力和应试技巧,为高考取得优异成绩打下坚实的基础,本训练卷适用于即将参加计算机类高考的学生。与本专辑配套的还有湖南省职教高考《计算机应用基础》《计算机组装与维护》《计算机网络技术》45分钟专题训练专辑,欢迎同学和老师们下载使用。 《编程语言—C语言》 项目六: 编译预处理 第30卷: 编译预处理 时间:45分钟 总分:100分 班级___________ 姓名__________ 学号__________ 成绩________ 一、选择题(共23小题,每小题2分,共46分) 1.下列有关编译预处理的叙述中,不正确的一项是( ) A.预处理命令行只能位于源程序中所有语句之前 B.一条有效的预处理命令必须单独占据一行 C.预处理命令行必须以#开始 D.预处理命令不是C语言本身的组成部分 2.以下关于宏的叙述中,正确的一项是( ) A.宏名必须要使用大写字母来表示 B.宏替换时要进行语法检查 C.宏替换不占用运行时间,但占用编译时间 D.宏定义中不允许引用已有的宏名 3.下列有关编译预处理命令的叙述中,正确的一项是( ) A.在程序的一行上可以出现多个有效的预处理命令行 B.使用带参的宏时,参数的类型应该与宏定义时的一致 C.宏替换不占用运行时间,只占用编译时间 D.宏替换占用运行时间,不占用编译时间 4.下列有关宏替换的叙述中,不正确的一项是( ) A.宏替换不占用运行时间 B.宏名无类型 C.宏替换只是字符替换 D.宏名必须用大写字母表示 5.C语言的编译系统对宏命令的处理是( ) A.在程序运行时进行 B.在程序连接时进行 C.和C程序中的其他语句同时进行编译的 D.在对源程序中其他成分正式编译之前进行的 6.在文件包含预处理命令的使用形式中,当#include后面的文件名用""(双引号)括起来时,寻找被包含文件的方式是( ) A.直接按照系统设定的标准方式搜索目录 B.先在源程序所在目录搜索,再按系统设定的标准方式搜索 C.仅搜索源程序所在目录 D.仅搜索当前目录 7.执行以下程序段的输出结果是( ) #define ADD(x) x+x main( ) {int m=1,n=2,k=3; int sum=ADD(m+n)*k; printf("sum= %d",sum);getch();} A.sum=9 B.sum=10 C.sum=12 D.sum=18 8.执行以下程序段的输出结果是( ) #define M(x,y,z) x*y+z main() {int a=1,b=2,c=3; printf("%d ",M(a+b,b+c,c+a)); getch();} A.12 B.15 C.17 D.19 9.执行以下程序段的输出结果是( ) #define MIN(x,y) (x)<(y)?(x):(y) main( ) {int i=10,j=15,k; k=10*MIN(i,j); printf("%d ",k); getch();} A.10 B.15 C.100 D.150 10.在宏定义:#define PI 3.1415926中,宏名PI代替的是一个( ) A.常量 B.单精度数 C.双精度数 D.字符串 11.执行以下程序段的输出结果是( ) #define X 5 #define Y X+1 #define Z Y*X/2 main( ) { int a;a=Y; printf("%d,",Z); printf("%d",--a);getch();} A.7,6 B.7,5 C.12,6 D.12,5 12.执行以下程序段的输出结果是( ) #define N 2 #define Y(n) ((N+1)*n) main( ) { printf("%d",2*(N+Y(5))); getch();} A.34 B.35 C.70 D.68 13.执行以下程序段的输出结果是( ) #define MOD(x,y) x%y main( ) { int z,a=15,b=100; z=MOD(b,a); printf("%d",++z); getch();} A.6 B.8 C.10 D.11 14.执行以下程序段的输出结果是( ) #define MAX(A,B) (A)>(B)?(A):(B) #define PRINT(Y) printf("Y=%d\t",Y) main( ) { int a=1,b=2,c=3,d=4,t; t=MAX(a+b,c+d); PRINT(t); getch();} A.Y=0 B.Y=1 C.Y=3 D.Y=7 15.以下程序段中存在错误的是( ) A.#define array 100 int array1[array]; B.#define PI 3.1415926 #define S(r) PI*(r)*(r) ……area=S(a+b); C. #define PI 3.1415926 #define S(r) PI*(r)*(r) ……area=S(3.0); D. #define PI 3.1415926 #define S (r) PI*(r)*(r) ……area=S(b); 16.执行以下程序段的输出结果是( ) #define MUL(x,y) (x)*y main( ) { int a=3,b=4,c; c=MUL(a++,b++); printf("%d ",c); getch();} A.12 B.15 C.16 D.20 17.#define能做简单的替代,用宏替换计算多项式:4*x*x+3*x+2的值的函数f,正确的宏定义是( ) A.#define f(x) 4*x*x+3*x+2 B.#define f 4*x*x+3*x+2 C.#define f(a) (4*a*a+3*a+2) D.#define 4*x*x+3*x+2 f(x) 18.执行以下程序段的输出结果是( ) #define A 3 #define B(a) ((A+1)*a) main() {printf("%d",3*(A+B(7))); getch();} A.21 B.93 C.105 D.28 19.执行以下程序段的输出结果是( ) #define M 3 #define N (M+1) #define NN N*N/2 main() {printf("%d",NN); getch();} A.3 B.4 C.6 D.8 20.执行以下程序段的输出结果是( ) #define M 4 #define N M+1 #define NN N*(N/2) main() {printf("%d",NN*6); getch();} A.28 B.11 C.120 D.30 21.执行以下程序段的输出结果是( ) #define PT 5.5 #define S(x) PT*x*x main( ) {float a=1,b=2; printf("%4.2f ",S(a+b)); getch();} A.12.00 B.9.50 C.12.50 D.33.50 22.以下在任何情况下计算平方数时都不会引起二义性的宏定义是( ) A.#define power(x) x*x B.#define power(x) (x)*(x) C.#define power(x) (x*x) D.#define power(x) ((x)*(x)) 23.执行以下程序段的输出结果是( ) #define H1 5 #define H2 H1*2 #define H3 H1*3 main() {int n; n=H3+H2; printf("%d",n); getch();} A.15 B.20 C.25 D.30 二、程序运行结果题(本题共7小题,每题3分,共21分) 24.以下程序的运行结果是( ) #include <stdio.h> #include<conio.h> #define FUDGE(y) 2.84+y #define PR(a) printf("%d",(int)(a)) #define PRINT1(a) PR(a);putchar(' ') main( ) { int x=2; PRINT1(FUDGE(5)*x); getch();} 25.以下程序的运行结果是( ) #include <stdio.h> #include<conio.h> #define LETTER 0 main( ) {char str[20]="C Language",c; int i; i=0; while((c=str[i])!='\0') {i++; if(LETTER) if(c>='a'&&c<='z')c=c-32; else if(c>='A'&&c<='Z')c=c+32; printf("%c",c);} getch();} 26.以下程序的运行结果是( ) #include <stdio.h> #include<conio.h> #define EXCH(a,b) {int t;t=a;a=b;b=t;} main( ) {int x=5,y=9; EXCH(x,y); printf("x=%d,y=%d ",x,y); getch();} 27.以下程序的运行结果是( ) #include <stdio.h> #include<conio.h> #define POWER(x) ((x)*(x)) main( ) {int i=1; while(i<=4) printf("%d ",POWER(i++)); printf(" "); getch();} 28.以下程序的运行结果是( ) #include <stdio.h> #include<conio.h> #define MAX(a,b,c) ((a)>(b)?((a)>(c)?(a):(c)):((b)>(c)?(b):(c))) main( ) {int x,y,z; x=1;y=2;z=3; printf("%d,",MAX(x,y,z)); printf("%d,",MAX(x+y,y,y+x)); printf("%d ",MAX(x,y+z,z)); getch();} 29.以下程序的运行结果是( ) #include <stdio.h> #include<conio.h> #define SELECT(a,b) a<b?a:b main( ) { int m=2,n=4; printf("%d ",SELECT(m,n)); getch();} 30.以下程序的运行结果是( ) #include <stdio.h> #include<conio.h> #define PR(ar) printf("%d",ar) main( ) { int j,a[ ]={1,3,5,7,9,11,13,15},i=5; for(j=3;j;j--) {switch(j) {case 1: case 2:PR(a[i++]);break; case 3:PR(a[--i]); }} getch();} 三、阅读程序,修改程序中的错误,不得增行或删行,也不得更改程序结构。请指出错误代码所在的行号,并给出该行修改后的程序代码。每处3分,共9分) 31.下列程序的功能是:通过带参宏实现两个整数互换,并利用它将一维数组a和b的值进行交换。程序中有三处错误,请改正。 L1 #include <stdio.h> L2 #define N 10.0 L3 #define swap(x,y) int t;t=x;x=y;y=t; L4 main( ) L5 { int i,a[N],b[N]; L6 for(i=0;i<N;i++) L7 scanf("%d",&a[i]); L8 for(i=0;i<N;i++) L9 scanf("%d",&b[i]); L10 for(i=0;i<N;i++) L11 swap(b[i]); L12 for(i=0;i<N;i++) L13 printf("%d",a[i]); L14 printf(" "); L15 for(i=0;i<N;i++) L16 printf("%d",b[i]); L17 getch();} 四、程序填空。按照题目要求,将正确的内容填入相应位置,使得程序完整(每空3分,共24分) 32.已知计算三角形面积的公式为: ,其中 ,这里a,b,c分别为三角形的三条边。请填空。 #include <【1】 > #include <stdio.h> #include<conio.h> #define S(a,b,c) 【2】 #define AREA(a,b,c) 【3】 main( ) { float a=3,b=4,c=5; printf("%.3f ",【4】); getch();} 33.下列程序的功能是:从键盘输入一行电报字符,通过条件编译命令来控制是产生明文输出程序还是密文输出程序,所谓密文是指将所有字母循环顺移一个位置,即a变成b,b变成c……。请填空。 #include <stdio.h> #include<conio.h> #define CHANGE 【1】 main() {char str[20]; int i=0; printf("请输入字符串:"); scanf("%s",str); if(CHANGE) while(【2】) {if((str[i]=='Z')||(str[i]=='z')) str[i]=【3】; else if(【4】) str[i]=str[i]+1; i++;} printf("结果为:%s ",str); getch();} 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $$

资源预览图

任务30:编译预处理  《编程语言-C语言》45分钟专题训练-第1页
1
任务30:编译预处理  《编程语言-C语言》45分钟专题训练-第2页
2
任务30:编译预处理  《编程语言-C语言》45分钟专题训练-第3页
3

由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。