【计算机类职业资格】国家二级C语言机试(翻译预处理和指针)模拟试卷11及答案解析.doc
《【计算机类职业资格】国家二级C语言机试(翻译预处理和指针)模拟试卷11及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】国家二级C语言机试(翻译预处理和指针)模拟试卷11及答案解析.doc(9页珍藏版)》请在麦多课文档分享上搜索。
1、国家二级 C 语言机试(翻译预处理和指针)模拟试卷 11 及答案解析(总分:50.00,做题时间:90 分钟)一、选择题(总题数:25,分数:50.00)1.关于 C 语言预处理命令的叙述中正确的是( )。(分数:2.00)A.在 C 语言中,预处理命令行都以“#”开头B.预处理命令行必须位于 C 源程序的起始位置C.#include 必须放在 C 程序的起始位置D.C 语言的预处理不能实现宏定义和条件编译的功能2.关于宏的叙述中正确的是( )。(分数:2.00)A.宏名称必须用大写字母表示B.宏定义必须位于源程序中所有语句之前C.宏调用比函数调用耗费时间D.宏替换没有数据类型限制3.设#de
2、fine IsDIV(k,n)(kn=1)?1:0),则宏调用:IsDIV(m,5)&IsDIV(m,7)为真时所要表达的是( )。(分数:2.00)A.判断 m 是否能被 5 和 7 同时整除B.判断 m 被 5 或者 7 整除是否余 1C.判断 m 被 5 和 7 整除是否都余D.判断 m 是否能被 5 或者 7 整除4.以下程序的输出结果是( )。 #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);(分数:2.00)A.64,10B.10,64C.10,10D.64,645
3、.关于预处理命令的叙述中错误的是( )。(分数:2.00)A.预处理命令行的最后不能以分号表示结束B.C 程序对预处理命令行的处理是在程序执行的过程中进行的C.#define MAX 是合法的宏定义命令行D.在程序中凡是以“#”开始的语句行都是预处理命令行6.以下程序的输出结果是( )。#deftne 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);(分数:2.00)A.17,37B.49,289C.17,289D.49,24017.关于#include 的叙述中正确的是( )。(分数:2.00)A
4、.在包含文件中,不得再包含其他文件B.#include 命令行不能出现在程序文件的中间C.在一个程序中,允许使用任意数量的#include 命令行D.虽然包含文件被修改了。包含该文件的源程序也可以不重新进行编译和连接8.设 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;9.关于变量和地址的叙述中正确的是( )。(分数:2.00
5、)A.语句 p=NULL;执行后,指针 P 指向地址为 0 的存储单元B.语句p=NULL;与p=0;是等价的语句C.“int*p1;int*p2;int*p3;”都是合法的定义指针变量的语句D.指针变量只能通过求地址运算符(&)来获得地址值10.关于 int* func(int a10,int n);的叙述中正确的是( )。(分数:2.00)A.说明中的 a10写成 a或*a 效果完全一样B.形参 a 对应的实参只能是数组名C.func 的函数体中不能对 a 进行移动指针(如 a+)的操作D.只有指向 10 个整数内存单元的指针,才能作为实参传给 a11.关于地址的叙述中错误的是( )。(分
6、数:2.00)A.改变函数形参的值,不会改变对应实参的值B.函数可以返回地址值C.当在程序的开头包含头文件 stdioh 时,可以给指针变量赋:NULLD.可以给指针变量赋一个整数作为地址值12.23以下程序的输出结果是( )。main()int m=1,n=2,*p=&m,*q=&n,*r;r=p;p=q;q=r;printf(d,d,d,dn,m,n,*P,*q);(分数:2.00)A.2,1,2,1B.1,2,2,1C.1,2,1,2D.2,1,1,213.设 float a10,*s=a;以下能够代表数组元素 a3的是( )。(分数:2.00)A.(*s)3B.*s3C.*s+3D.*
7、(s+3)14.若 int a23,*p3;则以下语句中正确的是( )。(分数:2.00)A.p0=&a12;B.p0=a;C.*p+=1;D.p=a;15.若 float a,*p=&a;以下叙述中错误的是( )。(分数:2.00)A.定义语句中的*是一个说明符B.定义语句中的 P 只能存放 float 类型变量的地址C.定义语句中木 p=&a 把变量 a 的地址作为初值赋给指针变量 pD.定义语句中的*是一个间址运算符16.以下程序的输出结果是( )。int fun1(double A)return a*=a;int fun2(double x,double y)double a=0,b=
8、0;a=fun1(x);b=fun1(y);return(int)(a+b);main()double w;w=fun2(11,20);(分数:2.00)A.500B.40C.421D.5017.以下程序的输出结果是( )。void fun(int n,int *s)int f;if(n=1)*s=n+1;elsefun(n 一1,&f);*s=f;main()int x=0;fun(4,&x);printf(dn,x);(分数:2.00)A.4B.3C.1D.218.以下程序的输出结果是( )。 #include main() #define N 4 int xN=1,2,3),4),5,6
9、,7,8),9,10, void fun(int aN,int b) yN,i; int i; fun(x,y); for(i=0;iN;i+)bi=aii; for(i=0;iN;i+)printf(d,yi); printf(n);(分数:2.00)A.3,4,8,10,B.1,4,5,9,C.1,0,7,0,D.1,2,3,4,19.以下程序的输出结果是( )。 #include main() void fun(char *c,int d) char b=a,a=A; *c=*c+1;d=d+1; fun(&b,a);printf(c,cn,b,a); printf(c,c,*c,d);
10、(分数:2.00)A.b,B,b,AB.a,B,a,BC.a,B,B,aD.b,B,B,A20.以下程序的输出结果是( )。 #include int funa(int a,int b)return a+b; int funb(int a,int b)return a 一 b; int sss(int(*t)(),jnt x,int y)retern(*t)(x,y); main()int x; x=sss(funa,9,3); x+=sss(funb,8,3); printf(dn,x);(分数:2.00)A.17B.22C.24D.2321.以下程序的输出结果是( )。void fun(i
11、nt *p,int* q)int t;t=*P;*P=*q;*q=t;*q=*p;main()int a=0,b=9;fun(&a,&b);printf(dn,a,b);(分数:2.00)A.9 0B.9 9C.0 0D.0 922.以下程序的输出结果是( )。void swap(char*x,char*y) main()char t; char*s1=abc,*s2=123*;t=*x;*x=*y;*y=t; swap(s1,s2);printf(s,sn,s1,s2); (分数:2.00)A.321,cbaB.123,abcC.abc,123D.1bc,a2323.以下函数的功能是( )。
12、int fun(char*s)char*t=s;while(*t+);return(t 一 s);(分数:2.00)A.计算 s 所指字符串的长度B.比较两个字符串的大小C.计算 s 所指字符串占用内存字节的个数D.将 s 所指字符串复制到字符串 t 中24.以下程序的输出结果是( )。 #include void fun(char*P) +p;printf(sh,*P); main() char*a=Morning,Afternoon,Evening,Night); fun(a);(分数:2.00)A.MorningB.fternoonC.orningD.Afternoon25.以下程序的输
13、出结果是( )。 #include main() void fun(char*a,char*b) char*s=*a*b*,t80; while(*a=*)a+; fun(s,t);puts(t); while(*b=*a)b+;a+; (分数:2.00)A.abB.*a*bC.a*b*D.a*b国家二级 C 语言机试(翻译预处理和指针)模拟试卷 11 答案解析(总分:50.00,做题时间:90 分钟)一、选择题(总题数:25,分数:50.00)1.关于 C 语言预处理命令的叙述中正确的是( )。(分数:2.00)A.在 C 语言中,预处理命令行都以“#”开头 B.预处理命令行必须位于 C 源
14、程序的起始位置C.#include 必须放在 C 程序的起始位置D.C 语言的预处理不能实现宏定义和条件编译的功能解析:解析:C 语言规定,凡是以“#”开头的行,都称为“编译预处理”命令行。预处理命令可以放在程序中的任何位置。其有效范围是从定义开始到文件结束。预处理命令有宏定义、文件包含和条件编译三类。#include 命令行表示程序中要引用 C 标准函数库中的标准输入输出函数。2.关于宏的叙述中正确的是( )。(分数:2.00)A.宏名称必须用大写字母表示B.宏定义必须位于源程序中所有语句之前C.宏调用比函数调用耗费时间D.宏替换没有数据类型限制 解析:解析:本题考查宏替换的规则。使用宏时应
15、注意几点:宏定义仅仅是符号替换,不是赋值语句,因此不做语法检查;为了区别程序中其他的标识符,宏名的定义通常用大写字母,但不是必须用大写;双引号中出现的宏名不替换;使用宏定义可以嵌套,即后定义的宏中可以使用先定义的宏。3.设#define IsDIV(k,n)(kn=1)?1:0),则宏调用:IsDIV(m,5)&IsDIV(m,7)为真时所要表达的是( )。(分数:2.00)A.判断 m 是否能被 5 和 7 同时整除B.判断 m 被 5 或者 7 整除是否余 1C.判断 m 被 5 和 7 整除是否都余 D.判断 m 是否能被 5 或者 7 整除解析:解析:本题考查宏定义和三目运算符。三目运
16、算符:test?语句 1:语句 2;其中,test 可以是任何表达式。语句 1,当 test 是非零时执行该语句,可以是复合语句;语句 2,当 test 是零时执行该语句,可以是复合语句。IsDIV(k,n)要表达的是当 k 除 n 的余数是 1 时表达式的值为 1,否则为 0,所以题中要表达的是 m 被 5 和 7 整除是否都余 1。4.以下程序的输出结果是( )。 #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);(分数:2.00)A.64,10B.10,64 C.10,10
17、D.64,64解析:解析:根据题中宏 f(x)的定义,运算过程应为:s=f(a+1)=a+1*a+1*a+1=a+a+a+1=10,因此最后 s的结果为 10,而 f(a+1)=(a+1)*(a+1)*(a+1)=4*4*4=64 的结果为 64。5.关于预处理命令的叙述中错误的是( )。(分数:2.00)A.预处理命令行的最后不能以分号表示结束B.C 程序对预处理命令行的处理是在程序执行的过程中进行的 C.#define MAX 是合法的宏定义命令行D.在程序中凡是以“#”开始的语句行都是预处理命令行解析:解析:C 语言中预处理命令行是以“#”开始的语句,预处理命令行的最后不能以分号表示结束
18、。其中宏定义的字符替换的定义格式为:#define 标识符字符串,预处理命令行是在系统对源程序进行编译之前进行处理的,不是在程序执行的过程中。6.以下程序的输出结果是( )。#deftne 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);(分数:2.00)A.17,37 B.49,289C.17,289D.49,2401解析:解析:本题考查了宏替换,C 语言中的宏替换不会进行语法错误检查也不会进行运算。“S(k+i)”宏展开以后为“k+j*k+j”,值为 17,“T(k+j)”宏展开以后为“k+j*
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 国家 二级 语言 翻译 预处理 指针 模拟 试卷 11 答案 解析 DOC
