全国计算机等级考试二级C语言真题题库1 2016年3月
(总分100, 做题时间120分钟)
一、选择题(每小题1分,共40分)
A 1,2,6,24,120,
B 1,2,3,4,5,
C 1,1,1,1,1,
D 1,2,4,6,8,
答案:A
static静态变量只在声明时初始化一次。mul()累乘,第一次init=1,init}=val,第二次init=1,val=2,第三次init=2,val=3,第四次init=6,val=4,第五层init=24,val=5,因此结果为l,2,6,24,120。故答案为A选项。
A 软件是程序、数据和文档
B 软件是程序和数据
D 软件是算法和程序
答案:A
计算机软件由两部分组成:一是机器可执行的程序和数据;二是机器不可执行的,与软件开发、运行、维护、使用等有关的文档。故选A选项。
A 6
B 7
C 8
D 9
答案:A
字符串”\t\¨\\\nV、065\08AB”中共有13个字符,而strlen()函数从字符串第一个字符开始扫描,直到碰到第一个结束符’\0’为止,然后返回计数器值(长度不包含”、O”)。故输出结果为6。答案为A选项。
A O>s
B * P>*s
C a[p]>a[s]
D p—a>P—s
答案:B
函数fun的功能是在形参a所指的具有n个元素的数组中查找最大值并返回。通过for循环比较,s始终指向最大值的那个元素。取指针的值,使用+P,因此比较使用•P和}8,需要找到最大值,当}8<+P时,修改指针s的指向,因此答案为B选项。
A 系统将开辟一个名为P的二维数组,“o][o]中的值即为a[o][o]中的值
B P+1代表a[1][0]的地址
C P中将存放a数组的首地址
D P+2代表a数组最后一行的首地址
答案:A
(+P)[4]定义了一个数组指针。P可以指向类似于arry[][4]的数组,题设中,P不是一个二维数组,只是可以指向这类二维数组,因此选项A错误。P+1代表了第一行第一个元素的地址,P=a指向数组a的首地址,则B、C选项正确,同理可知选项D也正确。故答案为A选项。
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
答案:A
sizeof()是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、对象、函数等。它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。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,l,3。故答案为A选项。
A 2
B 0
C 3
D 1
答案:A
c语言中,逗号运算符可以把两个以上(包含两个)的表达式连接成一个表达式。逗号运算符的优先级是所有运算符中级别最低的,逗号运算符保证左边的子表达式运算结束后才进行右边的子表达式的运算。也就是说,逗号运算符是一个序列点,其左边所有副作用都结束后,才对其右边的子表达式进行运算,并以最右边表达式值作为整个逗号表达式的值。因此变量c的值为a%b即11%3=2。放答案为A选项。
A seanf(”%lf%1f%1P‘&a,&b,&C.;
B scanf(-t%f%f%f¨,&a,&b。&C.:
C scanf(”%If%lf%lf’,a,b,C.;
D scanf(”%lf%lf%lf'’,&a,&b,&C.;
答案:D
%If,%le是针对double类型的,如果仅用%f,输入的数据可能不完全接收,数据的精度可能不足。%f主要针对tloat类型的变量输入,因此选项8错误。根据题目格式可知选项A,C错误。故答案为D选项。
A 3
B p[3]
C str[2]
D *P
答案:A
t p[3]一p[3][0]是一个字符,不是字符串,选项A错误。P[3]和str[2]和+P分别代表了ddd,eec,flaa。答案为A选项。
A
B
C
D n
答案:C
二分法查找也称拆半查找,能使用二分1法查找的线性表必须满足两个条件,用顺序存储结构以及线性f表有序。利用二分法查找元素x的过程如下:将x与线性表1的中间项比较,如果X的值与中间项的值相等,则查找成功,1结束查找;如果x小于中间项的值,则在线性表的前半部分以二分法继续查找;如果x大于中间项的值,则在线性表的后半1部分以二分法继续查找。可以证明,对于长度为n的有序线性f表,在最坏情况下,二分法查找需比较l092n次,故时间复杂度1为l092n。故选择C选项。
A 2
B 0
C 1
D 3
答案:A
P=s,可得P指向s[o],P一>Y指向s[1],现P->Y=s,因此P与Y指向s[0]。因此P->X=1,++PI>x等价于++(P_>x),因此打印结果为2。答案为A选项。
A int*a[10];
B int(*A.[10];
C int a[10];
D int(*a[10]);
答案:A
c语言允许由用户自己定义类型说明符,也就是说允许由用户为数据类型取”别名”。类型定义符typedef即可用来完成此功能,可以完全代替原来的类型说明符。因此,变量a的类型为int}a[10]。typedefint{T[10],由于[]运算符优先级高于•,可以看成typedef int[10]}T,替换T可得int[10],a=>int}a[10],因此,答案为A选项0
A 多对多
B 一对一
C 多对一
D 一对多
答案:A
实体集之间通过联系来建立联接关系分为三类:一对一联系(1:1)、一对多联系(1:m)、多对多联系(m:n)。由于医生可以为病人开不同的药,而同一种药也可由不同医生开给病人,所以两者的联系属于多对多。故选A选项。
*struetlink{ehardata;( )node;
A struetlink*next;
B linknext;
C link$next;
D struetlinknext;
答案:A
存储结构用链式存储。链式结构每个节点有个指针域,指针域指向下一个链式结构的节点,因此指针域的结构应该是该结构形式,因此应定义为struct link}next,故答案为A选项。struct是结构体的说明符,不能省。
A 123
B 12
C 1234
D 12
答案:A
seanf()函数从标准输入输出中读人两个字符~1、’2’分别赋给变量a.b,遇到回车自动结束,但回车符已经存入缓冲区,函数getchar()将从中接受了回车符,故c赋值为回车符,第二个getehar()读入字符’3’,因此a=~1,b=~2,c=<CR>,d=~3。故答案为A选项。
A CB
B BCA
C CCBB
D CDBCA
答案:D
putehox()函数功能是输出~个字符,由while判断条件和ch初始值可知,只要ch’A’,每次执行二次putchar,否则跳出。第一次输出CD,第二次输出Bc,第三次输出A,跳出循环。因此答案为D选项。
A 0,1
B 0,0
C 1,-1
D 0,2
答案:A
for(;++a&&~b;);for循环中第l,3表达式为缺省项,判断条件为++a&&…b;a一2,b=2;,第一次执行了++a和一b,,表示为真,循环条件成立,第二次执行++a为0,由于&&运算符,当第一个条件为假时,不执行第二个条件,所以b=1,发生短路,一b不执行了。因此a,b的最终值0,1。故答案为A选项。
A 9
B -1
C 10
D 0
答案:A
while(P<a+n&&+P!=X)P++;当P=a;n=10,X=10;时while循环条件成立,直到P=a+9,结束循环,执行下一条语句,if条件成立,返回P—a,此时执行P—a=a+9一a=9;因此,输出9。故答案为A选项。
A 数据结构中的数据元素不能是另一数据结构
B 数据结构中的数据元素可以是另一数据结构
C 空数据结构可以是线性结构也可以是非线性结构
D 非空数据结构可以没有根结点
答案:A
数据元素是一个含义很广泛的概念,它是数据的“基本单位”,在计算机中通常作为一个整体进行考虑和处理。数据元素可以是一个数据也可以是被抽象出的具有一定结构数据集合,所以数据结构中的数据元素可以是另一数据结构。满足有且只有一个根结点并且每一个结点最多有一个前件,也最多有一个后件的非空的数据结构认为是线性结构,不满足条件的结构为非线性结构。空数据结构可以是线性结构也可以是非线性结构。非空数据结构可以没有根结点,如非性线结构“图”就没有根结点。故选A选项。
A ,C—STR’
B 2014.1
C ”\1.0
D 2EK
答案:B
所谓常量是指在程序运行的过程中,其值不能被改变的量。在C语言中,有整型常量、实型常量、字符常量和字符串常量等类型。选项A是字符串,但使用单引号,错误,选项c,D,为实型常量中指数形式,但指数形式e(E)之前必须是数字,之后必须为整数,错误。故答案为B选项。
A 编译有错
B 0,0,0,3
C 1,1,2,0
D 0,1,2,0
答案:A
c语言规定else总是和之前与其最近的且不带else的if配对,题目中,if(a=1)b=1;C=2;默认省的else已经配对了,下一句else没有匹配,if为非法else。另外if的判断条件a=1是赋值语句,不是判断语句,此处也会产生编译错误。因此答案为A选项。
A 4
B 2
C 8
D 1
答案:C
在c语言中,需要在main函数后面定义函数,需要提前声明,否则调用报错,无法找到该函数。HI=f(f(f(n))),一共调用3次f()函数,f()函数是对n:it2,因此,结果是n}2}2$2,得到结果为8。故答案为c选项。
A 软件的定义和开发阶段
B 软件的需求分析、设计与实现阶段
C 软件的开发阶段
D 软件产品从提出、实现、使用维护到停止使用退役的过程
答案:D
通常把软件产品从提出、实现、使用、维护到停止使用、退役的过程称为软件生命周期。选项A、B、C选项均为生命周期的一部分。故选D选项。
A 2.400000
B 1.500000
C 1.600000
D 2.000000
答案:A
题目中程序执行过程中关键语句z=x/y的结果为:z=1.5,if条件成立,X=2.4,Y=2.4,Z=1.0,下一次循环if条件不成立跳出循环,按照格式打印Y值为2.400000。故答案为A选项。
A ?
B 3.2G
C ????
D 7.2G
答案:C
二个类型相同的结构体,可以使用一个给另一个初始化,使它们相等。前提是结构体变量所有成员全部初始化了。pcl=pc2,pc2的成员值和pcl中对应的成员相等。因此pcl.CPU输出????。答案为c选项。
A 6
B 8
C 7
D 5
答案:C
后置自增运算:k++表示先运算,后自如。if(t++<6)p血ff(“%d\n”,t);else prinff(“%d、n”,t);t的初值为6,t++<6,则条件为假,执行prinff(“%d、n”,t一),此时t=7,打印t值为k之后进行自减操作t=6。因此打印的结果为7。故答案为C选项。
A 循环链表
B 双向链表
C 二叉链表
D 有序链表
答案:A
在单链表的第一个结点前增加一个表头结点,队头指针指向表头结点,最后一个结点的指针域的值由NULL改为指向表头结点,这样的链表称为循环链表。在循环链表中.只要指出表中任何一个结点的位置,就可以从它出发没有重复地扫描到表中其他所有的结点。双向链表与二叉链表都可以扫描到所有结点,但是会有重复。有序链表如果是单链表的情况下,不能扫描到所有结点。故A选项正确。
A &3
B #3
C j
D -3
答案:C
c语言合法标识名的命名规则是:(1)标识符由字母、数字和下划线组成。(2)第一个字符不能是数字只能是字母或下划线。选项A的第一个字符为&,非法,选项B,第一个字符为#,非法,选项D,第一个字符为一,非法。答案为选项C。
A 可以通过强制类型转换让char型指针指向double型变量
B 函数指针P指向一个同类型的函数f时,必须写成:p=&f;
C 指针P指向一个数组f时,必须写成:p=ecf;
D 一个指针变量P可以指向自身
答案:A
函数指针P指向一个同类型的函数f时,可以写成:p=f,而不能写成材,选项B错误。函数名代表函数的入口地址,指针P指向一个数组f时,可以写成:P=f,也可写成&f,数组名f可以代表数组的首地址,选项c错误。指针变量指向的是地址,是个常量,不能将地址指向另—个地址,选项D错误。char型根据转化原则可以转化为double类型。因此答案为A选项。
A 1,5
B 2,4
C 2,6
D 2,5
答案:A
a>>=1等价于a=a>>1,即a除以2,则a=2,b=(a>>1)+4=1+4=5,因此,打印出来为1,5。答案为A选项。
A 8
B 6
C 7
D 9
答案:C
fun()获取矩阵正反对角线的元素的最f大值,fun()中for(i=0;i<N;i++)l{j=N一(i+1);//反对角线列位置 lif(x[}r1][{r2]<x[i][j]){}rl=i;}r2=j;f}//比较正反对角线的元素,使得}rl,}r2始终只在最大元素|的位置。 }由数组元素可得,正反对角线的最大元素为7。答案为C选项。
A 1
B 2
C 3
D 0
答案:C
new—div()的返回值是int类型,因此,a/b+0.5(其中a,b均为double类型)的小数部分被将被截断。经计算,7.8/3.1+0.5=2.516+0.5=3.016,故打印的结果为3。故答案为C选项。
A 31
B 16
C 17
D 5
答案:A
二叉树遍历可以分为3种:黄序遍历(访问根结点在访问左子树和访问右子树之前)、中序童历(访问根结点在访问左子树和访问右子树两者之问)、后序童历(访问根结点在访问左子树和访问右子树之后)。由结点售互不相同而后序序列与中序序列相同,可知该二叉树所有的结点都没有右子树,所以31个结点的二叉树深度为31:故选A选项。
A 2,2,4,4,
B 2,3,4,
C 2,2,3,4,
D 2,3,3,4,5,6,
答案:C
continue语句的作用是跳过循环体中剩余的语句而强行执行下一次循环。在switch…case语句中,如果没有break会导致多个分支重叠。因此,输入1,2,3,则l执行casel:prinff(”%d,”,b+1);c∞e 2:prinff(”%d,”,b+1);continue;后结束。2则执行c∞e 2:prinff(”%d,”,b+1);continue;3则执行default:printf(”%d,”,b+1);contin—ue;得到的结果是2,2,3,4。故答案为c选项。
A 一个算法所包含的操作步骤应该是有限的
B 任何能通过编译和运行的算法都一定能得到所期望的结果
C 算法中每一条指令必须有确切的含义
D 算法可以用各种描述方法来进行描述
答案:B
算法的特点:零个或多个输入,至少一个输出,可行性(能编程实现),有穷性(有限步出结果),确定性(描述不能有歧义)。可知选项A,c,D正确。c语言中。通过编译,可以运行的程序,不一定符合题目的本意,因此即使可以运行得到结果,也不一定和预期的结果一样,否则就不需要调试和修改程序了,故B选项错误。答案为B选项。
A 发生栈满的错误
B 2
C m
D 0
答案:A
栈是一种特殊的线性表,它所有的插入与删除都限定在表的同一端进行。人栈运算即在栈顶位置插入一个新元素,退栈运算即是取出栈顶元素赋予指定变量。题目中初始状态为top=m+1,可知入栈栈顶指针top=top一1,出栈栈顶指针top=top+1,由于栈长为rn,当top=1时栈满,不能再进行人栈操作。故选A选项。
A I
B J
C K
D H
答案:B
(”%e\n”,’A’+x),x=oxg(16)转为十进制x=9,因此prinff(”%e\n”,7A’+9),打印格式要求是%c,因此需要从字符A,按字母顺序向后偏移9个位置,可得结果为J。故答案为B选项。
A 计算m和n的最小公倍数
B 计算m和n的最大公约数
C 计算m和n的差值
D 找出m和n中的较大值
答案:B
题目使用更相减损术求最大公约数,其思想:l、任意给定两个正整数,判断它们是否都是偶数。若是,则用2约简,若不是则执行第二步。2、以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。因此。故答案为B选项。
A 1 23 4
B 5 431
C 1235
D 32 1 4
答案:C
第一个for循环初始化数组a,分别为l,3,5,随机数,形成了基本有序的序列,再将输入的数字插入到数组a,使他们形成有序序列。因此可以分析出,打印的结果为1,2,3,5。故答案为c选项。
A char **q,*p,c;
p=&c;q=&p;
B char **q,*p,c;
p=&c;q=*p;
C char *q,*p,c;
p=&c;*q=p;
D char *q,*p,c;
q=p;q=*c;
答案:A
由图示可知,e是个普通变量,P指向c,因此P是指针,且P=&c,q指向p,但是P也是指针,因此q是指向指针的指针,q=&p,因此定义是int$+q,宰p,c,q=&p,P=&c,因此答案为A选项。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。