二级C语言选择题专项强化真题试卷41
选择题
1.有以下程序:
#include<stdio.h>
main()
{
int a=1,b=2,c=3,d=0;
if(a=—1&&b++==2)
if(b!=2||c!=3)
printf(\\(C)
A. 1 2 3
B. 1 3 2
C. 1 3 3
D. 3 2 1
解析:首先a=1,b=2,c=3,d=0;因为a为1,b++本身为b加之前的值,即b++为2,所以第一个if语句的判断条件为真,进入if语句。b经过b++运算后值为3,所以第二个if语句为真(或运算时,一个为真,整体都为真,并且第一个为真时第二个不会被执行运算),这时后面的运算都忽略。
2.有以下程序:
#include<stdio.h>
typedef struct{int b,p;}A;
void f(A c)/*注意:c是结构变量名*/
{ int j;
c.b+=1;c.p+=2;
}
main()
{
int i;
A a={1,2};f(a);
printf(\\(B)
A. 2 4
B. 1 2
C. 1 4
D. 2 3
解析:考查结构体变量作为函数实参整体传递,也是一种值传参,形参的变化不能影响到实参,所以调用函数f(a)对a中的数据没有影响,输出结果为12,答案选B。
3.有以下程序:
#include<stdio.h>
#include<stdlib.h>
void fun(double*p1,double*p2,
double*s)
{
s=(double*)calloc(1,sizeof(double));
*s=*p1+*(p2+1);
}
main()
{
double a[2]={1.1,2.2),b[2]={10.0,20.0},*s=a;
fun(a,b,s);
printf(\\(B)
A. 11.10
B. 1.10
C. 12.10
D. 21.10
解析:函数fun()的功能是用calloc()函数重新分配了1个长度为sizeof(double)的连续空间,并把返回的内存地址赋值给s,之后往新分配的内存中写入数据。由于函数传递过程中形参指针指向的变化不能影响到实参指针的指向,所以函数fun()并不能改变s的指向,*s与a[0]等价,格式输出的结果为1.10,答案选B。
4.设数据元素的集合D={1,2,3,4,5},则满足下列关系R的数据结构中为线性结构的是( )。
B
解析:关系R中的每个结点由两个部分构成,分别是数据域和指针域。选项B中可以看出,元素序列为5→4→1→3→2,符合线性结构的条件。A选项2的前面有1和3两个数值,带有不确定性;C选项2的后面有4和3两个数值;D选项1的后面有3和2两个数值。所以B选项正确。
5.下面对软件测试描述错误的是( )。(B)
A. 严格执行测试计划,排除测试的随意性
B. 随机地选取测试数据
C. 软件测试的目的是发现错误
D. 软件测试是保证软件质量的重要手段
解析:在测试之前制定测试计划,并严格执行,测试用例的选择不可随意,应选择有代表性的,尽可能发现迄今为止尚未发现的错误,故A选项叙述正确,B选项叙述错误。测试根本目的是尽可能多地发现并排除软件中隐藏的错误,故C选项叙述正确。软件测试是保证软件质量、可靠性的关键步骤,故D选项叙述正确。因此,本题正确答案为B选项。
6.有三个关系R、S和T如下:
(B)
A. 自然连接
B. 差
C. 交
D. 并
解析:关系T中的元组是R关系中有而s关系中没有的元组的集合,所以进行的是差的运算。
7.有以下程序:
#include
#nclude
long fun(char s[])
{long n;int sign;
for(;isspace(*s);s++);
sign=(*s==’一’)?一1:1;
if(* s==’+’||*s=’一’)s++;
for(n=0;isdigit(木s);s++)
n=10*n+(*s一’0’);
return sign*n;
}
main()
{ char S[]=\\(D)
A. 一263
B. 2
C. 0
D. 一26
解析:isspace(c)检查参数c是否为空格字符。若参数c为空格字符,则返回TRUE,否则返回NULL(0)。Isdigit(c)函数检查参数c是否为阿拉伯数字0到9。返回值若为阿拉伯数字,则返回TRUE,否则返回NULL(0)。fun()函数的第一个for循环判断字符串是否为负号。第二个for循环获取符号后面的数字字符,并将它们转化为整数。若遇到了非数字的字符则跳出,最后返回数组的结果。因此,可知首先获取负号,紧接着获取数值26,遇到了字符a,跳出返回一26,因此打印的结果是一26。故答案为D选项。
8.若有定义:
typedef int*T[10];
Ta;
则以下选项与上述定义中a的类型完全相同的是( )。(A)
A. int,* a[10];
B. int(*a)[10];
C. int a[10];
D. int(*a[10])();
解析:C语言允许由用户自己定义类型说明符,也就是说允许由用户为数据类型取”别名”。类型定义符typedef即可用来完成此功能,可以完全代替原来的类型说明符。因此,变量a的类型为int*a[10]。typedef int*T[10],由于[]运算符优先级高于*,可以看成typedef im[10]*T,替换T可得int[10]* a=>int*8[10],因此,答案为A选项。
9.能从任意一个节点开始没有重复地扫描到所有节点的数据结构是( )。(A)
A. 循环链表
B. 双向链表
C. 二叉链表
D. 有序链表
解析:在单链表的第一个节点前增加一个表头节点,队头指针指向表头节点,最后一个节点的指针域的值由NULL改为指向表头节点,这样的链表称为循环链表。在循环链表中,只要指出表中任何一个节点的位置,就可以从它出发没有重复地扫描到表中其他所有的节点。双向链表与二叉链表都可以扫描到所有节点,但是会有重复。有序链表如果是单链表的
本文档预览:3600字符,共9638字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载