C语言程序设计题库 第六章:编译预处理

一、单选题

1、编译预处理包括:
A、文件包含,宏定义和条件编译
B、构造工程文件
C、语句注释
D、编译源程序

解析:答案选A
在这里插入图片描述
2、预处理命令可能具有如下特点:
①均以“#”开头; ②必在程序开头
③后面不加分号; ④在真正编译前处理
预处理命令具有的特点为:
A、①、②
B、①、③、④
C、①、③
D、①、②、③、④

解析:解析:答案选B

3、以下叙述中正确的是
A、在程序的一行上可以出现多个有效的预处理命令行
B、使用带参的宏时,参数的类型应与宏定义时的一致
C、宏替换不占用运行时间,只占编译时间
D、在下面定义中C R是称为“宏名”的标识符: #define C R 045

解析:答案选C
A、C语言中一行只能有一个预处理命令,预处理命令行一定要以#开头。选项A正确。
B、宏定义只是文本替换,带参数的宏没有参数类型,因此没有一致的问题。选项B正确。
C、宏替换不占用运行时间,宏替换是在编译时,编译器完成的,占用编译时间。编译时,编译器会将代码中的宏用对应定义好的代码进行直接替换,然后再对源代码进行编译,所以宏比函数在运行时更快,因为它不用像函数调用时,要对现有数据进行入栈保存,运行完后,在出栈恢复,它是直接编译好的代码。
D、在下面定义中C R是称为“宏名”的标识符: #define C R 045时,C是宏名,不是C R。选项D错误

4、有宏定义:
#define NUM 15
#define DNUM NUM+NUM
则表达式DNUM/2+NUM*2的值为:
A、45
B、67
C、52
D、90

解析:答案选C
宏替换是纯文本替换,一定不要自己下意识添加括号,所以表达式DNUM/2+NUM2= NUM+NUM/2+152=15+15/2+15*2=15+7+30=52。选项C正确。

5、在宏定义#define PI 3.14159中,用宏名PI代替一个。
A、常量
B、单精度数
C、双精度数
D、字符串

解析:答案选D

6、若有宏定义如下:
#define X 5
#define Y X+1
#define Z Y*X/2
则执行以下printf语句后,输出结果是 。
int a; a=Y;
printf(“%d”,Z);
A、7
B、12
C、11
D、8

解析:答案选A
宏替换是纯文本替换,一定不要自己下意识添加括号,所以Z=YX/2=X+15/2=5+5/2=7。选项A正确。

7、以下程序的运行结果是 。

#include <stdio.h>
#define MIN(x,y) (x)<(y)?(x):(y)
int main()
{
int i=10,j=15,k;
k=10*MIN(i,j);
printf(%d\n”,k);
return 0;
}

A、10
B、15
C、100
D、150

解析:答案选B
宏替换是纯文本替换,所以k=10* MIN(10,15)=10*(10)<(15)?(10):(15)=100<15?10:15,条件判断为假,所以打印15。选项B正确。

8、若有以下宏定义如下:
#define N 2
#define Y(n) ((N+1)n)
则执行语句z=2
(N+Y(5));后的结果是 。
A、语句有错误
B、z=34
C、z=70
D、z无定值

解析:答案选B
宏替换是纯文本替换,所以z=2*(N+Y(5))=2*(2+((2+1)5))=217=34。选项B正确。

9、系统库函数在使用时,要用到______命令。
A、#include
B、#define
C、#if
D、#else

解析:答案选A

10、在“文件包含”预处理语句的使用形式中,当#include后面的文件名用“ ”(双引号)括起时,寻找被包含文件的方式是 。
A、直接按系统设定的标准方式搜索目录
B、先在源程序所在目录搜索,再按系统设定的标准方式搜索
C、仅仅搜索源程序所在目录
D、仅仅搜索当前目录

解析:答案选B
当#include后面的文件名用“ ”括起时:寻找被包含文件的方式先在源程序所在目录搜索,再按系统设定的标准方式搜索。
当#include后面的文件名用< >括起时:直接按系统设定的标准方式搜索目录。

11、在“文件包含”预处理语句的使用形式中,当#include后面的文件名用< >(尖括号)括起时,寻找被包含文件的方式是    。
A、仅仅搜索当前目录
B、仅仅搜索源程序所在目录
C、直接按系统设定的标准方式搜索目录
D、先在源程序所在目录搜索,再按系统设定的标准方式搜索

解析:答案选C
当#include后面的文件名用“ ”括起时:寻找被包含文件的方式先在源程序所在目录搜索,再按系统设定的标准方式搜索。
当#include后面的文件名用< >括起时:直接按系统设定的标准方式搜索目录。

12、以下程序的输出是________。

#include <stdio.h>
int main ()
{
printf (%d”, NULL) ;
return 0;
}

A、0
B、‘\0’
C、1
D、无定义

解析:答案选A
NULL是系统定义的宏,在头文件stdio.h中有宏定义语句 #define NULL 0。
程序运行截图:
在这里插入图片描述
在这里插入图片描述
13、以下程序的运行结果是________。

#include <stdio.h>
#define S(n) 5*(n)*n+1
int main()
{ 
int x=6,y=2;
printf("%d\n",S(x+y));
return 0;
}

A、45
B、243
C、321
D、360

解析:答案选B
错误步骤:宏替换是纯文本替换,所以S(x+y)=S(8)=5*(8)8+1=321。选项C正确。
正确步骤:S(x+y)= 5
(x+y)x+y+1=5(8)*6+2+1=243。选项B正确。

二、填空题

14、以下程序的运行结果是____。

#include <stdio.h>
#define SQR(X) X*X
int main()
{ 
int a=10, k=2, m=1;
a/=SQR(k+m)/SQR(k+m);
printf ("%d\n" , a);
return 0;
}

解析:答案为:1
SQR(k+m)/SQR(k+m)=k+mk+m/k+mk+m=2+12+1/2+12+1=2+2+0+2+1=7,所以a=a/7=10/7=1。
程序运行截图:
在这里插入图片描述

15、以下程序的运行结果是____。

#include <stdio.h>
#define SUB(a) (a)-(a)
int main()
{
int a=2,b=3,c=5,d ;
d=SUB(a+b)*c;
printf ("%d\n",d) ;
return 0;
}

解析:答案为:-20
d=SUB(a+b)*c=(a+b)-(a+b)*c=(2+3)-(2+3)*5=5-25=-20。
程序运行截图:
在这里插入图片描述
16、以下程序的输出结果是____。

#define P 3
#define Q P+P
int main( )
{
int n;
n=Q*5;
printf("%d\n",n);
return 0;
}

解析:答案为:
n=Q5=P+P5=3+3*5=18。
程序运行截图:
在这里插入图片描述
17、下面程序由两个源程序文件: x.h 和 y.c 组成 , 程序编译运行的结果是____, ____。

//x.h 的源程序为 :
#define N 10
#define f2(x) (x*N)
//y.c 的源程序为 :
#include <stdio.h>
#define M 8
#define f(x) ((x)*M)
#include "x.h"
int main( )
{
int i,j;
i=f(1+1);
j=f2(1+1);
printf("%d, %d\n",i,j);
return 0;
}

解析:答案为:16和11

i=f(1+1)=((1+1)8)=16,j=f2(1+1)=(1+1N)=1+10=11。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直学不会编程的小徐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值