【计算机类职业资格】国家二级C语言机试(编译预处理和指针)模拟试卷5及答案解析.doc
《【计算机类职业资格】国家二级C语言机试(编译预处理和指针)模拟试卷5及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】国家二级C语言机试(编译预处理和指针)模拟试卷5及答案解析.doc(9页珍藏版)》请在麦多课文档分享上搜索。
1、国家二级 C 语言机试(编译预处理和指针)模拟试卷 5 及答案解析(总分:50.00,做题时间:90 分钟)一、选择题(总题数:25,分数:50.00)1.以下叙述中正确的是(分数:2.00)A.在 C 语言中,预处理命令行都以”#”开头B.预处理命令行必须位于 C 源程序的起始位置C.#include 必须放在 C 程序的开头D.C 语言的预处理不能实现宏定义和条件编译的功能2.有以下程序,程序运行后的输出结果是 #define PT 35: #define S(x)PT*x*x; main()int a=1,b=2; printf(“41fn“,S(a+b);(分数:2.00)A.315B
2、.75C.程序有错无输出结果D.143.以下关于宏的叙述中正确的是(分数:2.00)A.宏定义必须位于源程序中所有语句之前B.宏名必须用大写字母表示C.宏调用比函数调用耗费时间D.宏替换没有数据类型限制4.有以下程序,程序运行后的输出结果是 #includestdioh #define S(x)4*(x)*x+1 void main() int k=5,j=2: printf(“dn“,S(k+j); (分数:2.00)A.197B.143C.33D.285.设有宏定义: #define IsDIV(k,n)(kn=1)?1:0)且变量 m 已正确定义并赋值,则宏调用: IsDIV(m,5)&
3、IsDIV(m,7)为真时所要表达的是(分数:2.00)A.判断 m 是否能被 5 和 7 整除B.判断 m 被 5 或者 7 整除是否余 1C.判断 m 被 5 和 7 整除是否都余 1D.判断 m 是否能被 5 或者 7 整除6.有以下程序,程序运行后的输出结果是 #include #define SUB(a)(a)-(a) main() int a=2,b=3,c=5,d; d=SUB(a+b)*c: printf(“dn“,d);(分数:2.00)A.12B.0C.10D.207.有以下程序,程序运行后的输出结果是 #includestdioh #define f(x)x*x*x ma
4、in() int a=3,s,t; s=f(a+1); t=f(a+1); pfintf(“d,dn“,s,t);(分数:2.00)A.10,10B.10,64C.64,10D.64,648.有下列程序,程序的运行结果是 #includestdioh #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“,i1,i2);(分数:2.00)A.12 7B.12 12C.11 11D.11 79.以下叙述中错误的是(分数:2.00)A.预处理命令行的最后不能以分号
5、表示结束B.C 程序对预处理命令行的处理是在程序执行的过程中进行的C.#define MAX 是合法的宏定义命令行D.在程序中凡是以“#”开始的语句行都是预处理命令行10.若程序中有宏定义行: #define N 100 则以下叙述中正确的是(分数:2.00)A.宏定义行中定义了标识符 N 的值为整数 100B.上述宏定义行实现将 100 赋给标示符 NC.在运行时用 100 替换标识符 ND.在编译程序对 C 源程序进行预处理时用 100 替换标识符 N11.若有以下程序,则程序的输出结果是 #define S(x)x*x #define T(x)S(x)*S(x) main()int k=
6、5,j=2; printf(“d,dn“,S(k+j),T(k+j);(分数:2.00)A.17,37B.49,2401C.17,289D.49,28912.有以下程序,程序运行后的输出结果是 #includestdioh #define N 2 #define M N+1 #define NUM(M+1)*M2 main()printf(“dn“,NUM);(分数:2.00)A.4B.8C.9D.613.有以下程序,程序运行后的输出结果是 #includestdioh #define SUB(X,Y)(X+1)*Y main()int a=3,b=4; printf(“dn“, SUB(a+
7、,b+);(分数:2.00)A.20B.12C.16D.2514.下面选项中关于编译预处理的叙述正确的是(分数:2.00)A.凡是以#号开头的行,都被称为编译预处理命令行B.预处理命令行必须使用分号结尾C.预处理命令行不能出现在程序的最后一行D.预处理命令行的作用域是到最近的函数结束处15.有以下程序,程序的输出结果是 #includestdioh #define SQR(X)X*X main()int a=10,k=2,m=1; a=SQR(k+m)SQR(k+m); printf(“dn“,a);(分数:2.00)A.0B.1C.9D.1016.以下叙述中正确的是(分数:2.00)A.在包
8、含文件中,不得再包含其他文件B.#include 命令行不能出现在程序文件的中间C.在一个程序中,允许使用任意数量的#include 命令行D.虽然包含文件被修改了,包含该文件的源程序也可以不重新进行编译和连接17.有以下程序,程序的运行结果是 #includestdioh #includestdlibh int fun(int n) main() int*p; int a; P=(int*)malloc(sizeof(int); a=fun(10); *P=n;return*p; printf(“dn“,a+fun(10); (分数:2.00)A.10B.20C.0D.出错18.有以下程序,
9、程序运行后的输出结果是 #includestdioh #includestdlibh main() int*a,*b,*c; a=b=c=(int*)malloc(sizeof(int); *a=1;*b=2,*c=3; a=b: printf(“d,d,dn“,*a,*b,*c); (分数:2.00)A.2,2,3B.3,3,3C.1,2,3D.1,1,319.有以下程序,程序运行后的输出结果是 void fun(int*p1,int*p2,int*s) s=(int*)malloc(sizeof(int); *s=*p1+*(p2+); main()int a2=1,2,b2=10,20,
10、*s=a; fun(a,b,s); printf(“dn“,*s);(分数:2.00)A.10B.11C.2D.120.有以下程序段 int*p;p=_malloc(sizeof(int);若要求使 p 指向一个 int 型的动态存储单元,在横线处应填入的是(分数:2.00)A.(int*)B.intC.int*D.(*int)21.有以下程序,程序的输出结果是 void fun(double*p1,double*p2,double*s) s=(double*)calloc(1,sizeof(double); *s=*p1+*(p2+1); main()double a2=11,22),b2=
11、100,200),*s=a; fun(a,b,s); printf(“52fn“,*s);(分数:2.00)A.110B.1110C.1210D.21122.设有以下函数:void fun(int n,char*s)则下面对函数指针的定义和赋值均正确的是(分数:2.00)A.void*Pf();pf=fun;B.void(*pf)(int,char*);pf=fun;C.void*pf();*pf=fun;D.void(*pf)(int,char);pf=&fun;23.设有定义语句 int(*f)(int);则以下叙述正确的是(分数:2.00)A.f 是基类型为 int 的指针变量B.f 是
12、指向 int 类型一维数组的指针变量C.f 是指向函数的指针变量,该函数具有一个 int 类型的形参D.f 是函数名,该函数的返回值是基类型为 int 类型的地址24.以下叙述中正确的是(分数:2.00)A.指针变量只能通过求地址运算符(&)来获得地址值B.语句“p=NULL;”与“p=0;”是等价的语句C.“int*p1;int*p2;int*p3;“都是合法的定义指针变量的语句D.语句 p=NULL;执行后,指针 p 指向地址为 0 的存储单元25.以下叙述中正确的是(分数:2.00)A.函数的类型不能是指针类型B.函数的形参类型不能是指针类型C.基类型不同的指针变量可以相互混用D.设有指
13、针变量为“double*p”,则“p+1”将指针 P 移动 8 个字节国家二级 C 语言机试(编译预处理和指针)模拟试卷 5 答案解析(总分:50.00,做题时间:90 分钟)一、选择题(总题数:25,分数:50.00)1.以下叙述中正确的是(分数:2.00)A.在 C 语言中,预处理命令行都以”#”开头 B.预处理命令行必须位于 C 源程序的起始位置C.#include 必须放在 C 程序的开头D.C 语言的预处理不能实现宏定义和条件编译的功能解析:解析:在 C 语言中,凡是以“#”号开头的行,都称为“编译预处理”命令行。预处理命令可以放在程序中的任何位置,其有效范围是从定义开始到文件结束。
14、预处理命令有宏定义、文件包含和条件编译三类。#includestdioh命令行表示程序中要引用 C 标准函数库中的标准输入输出函数。2.有以下程序,程序运行后的输出结果是 #define PT 35: #define S(x)PT*x*x; main()int a=1,b=2; printf(“41fn“,S(a+b);(分数:2.00)A.315B.75C.程序有错无输出结果 D.14解析:解析:本题考查宏定义。预处理语句后面不能加分号,因此程序有错。如果没加分号的话 s(a+b)=PT*a+b*a+b=35*1+2*1+2=75。3.以下关于宏的叙述中正确的是(分数:2.00)A.宏定义必
15、须位于源程序中所有语句之前B.宏名必须用大写字母表示C.宏调用比函数调用耗费时间D.宏替换没有数据类型限制 解析:解析:本题考查宏替换的规则。宏替换分为简单的字符替换和带参数的宏替换两类。使用宏时应注意几点:宏定义仅仅是符号替换,不是赋值语句,因此不做语法检查;为了区别程序中其他的标识符,宏名的定义通常用大写字母,但不是必须用大写;双引号中出现的宏名不替换;使用宏定义可以嵌套,即后定义的宏中可以使用先定义的宏。4.有以下程序,程序运行后的输出结果是 #includestdioh #define S(x)4*(x)*x+1 void main() int k=5,j=2: printf(“dn“
16、,S(k+j); (分数:2.00)A.197B.143 C.33D.28解析:解析:这道题涉及到带参数的宏的定义和替换这个知识点。在程序中定义了带参数的宏 s(x),当在主函数中用参数 k+i 调用宏 S 时,根据宏替换的原则,则 s(k+j)=S(5+2)=4*7*5+2+1=143。5.设有宏定义: #define IsDIV(k,n)(kn=1)?1:0)且变量 m 已正确定义并赋值,则宏调用: IsDIV(m,5)&IsDIV(m,7)为真时所要表达的是(分数:2.00)A.判断 m 是否能被 5 和 7 整除B.判断 m 被 5 或者 7 整除是否余 1C.判断 m 被 5 和 7
17、 整除是否都余 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(
18、) int a=2,b=3,c=5,d; d=SUB(a+b)*c: printf(“dn“,d);(分数:2.00)A.12B.0C.10D.20 解析:解析:本题主要考查的是宏替换,在程序中执行 d=sub(a+b)*c 这条语句时,首先要进行宏替换,依据宏 SUB(a)的定义可知,上面这条语句替换为 d(a+b)(a+b)*c。因为乘法的优先级比减法的优先级高,所以先进行乘法运算,即 d=55*5=20。7.有以下程序,程序运行后的输出结果是 #includestdioh #define f(x)x*x*x main() int a=3,s,t; s=f(a+1); t=f(a+1);
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 国家 二级 语言 编译 预处理 指针 模拟 试卷 答案 解析 DOC
