第九章编译预处理 9.1选择题 【题9.1】以下叙述中不正确的是 A)预处理命令行都必须以#号开始 B)在程序中凡是以#号开始的语句行都是预处理命令行 C)C程序在执行过程中对预处理命令行进行处理 D)以下是正确的宏定义 #define Ibm pc 【题9.2】以下叙述中正确的是 A)在程序的一行上可以出现多个有效的预处理命令行 B)使用带参的宏时,参数的类型应与宏定义时的一致 C)宏替换不占用运行时间,只占编译时间 D)在以下定义中CR是称为“宏名”的标识符 #define c r 045 【题9.3】请读程序: #define ADd (x)x+x tm=1,n=2,k=3; int sumFADD(m+n)*k printf(“su 上面程序的运行结果是 A) sum=9 B) sum=10 C) sum=12 D) sum=1 【题9.4】以下程序的运行结果是 #define MIN (x, y)(x)<(y)?(x): (y) ma nti=10,j=15,k k=10=*MIN (i, j) printf(“%d\n”,k) A)10 B)15 C)100 D)150 【题9.5】在宏定义# define pi3.14159中,用宏名PI代替一个 A)常量B)单精度数C)双精度数D)字符串
第九章 编译预处理 9.1 选择题 【题 9.1】以下叙述中不正确的是 。 A) 预处理命令行都必须以#号开始 B) 在程序中凡是以#号开始的语句行都是预处理命令行 C) C 程序在执行过程中对预处理命令行进行处理 D) 以下是正确的宏定义 #define IBM_PC 【题 9.2】以下叙述中正确的是 。 A) 在程序的一行上可以出现多个有效的预处理命令行 B) 使用带参的宏时,参数的类型应与宏定义时的一致 C) 宏替换不占用运行时间,只占编译时间 D) 在以下定义中 C R 是称为“宏名”的标识符 #define C R 045 【题 9.3】请读程序: #define ADD(x) x+x main() { int m=1,n=2,k=3; int sum=ADD(m+n)*k; printf(“sum=%d”,sum); } 上面程序的运行结果是 。 A)sum=9 B)sum=10 C)sum=12 D)sum=18 【题 9.4】以下程序的运行结果是 。 #define MIN(x,y) (x)<(y)?(x):(y) main() { int i=10,j=15,k; k=10*MIN(i,j); printf(“%d\n”,k); } A)10 B)15 C)100 D)150 【题 9.5】在宏定义#define PI 3.14159 中,用宏名 PI 代替一个 。 A)常量 B)单精度数 C)双精度数 D)字符串
【题9.6】以下程序的运行结果是 include <stdio. h> #define Fudge(y) 2.84+y # define pr(a) printf(“%d”,(int)(a) #define PRINTl(a) PR(a): putchar('n main PRINTI (FUDGE (5)*x) A)11 B)12 C)13 D)15 【题9.7】以下有关宏替换的叙述不正确的是_。 A)宏替换不占用运行时间 B)宏名无类型 C)宏替换只是字符替换 D)宏名必须用大写字母表示 【题9.8】C语言的编译系统对宏命令的处理是_ A)在程序运行时进行的 B)在程序连接时进行的 C)和C程序中的其它语句同时进行编译的 D)在对源程序中其它成份正式编译之前进行的 【题9.9】若有宏定义如下: #define x 5 #define y x+1 #define Z y=*X/2 则执行以下 printf语句后,输出结果是 printf(“%d\n”,Z) printf(“%dn A)7 B)1 C)12 D)7 5 5 【题9.10】若有以下宏定义如下: #definen 2 #define y(n)((N+1)*n) 则执行语句z=2*(N+Y(5);后的结果是 A)语句有错误 B)z=34C)z=70D)z无定值 【题9.11】若有宏定义:# define mod(x,y)x%y 则执行以下语句后的输出为 intz,a=15,b=100 z=MOD(b, a) printf(“%d\n”,z++)
【题 9.6】以下程序的运行结果是 。 #include <stdio.h> #define FUDGE(y) 2.84+y #define PR(a) printf(“%d”,(int)(a)) #define PRINT1(a) PR(a); putchar(‘\n’) main() { int x=2; PRINT1(FUDGE(5)*x); } A)11 B)12 C)13 D)15 【题 9.7】以下有关宏替换的叙述不正确的是 。 A)宏替换不占用运行时间 B)宏名无类型 C)宏替换只是字符替换 D)宏名必须用大写字母表示 【题 9.8】C 语言的编译系统对宏命令的处理是 。 A) 在程序运行时进行的 B) 在程序连接时进行的 C) 和 C 程序中的其它语句同时进行编译的 D) 在对源程序中其它成份正式编译之前进行的 【题 9.9】若有宏定义如下: #define X 5 #define Y X+1 #define Z Y*X/2 则执行以下 printf 语句后,输出结果是 。 int a; a=Y; printf(“%d\n”,Z); printf(“%d\n”,--a); A)7 B)12 C)12 D)7 6 6 5 5 【题 9.10】若有以下宏定义如下: #define N 2 #define Y(n) ((N+1)*n) 则执行语句 z=2*(N+Y(5));后的结果是 。 A)语句有错误 B)z=34 C)z=70 D)z 无定值 【题 9.11】若有宏定义:#define MOD(x,y) x%y 则执行以下语句后的输出为 。 int z,a=15,b=100; z=MOD(b,a); printf(“%d\n”,z++);
A)11 B)10 C)6 D)宏定义不合法 【题9.12】以下程序的运行结果是 #define MAX(A, B)(A)>(B)?(A): (B) # define print(Y) printf(“Y=%d\t”,Y main( nta=1,b=2,c=3,d=4,t t=MAX(a+b, c+d) PRINT (t) A)Y=3B)存在语法错误C)Y=7D)Y=0 【题9.13】以下程序段中存在错误的是 A)#define array size 100 int array [array size] B) #define pi 3. 141 59 #define S(r) PI*(r)*(r) (3.2) c) #define pi 3. 1415 9 #define S(r) Pl=(r)*(r) area=s(a+b) D) #define pi 3. 14159 #define S(r) PI*(r)*(r) area=S(a) 【题9.14】请读程序 #include <stdio. h> #define MUL (x, y)(x)* maino int a=3, b=4.c c=MUL(a++, b++) printf(“%d\n”,c) 上面程序的输出结果是 A)12 【题9.15】# define能作简单的替代,用宏替代计算多项式4*x*x+3*x+2之值的函数f,正 确的宏定义是 A)#define f(x)4*x*x+3*x+2
A)11 B)10 C)6 D)宏定义不合法 【题 9.12】以下程序的运行结果是 。 #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); } A)Y=3 B)存在语法错误 C)Y=7 D)Y=0 【题 9.13】以下程序段中存在错误的是 。 A) #define array_size 100 int array1[array_size]; B) #define PI 3.14159 #define S(r) PI*(r)*(r) … area=S(3.2); C) #define PI 3.14159 #define S(r) PI*(r)*(r) … area=S(a+b); D) #define PI 3.14159 #define S(r) PI*(r)*(r) … area=S(a); 【题 9.14】请读程序: #include <stdio.h> #define MUL(x,y) (x)*y main() { int a=3,b=4,c; c=MUL(a++,b++); printf(“%d\n”,c); } 上面程序的输出结果是 。 A)12 B)15 C)20 D)16 【题 9.15】#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*a*a+3*a+2)f(a) 【题9.16】对下面程序段: 3 #define B(a)((A+1)*a) 3*(A+B(7)) 正确的判断是 )程序错误,不许嵌套宏定义 B)x=93 D)程序错误,宏定义不许有参数 【题9.17】以下程序中,第一个输出值是(1) 第二个输出值是(2) #define m 3 #define N (M+1) #define nn n*N/2 ino rinf(“%d\n” printf(“%d”,5*NN) 【1】A)3B)4C)6D)8 【2】A)17B)18C)30D)40 【题9.18】以下程序的输出结果为 #include <stdio. h> #define F(y)3.84+y # define pr(a) printf(“%d”,(int)(a) #define print(a) PR(a): putchar('\n main RINT (F(3)*x) B)9 【题9.19】以下程序的输出结果为 #define pt 5. 5 #define S(x) PT=*xa*x
B) #define f 4*x*x+3*x+2 C) #define f(a) (4*a*a+3*a+2) D) #define (4*a*a+3*a+2) f(a) 【题 9.16】对下面程序段: #define A 3 #define B(a) ((A+1)*a) … x=3*(A+B(7)); 正确的判断是 。 A) 程序错误,不许嵌套宏定义 B) x=93 C) x=21 D) 程序错误,宏定义不许有参数 【题 9.17】以下程序中,第一个输出值是(1) ,第二个输出值是(2) 。 #include <stdio.h> #define M 3 #define N (M+1) #define NN N*N/2 main() { printf(“%d\n”,NN); printf(“%d”,5*NN); } 【1】A)3 B)4 C)6 D)8 【2】A)17 B)18 C)30 D)40 【题 9.18】以下程序的输出结果为 。 #include <stdio.h> #define F(y) 3.84+y #define PR(a) printf(“%d”,(int)(a)) #define PRINT(a) PR(a); putchar(‘\n’) main() { int x=2; PRINT(F(3)*x); } A)8 B)9 C)10 D)11 【题 9.19】以下程序的输出结果为 。 #define PT 5.5 #define S(x) PT*x*x main()
int a=l, b=2 printf(“%4.lfln”,S(a+b)) A)12.0 B)9.5 C)12.5D)33.5 【题9.20】以下在任何情况下计算平方数时都不会引起二义性的宏定义是 A)#define pOWer (x)x*x B)#define pOWer (x)(x)=(x) C)#define POWER (x)(x*x) D)#define POWER (x)((x)*(x)) 【题9.21】在“文件包含”预处理语句的使用形式中,当# include后面的文件名用“”(双 引号)括起时,寻找被包含文件的方式是 A)直接按系统设定的标准方式搜索目录 B)先在源程序所在目录搜索,再按系统设定的标准方式搜索 C)仅仅搜索源程序所在目录 D)仅仅搜索当前目录 【题9.22】在“文件包含”预处理语句的使用形式中,当# include后面的文件名用<>(尖 括号)括起时,寻找被包含文件的方式是 A)仅仅搜索当前目录 B)仅仅搜索源程序所在目录 C)直接按系统设定的标准方式搜索目录 D)先在源程序所在目录搜索,再按系统设定的标准方式搜索 【题9.23】请读程序: #define letter o char str[20]=“ C Language”,c hile(c=str[i])!=“\0’) #if letter f(c>=‘a'&&c<=‘z’) c=c-32 if(c≥=‘A’&&c<=‘Z’) #endif printf(“%c”,c)
{ int a=1,b=2; printf(“%4.1f\n”,S(a+b)); } A)12.0 B)9.5 C)12.5 D)33.5 【题 9.20】以下在任何情况下计算平方数时都不会引起二义性的宏定义是 。 A) #define POWER(x) x*x B) #define POWER(x) (x)*(x) C) #define POWER(x) (x*x) D) #define POWER(x) ((x)*(x)) 【题 9.21】在“文件包含”预处理语句的使用形式中,当#include 后面的文件名用“ ”(双 引号)括起时,寻找被包含文件的方式是 。 A) 直接按系统设定的标准方式搜索目录 B) 先在源程序所在目录搜索,再按系统设定的标准方式搜索 C) 仅仅搜索源程序所在目录 D) 仅仅搜索当前目录 【题 9.22】在“文件包含”预处理语句的使用形式中,当#include 后面的文件名用< >(尖 括号)括起时,寻找被包含文件的方式是 。 A) 仅仅搜索当前目录 B) 仅仅搜索源程序所在目录 C) 直接按系统设定的标准方式搜索目录 D) 先在源程序所在目录搜索,再按系统设定的标准方式搜索 【题 9.23】请读程序: #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; #endif printf(“%c”,c);