首页 > 全部 > 二级C语言 > 国家二级C语言机试(编译预处理和指针)模拟试卷11

国家二级C语言机试(编译预处理和指针)模拟试卷11

本单篇文档共9116字,内容预览3600字,预览为有答案版,源文件无水印,下载后包含无答案空白卷版和有答案版,同时也有计算机类NCRE全国计算机二级整科真题模拟题,讲义课件,思维导图,易错高频题等下载。
二级C语言 章节练习 4649人下载
价格: 1.20 原价:¥7.00
收藏

国家二级C语言机试(编译预处理和指针)模拟试卷11

选择题

1.以下叙述中正确的是(A)

A. 在C语言中,预处理命令行都以\\

B. 预处理命令行必须位于C源程序的起始位置

C. #include必须放在C程序的开头

D. C语言的预处理不能实现宏定义和条件编译的功能

解析:在C语言中,凡是以“#”号开头的行,都称为“编译预处理”命令行。预处理命令可以放在程序中的任何位置,其有效范围是从定义开始到文件结束。预处理命令有宏定义、文件包含和条件编译三类。#include命令行表示程序中要引用C标准函数库中的标准输入输出函数。

2.有以下程序,程序运行后的输出结果是

#define PT 3.5;

#define S(x)PT*x*x;

main(){int a=1,b=2;

printf(\\(C)

A. 31.5

B. 7.5

C. 程序有错无输出结果

D. 14.0

解析:本题考查宏定义。预处理语句后面不能加分号,因此程序有错。如果没加分号的话S(a+b)=PT*a+b*a+b=3.5*1+2*1+2=7.5。

3.以下关于宏的叙述中正确的是(D)

A. 宏定义必须位于源程序中所有语句之前

B. 宏名必须用大写字母表示

C. 宏调用比函数调用耗费时间

D. 宏替换没有数据类型限制

解析:本题考查宏替换的规则。宏替换分为简单的字符替换和带参数的宏替换两类。使用宏时应注意几点:①宏定义仅仅是符号替换,不是赋值语句,因此不做语法检查;②为了区别程序中其他的标识符,宏名的定义通常用大写字母,但不是必须用大写;③双引号中出现的宏名不替换;④使用宏定义可以嵌套,即后定义的宏中可以使用先定义的宏。

4.有以下程序,程序运行后的输出结果是

#include

#define S(x)4*(x)*x+1

void main()

{int k=5,j=2;

printf(\\(B)

A. 197

B. 143

C. 33

D. 28

解析:这道题涉及到带参数的宏的定义和替换这个知识点。在程序中定义了带参数的宏S(x),当在主函数中用参数k+j调用宏S时,根据宏替换的原则,则S(k+i)=S(5+2)=4*7*5+2+1=143。

5.设有宏定义: #define lsDIV(k,n)((k%n==1)?1:0)且变量m已正确定义并赋值,则宏调用: IsDIV(m,5)&&IsDIV(m,7)为真时所要表达的是(C)

A. 判断m是否能被5和7整除

B. 判断m被5或者7整除足否余1

C. 判断m被5和7整除是否都余1

D. 判断m是否能被5或者7整除

解析:本题考查宏定义和三目运算符。三目运算符的格式为:test? 语句1:语句2

其中,test可以是任何Boolean表达式。语句1,当test是true时执行该语句,可以是复合语句;语句2,当test是false时执行该语句,可以是复合语句。isDIV(k,n)要表达的是当k除n的余数是1时表达式的值为1,否则为0,所以题中要表达的是m被5和7整除是否都余1。

6.有以下程序,程序运行后的输出结果是

#include

#define SUB(a)(a)-(a)

main(){ int a=2,b=3,c=5,d;

d=SUB(a+b)*c:

printf(\\(D)

A. -12

B. 0

C. 10

D. -20

解析:本题主要考查的是宏替换,在程序中执行d=sub(a+b)*c这条语句时,首先要进行宏替换,依据宏SUB(a)的定义可知,上面这条语句替换为d=(a+b)-(a+b)*c,因为乘法的优先级比减法的优先级高,所以先进行乘法运算,即d=5-5*5=-20。

7.有以下程序,程序运行后的输出结果是

#include

#define f(x)x*x*x

main(){int a=3,s,t;

s=f(a+1);

t=f((a+1));

printf(\\(B)

A. 10,10

B. 10,64

C. 64,10

D. 64,64

解析:根据题目中宏f(x)的定义,运算过程应为:s=f(a+1)=a+1*a+1*a+1=a+a+a+1=10,因此最后s的结果为10,而t=f((a+1))=(a+1)*(a+1)*(a+1)=4*4*4=64的结果为64。

8.有下列程序,程序的运行结果是

#include

#define N 5

#define M N+1

#define f(x)(x*M)

main()

{int i1,i2;

i1=f(2);

i2=f(1+1);

printf(\\(D)

A. 12 7

B. 12 12

C. 11 11

D. 11 7

解析:在本题中,定义了3个宏定义语句,分别是:#defne N 5、#define M N+5和#define fix)(x*M),所以根据C语言的宏替换规则,我们可知,f(2)=2*N+1=2*5+1=11,f(1+1)=1+1*N+1=1+1*5+1=7。

9.以下叙述中错误的是(B)

A. 预处理命令行的最后不能以分号表示结束

B. C程序对预处理命令行的处理是在程序执行的过程中进行的

C. #define MAX是合法的宏定义命令行

D. 在程序中凡是以“#”开始的语句行都是预处理命令行

解析:预处理命令行是以“#”开始的语句,预处理命令行的最后不能以分号表示结束,预处理命令行。其中宏定义的字符替换的定义格式为:#define标识符字符串,预处理命令行是在系统对源程序进行编译之前进行处理的,不是在程序执行的过程中。

10.若程序中有宏定义行: #define N 100则以下叙述中正确的是(D)

A. 宏定义行中定义了标识符N的值为整数100

B. 上述宏定义行实现将100赋给标示符N

C. 在运行时用100替换标识符N

D. 在编译程序对C源程序进行预处理时用100替换标识符N

解析:在C语言中,凡是以“#”号开头的行,都称为“编译预处理”。其含义是在C编译程序对C源程序进行编译前,由编译预处理程序对这些编译预处理命令进行处理的过程。Eh#define定义的宏就是编译预处理命令。C程序在进行编译之前,都要先对程序中所有出现的“宏名”,都用宏定义中的替换文本进行替换。

11.若有以下程序,则程序的输出结果是

#define Sfx)x*x

#define T(x)S(x)*S(x)

main(){int k=5,j=2;

printf(\\(A)

A. 17,37

B. 49,2401

<

本文档预览:3600字符,共9116字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载

剩余未完,查看全文
收藏
国家二级C语言机试(编译预处理和指针)模拟试卷11

推荐资源

客服

扫码添加客服微信

热线

官方客服

如遇问题,请联系客服为您解决

电话客服:

客服微信:pujinet

工作时间:9:00-18:00,节假日休息

公众号

扫码关注微信公众号