任务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();}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$$