全国计算机等级考试二级C语言真题题库1+.docx
- 文档编号:3589829
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:16
- 大小:27.10KB
全国计算机等级考试二级C语言真题题库1+.docx
《全国计算机等级考试二级C语言真题题库1+.docx》由会员分享,可在线阅读,更多相关《全国计算机等级考试二级C语言真题题库1+.docx(16页珍藏版)》请在冰豆网上搜索。
全国计算机等级考试二级C语言真题题库1+
全国计算机等级考试二级C语言真题题库12015年9月
(总分:
43.00,做题时间:
120分钟)
一、选择题(每小题1分。
共40分)(总题数:
40,分数:
40.00)
1.下列叙述中正确的是()。
(分数:
1.00)
A.解决同一个问题的不同算法的时间复杂度一般是不同的 √
B.解决同一个问题的不同算法的时间复杂度必定是相同的
C.对同一批数据作同一种处理,如果数据存储结构不同,不同算法的时间复杂度肯定相同
D.对同一批数据作不同的处理,如果数据存储结构相同,不同算法的时间复杂度肯定相同
解析:
[解析]算法的时间复杂度是指执行算法所需要的计算工作量,而计算下作量是用算法所执行的基本运算次数来度量的。
解决同一个问题的不同算法的时间复杂度,可能相同也可能不相同。
算法的时间复杂度与数据存储结构无关,对同一批数据做同一种处理或者不同处理,数据存储结构相同或者不同,算法的时间复杂度都可能相同或者不同。
故选A选项。
2.下列处理中与队列有关的是()。
(分数:
1.00)
A.操作系统中的作业调度 √
B.执行程序中的过程调用
C.执行程序中的循环控制
D.二叉树的遍历
解析:
[解析]队列是指允许在一端进行插入,而在另一端进行删除的线性表。
由于最先进入队列的元素将最先出队,所以队列具有“先进先出”的特性,体现了“先来先服务”的原则。
作业调度是指根据一定信息,按照一定的算法,从外存的后备队列中选取某些作业调入内存,并为它们创建进程、分配资源再将新创建的进程插入就绪队列的过程。
执行程序中的过程调用一般指函数调用,需要调用的时候转入被调用函数地址执行程序,与队列无关。
执行程序中的循环控制是指算法的基本控制结构,包括对循环条件的判定与执行循环体,与队列无关。
二叉树是一个有限的节点集合,二叉树的遍历是指不重复地访问二叉树中的所有节点,与队列无关。
故本题选择A选项。
3.设栈的存储空间为S(1:
m),初始状态为top=m+1。
经过一系列入栈与退栈操作后,top=1。
现又要将一个元素进栈,栈顶指针top值变为()。
(分数:
1.00)
A.发生栈满的错误 √
B.2
C.m
D.0
解析:
[解析]栈是一种特殊的线性表,它所有的插入与删除都限定在表的同一端进行。
入栈运算即在栈顶位置插入一个新元素,退栈运算即是取出栈顶元素并将其赋予指定变量。
题目中初始状态为top=m+1,可知入栈栈顶指针top=top-1,出栈栈顶指针top=top+1,由于栈长为m,当top=1时栈满,不能再进行人栈操作。
故选A选项。
4.设二叉树共有150个节点,其中度为1的节点有10个,则该二叉树中的叶子节点数为()。
(分数:
1.00)
A.71
B.70
C.69
D.不可能有这样的二叉树 √
解析:
[解析]在树结构中,一个节点所拥有的后件个数称为该节点的度,所有节点中最大的度称为树的度。
对任何一棵二叉树,度为0的节点总是比度为2的节点多一个。
如果有一棵二叉树,节点总数为150,假设度为0的节点个数为n,则有n+10+n-1=150,n=70.5,由于节点个数必须是整数,所以不可能有题目中这样的二叉树。
故选择D选项。
5.非空循环链表所表示的数据结构()。
(分数:
1.00)
A.有根节点也有叶子节点 √
B.没有根节点但有叶子节点
C.有根节点但没有叶子节点
D.没有根节点也没有叶子节点
解析:
[解析]在单链表的第一个节点前增加一个表头节点,队头指针指向表头节点,最后一个节点的指针域的值由NULL改为指向表头节点,这样的链表称为循环链表。
循环链表是线性结构,有且只有一个根节点,每一个节点最多有一个前件,也最多有一个后件。
循环链表表头节点为根节点,链表的最后一个节点为叶子节点,虽然它含有一个指向表头节点的指针,但是表头节点并不是它的一个后件。
故选择A选项。
6.设二叉树中共有31个节点,其中的节点值互不相同。
如果该二叉树的后序序列与中序序列相同,则该二叉树的深度为()。
(分数:
1.00)
A.31 √
B.16
C.17
D.5
解析:
[解析]二叉树遍历可以分为3种:
前序遍历(访问根节点在访问左子树和访问右子树之前)、中序遍历(访问根节点在访问左子树和访问右子树两者之间)、后序遍历(访问根节点在访问左子树和访问右子树之后)。
由节点值互不相同而后序序列与中序序列相同,可知该二叉树所有的节点都没有右子树,所以31个节点的二叉树深度为31。
故选A选项。
7.在最坏情况下,堆排序的时间复杂度是()。
(分数:
1.00)
A.O(lgo2n)
B.0(nlog2n) √
C.O(n2)
D.O(n1.5)
解析:
[解析]若有n个元素的序列,将元素按顺序组成一棵完全二叉树,当且仅当满足下列条件时称为堆,大根堆是指所有节点的值大于或等于左右子节点的值;小根堆是指所有节点的值小于或等于左右子节点的值。
在调整建堆的过程中,总是将根节点值与左、右子树的根节点进行比较,若不满足堆的条件,则将左、右子树根节点值中的大者与根节点值进行交换。
堆排序最坏情况下需要O(nlog2n)次比较,所以时间复杂度是0(nlog2n),B选项正确。
8.软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。
下面属于系统软件的是()。
(分数:
1.00)
A.学籍管理系统
B.ERP系统
C.C编译程序 √
D.CAI软件
解析:
[解析]计算机软件按功能分为应用软件、系统软件、支撑软件(或工具软件)。
系统软件是管理计算机的资源,提高计算机的使用效率,为用户提供各种服务的软件。
应用软件是为了应用于特定的领域而开发的软件。
支撑软件介于系统软件和应用软件之间,协助用户开发软件的工具型软件,其中包括帮助程序人员开发和维护软件产品的工具软件,也包括帮助管理人员控制开发进程和项目管理的工具软件,如Dephi、PowerBuilder等。
选项C属于系统软件,A、B、D选项属于应用软件,故选C选项。
9.存储在计算机内有结构的数据集合是()。
(分数:
1.00)
A.数据库 √
B.数据库系统
C.数据库管理系统
D.数据结构
解析:
[解析]数据库是指长期存储在计算机内的、有组织的、可共享的数据集合。
数据库系统是由数据库及其管理软件组成的系统,是应用软件。
数据库管理系统是数据库系统的核心,它位于用户与操作系统之间,属于系统软件。
数据结构是计算机存储、组织数据的方式。
故本题选A选项。
10.在数据库技术中,为提高数据库的逻辑独立性和物理独立性,数据库的结构被划分成用户级、存储级和()。
(分数:
1.00)
A.概念级 √
B.外部级
C.管理员级
D.内部纽
解析:
[解析]数据库系统在其内部分为三级模式,即概念模式、内模式和外模式。
概念模式是数据库系统中全局数据逻辑结构的描述,全体用户的公共数据视图。
外模式也称于模式或者用户模式,是用户的数据视图,也就是用户所能够看见和使用的局部数据的逻辑结构和特征的描述,是与某一应用有关的数据的逻辑表示。
内模式又称物理模式,是数据物理结构和存储方式的描述,是数据在数据库内部的存储方式。
所以数据库的结构被划分成用户级、存储级和概念级。
故选A选项。
11.以下叙述错误的是()。
(分数:
1.00)
A.一个算法所包含的操作步骤应该是有限的
B.任何能通过编译和运行的算法都一定能得到所期望的结果 √
C.算法中每一条指令必须有确切的含义
D.算法可以用各种描述方法来进行描述
解析:
[解析]算法的特点:
零个或多个输入,至少一个输出,可行性(能编程实现),有穷性(有限步出结果),确定性(描述不能有歧义)。
可知A,C,D选项正确。
C语言中,通过编译,可以运行的程序,不一定符合题目的本意,因此即使可以运行得到结果,也不一定和预期的结果一样,否则就不需要调试和修改程序了,故B选项错误。
答案为B选项。
12.以下是正确C语言实型常量的是()。
(分数:
1.00)
A..e-1
B.e-1
C.-1e
D.1e-1 √
解析:
[解析]所谓常量是指在程序运行过程中,其值不能被改变的量。
在C语言中,有整型常量、实型常量、字符常量和字符串常量等类型。
实型常量有两种表示形式:
十进制小数形式、指数形式。
指数形式中e后面的指数必须是整数,阶码标志e之前需要有数字,由此可知A,B,C选项错误。
答案为D选项。
13.以下叙述正确的是()。
(分数:
1.00)
A.在C语言中分号是语句的组成部分 √
B.C语言程序由C语句组成,可以省略main函数
C.分号是C语句之间的分隔符
D.所有程序行都必须用分号结束
解析:
[解析]C程序的入口函数是main(),C程序中有且只有一个main函数,故B选项错误。
分号是C语言一条语句的结束标志,不是分隔符,C语言分隔符是用来分隔多个变量、数据项、表达式等的符号,包括逗号、空白符、分号和冒号等,C选项错误。
C语言的程序不是以分号结束的,因为C语言是面向过程的,从main函数开始在main函数里结束,D选项错误。
故答案为A选项。
14.若有定义:
doublea,b,c;能正确给a,b,c输人数据的语句是()。
(分数:
1.00)
A.scanf("%lf%lf%lf"&a,&b,&c);
B.scanf("%f%f%f",&a,&b,&c);
C.scanf("%lf%lf%lf,a,b,c);
D.scanf("%lf%lf%lf",&a,&b,&c); √
解析:
[解析]%lf,%le是针对double类型的,如果仅用%f,输入的数据可能不完全被接收,数据的精度可能不足。
%f主要针对float类型的变量输入,因此B选项错误。
根据题目格式可知A,C选项错误。
故答案为D选项。
15.有以下程序:
程序运行后的输出结果是()。
(分数:
1.00)
A.I
B.J √
C.K
D.H
解析:
[解析]根据题目给出条件printf(”%c\n”,’A’+x),x=0x9,将十六进制的x转为十进制得x=9,即printf(”%c\n”,’A’+9),打印格式要求是%c,即要求输出一个字符,因此需要从字符A,按字母顺序向后偏移9个位置,可得结果为J。
故答案为B选项。
16.设有定义:
doublex=5.16894;,则语句printf("%lf\n",(int)(x*1000+0.5)/1000.);的输出结果是()。
(分数:
1.00)
A.5.16900 √
B.5.16800
C.0.00000
D.输出格式说明符与输出项不匹配,产生错误信息
解析:
[解析](x*1000+0.5)表示x向右移动3位小数,加0.5,也就是x的小数第4位加5,若这位大于等于5,则进1到个位。
因为“5.16894*1000=5168.94,5168.94+0.5=5169.44”,所以(int)(x*1000+0.5)强制转换为整型结果为5169。
“5169/1000.0=5.169”,由于分母1000.0为浮点型所以结果自动转换为浮点数,故printf(“%lf\n”,5.169)结果是5.16900。
故答案为A选项。
17.有以下程序:
程序输出()。
(分数:
1.00)
A.编译有错 √
B.0,0,0,3
C.1,1,2,0
D.0,1,2,0
解析:
[解析]C语言规定else总是和之前与其最近的且不带else的if配对,题目中,if(a=1)b=1;c=2;默认将与if配对的else省略了,下一句elsed=3;中else没有匹配的if,为非法else。
另外,if的判断条件a=1是赋值语句,不是判断语句,此处也会产生编译错误。
因此答案为A选项。
18.有以下程序:
程序运行后的输出结果是()。
(分数:
1.00)
A.0,1 √
B.0,0
C.1,-1
D.0,2
解析:
[解析]for(;++a&&--b;);for循环中第1,3表达式为缺省项,判断条件为++a&&--b;,a=-2,b=2;,第一次执行了++a和--b,得a=-1,b=1,即-1&&1表示为真,循环条件成立,第二次执行++a为0,由于&&运算符的应用中,当第一个条件为假时,不执行第二个条件,--b不执行了,所以b=1。
因此a,b的最终值为0,1。
故答案为A选项。
19.有以下程序:
执行时输入:
6<回车>,则输出结果是()。
(分数:
1.00)
A.6
B.8
C.7 √
D.5
解析:
[解析]后置自增运算k++表示先运算,后白加。
if(t++<6)printf(“%d\n”,t);elseprintf(“%d\n”,t--);t的初值为6,t++<6,则条件为假,执行printf(“%d\n”,t--);语句,此时t=7,打印的t值为7,之后进行自减操作t=6。
因此打印的结果为7。
故答案为C选项。
20.有以下程序:
程序运行后的输出结果是()。
(分数:
1.00)
A.CB
B.BCA
C.CCBB
D.CDBCA √
解析:
[解析]putchar()函数功能是输出一个字符,由whlie判断条件和ch初始值可知,只要ch>'A',每次循环执行两次putchar(),否则跳出循环。
第一次输出CD,第二次输出BC,第三次输出A,跳出循环。
因此答案为D选项。
21.以下程序拟实现计算s=1+2*2+3*3+…+n*n+…,直到s>1000为止。
程序运行后,不能得到正确结果,以下修改方案正确的是()。
(分数:
1.00)
A.把while(s>1000);改为while(s<=1000); √
B.把s=1;改为s=0;
C.把n=1;改为n=0;
D.把n=n+1;改为n=n*n
解析:
[解析]题目中程序不能实现预期功能是因为while的循环条件错误,在B选项中,把s=1,改为s=0,最终的结果s=4,与题目原意不同;在C选项中,把n=1,改为n=0,最终的结果s=2,与题目原意不同;在D选项中,把n=n+1,改为n=n*n,最终的结果s=2,与题目原意不同;A选项,正确地修改了while循环条件,可以得到正确结果。
故答案为A选项。
22.有以下程序:
该程序的功能是()。
(分数:
1.00)
A.计算m和n的最小公倍数
B.计算m和n的最大公约数 √
C.计算m和n的差值
D.找出m和n中的较大值
解析:
[解析]题目使用更相减损术求最大公约数,其思想:
①任意给定两个正整数,判断它们是否都是偶数。
若是,则用2约简,若不是则执行第二步。
②以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。
继续这个操作,直到所得的减数和差相等为止。
则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。
因此。
故答案为B选项。
23.有以下程序:
则以下函数调用语句错误的是()。
(分数:
1.00)
A.k=f(a,b);
B.k=add(a,b);
C.k=(*f)(a,b);
D.k=*f(a,b); √
解析:
[解析]*与()的优先级为()的优先级高于*,因此(*f)()定义函数指针f。
f指向函数的指针,f=add,将函数add()的首地址赋给指针f,所以调用函数add()可以写为f(),其返回值是整型,不是指针类型,不能用*取指针指向的内存单元的数据,故k=*f(a,b)的调用方式错误。
答案为D选项。
24.若有定义语句:
doublex,y,*px,*py;执行px=&x;py=&y;正确的输入语句是()。
(分数:
1.00)
A.scanf("%lf%lfI",x,y);
B.scanf("%f%f"&x,&y);
C.scanf("%f%f",x,y);
D.scanf("%lf%le",px,py); √
解析:
[解析]%lf,%le是针对double类型的数据,如果仅用%f,输入的数据可能不能被完全接收,数据的精度可能不足。
%f主要针对float类型的变量输入,B选项错误。
根据scanf(格式,变量地址),A,C选项错误。
故答案为D选项。
25.以下定义数组的语句中错误的是()。
(分数:
1.00)
A.intnum[][3]={{1,2},3,4,5,6};
B.intnum[2][4]={{1,2},{3,4},{5,6}}; √
C.intnum[]={1,2,3,4,5,6};
D.intnum[][4]={1,2,3,4,5,6};
解析:
[解析]B选项中,intnum[2][4]={{1,2},{3,4},{5,6}};定义数组是2行4列,但是初始化的结构是3行2列,因此初始化错误。
故答案为B选项。
26.有以下程序:
程序运行后的输出结果是()。
(分数:
1.00)
A.7,8,9,10,6,5,4,3,2,1,
B.10,9,8,7,6,5,4,3,2,1,
C.10,9,8,7,1,2,3,4,5,6, √
D.1,2,3,4,5,6,7,8,9,10,
解析:
[解析]fun()函数的作用是定义了冒泡法排序,flag控制升序(0)或者降序
(1),n为参与排序的元素个数,a为数组的起始地址。
因此,fun(a,4,1)函数即将数组的前4个数据降序排序,fun(a+4,6,0)函数是对数组的第4项后的6个元素进行升序排序。
故结果为10,9,8,7,1,2,3,4,5,6。
答案为C选项。
27.有以下程序:
程序运行后的输出结果是()。
(分数:
1.00)
A.10
B.16
C.6
D.12 √
解析:
[解析]第一个for循环的作用是对数组a赋初值,数组a中各元素值依次为0~9,第二个for循环是计算数组前4项的a[i]+i之和。
0+0,1+1,2+2,3+3,经计算的结果为12,因此答案为D选项。
28.有以下程序:
程序运行后的输出结果是()
(分数:
1.00)
A.1
B.2
C.3 √
D.0
解析:
[解析]new-div()的返回值是int类型,因此,a/b+0.5(其中a,b均为double类型)的小数部分将被截断。
将a、b的值代人进行计算,7.8/3.1+0.5=2.516+0.5=3.016,故打印的结果为3。
故答案为C选项。
29.函数fun的功能是在a所指的具有n个元素的数组中查找最大值并返回给调用函数,函数不完整。
在if语句下划线处应填入的选项是()。
(分数:
1.00)
A.p>s
B.*p>*s √
C.a[p]>a[s]
D.p—a>p—s
解析:
[解析]函数fun()的功能是在形参a所指的具有n个元素的数组中查找最大值并返回。
通过for循环比较,s始终指向最大值的那个元素。
使用*p取指针的值,比较*p和*s,当*s<*p时,修改指针s的指向,因此答案为B选项。
30.有以下程序:
程序运行后的输出结果是()。
(分数:
1.00)
A.10,One*Dream!
√
B.9,0ne*Dream!
C.9,0ne*World
D.10,0ne*World
解析:
[解析]函数strlen(char*s)可以计算字符串s的长度,不包括’\0’在内;p指向数组的第二个元素,因此strlen(p)=10,并打印,故答案为A选项。
31.有以下程序:
程序运行后的输出结果是()。
(分数:
1.00)
A.Beijing!
√
B.toBeijing!
C.WelcomeyoutoBeijing!
D.youtoBeijing!
解析:
[解析]for循环的作用是每次遇到空格,将空格后面的字符移动到数组的最前面。
因此数组最后的状态是“Beijing!
\0g!
\0ng!
\0eijing!
\0”,但是printf(“%s”)打印时遇到\0自动结束。
因此,打印结果为Beijing!
。
故答案为A选项。
32.有以下程序:
程序运行后的输出结果是()。
(分数:
1.00)
A.3,5, √
B.3,6,
C.3,7,
D.0,3,
解析:
[解析]stdic静态变量只在声明时初始化一次。
因此,第一次调用函数f(k=0),此时n=m=k=0,经过自增操作n=1,m=1,k=1,返回值为3。
第二次调用函数f(k=1),此时n=1,k=1,m=0,经过自增操作,n=2,k=2,m=1,返回值为5。
故最终结果为3,5。
故答案为A选项。
33.有以下程序:
程序运行后的输出结果是()。
(分数:
1.00)
A.2
B.1 √
C.3
D.0
解析:
[解析]局部变量覆盖全局变量,但是全局变量的声明周期还存在。
fun()函数调用完成后,由于m为全局变量,其值被修改为32,即函数的返回值为32,此时m=32/12。
第二次调用fun(a,b),函数的返回值为3,此时m=2,故输出为1。
所以答案为B选项。
34.有以下程序:
程序运行后的输出结果是()。
(分数:
1.00)
A.4,5,2,4,1,3, √
B.4,4,2,2,1,1,
C.5,5,3,3,2,2,
D.4,4,2,2,1,3
解析:
[解析]sizeof()是运算符,在头文件中typedef为unsignedint,其值在编译时即计算好了,参数可以是数组、指针、对象、函数等。
它的功能是:
获得保证能容纳实现所建立的最大对象的字节大小。
strlen(*char)函数,要在运行时才能计算,参数必须是字符型指针(char*),当数组名作为参数传入时,实际上数组就退化成指针了,它的功能是:
返回字符串的长度。
该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL,返回的长度大小不包括NULL。
sizeof(a)求数组a所占空间的大小,包括字符串最后的’\0’,所以sizeof(a)=5,而strlen()遇到’\0’就结束,所以strlen(a)=4。
strlen(b)是指针指向的字符串的长度,sizeof(b)是指针的大小。
strlen(c)是字符串的长度,sizeof(c)是数组的长度。
因此,输出4,5,2,4,1,3。
故答案为A选项。
35.以下与存储类别有关的四组说明符中,全部属于静态类的一组是()。
(分数:
1.00)
A.extern和static √
B.auto和static
C.register和static
D.register和extern
解析:
[解析]auto用于声明变量的生存期为自动,即不会将在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而将在两数中定义的变量视为局部变量。
这个关键字通常会被省略,因为所有的变量默认就是auto的。
register定义的变量告诉编译器尽可能地将变量存在CPU内部寄存器中而不是通过内存寻址访问,这样可以提高效率。
static变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。
这一点是它与堆栈变量和堆变量的区别。
变量用static告知编译器,自己仅仅在变量的作用范围内可见。
这一点是它与全局变量的区别。
当static用来修饰全局变量时,它就改变了全局变量的作用域。
extern将变量作用域限制在了当前文件里,但是没有改变其存放位置,还是在全局静态储存区。
extern外部声明,该变量在其他地方有被定义过。
因此,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 全国 计算机等级考试 二级 语言 题库