第 1 页:选择题 |
点击查看:2018年3月全国计算机二级C语言练习题及答案汇总
一、选择题(每小题1分,共40分)
1[单选题] 若有定义语句:double a,* P=&a;以下叙述中错误的是( )。
A.定义语句中的*号是一个间址运算符
B.定义语句中的*号是一个说明符
C.定义语句中的P只能存放double类型变量的地址
D.定义语句中,*P=&a把变量a的地址作为初值赋给指针变量P
参考答案:A
参考解析:在变量定义double a,* P=&a;中,*号是一个指针运算符,而非间址运算符,所以A错误。
2[单选题] 有以下程序:
程序运行后的输出结果是( )。
A.321
B.12300
C.1
D.123
参考答案:D
参考解析:程序首先将数组a[10]中的元素1、2、3分别写入了文件dl.dat文件中,然后又将dl.dat文件中的数据123,整体写入到了变量n的空间中,所以打印n时输出的数据为123。
3[单选题] 有以下程序:
程序运行后的输出结果是( )。
A.1,0,7,0,
B.1,2,3,4,
C.1,4,5,9,
D.3,4,8,l0,
参考答案:A
参考解析:该程序首先在定义变量时,对二维数组a[][N]进行赋值操作;调用函数fun,函数fun的功能是将二维数组中的a[0][0]、a[1][1]、a[2][2]和a[3][3]赋值给一维数组,最后将一维数组元素1,O,7,0,输出。
4[单选题] 有以下程序段:
程序运行后的输出结果是( )。
A.a=10 b=50 c=30
B.a=10 b=50 c=10
C.a=10 b=30 c=10
D.a=50 b=30 c=50
参考答案:B
参考解析:本题中a>b的条件不满足,所以不执行逗号表达式a=b,b=c;的操作,而是执行c=a操作,即c的值为10。
5[单选题] 有以下程序:
程序执行后的输出结果是( )。
A.y=0
B.y=-1
C.y=1
D.while构成无限循环
参考答案:B
参考解析:执行y--直到值为0,由于y--是先用再减,所以退出循环时,y的值为-l。
6[单选题] 若有定义语句:int x=10;,则表达式x-=x+x的值为( )。
A.0
B.-20
C.-10
D.10
参考答案:C
参考解析:算术运算符+的优先级高于-=,且-=的结合方向为自右向左,所以表达式x-=x+x可以表示成x=x-(x+x)=10-(10+10)=-10,选择C。
7[单选题] 有以下程序段:
程序段:
当执行上述程序段,从键盘上输入555667777abc后,Y的值为( )。
A.566.0
B.55566.0
C.7777.0
D.566777.0
参考答案:A
参考解析:它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。其中的格式命令可以说明最大域宽。在百分号(%)与格式码之间的整数用于限制从对应域读入的最大字符数。所以j的值为55,y的值为566.0,字符数组name为7777abc。
8[单选题] 若有定义语句:double x,y,*px,*py;执行了px=&x;py=&y;之后,正确的输入语句是( )。
A.scanf(”%If%le”,px,py);
B.scanf(”%f%f”&x,&y);
C.sceanf(”%f%f”,x.y);
D.scanf(”%If%If'’,x,y);
参考答案:A
参考解析:因为x,y都是double型数据,所以输入时的格式字符应为%lf,所以B与C错误。D选项中scanf("%lf%If",x,y);应为scanf(“%If%If"”,&x,&y);。
9[单选题] 有以下程序:
程序运行后的输出结果是( )。
A.1,2
B.1,0
C.3,2
D.0,0
参考答案:A
参考解析:首先打印b=a+b=1+0=1的值1,此时已给b赋值为1。然后打印a=2*b=2*1=2的值2。所以结果是1,2。
10[单选题] 有两个关系R、S如下:
由关系R通过运算得到关系S,则所使用的运算为( )。
A.选择
B.投影
C.插入
D.连接
参考答案:B
参考解析:投影运算是指对于关系内的域指定可引入新的运算。本题中S是在原有关系R的内部进行的,是由R中原有的那些域的列所组成的关系。所以选择B。
11[单选题] 下列数据结构中,属于非线性结构的是( )。
A.循环队列
B.带链队列
C.二叉树
D.带链栈
参考答案:C
参考解析:树是简单的非线性结构,所以二叉树作为树的一种也是一种非线性结构。
12[单选题] 若有以下程序段:
程序运行后的输出结果是( )。
A.16
B.8
C.4
D.2
参考答案:C
参考解析:本题考查位运算,属于基础知识,题目中将整型变量8,二进制表达为00001000,右移一位为00000100,即4,选项C正确。
13[单选题] 对于循环队列,下列叙述中正确的是( )。
A.队头指针是固定不变的
B.队头指针一定大于队尾指针
C.队头指针一定小于队尾指针
D.队头指针可以大于队尾指针,也可以小于队尾指针
参考答案:D
参考解析:循环队列的队头指针与队尾指针都不是固定的,随着入队与出队操作要进行变化。因为是循环利用的队列结构,所以队头指针有时可能大于队尾指针,有时也可能小于队尾指针。
14[单选题] 设有定义:
char*c;
以下选项中能够使c正确指向一个字符串的是( )。
ABCD参考答案:A
参考解析:A选项为正确用法,先将字符串存于字符数组中,然后将数组名赋给字符指针(数组名代表数组首地址,定义数组时为其分配确定地址)。C选项错误,getchar()函数只能输入一个字符给字符型变量,而不是字符指针。B选项和D选项有类似的错误,两个选项并无语法错误,但运行时可能会出现问题。因为在B选项和D选项中,字符指针没有被赋值,是个不确定的值,指向一个不确定的内存区域。这个区域可能存放有用的指令或致据。在这个不确定的区域重新存放字符串,可能会发生无法预知的错误。因此A选项正确。
15[单选题] 若变量已正确定义,在if(W)printf(”%d\n”,k);中,以下不可替代w的是( )。
A.a<>b+c
B.ch=getchar()
C.a==b+c
D.a++
参考答案:A
参考解析:选项A是非法的表达式,C语言中没有<>运算符。
16[单选题] 下列排序方法中,最坏情况下比较次数最少的是( )。
A.冒泡排序
B.简单选择排序
C.直接插入排序
D.堆排序
参考答案:D
参考解析:冒泡排序与筒单插入排序与简单选择排序法在最坏情况下均需要比较n(n-1)/2次,而堆排序在最坏情况下需要比较的次数是nlog2n。
17[单选题] 有以下程序:
程序运行后的输出结果是( )。
A.500
B.401
C.503
D.1404
参考答案:C
参考解析:本题重点考察函数的定义和调用,第一次循环,a=0,i=0,返回值a=0*0+1+0=1;第二次循环,a=1,i=10,返回值a=10*10+1+1=102;第三次循环,a=102,i=20,返回值a=20*20+1+102=503;第四次循环,a=503,i=30;不符合i<30,跳出循环,最后结果输出a=503。
18[单选题] 数据库管理系统是( )。
A.操作系统的一部分
B.在操作系统支持下的系统软件
C.一种编译系统
D.一种操作系统
参考答案:B
参考解析:数据库管理系统是数据库的机构,它是一种系统软件,负责数据库中数据组织、数据操纵、数据维护、控制及保护和数据服务等。是一种在操作系统之上的系统软件。
19[单选题] 有以下函数:
该函数的功能是( )。
A.计算s所指字符串的长度
B.比较两个字符串的大小
C.计算s所指字符串占用内存字节的个数
D.将s所指字符串复制到字符串t中
参考答案:A
考解析:首先char*s接受一个字符型数组的首地址并将这个首地址赋给另一个字符型指针char*t,while(*t++)不断循环直到*t为'\0',再将t-1,这时字符指针t指向字符串的最后一个字符,又因为s指向字符数组的首地址即字符串的首地址所以return(t-s)便是返回字符数组中字符串的长度。
20[单选题] 以下选项中,能用作用户标识符的是( )。
A._0_
B.8_8
C.void
D.unsigned
参考答案:A
参考解析:C语言中标识符由字母、下划线、数字组成,且开头必须是字母或下划线。另外,关键字不能作为标识符。B中以数字8开头,所以错误。C与D中用的是关键字void与unsigned,所以错误。
21[单选题] 以下叙述中错误的是( )。
A.使用三种基本结构构成的程序只能解决简单问题
B.结构化程序由顺序、分支、循环三种基本结构组成
C.C语言是一种结构化程序设计语言
D.结构化程序设计提倡模块化的设计方法
参考答案:A
参考解析:使用顺序,选择(分支),循环三种基本结构构成的程序可以解决所有问题,而不只是解决简单问题,所以A错误。
22[单选题] 下列叙述中正确的是( )。
A.栈是“先进先出”的线性表
B.队列是“先进后出”的线性表
C.循环队列是非线性结构
D.有序线性表既可以采用顺序存储结构,也可以采用链式存储结构
参考答案:D
参考解析:栈是先进后出的线性表,所以A错误;队列是先进先出的线性表,所以B错误;循环队列是线性结构的线性表,所以C错误。
23[单选题] 有以下程序:
程序运行后的输出结果是( )。
A.2,1,1,2
B.1,2,1,2
C.2,1,2,1
D.1,2,2,1
参考答案:D
参考解析:int m=1,n=2,*P=&m,*q=&n,*r;即指针变量p指向m,指针变量q指向n,r=p;p=q;q=r;即通过指针变量r,将指针p和指针q的指向交换。因此最后输出1,2,2,1。
24[单选题] 有以下程序:
若想通过键盘输入,使得a1的值为12,a2的值为34,cl的值为字符a,c2的值为字符b,程序运行后的输出结果是:l2,a,34,b。则正确的输入格式是(以下︺代表空格,代表回车)( )。
ABCD参考答案:D
参考解析:在输入多个数据时,若格式控制串中无非格式字符,则认为所有输人的字符均为有效字符。所以应按选项D的顺序输入数据。
25[单选题] 以下不构成无限循环的语句或语句组是( )。
A.n=0:
do{++n;}while(n<=0);
B.n=0;
while(1){n++;}
C.n=10;
while(n);{n--;}
D.for(n=0,i=1;;i++)n+=i;
参考答案:A
参考解析:选项A中do后面的语句只执行了一次便结束了循环;B选项中条件while(1)永远成立,所以是死循环;C选项中n的值为10,而循环体为空语句,所以wilile(n)永远为真,进入死循环;D选项中for语句第二个表达式为空,所以没有判别条件,进入死循环。
26[单选题] 若a是数值类型,则逻辑表达式(a==1)||(a!=1)的值是( )。
A.1
B.0
C.2
D.不知道a的值,不能确定
参考答案:A
参考解析:逻辑或”||”要求只要两边的运算对象有一个非零,结果就为真。虽然不知道a的值,但是若a为l,则左边运算对象为1;若a的值不是1,则右边运算对象的值为1,所以总能保证一边非零,所以结果为真,即1。
27[单选题] 有以下程序:
程序运行后的输出结果是( )。
A.9
B.8
C.7
D.10
参考答案:A
参考解析:题目中静态局部变量a,在静态存储区内分配存储单元,在程序整个运行期间都不释放。所以第一次调用函数执行n+=a++;时a先与n相加在再进行自增。n的值为4,a的值为2,且a变量执行完后空间没有释放。再执行s=s+f
28[单选题] 程序中已构成如下图所示的不带头结点的单向链表结构,指针变量s、p、q均已正确定义,并用于指向链表结点,指针变量s总是作为指针指向链表的第一个结点。
若有以下程序段:
该程序段实现的功能是( )。
A.删除尾结点
B.尾结点成为首结点
C.删除首结点
D.首结点成为尾结点
参考答案:D
参考解析:本题考查链表的操作,本题中首先是s指向了它的下个结点,题目中说明了s总是指向链表的第一个结点,然后while循环找到链表的最后一个元素,然后最后一个元素指向了之前链表的头结点,之前头结点指向了空结点,所以本题实现的功能是使首结点成为尾结点。选项D正确。
29[单选题] 有以下程序(说明:字母A的ASCIl码值是65):
程序运行后的输出结果是( )。
A.BT
B.YE
C.YT
D.BY
参考答案:B
参考解析:本题中执行fun(a)时,会取字符串a的第一个字母B,因为字母B的ASCII码值为66,所以不会输出字母8,函数只会输出ASCII码值为奇数的字母,字母Y的ASCIl码值为89,字母T的ASCII码值为84,字母E的ASCII码值为69。因此B选项正确。
30[单选题] 下列选项中不属于结构化程序设计原则的是( )。
A.可封装
B.自顶向下
C.模块化
D.逐步求精
参考答案:A
参考解析:结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使用goto语句,所以选择A。
31[单选题] 某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是( )。
A.10
B.8
C.6
D.4
参考答案:C
参考解析:根据二叉树的基本性质3:在任意一棵二叉树中,度为0的叶子结点总是比度为2的结点多一个,所以本题中是5+1=6个。
32[单选题] 有以下程序:
程序运行后的输出结果是( )。
A.1*1=11*2=21*3=3
2*2:42*3=6
3*3=9
B.1*1=11*2=21*3=3
2*1=22*2=4
3*1=3
C.1*1=1 .
1*2=22*2=4
1*3=32*3=63*3=9
D.1*1=1
2*1=22*2=4
3*1=33*2=63*3=9
参考答案:A
参考解析:外循环第一次i的值为1,内循环第一次j的初值为1,打印1*1=1;内循环第二次j的值为2,打印1+2=2;内循环第三次j的值为3,打印l*3=3,打印回车换行,退出内循环。外循环第二次i的值为2,内循环第一次j的初值为2,打印2*2=4;内循环第二次j的值为3,打印2*3=6,打印回车换行.退出内循环。外循环第三次i的值为3,内循环第一次j的初值为3.打印3*3=9,打印回车换行,退出内循环。
33[单选题] 以下关于宏的叙述中正确的是( )。
A.宏替换没有数据类型限制
B.宏定义必须位于源程序中所有语句之前
C.宏名必须用大写字母表示
D.宏调用比函数调用耗费时间
参考答案:A
参考解析:宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头,所以B选项中宏定义必须位于源程序中所有语句之前是错误的:宏名一般用大写.但不是必须用大写,所以C选项错误。宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值),所以D选项错误。
34[单选题] 有以下程序:
程序运行后的输出结果是( )。
A.11
B.9
C.6
D.7
参考答案:C
参考解析:strepy:字符串拷贝函数;strlen:求字符串长度函数(注意:不包含字符串结束标识符‘\0’);strcat:字符串连接函数。执行完语句strcat(p,r);后,p数组中存储的元素为a,b,c,d,a,b,c,d,e;执行语句strcpy(p+strlen(q),q);得到的结果是将q所指向的字符串拷贝至p+strlen(q)开始的存储位置,因为strlen的值为3,即从p+3开始存储q中的元素。所以执行完strepy(p+strhn(q),q)语句后,字符数组p[20]的存储元素为a b,e,a,b,c;所以strlen(p)的结果为6。因此C选项正确。
35[单选题] 支持子程序调用的数据结构是( )。
A.栈
B.树
C.队列
D.二叉树
参考答案:A
参考解析:栈支持子程序调用。栈是一种只能在一端进行插入或删除的线性表,在主程序调用子函数时要首先保存主程序当前的状态,然后转去执行子程序,最终把子程序的执行结果返回到主程序中调用子程序的位置,继续向下执行,这种调用符合栈的特点,因此本题的答案为A。
36[单选题] 有以下程序:
程序运行后的输出结果是( )。
A.*2*6
B.*3*5
C.*5
D.*7
参考答案:D
参考解析:d0...while语句是先执行后判断,所以第一次先执行循环体,判断i%3==1的条件,由于i为5,所以余数为2.条件不成立,执行i++,i的值为6,判断while条件为真;第二次执行循环体,同第一次循环的执行过程一样,i的值变为7,判断while条件为真;第三次执行循环体,此时i%3==1,条件成立,再判断i%5==2也成立,打印t与i的值,即*7,然后执行break语句,跳出循环。所以选择D选项。
37[单选题] 有以下程序:
以上程序执行后abc.dat文件的内容是( )。
A.China
B.Chinang
C.ChinaBeijing
D.BeijingChina
参考答案:B
参考解析:本题考查文件操作函数,fwrite和rewind函数,题目中先是将a2字符串写入adc.dat中,然后将写指针回到文件开头,然后写入sl字符串,那么s1字符串就将前5个字符覆盖,所以最终结果为Chinang,选项B正确。
38[单选题] 软件详细设计生产的图如右图:
该图是( )。
A.N-S图
B.PAD图
C.程序流程图
D.E-R图
参考答案:C
参考解析:N-S图提出了用方框图来代替传统的程序流程图,所以A不对。PAD图是问题分析图,它是继承程序流程图和方框图之后提出的又一种主要用于描述软件详细设计的图形表示工具,所以B不对。E-R图是数据库中的用于表示E-R模型的图示工具,所以D不对。根据图中所示表示方法是进行软件详细设计时使用的程序流程图。
39[单选题] 将E-R图转换为关系模式时,实体和联系都可以表示为( )。
A.属性
B.键
C.关系
D.域
参考答案:C
参考解析:从E-R图到关系模式的转换是比较直接的,实体与联系都可以表示成关系,E—R图中属性也可以转换成关系的属性。记
40[单选题] 设有定义:
struct complex
{ int real,unreal;}data1={1,8},data2;
则以下赋值语句中错误的是( )。
A.data2=(2,6);
B.data2=data1;
C.data2.real=data1.real;
D.data2.real=data1.unreal;
参考答案:A
参考解析:A选项中可以在声明变量的同事为data2赋值,但是data2=(2,6);应写作data2={2,6}。所以选择A。
二、程序填空题(共18分)
41[填空题]
下列给定程序中,函数fun的功能是:求ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指的变量中。ss所指字符串数组中共有M个字符串,且串长小于N。
请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:部分源程序在文件BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
参考解析:【参考答案】 (1)M
(2)<
(3)k
【考点分析】
本题考查:for循环语句的循环条件;if语句条件表达式;return语句完成函数值的返回。
【解题思路】
填空1:题目指出ss所指字符串数组中共有M个字符串,所以for循环语句循环条件是i
填空2:要求求长度最短的字符串,+n中存放的是已知字符串中长度最短的字符串的长度,这里将当前字符串长度与*n比较,若小于*n,则将该长度值赋给*n,因此if语句的条件表达式为len<*n。
填空3:将最短字符串的行下标作为函数值返回,变量k储存行下标的值。
三、程序修改题(共18分)
42[简答题]
下列给定程序中函数fun的功能是:将tt所指字符串中的小写字母全部改为对应的大写字母,其他字符不变。
例如,若输入“Ab,cD”,则输出“AB,CD”。
请改正程序中的错误,使它能得出正确的结果。
注意:部分源程序在文件MODIl.C中,不得增行或删行,也不得更改程序的结构!
参考解析:【参考答案】
【考点分析】
本题考查:if语句条件表达式;小写字母转大写字母的方法。
【解题思路】
(1)分析本题可知,要判断字符是否为小写字母,即判断其是否在a~z之间,所以这里需要进行连续的比较,用&&。
(2)从ASCIl码表中可以看出,小写字母的ASCII码值比对应大写字母的ASCII值大32。将字符串中的小写字母改为
大写字母的方法是:从字符串第一个字符开始,根据ASCII码值判断该字母是不是小写字母,若是,则ASCII码值减32即可。
四、程序设计题(共24分)
43[简答题]
编写函数fun,其功能是:实现两个字符串的连接(不要使用库函数strcat),即把p2所指的字符串连接到pl所指的字符串的后面。
例如,分别输入下面两个字符串:
FirstString- -
SecondString
程序运行后的输出结果是: .
FirstString- -SecondString
注意:部分源程序在文件PROG1.C中。 .
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填人你编写的若干语句。
参考解析:【参考答案】
【考点分析】
本题考查:不使用字符串函数实现字符串连接操作。通过for循环语句来完成,不要忘了最后需要加上字符串结束标识‘\0’。
【解题思路】
本题用两个循环完成操作,第1个循环的作用是求出第l个字符串的长度。印将i指到第1个字符串的末尾。第2个循环的作用是将第2个字符串的字符连连第l个字符串的末尾。最后在第1个字符串的结尾加上字符串结束标识'\0'。
微信搜索"考试吧"了解更多考试资讯、下载备考资料
相关推荐: