国家二级C语言机试(选择题)模拟试卷178 (题后含答案及解析)
题型有:1. 
1. 算法的空间复杂度是指
A.算法在执行过程中所需要的计算机存储空间
B.算法所处理的数据量
C.算法程序中的语句或指令条数
D.算法在执行过程中所需要的临时工作单元数
正确答案:A
解析:算法的空间复杂度是指执行这个算法所需要的内存空间。这个内存空间包括算法程序所占的空间,输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间。 知识模块:公共基础知识
2. 某带链的队列初始状态为front=rear=NULL。经过一系列正常的入队与退队操作后,front=10,rear=5。该队列中的元素个数为(    )。
A.4
B.5
C.6
D.不确定
正确答案:D
解析:带链的队列使用了链表来表示队列,而链表中的元素存储在不连续的地址中,因此当front=10,rear=5时,不能确定队列中元素的个数。 知识模块:公共基础知识
3. 阅读以下程序    #include  <stdio.h>    main(  )  {    int case  ;    float printF;    printf(请输入2个数:);    scanf(%d%f,&case,&printF);    prin七f(%d    %f\n,case,printF  );  }    该程序在编译时产生错误,其出错原因是
A.定义语句出错,printF不能用作用户自定义标识符
B.定义语句出错,case是关键字,不能用作用户自定义标识符
C.定义语句无错,scanf不能作为输入函数使用
D.定义语句无错,printf不能输出case的值
正确答案:B
解析:case是C语言中的一个关键字,不能用作用户标识符来使用,所以这段程序代码在编译时就会出错。 知识模块:C语言基础知识
4. 有以下程序#include<stdio.h>main(    ){inta=3;printf(‘‘%d\n’’,(a+=a-=a*a));}程序运行后的输出结果是
A.9
B.0
C.3
D.-12
正确答案:D
解析:对于表达式a+=a-=a*a相当于a=a.(a*a),然后计算a=a+a,a的初值为3,则表达式的值为-12。 知识模块:C语言基础知识
5. 设有某函数的说明为:int*fune(int a[10],int n);则下列叙述中,正确的是(    )。
A.形参a对应的实参只能是数组名
B.说明中的a[10]写成a[]或*a效果完全一样
C.func的函数体中不能对a进行移动指针(如a++)的操作
D.只有指向10个整数内存单元的指针,才能作为实参传给a
正确答案:B
解析:考查数组名作为函数参数。传递给形参的实参可以是数组名,还可以是指向该数组的指针变量,选项A错误;a[10]、a[]、*a做形参都是接受实参数组首地址,效果一样,选项B正确;数组名可以看作一个指针常量,对其进行自加自减运算相当于指针变量的自加自减,选项C错误;数组名作为函数参数时,只传递数组的首地址而不检查形参数组的长度,所以形参表中可以不给出形参数组的长度,形参数组和实参数组长度也可以不同,选项D错误。故答案选B。 
6. C语言中允许用外部说明来指定变量、函数和其他标识符的特征,这里所说的外部指的是(    )。
A.冠以关键字extern
B.位置在函数体外部
C.作用范围是全程的
D.位置在函数的外部
正确答案:D
解析:C语言中允许用位置在函数外部的说明来指定变量、函数和其他标识符的特征。 
7. 有以下程序    main(  ){int x=1,y=0;    if(!x)y++;    else if(x==0)    if(x)y+=2;    else y+=3;    pfintf(%d\n,y);}    程序运行后的输出结果是
A.2
B.0
C.1
D.3
正确答案:B
解析:x=1,if和else if的条件都不满足,故y值不改变输出。  知识模块:C语言程序设计
8. 有两个关系R和T如下:则由关系R得到关系T的操作是
A.选择
B.投影
C.交
D.并
正确答案:A
解析:由关系R和T所包含的元素可知,关系R经过选择操作就可以得到关系T。 知识模块:公共基础知识
9. 以下程序段的输出结果是(  )。int a,b,c;a=10;b=50;c=30;    if(a>b)  a=b,b=c;c=a;printf(‘‘a=%d b=%d  c=%d\n’’,a,b,c);
A.a=30 b=50 c=10
B.a=10 b=30 c=10
C.a=10 b=50 c=10
D.a=50 b=30 c=50
正确答案:C
解析:本题考查条件表达式,程序段首先定义三个整型变量a,b,c,并且其初始值分圳等于10,50,30,然后判断a>b是否成立,如果条件成立,则把b的值赋给a,把c的值赋给b。由a和b的初始值可知,此条件表达式不成立,所以a和b的值保持不变。再执行下一条语句,把a的值赋给c,所以c的当前值等于10,最后由输出语句输出变量a,b,c的当前值,分别为10,50,10。 知识模块:C语言程序设计
10. 设有定义语句:char*aa[2]={abcdABCD};则以下叙述正确的是
A.aa数组的两个元素只能存放含有4个字符的一维数组的首地址
B.aa数组的值分别是字符串abcdABCD
C.aa是指针变量,它指向含有两个元素的字符型数组
D.aa[0]存放了字符串abcd的首地址
正确答案:D
解析:题目中char*aa[2],定义了指针数组aa,有两个元素,aa[0]存放abcd地址,而aa[1]存放”ABCD地址。 知识模块:函数和数组
11. 若有以下程序,则程序的输出结果是#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,4
B.1,4,1
C.0,4,0
D.1,4,4
正确答案:C
解析:表达式c=(a-=++a),(a+=b,b+=4)相当于逗号表达式,首先计算c=(a-=
++a),其中a-=++a)等价于a=a-(++a),得到a的值0,c的值为0,在计算(a+=b,b+=4)时,a和b的初值为0,计算以后,a为0,b为4。 知识模块:C语言程序设计
12. 若有以下程序#include    char*a=you,b[]=welcome#you#to#China!;    main(  ){int i,j=0;char*p;    for(i=0;b[i]!=\0;i++)    {if(*a==b[i])    {p=&b[i];    for(j=0;a[j]!=\0;j++)    {if(a[j]!=*p)break;p++;}    if(a[j]=\0)break;    }}    printf(%s\n,p);}    则程序的输出结果是
A.#you#to#China!
B.me#you#to#China!
C.#China!
D.#to#China!
正确答案:D
解析:程序中循环部分的主要功能是,在字符串b中寻是否含有子串a,如果含有则退出,
字符指针p指向该匹配子串后面的位置,利用printf函数输出则从该位置开始一直输出到字符串b的结尾。 知识模块:函数和数组
13. 若有定义int a;float b;double c;程序运行时输入:3 4 5<回车>能把值3输入给变量a、4输入给变量b、5输入给变量c的语句是( )。
A.scanf(%d%f%lf, &a,&b,&c);
B.scanf(%d%lf%lf, &a,&b,&c);
C.scanf(%d%f%f, &a,&b,&c);
D.scanf(%lf%lf%lf, &a,&b,&c);
正确答案:A
解析:考查scanf的格式输入。scanf函数的一般形式为 scanf(格式控制字符串,输入项1,输入项2,…),其中,格式控制字符串用于指定输入的格式,%d表示按照十进制整型输入,%f表示按照浮点型输入,%lf表示按照长精度浮点型输入,所以答案选A。 知识模块:
顺序结构程序设计
函数printf14. 以下关于typedef的叙述错误的是
A.typedef只是将已存在的类型用一个新的名字来代表
B.用typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名
C.用typedef可以增加新类型
D.用typedef为类型说明一个新名,通常可以增加程序的可读性
正确答案:C
解析:C语言允许用typedef说明一种新的类型名,其一般形式为:typedef类型名标识符;在此“类型名”必须是在此语句之前已有定义的类型标识符。“标识符”是一个用户定义标识符,用作新的类型名。Typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型.原来的类型名依然有效,这样可以增加程序的可读性。 知识模块:结构体、共用体、位运算及文件操作
15. 在关系表中,属性值必须是另一个表主键的有效值或空值,这样的属性是
A.外键
B.候选键
C.主键
D.主属性
正确答案:A
解析:如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。为了保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值或使用空值。所以选项A正确。 知识模块:数据库设计基础
16. 下列关系表达式中,结果为“假”的是
A.(3<<4)==1
B.(3+4)>6
C.(3!=4)>2