第8章 编译预处理
8-1 选择题:
1.在“文件包含”预处理语句的使用形式中,当#include后面的文件名用尖括号括起来时,寻找被包含文件的方式是——。 A.直接在系统设定的标准目录中搜索
B.先在当前目录中搜索,若不存在,再到系统设定的标准目录中搜索
C
D.仅仅搜索源程序所在目录
2.以下关于预处理的叙述不正确的是——。 A.C源程序中凡是以“”号开始的控制行都是预处理命令行
B.预处理命令行必须位于源程序的开始部位
C.一条有效的预处理命令必须单独占据一行
D.预处理命令是在正式编译之前先行被处理的.以下关于文件包含的描述正确的是——。 A.每个C程序必须包含预处理命令:#include
B.#include后面的文件名用双引号(" ")引起来和尖括号(<>)括起来完全等效
C.#include命令行可以出现在源程序中需要的任何地方
D.用#include所包含的文件称为头文件,必须以.h作为扩展名
.以下有关宏替换的叙述不正确的是——。 A.宏名不具有类型 B.宏名必须用大写字母表示
C.宏替换只是字符替换 D.宏替换不占用运行时间
.C语言的编译系统对宏命令的处理是——。 A.在对源程序中其他成分正式编译之前进行的B.在程序连接时进行的
C.和C程序中的其他语句同时进行的D.在程序运行时进行的
"string" B)#include stdio.h
C)#include"string.h"D)#define PI 3.1415926;
12.有宏定义如下:
#define F(x)2*x
那么表达式F(2+3)的值是( )
A)10B)9C)8D)7
13.有宏定义及语句如下:
#define N 3
#define Y(x) ((N+1)*x)
Z=2*(N+Y(5+1));那么,变量Z的最终取值是( )
A)38B)42C)48D)52
14.设有宏定义命令:#define MUL 2+3,则表达式5+MUL%5.0的值为( )
A)50.0B)30.0C)22.0D)20.0
15.设有宏定义:#define M(x,y) x
A)15B)-15C)11 D)-11
16. 有以下程序,其程序的输出结果是( )
#define H1 5
#define H2 H1+1
#define H3 H2*H2/2
main()
{int s=0,k=H3;
while(k--)s++;
pfintfi("%d\n "',s);
}
A)30B)10C)29D)19
17. 若有以下宏定义:
#define STR "%d,%c"
#define A 97
已知字符'a'的ASCII码值为97,则语句printf(STR,A,A+2);的输出结果为____。
A. 97,a B. 97,b C. 97,c D. 97,d
18. 以下程序的输出结果是____。
#define M(x,y,z) x*y+z
main()
{ int a=1,b=2,c=3;
printf("%d\n",M(a+b,b+c,c+a));
}
A. 19 B. 17 C. 15 D. 12
19. 下列程序执行后的输出结果为____。
#define MA(x) x*(x-1)
main()
{ int a=1,b=2;
printf("%d\n",MA(1+a+b));
}
A. 6 B. 8 C. 10 D. 12
8-2 填空题
1.每一条编译预处理命令,都必须以_____________符号开头。
2.__________编译预处理命令用于取消一个宏名的作用。
3.__________编译预处理命令把一个源文件嵌入到另一个源文件中。
4.如果程序中使用数学函数,如三角函数、开方函数等,则必须在程序开始使用文件包含命令_________________。
5.在进行宏定义时,可以引用已经______________的宏名。
6.利用宏来计算正方体体积,若宏名为V0L,形式参数为x,那么该宏的定义应该写为____________。
7. 下面程序的执行结果_______________。
#