[计算机类试卷]国家二级C语言机试(选择题)模拟试卷53及答案与解析.doc

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

1、国家二级 C语言机试(选择题)模拟试卷 53 及答案与解析 一、选择题 1 在数据管理技术发展的三个阶段中,数据共享最好的是 ( )。 ( A)人工管理阶段 ( B)文件系统阶段 ( C)数据库系统阶段 ( D)三个阶段相同 2 一间宿舍可住多个学生,则实体宿舍和学生之间的联系是 ( )。 ( A)一对一 ( B)一对多 ( C)多对一 ( D)多对多 3 在面向对象方法中,不属于 “对象 “基本特点的是 ( )。 ( A)一致性 ( B)分类性 ( C)多态性 ( D)标识唯一性 4 在软件开发中,需求分析阶段可以使用的工具是 ( )。 ( A) N S图 ( B) DFD图 ( C) PA

2、D图 ( D)程序流程图 5 数据流图中带有箭头的线段表示的是 ( )。 ( A)控制流 ( B)事件驱动 ( C)模块调用 ( D)数据流 6 下列叙述中正确的是 ( )。 ( A)顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的 ( B)顺序存储结构只针对线性结构,链式存储结构只针对非线性结构 ( C)顺序存储结构能存储有序表,链式存储结构不能存储有序表 ( D) 链式存储结构比顺序存储结构节省存储空间 7 下列叙述中正确的是 ( )。 ( A)循环队列有队头和队尾两个指针,因此,循环队列是非线性结构 ( B)在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况

3、 ( C)在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况 ( D)循环队列中元素的个数是由队头指针和队尾指针共同决定 8 一个栈的初始状态为空。现将元素 1、 2、 3、 4、 5、 A、 B、 C、 D、 E依次入栈,然后再依次出栈,则元素出栈的顺序是 ( )。 ( A) 12345ABCDE ( B) EDCBA54321 ( C) ABCDE12345 ( D) 54321EDCBA 9 下面结构体的定义语句中,错误的是 ( )。 ( A) struct ord int x; int y; int z; struct ord a; ( B) struct ord int x

4、; int y; int z; ; struct ord a; ( C) struct ord int x; int y; int z; a; ( D) struct int x; int y; int z; a; 10 下列叙述中错误的是 ( )。 ( A) C程序可以由多个程序文件组成 ( B)一个 C语言程序只能实现一种算法 ( C) C程序可以由一个或多个函数组成 ( D)一个 C函数可以单独作为一个 C程序文件存在 11 以下选项中,能用作数据常量的是 ( )。 ( A) 115L ( B) 0118 ( C) 1.5e1.5 ( D) o115 12 按照 C语言规定的用户标识符命

5、名规则,不能出现在标识符中的是 ( )。 ( A)大写字母 ( B)下划线 ( C)数字字 符 ( D)连接符 13 设变量已正确定义并赋值,以下正确的表达式是 ( )。 ( A) x y z 5, y ( B) int(15.8%5) ( C) x y*5 x z ( D) x 25%5.0 14 有以下程序 #include structSTUcharname9;charsex;intscore2; voidf(structSTUa) structSTUb=“Zhao“,m,85,90; a1=b; main() structSTUc2=“Qian“,f,95,92,“Sun“,m,98,

6、99; f(c); printf(“%s,%c,%d,%d,“,c0.name,c0.sex,c0.score0,c0.score1); printf(“%s,%c,%d,%dn“,c1.name,c1.sex,c1.score0,c1.score1); 程序运行后输出结果是 ( )。 ( A) Qian,f,95,92,Sun,m,98,99 ( B) Qian,f,95,92,Zhao,m,85,90 ( C) Zhao,m,85,90,Sun,m,98,99 ( D) Zhao,m,85,90,Qian,f,95,92 15 若有以下程序 #include #defineS(x)(x)*

7、(x) #defineT(x)S(x)/S(x)+1 main() intk=3,j=2; printf(“%d,%dn“,S(k+j),T(k+j); 则程序的输出结果是 ( )。 ( A) 11,2 ( B) 25,2 ( C) 11,12 ( D) 25,26 16 有以下程序: #include main() intx, y, z; x y 1; z x, y, y; printf(“%d, %d, %dn“, x, y, z); 程序运行后的输出结果是 ( )。 ( A) 2,3,3 ( B) 2,3,2 ( C) 2,3,1 ( D) 2,2,1 17 有以下程序: #includ

8、e main() charc1, c2; c1 A 8 4; c2 A 8 5; printf(“%c, %dn“, c1, c2); 已知字母 A的 ASCII码为 65,程序运行后的输出结果是 ( )。 ( A) E,68 ( B) D,69 ( C) E, D ( D)输出无定值 18 若有定义 intx, y;并已正确给变量赋值,则以下选项中与表达式 (x y)? (x ): (y )中的条件表达式 (x y)等价的是 ( )。 ( A) (x y 0|x y 0) ( B) (x y 0) ( C) (x y 0) ( D) (x y 0) 19 有以下程序: #include ma

9、in() intx 1, y 0; if(! x)y; elseif(x 0) if(x)y 2; elsey 3; printf(“%dn“, y); 程序运行后的输出结果是 ( )。 ( A) 3 ( B) 2 ( C) 1 ( D) 0 20 若有定义: floatx 1.5; inta 1, b 3, c 2;则正确的 switch语句是 ( )。 ( A) switch(a b) case 1: printf(“*n“); case 2 1: printf(“*n“); ( B) switch(int)x); case 1: printf(“*n“); case 2: printf(

10、“*n“); ( C) switch(x) case 1.0: printf(“*n“); case 2.0: printf(“*n“); ( D) switch(a b) case 1: printf(“*n“); case c: printf(“*n“); 21 有以下程序: #include main() inty 9; for(; y 0; y ) if(y%3 0)printf(“%d“, y); 程序的运行结果是 ( )。 ( A) 852 ( B) 963 ( C) 741 ( D) 875421 22 有以下程序: #include main() inti, j, m 1; f

11、or(i 1; i 3; i ) for(j 3; j 0; j ) if(i*j3)break; m* i*j; printf(“m %dn“, m); 程序运行后的输出结果是 ( )。 ( A) m 4 ( B) m 2 ( C) m 6 ( D) m 5 23 有以下程序: #include intfun(intx, inty) if(x! y)return(x y)/2); elsereturn(x); main() inta 4, b 5, c 6; printf(“%dn“, fun(2*a,fun(b,c); ( A) 6 ( B) 3 ( C) 8 ( D) 12 24 有以下

12、程序: #include intadd(inta, intb)return(a b); main() intk, (*f)(), a 5, b 10; f add; 则以下函数调用语句错误的是 ( )。 ( A) k f(a, b); ( B) k add(a, b); ( C) k (*f)(a, b); ( D) k *f(a, b); 25 有以下程序: #include main() intn, *p NULL; *p &n; printf(“Inputn: “); scanf(“%d“, &p); printf(“outputn: “); printf(“%dn“, p); 该程序试

13、图通过指针 p为变量 n读入数据并输出,但程序有多处错误,以下语句正确的是 ( )。 ( A) int n, *p NULL; ( B) *p &n; ( C) scanf(“%d“, &p) ( D) printf(“%dn“, p); 26 下列定义数组的语句中,正确的是 ( )。 ( A) #define N 10 int xN; ( B) int N 10; int xN; ( C) int x010; ( D) int x ; 27 有以下程序: #include main() inta 2,3,5,4, i; for(i 0; i 4; i ) switch(i%2) case0:

14、 switch(ai%2) case0: ai; break; case1: ai; break; case1: ai 0; for(i 0; i 4; i )printf(“%d“, ai); printf(“n“); 程序运行后的输出结果是 ( )。 ( A) 0 3 0 4 ( B) 2 0 5 0 ( C) 3 3 4 4 ( D) 3 0 4 0 28 有以下程序: #include main() intb33 0,1,2,0,1,2,0,1,2, i, j, t 1; for(i 0; i 3; i ) for(j i; j =i; j )t bibji; printf(“%dn“

15、, t); 程序运行后的输出结果是 ( )。 ( A) 3 ( B) 4 ( C) 1 ( D) 9 29 以下语句中存在语法错误的是 ( )。 ( A) char ss620; ss1 “right? “; ( B) char ss()20 “right? “; ( C) char *ss6; ss1 “right? “; ( D) char *ss() “right? “; 30 以下不能将 s所指字符串正确复制到 t所指存储空间的是 ( )。 ( A) do*t *s; while(*s ); ( B) for(i 0; ti si; i ); ( C) while(*t *s)t; s

16、 ( D) for(i 0, j 0; ti sj ; ); 31 有以下程序: #include voidswap(char*x, char*y) chart; t *x; *x *y; *y t; main() char*s1 “abc“, *s2 “123“; swap(s1, s2); printf(“%s, %sn“, s1, s2); 程序执行后的输出结果是 ( )。 ( A) 321, cba ( B) abc,123 ( C) 123, abc ( D) 1bc, a23 32 有以下函数: intfun(char*x, char*y) intn 0; while(*x *y)

17、&*x! 0)x; y; n; returnn; 函数的功能是 ( )。 ( A)将 y所指字符串赋给 x所指存储空间 ( B)查找 x和 y所指字符串中是否有 0 ( C)统计 x和 y所指字符串中最前面连续相同的字符个数 ( D)统计 x和 y所指字符串中相同的字符个数 33 有以下程序: #include intfun() staticintx 1; x* 2; returnx; main() inti, s 1; for(i 1; i =3; i )s* fun(); printf(“%dn“, s); 程序运行后的输出结果是 ( )。 ( A) 10 ( B) 30 ( C) 0 (

18、 D) 64 34 在一个 C源程序文件中所定义的全局变量,其作用域为 ( )。 ( A)由具体定义位置和 extern说明来决定范围 ( B)所在程序的全部范围 ( C)所在函数的全部范围 ( D)所在文件的全部范围 35 以下叙述中错误的是 ( )。 ( A)可以通过 typedef增加新的类型 ( B)可以用 typedef将已存在的类型用一个新的名字来代表 ( C)用 typedef定义新的类型名后,原有类型名仍有效 ( D)用 typedef可以为各种类型起别名,但不能为变量起别名 36 有以下程序: #include structS inta, b; data2 10,100,20

19、,200; main() structSp data1; printf(“%dn“, (p.a); 程序运行后的输出结果是 ( )。 ( A) 10 ( B) 11 ( C) 20 ( D) 21 37 有以下程序: #include #definePT3.5; #defineS(x)PT*x*x; main() inta 1, b 2; printf(“%4.1fn“, S(a b); 程序运行后的输出结果是 ( )。 ( A) 7.5 ( B) 31.5 ( C)程序有错无输出结果 ( D) 14.0 38 有以下程序: #include main() unsignedchara 2, b

20、 4, c 5, d; d a|b; d& c; printf(“%dn“, d); 程序运行后的输出结果是 ( )。 ( A) 3 ( B) 4 ( C) 5 ( D) 6 39 有以下程序: #include #include 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); 程序运行后的输出结果是 ( )。 ( A) 1,1,3 ( B) 2,2,3 ( C) 1,2,3 ( D) 3,3,3 40 以下叙述中正确的

21、是 ( )。 ( A)当对文件的读 (写 )操作完成之后,必须将它关闭,否则可能导致数据丢失 ( B)打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖 ( C)在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第 1个数据 ( D) C语言中的文件是流式文件,因此只能顺序存取数据 国家二级 C语言机试(选择题)模拟试卷 53 答案与解析 一、选择题 1 【正确答案】 C 【试题 解析】 数据管理发展至今已经历了三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。其中最后一个阶段结构简单,使用方便逻辑性强物理性少,在各方面的表现都最好,一直占据数据库领

22、域的主导地位,所以选择 C。 2 【正确答案】 B 【试题解析】 因为一间宿舍可以住多个学生即多个学生住在一个宿舍中,但一个学生只能住一间宿舍,所以实体宿舍和学生之间是一对多的关系。 3 【正确答案】 A 【试题解析】 对象有如下一些基本特点:标识唯一性、分类性、多态性、封装性、模块独立性好。所以选择 A。 4 【 正确答案】 B 【试题解析】 在需求分析阶段可以使用的工具有数据流图 DFD图,数据字典DD,判定树与判定表,所以选择 B。 5 【正确答案】 D 【试题解析】 数据流图中带箭头的线段表示的是数据流,即沿箭头方向传送数据的通道,一般在旁边标注数据流名。 6 【正确答案】 A 【试题

23、解析】 链式存储结构既可以针对线性结构也可以针对非线性结构,所以 B与 C错误。链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以 D错误。 7 【正确答案】 D 【试题解析】 循环 队列有队头和队尾两个指针,但是循环队列仍是线性结构的,所以 A错误;在循环队列中只需要队头指针与队尾两个指针来共同反映队列中元素的动态变化情况,所以 B 与 C错误。 8 【正确答案】 B 【试题解析】 栈是先进后出的原则组织数据,所以入栈最早的最后出栈,所以选择 B。 9 【正确答案】 A 【试题解析】 A)选项 struct ord int x; int y; int z; struct

24、 ord a;错误,不能在定义结构体的同时,又用结构体类型名定义变量。应该写成 B)选项或者 D)选 项的格式。 10 【正确答案】 B 【试题解析】 在一个 C语言程序中可以进行多种算法的实现,对算法的个数没有规定,所以 B)错误。 11 【正确答案】 A 【试题解析】 A)选项中 115L 表示 115是长整型数据,合法。 B)选项是八进制常量的表示方法,但是在八进制中不能含有数字 8,所以 B)错误。 C)选项中 e后面应该是整数不能是小数 1.5,所以 C)错误。 D)选项中八进制常量应该是数字 “0“开始,而不是字母 “o“开始。 12 【正确答案】 D 【试题解析】 C语言中标识符

25、由字母、下划线 、数字组成,且开头必须是字母或下划线。所以 D选项中的连接符不合法。 13 【正确答案】 A 【试题解析】 B 与 D选项中取模运算符 %的左右两个操作数均应为整数,所以B、 D错误。 C选项中不能将 x y的值赋给表达式 y*5,所以 C错误。 14 【正确答案】 B 【试题解析】 本题考查把数组名作为函数参数,执行 f 函数后,结构体数组 c的第二个元素被改写, c1.name为 Zhao,选项 B 正确。 15 【正确答案】 D 【试题解析】 本题考查宏定义,宏定义只是做个简单的替换,执行S(k+j)=(k+j)*(k+j)=25,T(k+j)=S(k+j)/S(k+j)

26、+1=(k+j)*(k+j)/(k+j)*(k+j)+1=26,选项D正确。 16 【正确答案】 C 【试题解析】 z x, y, y;因为赋值运算符的优先级高于逗号运算符的优先级,所以可以将上式表示成 (z x ), (y ), ( y)。然后从左向右先计算表达式 z x,因为 x先使用后自增,所以 z的值为 1, x的值为2。再计算逗号表达式第二个表达式 y,此时 y的值为 2,最后计算第三个表达式 y, y的值为 3。 17 【正确答案】 A 【试题解析】 本题目中字符变量 c1 是字符 A的 ASCII码加上 4,即 69所对应的字符 E。 字符变量 c2 是字符 A的 ASCII 码

27、加上 3,即 68所对应的字符 D。但是打印输出时, c1 以 %c的格式输出,所以是 E, c2 以 %d 的格式输出,所以是68。 18 【正确答案】 A 【试题解析】 条件表达式: x表达式 1?表达式 2:表达式 3 的含义是:先求解表达式 1,若为非 0(真 ),则求解表达式 2,将表达式 2的值赋给 x。若表达式 1的值为 0(假 ),则求解表达式 3,将表达 式 3的值赋给 x。在本题中与表达式 1: (xy)等价的是 (x y0)。 19 【正确答案】 D 【试题解析】 在 if else语句中 else总是与离它最近的 if 配对。本题目中 x为 1所以! x为 0,所以执行

28、 else if 语句中的内容,判断 (x 0)是否成立,因为 x为 1所以条件不成立,所以 else if 内部的 ifelse 语句不再执行,所以 y的值还是初始值 0。 20 【正确答案】 A 【试题解析】 B)选项中 switch(int)x);语句中不应该有最后的分号。switch(expr1), 中的 expr1不能用浮点类型或 long类型,也不能为一个字符串,所以 C错误。 case后面常量表达式的类型必须与 switch 后面表达式的类型一致,所以 D错误。 21 【正确答案】 A 【试题解析】 第一次 for循环, y的值为 9, y%3的值为 0,满足条件打印 y,即先减

29、一后打印,所以打印 8;第二次 for循环, y的值为 7, y%3的值为1,不执行打印语句;第三次 for循环, y的值为 6, y%3的值为 0,满足条件打印 y,即先减一后打印,所以打印 5;第四次 for循环, y的值为 4,不满足 if 条件,不执行打印语句;第五次 for循环, y的值为 3,满足 if条件,打印输出 2;第六次 for循环, y的值为 1,不满足条件,不执行打印语句。 22 【正确答案】 C 【试题解析】 第一次外循环 i的值为 1,第一次内循环 j的值为 3,不满足条件执行 m* i*j即 m的值为 3;第二次 j的值为 2,不满足条件执行 m* i*j,即 m

30、的值为 6;第三次 j的值为 1,不满足条件执行 m* i*j,即 m的值仍为 6。第二次外循环 i的值为 2, j的值为 3,满足条件,执行 break 语句,跳出循环。 23 【正确答案】 A 【试题解析】 本题中第一次调用为 fun(8, fun(5,6),因为 fun(5,6)返回值为5,所以第二次调用为 fun(8,5) 6。所以选择 A)。 24 【正确答案】 D 【试题解析】 D)选项中 *f(a, b)表示调用后返回一个指向整型数据的地址指针,即该函数的返回值为指针类型,所以不能将其赋值给整形变量 k。 25 【正确答案】 A 【试题解析】 选项 B)的正确写法应为 p &n;

31、选项 C的正确写法应为scanf(“%d“, p);选项 D的正确写法应为 printf(“%dn“, *p)。 26 【正确答案】 A 【试题解析】 数组说明的一般形式为:类型说明符 数组名 常量表达式 。 B)中N是变量,不能用变量定义数组长度。 C)选项中数组长度是非法的一串数字。定义数组时必须为其指明长度, D)选项中数组长度为空,所以非法。 27 【正确答案】 D 【试题解析】 第一次循环 i为 0, i%2 为 0,执行 switch(a0%2)中的 case 0语句后内容即 a0, a0的值变成 3;第二次循环 i的值为 1, i%2为 1,执行 case 1: ai 0;所以

32、a1的 值变成 0;第三次循环 i的值为 2, i%2 为 0,执行switch(a2%2)中的 case 1语句后的内容 a2, a2的值变成 4;第四次循环 i的值为 3, i%2为 1,执行 case 1: ai 0;所以 a3的值变成 0。 28 【正确答案】 B 【试题解析】 每次内循环只循环一次就结束,第一次外循环时 t tb0b00 1 b00 1 0 1;第二次外循环时 t t b1b11 1b11 1 1 2;第三次外循环时 t t b2b22 2 b22 2 2 4。 29 【正确答案】 A 【试题解析】 数组定义后,不可以对数组整体赋值, s是二维数组,因 ss1是一维字

33、符数组,即字符串,字符串赋值可以使用 strcpy(ss1, “right“);这样的形式,而选项 A中对二维数组中的第 “1“维 (相当于一个一维数组 )赋值,是不可以的。选项 B和 D是定义时对数组初始化,这是可以的。选项 C中,将字符串在内存中的首地址赋给指针数组的一个元素,这是可以的。 30 【正确答案】 A 【试题解析】 do*t *s; while(*s); 不能因为当 *s 0时, while(*s)跳出循环,这样字符串结束标志 0没有复制给 *t,造成 *t不完整。注意, *t *s是先执行 t *s,然后才进行 t t 1, s s 1。 B), C), D)都能将 0复制过

34、去。 31 【正确答案】 D 【试题解析】 字符串是一个特殊的数组,所以按照数组的规则, s1应该指向的是数组的首地址,即 “abc“的第一个字符的地址。 s2指向的是 “123“的第一个字符的地址。调用 swap 函数之后交换的是两个字符串的第一个字符 a和 1的内容,所以打印输出为 D。 32 【正确答案】 C 【试题解析】 本题中由循环条件可知遇到 0或 x与 y所指的字符的值不等中的一个条件时就结束,所以功能是统计 x和 y所指字符串中最前面连续相同的字符个数。 33 【正确答案】 D 【试题解析】 本题目中静态局部变量 x,在静态存储区内分配存储单元。在程序整个运行期间都不释放。所以

35、第一次循环 s的值为 2,第二次循环中,返回的x的值为 4,所以 s的值为 8,第三次循环,返回的 x的值为 8,所以 s的值为64。 34 【正确答案】 A 【试题解析】 全局变量的作用域是从声明处到文件的结束。所以选择 A。 35 【正确答案】 A 【试题解析】 关键字 typedef 的作用只是将 C语言中的已有的数据类型作了置换,并不是增加新的类型,所以 A错误。 36 【正确答案】 D 【试题解析】 声明 data 是结构 S 数组。初始化 data0.a 10; data0.b100; data1.a 20; data1.b 200。主函数中 p data1 ; 即 p.a dat

36、a1.a;p.b data1.b;执行语句 printf(“%dn“, (p.a); 打印输出时 p.a 先增 1再打印。 p.a data1.a 20,先增 1 等于 21。 37 【正确答案】 C 【试题解析】 宏定义不是 C语句,末尾不需要有分号。所以语句printf(“%4.1fn“ , S(a b);展开后为 printf(“%4.1fn“ ,3.5; *a b*a b; );所以程序会出现语法错误。 38 【正确答案】 B 【试题解析】 & 按位与,如果两个相应的二进制位都为 1,则该位的结果值为1,否则 为 0。 | 按位或,两个相应的二进制位中只要有一个为 1,该位的结果值为1

37、。 2的二进制为 00000010,4的二进制为 00000100,所以做或运算结果为00000110,该数与 5即 00000101做与操作结果为 00000100,即 4。 39 【正确答案】 D 【试题解析】 malloc 函数动态分配一个整型的内存空间,然后把函数返回的地址用 (int*)强制类型转换为整型指针,再把它赋给 a, b, c,即让指针变量 a, b, c都指向刚申请的内存空间。所以只有最后一个赋值语句 *c 3的值保留在了该空间内,因为 a, b, c三个指针变量均指向该空间,所以打印该空间内的数值为 3。 40 【正确答案】 A 【试题解析】 B)选项中打开一个已存在的文件并进行了写操作后,原有文件中的全部数据不一定被覆盖,也可以对源文件进行追加操作等。 C选项中在一个程序中当对文件进行了写操作后,不用先关闭该文件然后再打开,才能读到第 1个数据,可以用 fseek()函数进行重新定位即可。 D选项中, C语言中的文件可以进行随机读写。

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

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

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