参考答案
第 9 章编译预处理
一、选择题
二、编程题
略。
习题
一、选择题
(1)编译预处理的工作是在(  A  )完成的。
A)编译前B)编译时C)编译后D)执行时(2)以下选项汇总,(  D  )不属于编译预处理。
A)宏定义B)文件包含C)条件编译D)连接(3)以下选项中,(  C  )是C语句。
A)#include<stdio.h> B)#define PI 3.1415926
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 <stdio.h>
#define M 5
#define N M+M
void main( )
{ int k;
k=N*N*5;
printf("%d\n",k);
}
A)500 B)55
C)125 D)程序有错无输出结果(10)以下程序的运行结果是(  D  )。
#include <stdio.h>
#define PT 3.5;
#define S(x) PT*x*x;
void main( )
{ int a=1, b=2;
printf("%4.1f\n",S(a+b));
}
A)14.0 B)31.5
C)7.5 D)程序有错无输出结果(11)以下程序的运行结果是(  C  )。
#include <stdio.h>
#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  %d\n",i1,i2);
}
A)12  12 B)12  7 C)11  7 D)11  12 (12)关于文件包含,以下说法中正确的是(  C  )。
A)被包含的文件必须以“.h”为后缀
B)一个#include命令可以指定多个被包含文件
C)文件包含允许嵌套
D)#include <stdio.h>和#include "stdio.h"没有任何区别
(13)在文件包含预处理命令中,当#include后面的文件名用双引号括起时,寻被包含文件的方式为(  B  )。
A)直接按系统设定的标准方式搜索目录
B)先在源程序所在目录搜索,若不到,再按系统设定的标准方式搜索
C)仅搜索源程序所在目录
D)仅搜索当前目录
(14)有一个名为init. txt的文件,内容如下:
#define HDY(A,B) A/B
#define PRINT(Y) printf("Y=%d\n",Y)
那么,以下程序的运行结果是(  C  )。
#include <stdio.h>
#include ""
void main( )
{ int a=1,b=2,c=3,d=4,k;
k=HDY(a+c,b+d);
PRINT(k);
}
A)Y=0 B)0=0 C)Y=6 D)6=6 (15)下面程序由两个源文件f1.h和f1.c组成,程序的运行结果是(  A  )。
f1.h的源程序为
#define  N  10
#define  f2(x) (x*N)
f1.c的源程序为
#include <stdio.h>
#define  M  8
#define  f(x) ((x) *M)
c语言搜题软件推荐#include "f1.h"
void main( )
{ int i,j;
i=f(1+1);
j=f2(1+1);
printf("%d  %d\n",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 <stdio.h>
#define P 0
void main( )
{ int n=10,m;
#ifdef P
m=n+n;
#else
m=n*n;
#endif
printf("%d\n",m);
}
A)20 B)100 C)0 D)程序有错(18)以下程序的输出结果是(  B  )。
#include <stdio.h>
#define P 0
void main( )
{ int n=10,m;
#if P
m=n+n;
#else
m=n*n;
#endif
printf("%d\n",m);
}
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.输入一行字符,用条件编译,将其中的大写字母变为对应的小写字母,或将其中的小写字母变为对
应的大写字母,其他字符不变。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。