2015年计算机二级考试《C语言》提高练习题汇总三份(3)
1[填空题]下列给定程序中,函数fun的功能是:求ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指的变量中。ss所指字符串数组中共有M个字符串,且串长小于N。
请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。
注意:部分源程序给出如下。
不得增行或删行,也不得更改程序的结构!
试题程序:
参考解析:
【参考答案】
(1)M (2)< (3)k
【考点分析】
本题考查:for循环语句的循环条件;if语句条件表达式;return语句完成函数值的返回。
【解题思路】
填空l:题目指出88所指字符串数组中共有M个字符串,所以for循环语句的循环条件是i
填空2:要求求长度最短的字符串,*n中存放的是已知字符串中长度最短的字符串的长度,将当前字符串长度与+n比较,若小于*n,则将该长度值赋给*n,因此if语句的条件表达式为len<*n。
填空3:将最短字符串的行下标作为函数值返回,变量k存储行下标的值。
2[单选题] 若有定义语句:int m[][3]={1,2,3,4,5,6,7};,则与该语句等价的是
A.int m[][3j={{1,2,3},{4,5,6},{i 7}};
B.int m[][3]={{1,2},{3,4},{5,6,7}};
C.int m[][3]={{1,2,3},{4,5},{6,7}};
D.int nl[][3]={{1},{2,3,4},{5,6,7}};
参考答案:A
参考解析:二维数组的初始化有两种方式,一种是分行初始化,方式为:数据类型数组名[行下标表达式][列下标表达式]={{第0行初值},{第1行初值表},…{最后l行初值表}};,如果初值表只对部分元素赋初值,没有被赋初值的元素将被自动赋值为0。另一种是按二维数组在内存中的排列顺序给各元素赋初值,这种方式就是不分行将所有数据依次列在一个花括号里,方式为:数据类型数组名[行下标表达式][列下标表达式]={初值表};,这种方式的赋值就是将初值表的数据依次赋予数组的每个元素,其中赋值是按照数组元素在内存中的位置进行的。题目中的初始化语句是第二种方法,如果用第一种方法应该是int m[][3]={{1,2,3},{4,5,6{,{7{};,这里应该保证除了最后一行,每一行都满列有3个元素,A选项正确。
3[单选题] 若有以下说明,则( )不是对strcpy库函数正确的调用。
A.strcpy(str2,str1)B.
B.strcpy(str3,str1)
C.strcpy(str1,str2)
D.strcpy(str5,str1)
参考解析:strcpy(s1,s2)函数的功能是将字符串s2复制到字符串s1中。要保证sl存储区能容纳下s2字符串。
4[单选题]下列关于栈的描述中错误的是( )。
A.栈是先进后出的线性表
B.栈只能顺序存储
C.栈具有记忆作用
D.对栈的插入删除操作中,不需要改变栈底指针
参考答案:B
参考解析:栈是线性表的一种,它的特点是先进后出,并且只能在表的一端进行插入和删除操作的线性表,入栈和出栈都在栈顶进行,因此具有记忆作用。栈可以采用顺序存储,也可以采用链式存储。
5[单选题]下列叙述中正确的是( )。
A.线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的
B.线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构
C.线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构
D.线性表的链式存储结构与顺序存储结构在存储空间的需求上没有可比性
参考答案:B
参考解析:线性链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以一般要多于顺序存储结构。
6[单选题] 以下程序段完全正确的是( )。
A.int * p;scanf(”%d”,&p);
B.int*p;scanf(”%d”,P);
C.int k,* P:&k;scanf(’’%d”,P);
D.int k,*p;*P=&k;scanf(”%d”,P);
参考解析:A选项中错在没有对指针进行初始化,是无效指针,并且在scanf(”%d”,&p)中无需再进行取地址操作;B选项中没有对指针进行初始化,是无效指针;D选项中语句+P=&k;的左端t pt是指针所指内存空间的值,&k是地址,应为P=&k。因此C选项正确。
7[单选题] 有以下程序:
程序运行后的输出结果是( )。
A.AfternoonB.ftemoonC.MorningD.oming
参考答案:A
参考解析:本题主函数中定义了一个指针数组a,可以将它看成一个以字符指针为元素的一维数组。和一般的一维数组名能赋给同类型指针变量一样,该字符指针数组也可以赋给指向字符指针的指针,所以数组名a可以用做函数fun()的实参。在fun()函数中,++P操作使形参P往后移动一个字符指针的位置,即指针a[1]的位置。故最后通过础nd()函数输出的字符串为“Afternoon”。因此A选项正确。
8[单选题] 有以下程序:
当执行程序时从键盘上输入Hello Beijing<回车>,则程序运行后的输出结果是( )。
A.hello bajiIlg
B.Hello Beijing
C.HELLO BEIJING
D.hELLO Beijing
参考解析:主程序读取整个字符串存于s中,调用fun函数。字符指针c指向数组S。函数fun的功能是把指针C所指向的字符数组中的所有小写字符转换为大写。嚣cts函数可以把空格作为字符串的一部分输入,以回车作为输入结束。如果·c为小写字符,则}C={C一32(转大写)。因此C选项正确。
9[单选题] 有以下程序段:
当执行上述程序段,并从键盘输入:nalne=Lili nLim=1001<回车>后,name的值为( )。
A.name:=Lili num=1001B.nfll'ne=LiliC.Uli.h.um=D.Lili
参考答案:D
参考解析:在输入格式控制“name=%s num=%d”中,普通字符“ns.111e=num=”在输入时要原样输入,而格式控制符%s和%d对应各自的输入项,将输入的数据赋给相应的输入项。本题中输入“name=Lift hum=1001<回车>”后,将字符串Ijli赋给字符数组llalne,整数1001赋给变量num。因此D选项正确。
10[单选题] 有以下函数:
以下关于aaa函数功能叙述正确的是( )。
A.将串s复制到串t
B.比较两个串的大小
C.求字符串s的长度
D.求字符串s所占字节数
参考解析:本题重点考察的知识点while循环语句的应用。一()函数中,首先定义了一个字符指针t指向形参s,然后通过一个while循环让指针t不断递增,直到t指向字符串结束标识处。当t指向结束标识处时,由于后缀++运算符的原因,它还会被再递增1,所以接下来的t一一;语句让它回到结束标识处。最后返回t—s,s还是指向字符串第l个字符处,而t指向了字符串结尾,故返回值为字符串的长度值。因此C选项正确。