【计算机类职业资格】二级C语言笔试-80及答案解析.doc

上传人:王申宇 文档编号:1326319 上传时间:2019-10-17 格式:DOC 页数:35 大小:106.50KB
下载 相关 举报
【计算机类职业资格】二级C语言笔试-80及答案解析.doc_第1页
第1页 / 共35页
【计算机类职业资格】二级C语言笔试-80及答案解析.doc_第2页
第2页 / 共35页
【计算机类职业资格】二级C语言笔试-80及答案解析.doc_第3页
第3页 / 共35页
【计算机类职业资格】二级C语言笔试-80及答案解析.doc_第4页
第4页 / 共35页
【计算机类职业资格】二级C语言笔试-80及答案解析.doc_第5页
第5页 / 共35页
点击查看更多>>
资源描述

1、二级 C 语言笔试-80 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:50,分数:60.00)1.用树形结构来表示实体之间联系的模型称为( )。(分数:1.00)A.关系模型B.层次模型C.网状模型D.数据模型2.设 x、y、t 均为 int 型变量,则执行语句:x=y=3;t=+x|+y;后,y 的值为( )。(分数:1.00)A.不定值B.4C.3D.13.设栈 S 的初始状态为空。元素 a、b、c、d、e、f 依次通过栈 S,若出栈的顺序为 b、d、c、f、e、a,则栈 S 的容量至少应该为( )。(分数:1.00)A.3B.4C.5D.64.C 语言中各种

2、基本数据类型的存储空间长度排列为( )。(分数:1.00)A.charlongintfloatdoubleB.doublefloatlongintcharC.charintlongfloatdoubleD.floatintlongchardouble5.下述关于数据库系统的叙述中正确的是( )。(分数:1.00)A.数据库系统减少了数据冗余B.数据库系统避免了一切冗余C.数据库系统中数据的一致性是指数据类型一致D.数据库系统比文件系统能管理更多的数据6.下列选项中,不能用作标识符的是( )。(分数:1.00)A._1234_B._1_2C.int_2_D.2_int_7.下列选项中属于 C 语

3、言构造类型的是( )。(分数:1.00)A.指针类型B.空类型C.枚举类型D.数组类型8.有以下程序段:int x=3doprintf(“%d“,x-=2); while (!(-x);其输出结果是( )。(分数:1.00)A.1B.3 0C.1 -2D.死循环9.若有如下程序:main()char a=“1234“;int i,t=0;for(i=0;ai=0main()printf(“%1d/n“,fun(3);(分数:1.00)A.1B.2C.3D.414.若有如下程序:sub(p,n)int(*p)3,n;int i;for(i=0;i=n;i+)printf(“%d“,pi2);ma

4、in()int s33=1,2,3,4,5,6,7,8,9;sub(s,2);则程序运行后的输出结果是( )。(分数:1.00)A.369B.248C.456D.78915.若有如下程序段:struct studentint num;float score;stu3=10,85,60,58,32,23;main()struct student*t;t=stu;则下面表达式中值为 58 的是( )。(分数:1.00)A.(*t).numB.*(t+)-numC.(*+t)scoreD.(+t)-score16.执行下面程序的正确结果是( )。main()float a=1.9;switch ((

5、分数:1.00)A.case 0:printf(“0000“);17.若有以下定义和语句:int a10=1,2,3,4,5,6,7,8,9,10,*p=a则不能表示 a 数组元素的表达式是( )。(分数:1.00)A.*pB.a10C.*aD.ap-a18.若有如下程序:sub(int a,int b,int c)c=a+b;return(c);main()int x=3,y=4,z=6;sub(x,y,z);printf(%d”,z);则程序运行后的输出结果是( )。(分数:1.00)A.3B.6C.7D.419.对下述程序,正确的判断是( )。main()int a,b;scanf(“%

6、d“,C.intc2=1,2,3,4;D.int d32=1,2,34;33.算法的时间复杂度是指( )。(分数:1.00)A.执行算法程序所需要的时间B.算法程序的长度C.算法程序中的指令条数D.算法执行过程中所需要的基本运算次数34.下述程序的输出结果是( )。# include stdio.hint fun( int(分数:1.00)A.35.有以下程序:main()int aa44:1,2,3,4,5,6,7,8,3,9,10,2,4,2,9,6;int i,S=0;for(i=0;i4;i+) s+=aai1;printf(“%d/n“,s);程序运行后的输出结果是( )。(分数:1

7、.00)A.11B.19C.13D.2036.在最坏情况下,下列排序方法中时间复杂度最小的是( )。(分数:1.00)A.冒泡排序B.快速排序C.插入排序D.堆排序37.下面程序段中的循环体的执行次数是( )。for(i=4;i0;i-)for(j=1;j=4;j+)sum=sum+j;(分数:1.00)A.4B.0C.12D.1638.若 x、y、z、m 均为 int 型变量,则执行下面语句后 m 的值是( )。m=1; x=2; y=3;m=(mx) ? m : x;m=(my) ? m : y;m=(my) ? m : z;(分数:1.00)A.1B.2C.3D.439.C 语言中,函数

8、值类型的定义可以默认,此时函数值的隐含类型是( )。(分数:1.00)A.voidB.intC.floatD.double40.下面不属于软件工程 3 个要素的是( )。(分数:1.00)A.工具B.过程C.方法D.环境41.下面程序的输出结果是( )。# include stdio.hint x=1;void main()int x=2;printf(“%d,“,x);if(x=1)int x=4;printf(“%d,“,x+);printf(“%d“,x+);(分数:2.00)A.2,2B.1,1,2C.2,4,3D.2,342.有以下程序:void fun(char *c,int d)

9、*c=*c+1;d=d+1;printf(“%c,%c,“,*c,d);main()char a=A,b=a;fun(main()printf(“%1d/n“,fun(3);(分数:1.00)A.1 B.2C.3D.4解析:解析 本题的 fun 函数是一个递归函数,当参数 n 为 1 或 2 时返回 2,否则返回 n-fun(n-1)。递推下来就是 n-fun(n-1)=n- (n-1)-fun(n-2)=n-(n-1)+(n-2)-fun(n-3)=直到 fun()函数的参数等于 1 或 2,故 fun(3)=3-fun(2)=3-2=1。所以答案是 A。14.若有如下程序:sub(p,n)

10、int(*p)3,n;int i;for(i=0;i=n;i+)printf(“%d“,pi2);main()int s33=1,2,3,4,5,6,7,8,9;sub(s,2);则程序运行后的输出结果是( )。(分数:1.00)A.369 B.248C.456D.789解析:解析 本题首先定义了一个二维数组,然后将数组名作为参数传递给子函数 sub(),在子函数中使用了一个循环,循环变量 i 从 0 递增到 n(n 为 2),即循环了 3 次,依次输出数组的 a02、a12、a22三个元素,所以程序运行后输出的结果是 369,应该选择 A。15.若有如下程序段:struct studenti

11、nt num;float score;stu3=10,85,60,58,32,23;main()struct student*t;t=stu;则下面表达式中值为 58 的是( )。(分数:1.00)A.(*t).numB.*(t+)-numC.(*+t)scoreD.(+t)-score 解析:解析 本题是以结构体指针的方式防问结构体数组中的元素。main()函数之前声明了一个结构体,并在声明同时定义了一个全局结构体数组 stu3。主函数中,第一行定义了一个该结构体的指针 t,然后让 t 指向 stu,即 t 指向的是数组 stu 的第一个元素。选项 A 提取的是数组第一个元素的 num 成员

12、,值为10,不符合题意。选项 B 使用了一个后缀自增运算符,使 t 指向第二个元素,但 t+表达式返回的还是第一个元素的指针,故结果与选项 A 相同,不符合题意,选项 C 语法错误编译不会通过。故应该选择 D。16.执行下面程序的正确结果是( )。main()float a=1.9;switch ((分数:1.00)A.case 0:printf(“0000“);解析:解析 switch 语句只接受 int 型变量,如果不是则隐式转换为 int,由于 C 语言中 float 到 int的转换是截尾取整,故在 switch 中从 case 1:标号处开始执行,首先输出 4 个 1。此时又因为 c

13、ase 2:之前并没有 break;之类的跳转语句,所以 case 2:标号处的语句也被执行,输出 4 个 3。最后以默认的浮点数格式输出变量 a,变量 a 在 switch 语句中并未被改变,故最后输出为 1.900000,所以应该选择B。17.若有以下定义和语句:int a10=1,2,3,4,5,6,7,8,9,10,*p=a则不能表示 a 数组元素的表达式是( )。(分数:1.00)A.*pB.a10 C.*aD.ap-a解析:解析 程序中定义了数组 a10,则其元素的下标范围为 09,而 B 选项中的 a10所表示的元素已经超出 a 数组元素的范围,故应该选择 B。18.若有如下程序

14、:sub(int a,int b,int c)c=a+b;return(c);main()int x=3,y=4,z=6;sub(x,y,z);printf(%d”,z);则程序运行后的输出结果是( )。(分数:1.00)A.3B.6 C.7D.4解析:解析 本题定义了个子函数 sub(),因为 sub()的形参为 int 型变量,而不是指针,即为传值调用,所以 sub()函数不会改变实参 x、y、z 的值,故最后输出结果为 6,应该选择 B。19.对下述程序,正确的判断是( )。main()int a,b;scanf(“%d“,C.intc2=1,2,3,4;D.int d32=1,2,34

15、; 解析:解析 选项 A 中,数组的长度使用了变量 N,而在 C 语言中是不能用变量来定义数组的长度的,故选项 A 错误。在 C 语言中,给二维数组赋初值时,行数不能超过定义的行数,每行的初值个数不能超过定义时的列数,故选项 B 错误。选项 C 数组的第二维下标默认,而在 C 语言中,数组的第二维下标不能默认,故选项 C 错误。所以,D 选项为所选。33.算法的时间复杂度是指( )。(分数:1.00)A.执行算法程序所需要的时间B.算法程序的长度C.算法程序中的指令条数D.算法执行过程中所需要的基本运算次数 解析:解析 算法的时间复杂度实际上就是执行算法程序所需要的计算工作量,也就是算法执行过

16、程中所需要的基本运算次数,与编写算法程序所使用的程序设计语言、执行算法程序时所使用的计算工具以及程序员的水平无关。34.下述程序的输出结果是( )。# include stdio.hint fun( int(分数:1.00)A.解析:解析 本题主函数中的 for 循环会循环两次,即输出连续两次调用 fun(2)的返回值。在 fun()函数中定义了一个静态变量 c,第一次调用 fun()时 c 被初始化为 3,然后自增为 4,最后输出 a+b+c 为2+1+4=7。由于静态变量的生存周期为整个程序执行周期,所以第二次调用 fun()时 c 的值为 4,然后自增为 5,故最后输出 a+b+c 为

17、2+1+5=8。所以程序的输出结果是 78,应该选择 C。35.有以下程序:main()int aa44:1,2,3,4,5,6,7,8,3,9,10,2,4,2,9,6;int i,S=0;for(i=0;i4;i+) s+=aai1;printf(“%d/n“,s);程序运行后的输出结果是( )。(分数:1.00)A.11B.19 C.13D.20解析:解析 c 语言规定,数组元素的下标是从零开始的。本题首先定义了一个二维数组 aa 并按行赋初值,定义了一个变量 s 用于求和。for 循环执行了 4 次分别把数组元素 aa01、aa11、aa211和 aa31的值(2,6,9,2)加到变量

18、 s 中,s 的值为 19,最后输出的 s 的值为 19。所以 4 个选项中 B正确。36.在最坏情况下,下列排序方法中时间复杂度最小的是( )。(分数:1.00)A.冒泡排序B.快速排序C.插入排序D.堆排序 解析:解析 在最坏情况下:冒泡排序需要的比较次数为 n(n-1)/2;快速排序需要的比较次数也为 n(n-1)/2;插入排序需要的比较次数也为 n(n-1)/2;堆排序需要比较的次数为 O(nlog2n)。可知,在最坏情况下,堆排序的时间复杂度最小,本题的正确答案为选项 D。37.下面程序段中的循环体的执行次数是( )。for(i=4;i0;i-)for(j=1;j=4;j+)sum=

19、sum+j;(分数:1.00)A.4B.0 C.12D.16解析:解析 本题是一个双重循环,而外循环的循环条件 iO 在刚开始的时候就不满足(i 的初值为 4),所以循环体一次也不会执行。故应该选择 B。38.若 x、y、z、m 均为 int 型变量,则执行下面语句后 m 的值是( )。m=1; x=2; y=3;m=(mx) ? m : x;m=(my) ? m : y;m=(my) ? m : z;(分数:1.00)A.1 B.2C.3D.4解析:解析 ?:运算符首先执行?之前的表达式,如果表达式的值为真,则返回?和:之间的表达式的值,否则返回:之后的表达式的值。本题中 m 比 x 和 y

20、 都要小,所以,3 个表达式都没有改变 m 的值,故应该选择 A。39.C 语言中,函数值类型的定义可以默认,此时函数值的隐含类型是( )。(分数:1.00)A.voidB.int C.floatD.double解析:解析 C 语言规定:在定义函数时,若其返回值类型为 int,则可以默认。所以 4 个选项中 B 正确。40.下面不属于软件工程 3 个要素的是( )。(分数:1.00)A.工具B.过程C.方法D.环境 解析:解析 软件工程包括 3 个要素,即方法、工具和过程。环境不属于软件工程的 3 个要素之一。41.下面程序的输出结果是( )。# include stdio.hint x=1;

21、void main()int x=2;printf(“%d,“,x);if(x=1)int x=4;printf(“%d,“,x+);printf(“%d“,x+);(分数:2.00)A.2,2 B.1,1,2C.2,4,3D.2,3解析:解析 虽然全局变量的作用域是整个程序,但如果某个函数或语句块中又声明了同名的局部变量,则全局变量被屏蔽,在该函数或语句块中所用到的该变量都是那个同名的局部变量。所以,本题程序第二行定义的全局变量 int x=1;可完全忽略,故程序输出结果为 2,2,故应该选择 A。42.有以下程序:void fun(char *c,int d)*c=*c+1;d=d+1;p

22、rintf(“%c,%c,“,*c,d);main()char a=A,b=a;fun(&b,(分数:2.00)A.;printf(“%c,%c/n“,a,B.;程解析:解析 程序中定义了两个字符型变量a和b,并分别赋初值为A和a,然后调用函数 fun(),将 b 的地址和 a 值作为实参。在函数 fun()中第一个参数是传递地址,故在调用函数 fun()中对参数做的修改(即将 b 值加一)将影响字符型变量的值(变为 b),函数 fun()第二个参数是传值的,故在调用函数fun()对第二个参数做的修改不影响字符型变量 a(即a的值仍为A),所以在 fun()函数中输出的 d 为b,B,接着在主

23、函数中,输出 a,b,然后退出 fun()函数,接着执行后面的语句,输出 A,b。所以最后输出为 b,B, A,b。4 个选项中 D 正确。43.设 a、b、c、d、m、n 均为整型变量,且 a=3、b=6、c=7、d=8、m=2、n=1,则逻辑表达式“(m=ab)&(n=cd)”运算后,n 的值为( )。(分数:2.00)A.0B.1 C.2D.3解析:解析 在&运算中,当第一个表达式的值为假时,第二个表达式将不再运算。由于在表达式(m=ab)&(n=cd)中,ab 的值为 0,即第一个表达式的值为假,第二个表达式将不再运算,所以 n 的值没有变化,仍然为 1。所以,4 个选项中选项 B 符

24、合题意。44.当执行下面的程序时,如果输入 ABC,则输出的结果是( )。#includeStdlib.hmain()char ss=“1,2,3,4,5“;gets(ss);strcat(ss,“6789“);printf(“%s/n“,ss);(分数:2.00)A.ABC6789 B.ABDC67C.123ABC678D.ABC456789解析:解析 本题程序一开始定义了一个字符数组 ss,并用一个字符串常量初始化之。然后使用 gets()函数从键盘缓冲区读入一个字符串“ABC“,此时 gets()将改变数组的前 4 个元素为A,B,C,/0。接下来的 strcat()函数将一个字符串连接

25、到字符串 ss 之后,因为 ss3被 gets()设置为/0(字符串结束标志),故 strcat()从 ss3开始将“6789“依次写入 ss3、ss4、ss5、ss6,并将一个/0写入 ss7。所以输出结果是 ABC6789,故应该选择 A。45.以下对枚举类型名的定义中正确的是( )。(分数:2.00)A.enum a=one,two,three;B.enum aone=9,two=-1three=200; C.enum a=“one“,“two“,“four“;D.enum a“nine“,“two“,“three“;解析:解析 枚举类型的定义类似于结构体和共用体,所以选项 A 和 C

26、不正确。大括号中的枚举元素应该使用合法标识符来定义,而不是字符串常量,所以选项 D 不正确。故应该选择 B。46.下列叙述中正确的是( )。(分数:2.00)A.在模块化程序设计中,一个模块应尽量多的包括与其他模块联系的信息B.在自顶向下、逐步细化的设计过程中,首先应设计解决问题的每一个细节C.在模块化程序设计中,一个模块内部的控制结构也要符合结构化原则 D.在程序设计过程中,不能同时采用结构化程序设计方法与模块化程序设计方法解析:解析 模块化设计要求分解大程序,使每个模块都能易于理解,各模块的功能尽量单一,各模块之间的联系尽量少,选项 A 错误:在自顶向下、逐步细化的设计过程中,是按照先全局

27、后局部、先整体后细节、先抽象后具体的方法设计程序,选项 B 错误;在模块化程序设计中,一个模块内部的控制结构也要符合结构化原则,所以,在程序设计过程中,结构化程序设计方法与模块化程序设计方法是要同时采用的,选项 D 错误。47. (分数:2.00)A. B.C.D.解析:*48.下列叙述中正确的是( )。(分数:2.00)A.实体集之间一对一的联系实际上就是一一对应的关系B.关系模型只能处理实体集之间一对一的联系C.关系模型属于格式化模型D.以上三种说法都不对 解析:解析 实体集之间一对一的联系不一定是一一对应的关系,选项 A 错误;关系模型中可以直接描述多对多的实体联系,选项 B 错误;关系

28、模型是与格式化模型完全不同的数据模型,它用表格数据来表示实体本身及其相互之间的联系,建立在数学理论基础上,选项 C 错误。49.执行下列程序的输出结果是( )。main()unionint b;char c2;y;y.b=0x4142;printf(“%c,%c“,y.c1,y.c0);(分数:2.00)A.65,66B.a,bC.B,AD.A,B 解析:解析 共用体中的成员是共享同一内存区域的,另外,整数在内存中的表示是低字节在前高字节在后,所以给 y.b 赋值 0x4142,等价于给 y.c0赋值 0x42(字符 B),y.c1赋值 Ox41(字符 A)。所以本题输出的结果是 A,B。故应

29、该选择 D。50.若有如下程序:main()int a,b,C,m,n,k;m=n=k=0; a=-1;b=2; C=3;if(c0)m=a+b;if(a=0)if(b0)if(c=0)n=a=b;else if(c0)n=a-b;else k/=c;printf(“%d,%d, %d,“,m,n,k);则程序运行后的输出结果是( )。(分数:2.00)A.1,0,0 B.2,-3,3C.1,-3,3D.1,0,3解析:解析 本题首先声明了 6 个 int 型变量,然后分别让 m、n、k 为 0,a 为-1,b 为 2,c 为 3。接下来因为 cO 为真,故执行子句“m=a=b;”,结果使 m

30、 的值变为 1;然后判断 a 是否=0,结果也为真,进入大括号里面;由于 bO 为真,再判断 c=0,为假。所以子句“n=a=b;”没有执行,跳出大括号。而后面的 else if 语句和 else 语句因为大括号的原因,使其对应第二个 if 语句,而第二个 if 语句的条件已满足(进入大括号之前),所以这两条 else 语句的子句不被执行,故最后输出结果为 1,0,0,所以应该选择 A。二、填空题(总题数:17,分数:40.00)51.设一棵二叉树中有 3 个叶子结点,有 8 个度为 1 的结点,则该二叉树中总的结点数为 【1】 。(分数:2.00)填空项 1:_ (正确答案:13)解析:解析

31、 在任意一棵二叉树中,叶子结点总是比度为 2 的结点多一个。本题中的二叉树有 3 个叶子结点,所以,该二叉树有 3-1=2 个度为 2 的结点;又知本题中的二叉树有 8 个度为 1 的结点。所以,本题中的二叉树总结点数为:叶子结点数+度为 l 的结点数+度为 2 的结点数=3+8+2=13。所以,本题的正确答案为 13。52.类是一个支持集成的抽象数据类型,而对象是类的 【2】 。(分数:2.00)填空项 1:_ (正确答案:实例)解析:解析 在面向对象的程序设计中,类描述具有相似性质的一组对象,具体对象称为类的实例。53.结构化设计主要分为系统设计和模块设计, 【3】 的任务是决定系统的模块

32、结构。(分数:2.00)填空项 1:_ (正确答案:系统设计)解析:解析 结构化设计主要分为系统设计和模块设计。系统设计决定系统的模块结构,模块设计具体考虑每个模块内部的算法、模块输入、输出及模块功能。54.数据模型分为格式化模型与非格式化模型,层次模型与网状模型属于 【4】 。(分数:2.00)填空项 1:_ (正确答案:格式化模型)解析:解析 层次模型与网状模型属于格式化模型。55.数据库系统中实现各种数据管理功能的核心软件称为 【5】 。(分数:2.00)填空项 1:_ (正确答案:数据库管理系统)解析:解析 数据库系统中实现各种数据管理功能的核心软件称为数据库管理系统,负责数据库中所有数据的存储、检索、修改以及安全保护等,数据库内的所有活动都是在其控制下进行。56.若下面程序的输出结果是 4,请填空。main()int i,j,k;k = 0 ; i = j = 【6】 ;k+=-(i+j);printf(“%d/n“,k);(分数:2.00)填空项 1:_ (正确答案:-2)解析:解析 题日中定义并初始化了变量 k 为 0,最后输出 k 的值,要求为 4,而在此期间只有 k+=-(i+j);这条语句改变了 k 的值,即要求表达式-(i+j)的值为 4。所以,答案应该为-2,因为只有 i=j=-2时,表达式-(i+j)的值才为 4。

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

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

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