[计算机类试卷]国家二级C语言机试(编译预处理)模拟试卷1及答案与解析.doc

上传人:花仙子 文档编号:498805 上传时间:2018-11-30 格式:DOC 页数:17 大小:46.50KB
下载 相关 举报
[计算机类试卷]国家二级C语言机试(编译预处理)模拟试卷1及答案与解析.doc_第1页
第1页 / 共17页
[计算机类试卷]国家二级C语言机试(编译预处理)模拟试卷1及答案与解析.doc_第2页
第2页 / 共17页
[计算机类试卷]国家二级C语言机试(编译预处理)模拟试卷1及答案与解析.doc_第3页
第3页 / 共17页
[计算机类试卷]国家二级C语言机试(编译预处理)模拟试卷1及答案与解析.doc_第4页
第4页 / 共17页
[计算机类试卷]国家二级C语言机试(编译预处理)模拟试卷1及答案与解析.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

1、国家二级 C语言机试(编译预处理)模拟试卷 1及答案与解析 一、选择题 1 若要使用 C数学库中的 sin函数,需要在源程序的头部加上 #include 关于引用数学库,以下叙述正确的是( )。 ( A)通过引用 math.h文件,说明 sin函数的参数个数和类型,以及函数返回值类型 ( B)将数学库中 sin函数链接到编译生成的可执行文件中,以便能正确运行 ( C)将数学库中 sin函数的源程序插入到引用处,以便进行编译链接 ( D)实际上,不引用 math.h文件也能正确调用 sin函数 2 以 下叙述中正确的是( )。 ( A)在 C语言中,预处理命令行都以 “#“开头 ( B)预处理命

2、令行必须位于 C源程序的起始位置 ( C) #include 必须放在 C程序的开头 ( D) C语言的预处理不能实现宏定义和条件编译的功能 3 有以下程序 #include #define PT 3.5 ; #define S(x) PT*x*x ; main() int a=1, b=2; printf(“%4.1fn“ , S(a+b); 程序运行后的输出结果是( ) 。 ( A)程序有错无输出结果 ( B) 31.5 ( C) 7.5 ( D) 14.0 4 以下关于宏的叙述中正确的是( )。 ( A)宏替换没有数据类型限制 ( B)宏定义必须位于源程序中所有语句之前 ( C)宏名必须

3、用大写字母表示 ( D)宏调用比函数调用耗费时间 5 有以下程序 #include #define S(x) 4*(x)*x+1 main() int k=5, j=2; printf(“%dn“, S(k+j) ); 程序运行后的输出结果是( )。 ( A) 143 ( B) 197 ( C) 33 ( D) 28 6 设有宏定义: #define IsDIV(k,n) ( ( k%n=1) ? 1 : 0) 且变量 m已正确定义并赋值,则宏调用: IsDIV(m,5) d=SUB(a+b)*c; printf(“%dn“,d); 程序运行后的输出结果是( )。 ( A) -20 ( B)

4、-12 ( C) 0 ( D) 10 8 有以下程序 #include #define f(x) x*x*x main() int a=3,s,t ; s=f(a+1); t=f(a+1); printf(“%d,%dn“,s,t); 程序运行后的输出结果是( )。 ( A) 10,64 ( B) 10,10 ( C) 64,10 ( D) 64,64 9 有以下程序 #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 %dn“

5、, i1, i2); 程序的运行结果是( )。 ( A) 11 7 ( B) 12 12 ( C) 11 11 ( D) 12 7 10 以下叙述中错误的是( )。 ( A) C程序对预处理命令行的处理是在程序执行的过程中进行的 ( B)预处理命令行的最后不能以分号表示结束 ( C) #define MAX 是合法的宏定义命令行 ( D)在程序中凡是以 “#“开始的语句行都是预处理命令行 11 若程序中有宏定义行: #define N 100 则以下叙述中正确的是( )。 ( A)在编译程序对 C源程序进行预处理时用 100替换标识符 N ( B)宏定义行中定义了标识符 N的值为整数 100

6、( C)上述宏定义行实现将 100赋给标识符 N ( D)在运行时用 100替换标识符 N 12 若 有以下程序 #include #define S(x) x*x #define T(x) S(x)*S(x) main() int k=5, j=2; printf(“%d,%dn“, S(k+j),T(k+j); 则程序的输出结果是( )。 ( A) 17,37 ( B) 49,2401 ( C) 17,289 ( D) 49,289 13 若有以下程序 #include #define S(x) (x)*(x) #define T(x) S(x)/S(x)+1 main() int k=3

7、, j=2; printf(“%d,%dn“, S(k+j),T(k+j) ); 则程序的输出结果是( )。 ( A) 25,26 ( B) 25,2 ( C) 11,12 ( D) 11,2 14 有以下程序 #include #define N 2 #define M N+1 #define NUM (M+1) * M/2 main() printf(“%dn“,NUM ); 程序运行后的输出结果是( )。 ( A) 8 ( B) 4 ( C) 9 ( D) 6 15 有以下程序 #include #define SUB( X, Y ) (X+1)*Y main() int a=3, b=

8、4; printf(“%dn“,SUB(a+ ,b+ ); 程序运行后的输出结果是( )。 ( A) 16 ( B) 20 ( C) 12 ( D) 25 16 下面选项中关于编译预处理的叙述正确的是( )。 ( A)凡是以 #号开头的行,都被称为编译预处理命令行 ( B)预处理命令行必须使用分号结尾 ( C)预处理命令行 不能出现在程序的最后一行 ( D)预处理命令行的作用域是到最近的函数结束处 17 以下叙述中正确的是( )。 ( A)在一个程序中,允许使用任意数量的 #include命令行 ( B)在包含文件中,不得再包含其他文件 ( C) #include命令行不能出现在程序文件的中间

9、 ( D)虽然包含文件被修改了,包含该文件的源程序也可以不重新进行编译和链接 18 有以下程序 #include #define SQR(X) X*X main() int a=10, k=2, m=1; a /= SQR(k+m)/SQR(k+m); printf(“%dn“,a); 程序的输出结果是( )。 ( A) 1 ( B) 0 ( C) 9 ( D) 10 19 有以下程序 #include #define S(x) x/x main() int k=5, j=2; printf(“%d,%dn“, S(k+j), S(j+k); 程序的运行结果是( )。 ( A) 7,9 ( B

10、) 1,1 ( C) 7,7 ( D) 9,9 20 有以下程序 #include #define S(x) x*x main() int k=5, j=2; printf(“%d,%dn“, S(k+j+2),S(j+k+2); 程序的运行结果是( )。 ( A) 21,18 ( B) 81,81 ( C) 21,21 ( D) 18,18 21 有以下程序 #include #define F(x) 2.84+x #define PR(a) printf(“%d“ ,(int)(a) #define PRINT(a) PR(a);putchar(n) main() PRINT( F(5)*

11、2 ); 程序运行后的输出结果是( )。 ( A) 12 ( B) 13 ( C) 15 ( D) 11 22 有以下程序 #include #define N 2 #define M N+1 #define MUN (M+1)*M/2 main() printf( “%dn“, MUN ); 程序运行后的输出结果是( )。 ( A) 8 ( B) 9 ( C) 5 ( D) 6 23 以下选项中的编译预处理命令行,正确的 是( )。 ( A) #define PI 3.14 ( B) #define eps 0.001 ( C) #DEFINE TRUE ( D) #define int I

12、NT 24 有如下程序 #include #define D(x) 4*x+1 main() int i = 2, j = 4; printf(“%dn“, D(i+j); 程序运行后的输出结果是( )。 ( A) 13 ( B) 25 ( C) 9 ( D) 12 25 有如下程序 #include #define D(x) 4*x+1 main() int i = 2, j = 4; printf(“%dn“, D(i+j); 程序运行后的输出结果是( )。 ( A) 8,32 ( B) 16,32 ( C) 8,16 ( D) 16,16 国家二级 C语言机试(编译预处理)模拟试卷 1答

13、案与解析 一、选择题 1 【正确答案】 A 【试题解析】 考查文件包含处理。文件包含命令的功能是把指定的文件添加到预处理部分,从而把指定的文件和当前的源程序文件连接起来,该文件则包含了程序要调用的函数的声明。由此,选项 B)、 C)、 D)表述错误。答案选 A)。 【知识模块】 编译预处理 2 【正确答案】 A 【试题解析】 C语言中,凡是以 “#“开头的都被称为编译预处理行,选项 A)正确;预处理行可以放在 C源程序的任何位置,习惯放在起始位置,选项 B)错误;语句 “#include “必须放在使用文件 stdio.h中相关方法的语句之前,但是不一定非要放在 C程序开头,选项 C)错误;预

14、处理包括宏定义、文件包含和条件编译等,选项 D)错误;答案选 A)。 【知识模块】 编 译预处理 3 【正确答案】 A 【试题解析】 宏定义不是 C语句,结尾不加 “;“,所以该程序会出现编译错误,答案选 A。 【知识模块】 编译预处理 4 【正确答案】 A 【试题解析】 宏定义属于预处理行,可以放在 C源程序的任何位置,习惯放在起始位置,选项 B)错误;宏名可以使用任意合法的用户标识符,习惯上大写,选项 C)错误;宏调用时的处理在编译预处理之前,只占用编译时间,不占用运行时间,选项 D)错误;答案选 A)。 【知识模块】 编译预处理 5 【正确答案】 A 【试题解析 】 考查宏定义,宏定义只

15、是使用宏名代替一个字符串,是一种机械的置换,所以 S(k+j)=4*(k+j)*k+j+1=4*(5+2)*5+2+1=143,所以答案选 A。 【知识模块】 编译预处理 6 【正确答案】 A 【试题解析】 宏定义只是使用宏名代替一个字符串,是一种机械的置换,所以宏替换后的表达式为 “( ( m%5=1) ? 1 : 0) “为 “d=(a+b)-(a+b)*c;“,计算结果为 -20,答案选A。 【知识模块】 编译预处理 8 【正确答案】 A 【试题解析】 宏替换只是使用宏名代替一个字符串,是一种机械的置换,所以表达式 s=f(a+1)=a+1*a+1*a+1=10, t=f(a+1)=(a

16、+1)*(a+1)*(a+1)=64,答案选 A。 【 知识模块】 编译预处理 9 【正确答案】 A 【试题解析】 宏替换只是使用宏名代替一个字符串,是一种机械的置换,所以表达式 i1=f(2)=(2*M)=(2*N+1)=(2*5+1)=11,i2=f(1+1)=(1+1*M)=(1+1*N+1)=(1+1*5+1)=7,答案选 A。 【知识模块】 编译预处理 10 【正确答案】 A 【试题解析】 预处理命令行的处理是在程序编译阶段完成的,而不是在运行阶段,所以答案选 A。 【知识模块】 编译预处理 11 【正确答案】 A 【试题解析】 宏替换只是使用宏名代替一个字符串,是一种机械的置换,这

17、个过程在编译阶段完成,所以答案选 A。 【知识模块】 编译预处理 12 【正确答案】 A 【试题解析】 宏替换只是使用宏名代替一个字符串,是一种机械的置换,所以S(k+j)=k+j*k+j=17, T(k+j)=S(k+j)*S(k+j)=k+j*k+j*k+j*k+j=37,输出结果为选项A)。 【知识模块】 编译预处理 13 【正确答案】 A 【试题解析】 宏替换只是使用宏名代替一个字符串,是一种机械的置换, 所以S(k+j)=(k+j)*(k+j)=25, T(k+j)=S(k+j)/S(k+j)+1=(k+j)*(k+j)/(k+j)*(k+j)+1=26,输出结果为选项 A)。 【知

18、识模块】 编译预处理 14 【正确答案】 A 【试题解析】 宏定义只是使用宏名代替一个字符串,是一种机械的置换,所以输出的 NUM即可替换为 (M+1) * M/2=(N+1+1)*N+1/2=(2+1+1)*2+1/2,计算结果为8,答案选 A。 【知识模块】 编译预处理 15 【正确答案】 A 【试题解 析】 宏定义只是使用宏名代替一个字符串,是一种机械的置换,所以输出的 SUB(a+,b+)=(a+1)*b+,计算结果为 16,答案选 A。 【知识模块】 编译预处理 16 【正确答案】 A 【试题解析】 C语言中,凡是以 “#“开头的都被称为编译预处理命令行,选项A)正确;编译预处理命令

19、行不是语句,结尾不用分号,选项 B)错误;编译预处理命令行可以放在 C源程序的任何位置,习惯放在起始位置,选项 C)错误;编译预处理命令行的作用域从该命令行开始到该源文件结束,选项 D)错误;答案选 A)。 【知识模块】 编译预处理 17 【正确答案】 A 【试题解析】 文件包含允许嵌入到其他文件中,选项 B)错误;文件包含命令是编译预处理命令行的一种,可以放在程序中的任何位置,选项 C)错误;文件包含命令发生改变时需要重新对程序进行编译,选项 D)错误。答案选 A)。 【知识模块】 编译预处理 18 【正确答案】 D 【试题解析】 宏替换是使用宏名代替一个字符串,是一种机械、简单的置换,所以

20、表达式 a=a/SQR(k+m)/SQR(k+m)=a/k+m*k+m/k+m*k+m=10。 【 知识模块】 编译预处理 19 【正确答案】 A 【试题解析】 宏替换是使用宏名代替一个字符串,是一种机械、简单的置换,所以表达式 S(k+j)=k+j/k+j=5+2/5+2=7, S(j+k)=j+k/j+k=2+5/2+5=9,答案选 A。 【知识模块】 编译预处理 20 【正确答案】 A 【试题解析】 宏替换是使用宏名代替一个字符串,是一种机械、简单的置换,所以表达式 S(k+j+2)=k+j+2*k+j+2=5+2+2*5+2+2=21,S(j+k+2)=j+k+2*j+k+2=2+5+

21、2*2+5+2=18,答案选 A。 【知识模块】 编译预处理 21 【正确答案】 A 【试题解析】 宏替换是使用宏名代替一个字符串,是一种机械、简单的置换,所以语句 “PRINT(F(5)*2); “可用字符串 “PR(F(5)*2);putchar(?n?); “替换,而语句“PR(F(5)*2);“可以用字符串 “printf(“%d“,(int)(F(5)*2)“,即为“printf(“%d“ ,(int)(2.84+5*2)“,所以输出结果为 12,答案选 A。 【知识模块】 编译预 处理 22 【正确答案】 A 【试题解析】 宏替换是使用宏名代替一个字符串,是一种机械、简单的置换,直

22、接在替换处展开而不做语法检测,所以语句MUN=(M+1)*M/2=(N+1+1)*N+1/2=8,答案选 A。 【知识模块】 编译预处理 23 【正确答案】 A 【试题解析】 宏定义的一般形式为 “#define 宏名 字符串(或数值) “,宏名的命名规则要符合用户标识符的命名规则,所以答案选 A。 【知识模块】 编译预处理 24 【正确答案】 A 【试题解析】 宏替换是使 用宏名代替一个字符串,是一种机械、简单的置换,直接在替换处展开而不做语法检测,所以 D(i+j)=4*i+j+1=13,答案选 A。 【知识模块】 编译预处理 25 【正确答案】 A 【试题解析】 宏替换是使用宏名代替一个字符串,是一种机械的、简单的置换,直接在替换处展开而不做语法检测,所以FNA(FNB(a)=FNB(a)*FNB(a)=a+a*a+a,结果为 8,语句FNB(FNA(b)=FNA(b)+FNA(b)=b*b+b*b,结果为 32,所以答案选 A。 【知识模块】 编译预处理

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1