国家二级(C语言)机试模拟试卷39 (题后含答案及解析)
题型有:1. 选择题 2. 程序填空题 3. 程序修改题 4. 程序设计题
选择题
1. 下列叙述中正确的是
A.一个算法的空间复杂度大,则其时间复杂度也必定大
B.一个算法的空间复杂度大,则其时间复杂度必定小
C.一个算法的时间复杂度大,则其空间复杂度必定小
D.算法的时间复杂度与空间复杂度没有直接关系
正确答案:D
解析:算法的空间复杂度是指算法在执行过程中所需要的内存空间,算法的时间复杂度,是指执行算法所需要的计算工作量,两者之间并没有直接关系,答案为D。 
2. 下列叙述中正确的是
A.循环队列中的元素个数随队头指针与队尾指针的变化而动态变化
B.循环队列中的元素个数随队头指针的变化而动态变化
C.循环队列中的元素个数随队尾指针的变化而动态变化
D.以上说法都不对
正确答案:A
解析:在循环队列中,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置。因此,从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素。所以循环队列中的元素个数与队头指针和队尾指针的变化而变化,A正确。 
3. 一棵二叉树中共有80个叶子结点与70个度为1的结点,则该二叉树中的总结点数为
A.219
B.229
C.230
D.231
正确答案:B
解析:二叉树中,度为0的节点数等于度为2的节点数加1,即n2=n0-1,叶子节点即度为0,则n2=79,总结点数为n0+n1+n2=80+70+79=229,答案为B。 
4. 对长度为10的线性表进行冒泡排序,最坏情况下需要比较的次数为
A.9
B.10
C.45
D.90
正确答案:C
解析:冒泡法是在扫描过程中逐次比较相邻两个元素的大小,最坏的情况是每次比较都要将相邻的两个元素互换,需要互换的次数为9+8+7+6+5+4+3+2+1=45,选C。 
5. 构成计算机软件的是
A.源代码
B.程序和数据
C.程序和文档
D.程序、数据及相关文档
正确答案:D
解析:软件指的是计算机系统中与硬件相互依赖的另一部分,包括程序、数据和有关的文档,选D。 
6. 软件生命周期可分为定义阶段、开发阶段和维护阶段,下面不属于开发阶段任务的是
A.测试
B.设计
C.可行性研究
c语言的冒泡排序算法D.实现
正确答案:C
解析:开发阶段包括分析、设计和实施两类任务。其中分析、设计包括需求分析、总体设计和详细设计3个阶段,实施则包括编码和测试两个阶段,C不属于开发阶段。 
7. 下面不能作为结构化方法软件需求分析工具的是
A.系统结构图
B.数据字典(DD)
C.数据流程图(DFD图)
D.判定表
正确答案:A
解析:结构化方法软件需求分析工具主要有数据流图、数据字典、判定树和判定表。 
8. 在关系模型中,每一个二维表称为一个
A.关系
B.属性
C.元组
D.主码(键)
正确答案:A
解析:关系模型采用二维表来表示,即每个二维表称为一个关系。 
9. 若实体A和B是一对多的联系,实体B和C是一对一的联系,则实体A和C的联系是
A.一对一
B.一对多
C.多对一
D.多对多
正确答案:B
解析:A和B为一对多的联系,则对于A中的每一个实体,B中有多个实体与之联系,而B与C为一对一联系,则对于B中的每一个实体,C中之多有一个实体与之联系,则可推出对于A中的每一个实体,C中有多个实体与联系,所以为一对多联系。 
10. 有三个关系R、S和T如下:则由关系R和S得到关系T的操作是
A.选择
B.投影
C.交
D.并
正确答案:D
解析:关系T中的元素与关系R和关系S中不同元素的总和,因此为并操作。 
11. 我们所写的每条C语句,经过编译最终都将转换成二进制的机器指令。关于转换以下说法错误的是
A.一条C语句可能会被转换成零条机器指令
B.一条C语句可能会被转换成多条机器指令
C.一条C语句对应转换成一条机器指令
D.某种类型和格式的C语句被转换成机器指令的条数是固定的
正确答案:C
解析:一个C语句经过编译后产生若干条机器指令,声明部分不是语句,不产生机器指令,只是对有关数据的声明,而且固定类型和格式的C语句被转换成机器指令的条数固定,所以选择C选项。 
12. 关于while(条件表达式)循环体,以下叙述正确的是
A.循环体的执行次数总是比条件表达式的执行次数多一次
B.条件表达式的执行次数总是比循环体的执行次数多一次
C.条件表达式的执行次数与循环体的执行次数一样
D.条件表达式的执行次数与循环体的执行次数无关
正确答案:B
解析:while循环是先判断条件,满足条件后执行循环体,执行完后接着判断条件,执行,直到最
后一次判断条件后不成立,跳出循环,所以最后一次执行了条件表达式,但是没有执行循环体,所以选择B选项。 
13. 关于C语言的符号常量,以下叙述中正确的是
A.符号常量的符号名是标识符,但必须大写
B.符号常量是指在程序中通过宏定义用一个符号名来代表一个常量
C.符号常量在整个程序中其值都不能再被重新定义
D.符号常量的符号名必须是常量
正确答案:B
解析:在C语言中,可以用一个标识符来代表一个常量,称为符号常量,这个标识符必须在程序中进行特别的指定,并符合标识符的命名规则,用作符号常量的标识符通常采用大写字母表示,在主函数中其值不能再被定义,所以选择B选项。 
14. 若有以下程序    #include <stdio.h>    main(  )    {  int  b=10, a=-11;      a %= b %= 4;      printf(%d %d\n, a, b);    }则程序的输出结果是
A.1  2
B.-1  2
C.-3
D.2015/1/2
正确答案:B
解析:先计算b%=4,即b=b%4,结果为2,然后计算a%=2,结果为-1,最后a的值为-1,b的值为2,所以选择B选项。 
15. 若有以下程序    #include <stdio.h>    main(  )    {  int  a=0,b=0,c=0;        c= (a -= ++a), (a+=b, b+=4);      printf(%d,%d,%d\n,a,b,c);    }则程序的输出结果是
A.0,4,0
B.0,4,4
C.1,4,1
D.1,4,4
正确答案:A
解析:逗号运算符的结合性从左到右,因此逗号表达式将从左到右进行计算。且逗号运算符的优先级最低,所以先计算c=(a-=++a)这部分。其中,赋值运算符从右往左计算,先执行++a,a自增1后再赋值,所以a的值为1,执行a=a-1,即a=1-1,a的值为0,并将0赋给变量c?第二部分(a+=b,b+=4),先执行a=a+b,a=0+0,即a的值为0,然后执行b+=4,b=0+4,即b的值为4?所以打印结果为0,4,0,选择A选项? 
16. 若有以下程序    #include <stdio.h>    main(  )    { int a=0,b=0,c=0,d;      c= (a+=b,, b+=a);    /*第4行*/      d=c;;      /*第5行*/      ; /*第6行*/      ;printf(%d,%d,%d\n,a,b,c);    /*第7行*/    }编译时出现错误,你认为出错的是
A.第4行
B.第5行
C.第6行
D.第7行
正确答案:A
解析:第4行逗号表达式中间的第二个表达式为空,是不合法的,可以去掉写成a+=b,b+=a,也可以在里面补一个表达式,如a+=b,a,b+=a,所以选择A选项。 
17. 若有以下程序    #include <stdio.h>    main(  )    {  int  a=1,b=2,c=3,d=4;      if ((a=2) || (b=1)) c=2;      if ((c==3) && (d=-1)) a=5;      printf(%d,%d,%d,%d\n, a,b,c,d);    }则程序的输出结果是
A.1,2,3,4
B.2,1,2,-1
C.5,1,2,-1
D.2,2,2,4
正确答案:D
解析:第一个if语句的判断条件中是逻辑或表达式,所以只要有一个运算对象为真结果就为真,且如果前面的已经为真,后面的表达式不再进行执行判断,执行第一个if判断条件时a的值为2,整个表达式的值为真,b的值不变,c的值为2,判断第二个if条件为逻辑与表达式,只有两个运算对象均非零,才为真,第一个表达式c==3,不成立,不再判断第二个运算对象,所以不执行d=-1操作和a=5操作,所以结果为选项D。 
18. 若有以下程序    #include <stdio.h>    main(  )    {  int a=1,b=2,c=3,d=4, r=0;      if (a!=1) ; else r=1;      if (b==2)  r+=2;        else;  if (c!=3)  r+=3;      else;  if (d==4)  r+=4;      printf(%d\n, r);    }则程序的输出结果是
A.10
B.7
C.6
D.3
正确答案:B
解析:else总是和与之最近的上面的if配对,执行第一个if,判断条件不成立,执行else r=1;语句,再执行第二个if语句中的判断条件,成立,左移执行r+=2,r的值为3,再执行第三个if的判断条件,不成立执行第7行else后面的空语句;,再执行第四个if的判断条件d==4成立,执行r+=4,r的值为7,然后打印输出。 
19. 若有以下程序    #include <stdio.h>    main(  )    {  int  s=0, n;      for (n=0; n<4; n++){  switch(n) {  default:  s+=4; case 1:  s+=1; case 2:  s+=2; case 3:  s+=3;}      }      printf(%d\n, s);    }则程序的输出结果是

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。