【计算机类职业资格】国家二级C语言(指针、编译预处理和动态存储分配)机试模拟试卷1及答案解析.doc

上传人:orderah291 文档编号:1332429 上传时间:2019-10-17 格式:DOC 页数:10 大小:59.50KB
下载 相关 举报
【计算机类职业资格】国家二级C语言(指针、编译预处理和动态存储分配)机试模拟试卷1及答案解析.doc_第1页
第1页 / 共10页
【计算机类职业资格】国家二级C语言(指针、编译预处理和动态存储分配)机试模拟试卷1及答案解析.doc_第2页
第2页 / 共10页
【计算机类职业资格】国家二级C语言(指针、编译预处理和动态存储分配)机试模拟试卷1及答案解析.doc_第3页
第3页 / 共10页
【计算机类职业资格】国家二级C语言(指针、编译预处理和动态存储分配)机试模拟试卷1及答案解析.doc_第4页
第4页 / 共10页
【计算机类职业资格】国家二级C语言(指针、编译预处理和动态存储分配)机试模拟试卷1及答案解析.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

1、国家二级 C 语言(指针、编译预处理和动态存储分配)机试模拟试卷 1 及答案解析(总分:60.00,做题时间:90 分钟)一、选择题(总题数:30,分数:60.00)1.有以下程序: #include void f(int*P,int*q); main() int m=1,n=2,*r=b+;”,指针 a、b 分别指向下一个字符单元。再判断循环条件,如果成立,继续把指针 a 所指向的字符赋给指针 b 所在的内存单元,直到遇到结束标识为止,因此 A 选项正确。13.有以下程序: #include #define N 4 void fun(int aN,int b) int i; f10r(i=0

2、;iA.一 3,一 1,1,3, B.一 12,一 3,00,C.0,1,2,3,D.一 3,一 3,一 3,一 3,解析:解析:本题由 fun 函数可知,b0=a00一 a03=1 一 4=一 3,b1=a11一12=67=一 1,b2=a22一21=1110=1,b3=a33一31=1613=3,所以主函数中打印 y 数组元素的值为 A 选项。14.有以下程序: #include #include main() char str20=tOne*World”,”One*Dream!”;,*P=str1; prinff(“d,”,strlen(P); prinff(“sn”,P); 程序的运行

3、结果是( )。(分数:2.00)A.10,One*Dream! B.9,One*Dream!C.9,One*WorldD.10,One*World解析:解析:p 是指向二维字符数组第二行 one*Dream!的数组指针,所以长度是 10,打印输出的也是该字符串。15.若有定义 int w35;则以下不能正确表示该数组元素的表达式是( )。(分数:2.00)A.*(&w00+1)B.*(*w+3)C.*(*(w+1)D.*(w+1)4 解析:解析:A 选项中*(&w00+1)表示 w01;B 选项中*(*w+3)表示 w03;C 选项中*(*(w+1)表示 w01;而 D 选项中*(w+1)4的

4、正确写法是(*w+1)4,表示 w14,因此选择 D 选项。16.下列语句组中正确的是( )。(分数:2.00)A.char*s;s=“Olympic”; B.char s7;s=“Olympic”;C.char*s;s=“Olympic”;D.char s7;s=“Olympic”;解析:解析:字符型指针变量可以用 A 选项的赋值方法:chaur*s;s=“Olympic”。C 选项的写法:char*s,s= Olymp;是错误的。字符数组可以在定义的时候初始化:char s=Olymp”;或者 char s=“Olymp“,但是不可以在定义字符数组后对数组名赋值(数组名是常量,代表数组首地

5、址),所以 B 选项和 D 选项都是错误的。对于本例,B、D 选项中字符数组 s 的大小至少为 8,才能存放下字符串(字符串的末尾都有结束标志“0”)。17.有以下程序(注:字符 a 的 ASC码值为 97): #include main() char*s=“abe”; do printf(“d”,*s10); +s: while(*s); 程序的运行结果是( )。(分数:2.00)A.789 B.abeC.7890D.979899解析:解析:因为小写字符 a、b、c 的 ASC码值分别为 97、98、99,而在 do while 循环语句中,每次对字符的 ASC码值取余数并输出,所以分别输出

6、 7、8、9。18.设有定义“char*c;”,以下选项中能够使 c 正确指向一个字符串的是( )。(分数:2.00)A.char str=“string”;c=str; B.scanf(“s”,c)C.c=getchar();D.*c=“string”;解析:解析:选项 A 为正确用法,先将字符串存于字符数组中,然后将数组名赋给字符指针(数组名代表数组首地址,定义数组时为其分配确定的地址)。C 选项错误,getchar()函数输入一个字符给字符型变量,而不是字符指针。B 选项和 D 选项有类似的错误,两个选项并无语法错误,但运行时可能会出现问题。因为在 B 选项和 D 选项中,宁符指针没有被

7、赋值,足个不确定的值,指向一个不确定的内存区域,这个区域可能存放有用的指令或数据。在这个不确定的区域重新存放字符串,可能会发生无法预知的错误。19.有以下函数: 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 所指字符串中相同的字符个数解析:解析:本题中由循环条件可知,遇到0或 x 与 y 所

8、指的字符的值不等中的一个条件时就结束,所以功能是统计 x 和 y 所指字符串中最前面连续相同的字符个数。20.下列语句组中正确的是( )。(分数:2.00)A.ehar*s;s=“BOOK!”;B.char*s;s=“BOOK!”; C.char s10;s=“BOOK!”;D.char s;s=“BOOK!”;解析:解析:A 选项去掉大括号就正确了;C 选项和 D 选项应在定义时赋初值。B 选项正确。21.设有定义语句“int(*f)(int);”则下列叙述中正确的是( )。(分数:2.00)A.f 是基类型为 int 的指针变量B.f 是指向函数的指针变量,该函数具有一个 int 类型的形

9、参 C.f 是指向 int 类型一维数组的指针变量D.f 是函数名,该函数的返回值是基类型为 int 类型的地址解析:解析:int(*f)(int);为指向函数的指针变量的定义方法,其中 f 为指向函数的指针变量,第一个int 为函数返回值类型,第二个 int 为函数的形参类型,因此 B 选项正确。22.有以下程序: #include int add(int a,int b) return(a+ b); main() int k,(*f)(),a=5,b=10; f=add: 则以下函数调用语句错误的是( )。(分数:2.00)A.k=f(a,b);B.k=add(a,b);C.k=(*f)(

10、a,b);D.k=*f(a,b); 解析:解析:D 选项中,*f(a,b)表示调用后返回一个指向整型数据的地址指针,即该函数的返回值为指针类型,所以不能将其赋值给整形变量 k。23.下列语句中存在语法错误的是( )。(分数:2.00)A.char ss620;ss1=“right?”; B.char ss()20=“right?”;C.char*ss6;ss1=“right?”;D.char*ss()=“right?”;解析:解析:数组定义后,不可以对数组整体赋值,s 是二维数组,因 ss1是一维字符数组,即字符串,字符串赋值可以使用“strcpy(ss1,“right”);”这样的形式,而

11、A 选项中对二维数组中的第“1”维(相当于一个一维数组)赋值是不可以的。B 选项和 D 选项是定义时对数组初始化,这是可以的。在 C 选项中,将字符串在内存中的首地址赋给指针数组的一个元素,这是可以的。24.下列叙述中正确的是( )。(分数:2.00)A.在 C 语言中,预处理命令行都以“#”开头 B.预处理命令行必须位于 C 源程序的起始位置C.#include 必须放在 C 程序的开头D.C 语言的预处理不能实现宏定义和条件编译的功能解析:解析:预处理命令是以“#”号开头的命令,它们不是 C 语言的可执行命令,这些命令应该在函数之外书写,一般在源文件的最前面书写,但不是必须在起始位置书写,

12、所以 B、C 选项错误。C 语言的预处理能够实现宏定义和条件编译等功能,所以 D 选项错误。25.下列关于宏的叙述中正确的是( )。(分数:2.00)A.宏替换没有数据类型限制 B.宏定义必须位于源程序中所有语句之前C.宏名必须用大写字母表示D.宏调用比函数调用耗费时间解析:解析:宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头,所以 B 选项中“宏定义必须位于源程序中所有语句之前”是错误的。宏名一般用大写,但不是必须用大写,所以 C 选项错误。宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值),所以 D 选项错误。26.有以下程序:

13、#include #define PT 35; #define S(X)PT*x*x; main() int a=1,b=2; printf(“41fn”,S(a+ b); 程序的运行结果是( )。(分数:2.00)A.75B.3 15C.程序有错无输出结果 D.140解析:解析:宏定义不是 C 语句,末尾不需要有分号,语句 printf(“4Ifn”,S(a+b);展开后为 printf(“4Ifn”,35;*a+b*a+b;);,所以程序会出现语法错误。27.若程序中有宏定义行:#define N 100,则下列叙述中正确的是( )。(分数:2.00)A.宏定义行中定义了标识符 N 的值为

14、整数 100B.在编泽程序对 C 源程序进行预处理时用 100 替换标识符 N C.上述宏定义行实现将 100 赋给标识符 ND.在运行时用 100 替换标识符 N解析:解析:本题考查预编译相关知识,宏定义在编译程序时做了一个简单的替换,所以 B 选项正确。28.有以下程序: #include #define S(x)4*(x)*x+1 main() int k=5,j=2; prinff(“dn”,S(k+j); 程序的运行结果是( )。(分数:2.00)A.33B.197C.143 D.28解析:解析:本题考查带参数的宏定义,s 为带参数的宏定义,运行 s(k+j)为 4*(k+j)*k+

15、j+1=143,C 选项正确。29.有以下程序: #include #define SUB(a)(a)一(a)main() int a=2,b=3,c=5,d; d=SUB(a+ b)*c; prinff(“dn”,d); 程序的运行结果是( )。(分数:2.00)A.0B.一 12C.一 20 D.10解析:解析:本题考查宏定义。宏定义只是做简单的替换,本题中 SUB(a+b)*c=(a+b)一(a+b)*c=一 20,所以 C 选项正确。30.下列叙述中错误的是( )。(分数:2.00)A.C 程序对预处理命令行的处理是在程序执行过程中进行的 B.预处理命令行的最后不能以分号表示结束C.#define MAX 是合法的宏定义命令行D.在程序中,凡是以“#”开始的语句行都是预处理命令行解析:解析:本题考查预处理命令行。预处理是在程序编译之前进行的,所以 A 选项错误。

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

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

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