点击查看:2016年9月计算机二级C语言考前40天必做试题汇总
一、选择题(每小题1分,共40分)
(1)对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是( )。
A.快速排序
B.冒泡排序
C.直接插入排序
D.堆排序
(2)下列关于栈的叙述正确的是( )。
A.栈按“先进先出”组织数据
B.栈按“先进后出”组织数据
C.只能在栈底插入数据
D.不能删除数据
(3)在数据库设计中,将E-R图转换成关系数据模型的过程属于( )。
A.需求分析阶段
B.概念设计阶段
C.逻辑设计阶段
D.物理设计阶段
(4)在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是( )。
A.O(n)
B.O(n2)
C.O(log2n)
D.O(nlog2n)
(5)在数据管理技术发展的三个阶段中,数据共享最好的是( )。
A.人工管理阶段
B.文件系统阶段
C.数据库系统阶段
D.三个阶段相同
(6)有三个关系R、S和T如下:
由关系R和S通过运算得到关系T,则所使用的运算为( )。
A.笛卡尔积
B.交
C.并
D.自然连接
(7)设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC的关键字(键或码)为( )。
A.课号,成绩
B.学号,成绩
C.学号,课号
D.学号,姓名,成绩
(8)下列叙述中错误的是( )。
A.C程序可以由多个程序文件组成
B.一个C语言程序只能实现一种算法
C.C程序可以由一个或多个函数组成
D.一个C函数可以单独作为一个C程序文件存在
(9)以下选项中,能用作数据常量的是( )。
A.115L
B.0118
C.1.5e1.5
D.o115
(10)按照c语言规定的用户标识符命名规则,不能出现在标识符中的是( )。
A.大写字母
B.下划线
C.数字字符
D.连接符
(11)设变量已正确定义并赋值,以下正确的表达式是( )。
A.x=y+z+5,+ +y
B.int(15.8%5)
C.x=y*5=x+z
D.x=25%5.0
(12)设有定义:int x=2;,以下表达式中,值不为6的是( )。
A.2*x,x+=2
B.x ++,2*x
C.x*=(1+x)
D.x*=x+1
(13)以下关于逻辑运算符两侧运算对象的叙述中正确的是( )。
A.可以是任意合法的表达式
B.只能是整数0或非0整数
C.可以是结构体类型的数据
D.只能是整数0或1
(17)有以下程序:
程序运行后的输出结果是( )。
A.2,3,3
B.2,3,2
C.2,3,1
D.2,2,1
(18)有以下程序:
已知字母A的ASCII码为65,程序运行后的输出结果是( )。
A.E,68
B.D,69
C.E,D
D.输出无定值
(19)
(20)读取二进制文件的函数调用形式为:fread(buffer,size,count,fp);,其中buffer代表的是( )。
A.一个内存块的字节数
B.一个整型变量,代表待读取的数据的字节数
C.一个文件指针,指向待读取的文件
D.一个内存块的首地址,代表读人数据存放的地址
(21)某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是( )。
A.10
B.8
C.6
D.4
(22)软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是( )。
A.编译程序
B.操作系统
C.教务管理系统
D.汇编程序
(23)有两个关系R、S如下:
由关系R通过运算得到关系S,则所使用的运算为( )。
A.选择
B.投影
C.插入
D.连接
(24)以下四个程序中,完全正确的是( )。
(25)以下选项中,能用作用户标识符的是( )。
A._0_
B.8_8
C.void
D.unsigned
(26)若有定义语句:int x=10;,则表达式x-=x+x的值为( )。
A.0
B.-20
C.-10
D.10
(27)有以下程序:
程序运行后的输出结果是( )。
A.1,2
B.1,0
C.3,2
D.0,0
(28)有以下程序:
(29)若变量X、Y已正确定义并赋值,以下符合C语言语法的表达式是( )。
A.x+1=y
B.++X,y=x - -
C.x=x+10=x+y
D.double(x)/10
(30)若变量已正确定义为int型,要通过语句:scanf("%d,%d,%d”,&a,&b,&C.;给a赋值1、给b赋值2、给c赋值3,以下输入形式中错误的是( )。(注:口代表一个空格符)
A.1,2,3<回车>
B.口口口1,2,3<回车>
C.1,口口口2,口口口3<回车>
D.1口2口3<回车>
(31)以下定义语句中正确的是( )。
(32)以下不能输出字符A的语句是( )。(注:字符A的ASCII码值为65,字符a的ASCII码值为97)
(33)设有定义:int a=1,b=2,c=3;以下语句中执行效果与其他三个不同的是( )。
(34)有以下程序:
程序执行后的输出结果是( )。
A.y=0
B.y=-1
C.y=1
D.while构成无限循环
(35)有以下程序:
程序运行后的输出结果是( )。
(36)若有以下函数首部:int fun(double x[10],int *n)则下面针对此函数的函数声明语句中正确的是( )。
(37)有以下程序:
程序运行后的输出结果是( )。
A.2,1,1,2
B.1,2,1,2
C.2,1,2,1
D.1,2,2,1
(38)若有以下定义:int x[10],* pt=x;则对X数组元素的正确引用是( )。
A.pt+3
B.*&x[10]
C.*(pt+10)
D.*(x+3)
(39)有以下程序:
程序执行后的输出结果是( )。
A.20
B.Z5
C.45
D.36
(40)有以下程序:
程序运行后的输出结果是( )。
A.1,0,7,0,
B.1,2,3,4,
C.1,4,5,9,
D.3,4,8,10,
二、程序填空题(共18分)
下列给定程序中,函数fun的功能是:将形参n中个位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新数,作为函数值返回。例如,输入一个整数27638496,函数返回值为64862。请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!
三、程序修改题(共18分)
下列给定程序中函数fun的功能是:将长整型数中各位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为87653142时,t中的数为7531。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不得增行或删行,也不得更改程序的结构!
四、程序设计题(共24分)
N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,其功能是:求出平均分,并由函数值返回。例如,若学生的成绩是:85 76 69 85 91 72 64 87,则平均分应当是:78.625。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填人你编写的若干语句。
参考答案:
一、选择题
(1)D
【解析】除了堆排序算法的比较次数是O(nlog2n),其他的都是n(n-1)/2。
(2)B
【解析】栈是按“先进后出”的原则组织数据的,数据的插入和删除都在栈顶进行操作。
(3)C
【解析】E-R图转换成关系模型数据则是把图形分析出来的联系反映到数据库中,即设计出表,所以属于逻辑设计阶段。
(4)C
【解析】当有序线性表为顺序存储时才能用二分法查找。可以证明的是对于长度为n的有序线性表,在最坏情况下,二分法查找只需要比较log2n次,而顺序查找需要比较n次。
(5)C
【解析】数据管理发展至今已经历了三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。其中最后一个阶段结构简单,使用方便逻辑性强物理性少,在各方面的表现都最好,一直占据数据库领域的主导地位。所以选择C。
(6)D
【解析】自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以根据T关系中的有序组可知R与S进行的是自然连接操作。
(7)C
【解析】学号是学生表S的主键,课号是课程表C的主键,所以选课表SC的关键字就应该是与前两个表能够直接联系且能唯一定义的学号和课号,所以选择C。
(8)B
【解析】在一个C语言程序中可以进行多种算法的实现,对算法的个数没有规定,所以B错误。
(9)A
【解析】A选项中115L表示115是长整型数据,合法。B选项是八进制常量的表示方法,但是在八进制中不能含有数字8,所以B错误。C选项中e后面应该是整数不能是
小数1.5,所以C错误。D选项中八进制常量应该是数字“0”开始,而不是字母“o”开始。
(10)D
【解析】C语言中标识符由字母、下划线、数字组成,且开头必须是字母或下划线。所以D选项中的连接符不合法。
(11)A【解析】B与D选项中取模运算符%的左右两个操作数均应为整数,所以B、D错误。C选项中不能将x+y的值赋给表达式y*5,所以C错误。
(12)A
(13)A
【解析】C语言的逻辑运算符比较特别,它的操作数没有明确的数据类型,可以是任意合法的表达式,所以选择A。
(14)A
(15)B
【解析】取模运算符“%”,二元运算符,具有左结合性,参与运算的量均为整型。选项B中的a变量是double实型,所以B不符合规定。
(16)D【解析】C语言中利用sizeof()函数判断数据类型长度,在VC6.0平台中,整型int占有4个字节,double型数据占有8个字节。
(17)C
【解折】z=x++,Y++,++y;因为赋值运算符的优先级高于逗号运算符的优先级,所以可以将上式表示成(z=x++),(y++),(++y)。然后从左向右先计算表达式z=x++因为x++先使用后自增,所以z的值为1,x的值为2。再计算逗号表达式第二个表达式y++,此时y的值为2,最后计算第三个表达式++y,y的值为3。
(18)A
【解析】本题目中字符变量cl是字符‘A’的ASCII码加上4,即69所对应的字符‘E’。字符变量c2是字符‘A’的ASCII码加上3,即68所对应的字符‘D’。但是打印输出时,cl以%C的格式输出,所以是E,c2以%d的格式输出,所以是68。
(19)A【解析】条件表达式:x=表达式1?表达式2:表达式3的含义是:先求解表达式1,若为非0(真),则求解表达式2,将表达式2的值赋给x。若表达式1的值为0(假),则求解表达式3,将表达式3的值赋给x。在本题中与表达式1:(x-y)等价的是(x-y<0||x-Y>0)。
(20)A
【解析】B选项中打开一个已存在的文件并进行了写操作后,原有文件中的全部数据不一定被覆盖,也可以对源文件进行追加操作等。C选项中在一个程序中当对文件进行了写操作后,不用先关闭该文件然后再打开,才能读到第1个数据,可以用fseek()函数进行重新定位即可。D选项中,C语言中的文件可以进行随机读写。
(21)C
【解析】根据二叉树的基本性质3:在任意一棵二叉树中,度为0的叶子结点总是比度为2的结点多一个,所以本题中是5+1=6个。
(22)C
【解析】编译软件、操作系统、汇编程序都属于系统软件,只有C教务管理系统才是应用软件。
(23)B
【解析】投影运算是指对于关系内的域指定可引入新的运算。本题中s是在原有关系R的内部进行的,是由目中原有的那些域的列所组成的关系。所以选择B。
(24)B
【解析】C语言中注释语句的注释方法是:/*注释内容*/或//注释一行。所以A与C错误,D选项中预编译命令include前丢掉了“#”号。所以选择B。
(25)A
【解析】C语言中标识符由字母、下划线、数字组成,且开头必须是字母或下划线。另外,关键字不能作为标识符:B中以数字8开头,所以错误。C与D中用的是关键字void与unsigned,所以错误。
(26)C
【解析】算术运算符+的优先级高于-=,且-=的结合方向为自右向左,所以表达式x-=x+x可以表示成x=x-(x+x)=10-(10+10)=-10,选择C。
(27)A
【解析】首先打印b=a+b=1+0=1的值1,此时已给b赋值为1。然后打印a=2*b=2*l=2的值2。所以结果是1,2。
(28)D
【解析】在输人多个数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。所以应按选项D的顺序输入数据。
(29)B
【解析】A选项中不能将变量Y赋给表达式,c选项中错误与A选项一样,D选项中强制类型转换表达式应写威(double)x/10。
(30)D
【解析】scanf()的格式控制串可以使用其他非空白字符,如本题中的逗号,但在输入时必须输入这些字符,以保证匹配。所以逗号必须输入。
(31)B
【解析】A选项语句中b变量还没有定义不能直接用于给a变量赋值。C选项语句中*b、*e表示的是一个实型变量的地址,不能再将&b赋值给指针型变量c。D选项语句中a=0.0后面应该为逗号,不能是分号。
(32)B
【解析】B选项输出的格式为%d,即为整型格式,所以输出字符A的ASCII码值65,而不是字符A。由于大写字母比与其对应的小写字母的ASCII码值小32,所以A正确。字符A的ASCIl码值就是65,所以以%c格式输出可以输出字符A,所以C正确。由于字符A的ASCII码值比字符B的小1,所以D正确。
(33)C
【解析】由于a小于b,所以所有选项中的条纠都为假,C选项中实际执行了a=b;b=c;两个操作。而A、BD选项由于条件不成立,所以什么也没有做,所以选择C选项。
(34)B
【解析】执行y--直到值为0,由于y--是先用再减,所以退出循环时,y的值为-1。
(35)A
(36)B
(37)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。
(38)D 【解析】没有A选项的引用形式。*与&放在一起作用抵消,所以B选项错误,最大只能引用到x[9]。*(pt+i)表示引用指针pt所指元素后的第i个元素,所以C选项错误,最大只能为*(pt+9)。因此D选项正确。
(39)B
【解析】统计1~9九个数中的奇数和,此题考察指向数组的指针。C语言规定数组名代表数组的首地址,也就是第一个元素的地址。因此*(t+i)代表数组的第i+1个元素。程序运行的结果是1+3+5+7+9=25。
(40)A
【解析】该程序首先在定义变量时,对二维数组a[][N]进行赋值操作;调用两数fun,函数fun的功能是将二维数组中的a[0][0]、a[1][1]、a[2][2]和a[3][3]赋值给一维数组,最后将一维数组元素1,0,7,0,输出。
二、程序填空题
【参考答案】
(1)0
(2)10*X
(3)n/10
【考点分析】
本题考查:已知某数,如何求该数各个位数值,已知各个位数值,如何表示该数;除法运算。
【解题思路】
填空1:定义变量t用来存放某数的各个位数值,此处判断t是否为偶数,即对2求余结果是否为0。
填空2:将t作为x的个位数,原来x的各个位上升1位,即x=10*x+1。
填空3:每循环一次,通过除法运算,去掉数值最后一位。
三、程序修改题
【参考答案】
(1)*t=0;
(2)if(d%2!=0)或if(d%2==1)
【考点分析】
本题考查:指针型变量作为函数参数;if语句条件表达式,结合奇偶数的表示方法来确定该表达式内容。
【解题思路】
(1)由函数定义可知,变量t是指针变量,所以对t进行赋初值0是不对的。因为t指向的是存放新数的变量,所以此处应给新数赋初值0,即*t=0。
(2)变量d表示数s各个位上的数,此处的if条件应为判断d是否为奇数。
四、程序设计题
【考点分析】
本题考查:链表的操作,对链表的主要操作有以下几种:建立链表、结构的查找与输出、插入一个结点、删除一个结点。
【解题思路】
题目要求求链表中数据域的平均值,应首先使用循环语句遍历链表,求各结点数据域中数值的和,再对和求平均分。遍历链表时应定义一个指向结点的指针P,因为“头结点”中没有数值,所以程序中让p直接指向“头结点”的下一个结点,使用语句STREC * p=h->next。