【计算机类职业资格】国家二级C语言(指针、编译预处理和动态存储分配)机试模拟试卷2及答案解析.doc
《【计算机类职业资格】国家二级C语言(指针、编译预处理和动态存储分配)机试模拟试卷2及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】国家二级C语言(指针、编译预处理和动态存储分配)机试模拟试卷2及答案解析.doc(9页珍藏版)》请在麦多课文档分享上搜索。
1、国家二级 C 语言(指针、编译预处理和动态存储分配)机试模拟试卷 2 及答案解析(总分:56.00,做题时间:90 分钟)一、选择题(总题数:28,分数:56.00)1.有以下程序:#includestdiohvoidf(int*p,int*q);main()int m=1,n=2,*r=&m;f(r,&n);printf(“d,d“,m,n);voidf(int*p,int*q)p=p+1:*q=*q+1:程序的运行结果是( )。(分数:2.00)A.2,3B.1,3C.1,4D.1,22.设已有定义 float x;,则下列对指针变量 p 进行定义且赋初值的语句中正确的是( )。(分数:2
2、.00)A.int*p=(float)x;B.float*p=&x;C.float p=&x;D.float*p=1024;3.若有定义语句 double a,*p=&a;,下列叙述中错误的是( )。(分数:2.00)A.定义语句中的*号是一个间址运算符B.定义语句中的*号是一个说明符C.定义语句中的 p 只能存放 double 类型变量的地址D.定义语句中,*p=&a 把变量 a 的地址作为初值赋给指针变量 P4.有以下程序:#includestdiohmain()int a=1,b=3,C=5;int*p1=&a,*p2=&b,*p=&c;*p=*p1*(*p2);printf(“dn“,
3、c);程序的运行结果是( )。(分数:2.00)A.1B.2C.3D.45.有以下程序:#includestdiohmain()int n,*p=NULL;*p=&n:printf(“Input n:“);seanf(“d“,&p);printf(“output n:“);printf(“dn“,p);该程序试图通过指针 p 为变量 n 读入数据并输出,但程序有多处错误,下列语句中正确的是( )。(分数:2.00)A.int n,*p=NULL;B.*p=&n;C.scanf(“d“,&p)D.printf(“dn“,p);6.若有定义语句 double x,y,*px,*py;,执行了 px
4、=&x;py=&y;之后,正确的输入语句是( )。(分数:2.00)A.seanf(“Ifle“,px,py);B.seanf(“ff“&x,&y);C.sccanf(“ff“,x,y);D.scanf(“IfIf“,x,y);7.下列程序段中完全正确的是( )。(分数:2.00)A.int*p;scanf(“d“,&p);B.int*p;scanf(“d“,p);C.int k,*p=&k;scanf(“d“,p);D.int k,*p;*p=&k;scanf(“d“,p);8.若有定义语句 int a23,*p3;,则以下语句中正确的是( )。(分数:2.00)A.p=a;B.p0=a;C
5、.p0=&a12;D.p1=&a;9.设有以下函数:void fun(int n,char*s),则下列对函数指针的定义和赋值均正确的是( )。(分数:2.00)A.void(*pf)(int,char);pf=&fun;B.void*pf();pf=fun;C.void*pf();*pf=fun;D.void(*pf)(int,char*);pf=fun;10.下列函数的功能是( )。void fun(char*a,char,*b)while(*b=*a)!=0)a+;b+;(分数:2.00)A.将 a 所指字符串赋给 b 所指空间B.使指针 b 指向 a 所指字符串C.将 a 所指字符串和
6、 b 所指字符串进行比较D.检查 a 和 b 所指字符串中是否有011.有以下程序:#ineludestdioh#define N4void fun(int aN,int b)int i;for(i=0;iN;i+)bi=aii-aiN-1-i;main()int xNN=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,YN,i;fun(x,y);for(i=0;iN;i+)printf(“d,“,yi);printf(“n“);程序的运行结果是( )。(分数:2.00)A.-3,-1,1,3,B.-12,-3,0,0,C.0,1,2,3,D.-3,-3,-3,-
7、3,12.有以下程序:#includestdioh#includestringhmain()char str20=“One*Wodd“,“One*Dream!“,*p=str1;printf(“d,“,strlen(p);printf(“sn“,p);程序的运行结果是( )。(分数:2.00)A.10,One*Dream!B.9,One*Dream!C.9,One*WorldD.10,One*World13.若有定义 int w35;,则以下不能正确表示该数组元素的表达式是( )。(分数:2.00)A.*(&w00+1)B.*(*w+3)C.*(*(W+1)D.*(W+1)414.下列语句组中
8、正确的是( )。(分数:2.00)A.char*s;s=“Olympic“;B.char s7;s=“Olympic“;C.char*s;s=“Olympic“;D.char s7;s=“Olympic“;15.有以下程序(注:字符 a 的 ASCII 码值为 97):#includestdiohmain()char*s=“abc“;doprintf(“d“,*s10);+s;while(*s);程序的运行结果是( )。(分数:2.00)A.789B.abeC.7890D.97989916.设有定义“char*c;”,以下选项中能够使 c 正确指向一个字符串的是( )。(分数:2.00)A.c
9、har str=“string“;c=str;B.scanf(“s“,c);C.c=getchar();D.*c=“string“;17.有以下函数:int fun(char*x,char*y)int n=0;while(*x=*y)&*x!=0)x+;y+;n+:return n:函数的功能是( )。(分数:2.00)A.将 y 所指字符串赋给 x 所指存储空间B.查找 x 和 y 所指字符串中是否有0C.统计 x 和 y 所指字符串中最前面连续相同的字符个数D.统计 x 和 y 所指字符串中相同的字符个数18.下列语句组中正确的是( )。(分数:2.00)A.char*s;s=“BOOK!
10、“;B.char*s;s=“BOOK!“;C.char*s10;s=“BOOK!“;D.char s;s=“BOOK!“;19.设有定义语句“int(*f)(int);”则下列叙述中正确的是( )。(分数:2.00)A.f 是基类型为 int 的指针变量B.f 是指向函数的指针变量,该函数具有一个 int 类型的形参C.f 是指向 int 类型一维数组的指针变量D.f 是函数名,该函数的返回值是基类型为 int 类型的地址20.有以下程序:#includestdiohint add(int a,int b)return(a+b);main()int k,(*f)(),a=5,b=10;f=ad
11、d;则以下函数调用语句错误的是( )。(分数:2.00)A.k=f(a,b);B.k=add(a,b);C.k=(*f)(a,b);D.k=*f(a,b);21.下列语句中存在语法错误的是( )。(分数:2.00)A.char ss620;ss1=“right?“;B.char ss20=“right?“;C.char*ss6;ss1=“right?“;D.char*ss=“right?“;22.下列叙述中正确的是( )。(分数:2.00)A.在 C 语言中,预处理命令行都以“#”开头B.预处理命令行必须位于 C 源程序的起始位置C.#includestdioh必须放在 C 程序的开头D.C
12、语言的预处理不能实现宏定义和条件编译的功能23.下列关于宏的叙述中正确的是( )。(分数:2.00)A.宏替换没有数据类型限制B.宏定义必须位于源程序中所有语句之前C.宏名必须用大写字母表示D.宏调用比函数调用耗费时间24.有以下程序:#includestdioh#define PT35:#define S(x)PT*x*x;main()int a=1,b=2;printf(“41fn“,S(a+b);程序的运行结果是( )。(分数:2.00)A.75B.315C.程序有错无输出结果D.14025.若程序中有宏定义行:#define N100,则下列叙述中正确的是( )。(分数:2.00)A.
13、宏定义行中定义了标识符 N 的值为整数 100B.在编译程序对 C 源程序进行预处理时用 100 替换标识符 NC.上述宏定义行实现将 100 赋给标识符 ND.在运行时用 100 替换标识符 N26.有以下程序:#includestdioh#define S(x)4*(x)*x+1main()int k=5,j=2;printf(“dn“,S(k+j);程序的运行结果是( )。(分数:2.00)A.33B.197C.143D.2827.有以下程序:#includestdioh#define SUB(a)(a)-(a)main()Int a=2,b=3,c=5,d;d=SUB(a+b)*c;p
14、rintf(“dn“,d);程序的运行结果是( )。(分数:2.00)A.0B.-12C.-20D.1028.下列叙述中错误的是( )。(分数:2.00)A.C 程序对预处理命令行的处理是在程序执行过程中进行的B.预处理命令行的最后不能以分号表示结束C.#define MAX 是合法的宏定义命令行D.在程序中,凡是以“#”开始的语句行都是预处理命令行国家二级 C 语言(指针、编译预处理和动态存储分配)机试模拟试卷 2 答案解析(总分:56.00,做题时间:90 分钟)一、选择题(总题数:28,分数:56.00)1.有以下程序:#includestdiohvoidf(int*p,int*q);m
15、ain()int m=1,n=2,*r=&m;f(r,&n);printf(“d,d“,m,n);voidf(int*p,int*q)p=p+1:*q=*q+1:程序的运行结果是( )。(分数:2.00)A.2,3B.1,3 C.1,4D.1,2解析:解析:在 f(int*p,int*q)函数中,执行 p=p+1 是将 p 所对应的地址加 1,而*q=*q+1 是将 q 所指向 n 的地址所对应的值加 1,所以 m 的值所对应的值没有变,而 n 的值则为 3 了,因此 B 选项正确。2.设已有定义 float x;,则下列对指针变量 p 进行定义且赋初值的语句中正确的是( )。(分数:2.00
16、)A.int*p=(float)x;B.float*p=&x; C.float p=&x;D.float*p=1024;解析:解析:指针是用来存放地址的变量,用(类型名*指针变量名)的形式定义。赋值时应将某个变量地址即&x 赋给指针变量,所以选择 B。3.若有定义语句 double a,*p=&a;,下列叙述中错误的是( )。(分数:2.00)A.定义语句中的*号是一个间址运算符 B.定义语句中的*号是一个说明符C.定义语句中的 p 只能存放 double 类型变量的地址D.定义语句中,*p=&a 把变量 a 的地址作为初值赋给指针变量 P解析:解析:在变量定义 double a,*p=&a;
17、中,水号是一个指针运算符,而非间址运算符,所以 A 错误。4.有以下程序:#includestdiohmain()int a=1,b=3,C=5;int*p1=&a,*p2=&b,*p=&c;*p=*p1*(*p2);printf(“dn“,c);程序的运行结果是( )。(分数:2.00)A.1B.2C.3 D.4解析:解析:该程序中 int*p1=&a,*p2=&b,*p=&c;指定义 3 个指针变量,并赋值,即使 p1 指向 a;p2指向 b;p 指向 c。*p=*p1*(*p2);语句是给 p 所指的存储单元 c 赋值,就是 p1 所指的存储单元的值,即a 的值,与 p2 所指的存储单元
18、 b 的值相乘,也就是 c=a*b,等价于 c=1*3=3,因此 C 选项正确。5.有以下程序:#includestdiohmain()int n,*p=NULL;*p=&n:printf(“Input n:“);seanf(“d“,&p);printf(“output n:“);printf(“dn“,p);该程序试图通过指针 p 为变量 n 读入数据并输出,但程序有多处错误,下列语句中正确的是( )。(分数:2.00)A.int n,*p=NULL; B.*p=&n;C.scanf(“d“,&p)D.printf(“dn“,p);解析:解析:B 选项的正确写法应为 p=&n;C 选项的正确
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 国家 二级 语言 指针 编译 预处理 动态 存储 分配 模拟 试卷 答案 解析 DOC
