第九章 编译预处理
1.下面叙述中不正确的是
A) 预处理命令行都必须以#号开始
B) 在程序中凡是以#号开始和语句行都是预处理命令行
C) C程序在执行过程中对预处理命令行进行处理
D) 以下是正确的宏定义
#define IBM_PC
2.以下叙述中正确的是
A) 程序的一行上可以出现多个有效的预处理命令行
B) 使用带参的宏时,参数的类型应与宏定义时的一致
C) 宏替换不占用运行时间,只占用编译时间
D) 在以下定义中C R是称为“宏名”的标识符
# define C R 045
3. 有关宏替换的叙述不正确的是
A)宏替换不占用运行时间 B)宏名无类型
C)宏替换只是字符替换 D)宏名必须用大写字母表示
4.C语言的编译系统对宏命令的处理是
A) 在程序运行时进行的
B) 在程序连接时进行的
C) 和C程序中的其它语句同时进行编译的
D) 在对源程序中其它成份正式编译之前进行的
5.在宏定义 #define PI 3.14159中 ,用宏名PI代替一个
A)单精度数 B)双精度数 C)常量 D)字符串
6.以下程序的输出结果是
A)9 B)6 C)36 D)18
#define f(x) x*x
main( )
{ int a=6 ,b=2 ,c ;
c=f(a) / f(b) ;
printf("%d \n",c);}
7.执行下面的程序后,a的值是
#define SQR(X) X*X
main( )
{ int a=10 ,k=2 ,m=1 ;
a/=SQR(k m)/SQR(k m);
printf("%d\n",a); }
A)10 B)1 C)9 D)0
8.以下说法中正确的是
A)#define和printf都是C语句
B)#define是C语句,而printf不是
C)printf是C语句,但#define不是
D)#define和printf都不是C语句
9.请读程序:
#include< stdio.h>
#define SUB(X,Y) (X) * Y
main()
{ int a=3,b=4;
printf("%d\n",SUB(a ,b ));}
上面程序的输出结果是
A)12 B)15 C)16 D) 20
10.请选出以下程序段的输出结果
#include<stdio.h>
#define MIN(x ,y) (x)<(y)? (x):(y)
main()
{ int i ,j ,k ;
i=10 ; j=15 ;
k=10*MIN(i ,j) ;
printf("%d\n" ,k) ;}
A)15 B)100 C)10 D)150
11.下列程序执行后的输出结果是
A)6 B)8 C)10 D)12
#define MA(x) x*(x-1)
main() { int a=1 ,b=2 ; printf("%d \n",MA(1 a b));}
12.请选出以下程序段的输出结果
#include<stdio.h>
#define MIN(x ,y) (x<y)? (x):(y)
main()
{ int i ,j ,k ;
i=10 ; j=15 ;
k=10*MIN(i ,j) ;
printf("%d\n" ,k) ;}
A)15 B)100 C)10 D)150
13.请选出以下程序段的输出结果
#include<stdio.h>
#define MIN(x ,y) (x<y? x:y)
main()
{ int i ,j ,k ;
i=10 ; j=15 ;
k=10*MIN(i ,j) ;
printf("%d\n" ,k) ;}
A)15 B)100 C)10 D)150
14.有如下程序
#define N 2
#define M N 1
#define NUM 2*M 1
main()
{ int i ;
for(i=1 ;i<=NUM ;i )printf("%d\n",i); }
该程序中的for循环执行的次数是
A)5 B)6 C)7 D)8
15.设有以下宏定义:
#define N 3
#define Y(n) ((N 1)*n)
则执行语句:z=2 *(N Y(5 1));后 ,z的值为
A)出错 B)42 C)48 D)54
16.以下程序运行后,输出结果是
A)49.5 B)9.5 C)22.0 D)45.0
#include<stdio.h>
#define PT 5.5
#define S(x) PT*x*x
main( )
{ int a=1 ,b=2 ;printf("%4.1f\n",S(a b)) ;}
17.阅读下列程序:
# include <stdio.h>
# define MAX_COUNT 4
void fun() ;
main()
{ int count ;
for (count=1 ;count<=MAX_COUNT ;count ) fun() ;}
void fun()
{ static int i ;
i =2 ; printf("%d" ,i) ;}
上述程序的输出结果是【 】。
18.在"文件包含"预处理语句的使用形式中,当#include后面的文件名用" "(双引号)括起来时,寻找包含文件的方式是
A) 直接按系统设定的标准方式搜索目录
B) 先在源程序所在目录搜索,再按系统设定的标准方式搜索
C) 仅仅搜索源程序所在目录
D) 仅仅搜索当前目录
19.以下正确的描述是
A) C语言的预处理功能是指完成宏替换和包含文件的调用
B) 预处理指令只能位于C源程序文件的首部
C) 凡是C源程序中行首以"#"标识的控制行都是预处理指令
D) C语言的编译预处理就是对源程序进行初步的语法检查
20. 以下程序的输出结果是
#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
21. 以下叙述正确的是
A) 可以把define和if定义为用户标识符
B) 可以把define定义为用户标识符,但不能把if定义为用户标识符
C) 可以把if定义为用户标识符,但不能把define定义为用户标识符
D) define和if都不能定义为用户标识符
22. 设有如下宏定义
#define MYSWAP(z,x,y) {z=x; x=y; y=z;}
以下程序段通过宏调用实现变量a、b内容交换,请填空。
float a=5,b=16,c;
MYSWAP( 【 】 ,a,b);
23. 程序中头文件typel.h 的内容是:
#define N 5
#define M1 N*3
程序如下:
#define “type1.h”
#define M2 N*2
main()
{ int i;
i=M1 M2; printf(“%d\n”,i);
}
程序编译后运行的输出结果是:
A) 10 B) 20 C) 25 D) 30