2024年4月27日发(作者:)
参考答案
第 9 章 编译预处理
一、
选择
题
1
A
11
C
二、编程题
略。
2
D
12
C
3
C
13
B
4
D
14
C
5
C
15
A
6
D
16
B
7
A
17
A
8
B
18
B
9
B
10
D
习 题
一、选择题
(1)编译预处理的工作是在( A )完成的。
A)编译前 B)编译时 C)编译后 D)执行时
(2)以下选项汇总,( D )不属于编译预处理。
A)宏定义 B)文件包含 C)条件编译 D)连接
(3)以下选项中,( C )是C语句。
A)#include
C)j++; D)a=3
(4)以下叙述中错误的是( D )。
A)在程序中凡是以“#”开始的语句行都是预处理命令行
B)预处理命令行的最后不能以分号结束
C)“#define MAX 3 ”是合法的预处理命令行
D)C程序对预处理命令行的处理是在程序执行的过程中进行的
(5)以下关于宏的叙述中正确的是( C )。
A)宏名必须用大写字母表示 B)宏定义必须位于源程序中所有语句之前
C)宏展开没有数据类型限制 D)宏调用比函数调用耗费时间
(6)在宏定义#define PI 3.1415926中,用宏名代替一个( D )。
A)单精度数 B)双精度数 C)常量 D)字符串
(7)设有宏定义#define A B abcd,则宏展开时( A )。
A)宏名A用B abcd替换 B)宏名A B用abcd替换
C)宏名A和宏名B都用abcd替换 D)语法错误,无法替换
(8)若程序中有宏定义行#define N 100,则以下叙述中正确的是( B )。
A)宏定义行中定义了标识符N的值为整数100
B)对C源程序进行预处理时,用100替换标识符N
C)对C源程序进行编译时,用100替换标识符N
D)在运行时,用100替换标识符N
(9)以下程序的运行结果是( B )。
#include
#define M 5
#define N M+M
void main( )
{ int k;
k=N*N*5;
printf("%dn",k);
}
A)500
C)125
(10)以下程序的运行结果是( D )。
#include
#define PT 3.5;
#define S(x) PT*x*x;
void main( )
{ int a=1, b=2;
printf("%4.1fn",S(a+b));
}
B)55
D)程序有错无输出结果
A)14.0
C)7.5
(11)以下程序的运行结果是( C )。
#include
#define N 5
#define M N+1
#define f(x) (x*M)
void main( )
{ int i1,i2;
i1=f(2);
i2=f(1+1);
printf("%d %dn",i1,i2);
}
B)31.5
D)程序有错无输出结果
A)12 12 B)12 7 C)11 7 D)11 12
(12)关于文件包含,以下说法中正确的是( C )。
A)被包含的文件必须以“.h”为后缀
B)一个#include命令可以指定多个被包含文件
C)文件包含允许嵌套
D)#include
(13)在文件包含预处理命令中,当#include后面的文件名用双引号括起时,寻找被
包含文件的方式为( B )。
A)直接按系统设定的标准方式搜索目录
B)先在源程序所在目录搜索,若找不到,再按系统设定的标准方式搜索
C)仅搜索源程序所在目录
D)仅搜索当前目录
(14)有一个名为init. txt的文件,内容如下:
那么,以下程序的运行结果是( C )。
#include
#include ""
void main( )
{ int a=1,b=2,c=3,d=4,k;
k=HDY(a+c,b+d);
PRINT(k);
}
#define HDY(A,B) A/B
#define PRINT(Y) printf("Y=%dn",Y)
A)Y=0 B)0=0 C)Y=6 D)6=6
(15)下面程序由两个源文件f1.h和f1.c组成,程序的运行结果是( A )。
f1.h的源程序为
f1.c的源程序为
#define N 10
#define f2(x) (x*N)
#include
#define M 8
#define f(x) ((x) *M)
#include "f1.h"
void main( )
{ int i,j;
i=f(1+1);
j=f2(1+1);
printf("%d %dn",i,j);
}
A)16 11 B)16 20 C)9 11 D)9 20
(16)关于条件编译,下列说法错误的是( B )。
A)条件编译允许嵌套
B)条件编译与if条件语句没有任何区别
C)条件编译可以使用#endif D)每条条件编译命令必须单独成行
(17)以下程序的运行结果是( A )。
#include
#define P 0
void main( )
{ int n=10,m;
#ifdef P
m=n+n;
#else
m=n*n;
#endif
printf("%dn",m);
}
A)20 B)100
(18)以下程序的输出结果是( B )。
#include
#define P 0
void main( )
{ int n=10,m;
#if P
m=n+n;
#else
m=n*n;
#endif
printf("%dn",m);
}
C)0 D)程序有错
A)20 B)100 C)0 D)程序有错
二、编程题
1.利用带参数的宏“#define M(a, b) a/b”,求两个整数相除的商。
2.利用带参数的宏交换两个变量的值。
3.用宏定义设计几种输出格式(包括整数、实数、字符串等),并单独放在文件“fo
rmat.h”中。另编一个程序文件,利用文件“format.h”使用这些格式。
4.定义一个带参数的宏求两个数的最大值,并单独放在一个头文件中。定义一个函
数求两个数的最小值,并单独放在一个C文件中。另编一个C程序文件,利用前两个文件
求两个数的最大值和最小值。
5.输入两个数,用条件编译,求两个数的和或两个数的乘积。
6.输入一行字符,用条件编译,将其中的大写字母变为对应的小写字母,或将其中
的小写字母变为对应的大写字母,其他字符不变。


发布评论