国家二级(C语言)机试模拟试卷472
选择题
1.有三个关系R、S和T如下:
(D)
A. 并
B. 自然连接
C. 笛卡尔积
D. 交
解析:自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以B错误。笛卡尔积是用R集合中元素为第一元素,S集合中元素为第二元素构成的有序对,所以C错误。根据关系T可以很明显地看出是从关系R与关系S中取得相同的关系组所以取得是交运算,选择D。
2.设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC的关键字(键或码)为( )。(C)
A. 课号,成绩
B. 学号,成绩
C. 学号,课号
D. 学号,姓名,成绩
解析:学号是学生表s的主键,课号是课程表c的主键,所以选课表SC的关键字就应该是与前两个表能够直接联系且能唯一定义的学号和课号,所以选择C。
3.下列叙述中错误的是( )。(A)
A. 用户所定义的标识符允许使用关键字
B. 用户所定义的标识符应尽量做到“见名知意”
C. 用户所定义的标识符必须以字母或下划线开头
D. 用户定义的标识符中,大、小写字母代表不同标识
解析:在C语言中,合法标识符的命名规则是:标识符可以由字母、数字和下划线组成,并且第一个字符必须为字母或下划线,凡是要求标识符的地方都必须按此规则命名。在C语言的标识符中,大写字母和小写字母被认为是两个不同的字符。在选择标识符时,应注意做到“见名知义”,即选择具有一定含义的英文单词或汉语拼音作为标识符,以增加程序的可读性。
4.有以下程序:
main()
{int k=33;
printf(\\(D)
A. 33,033,0x21
B. 33,033,21
C. 33,041,021
D. 33,41,21
解析:本题考查不同进制间的转换。printf输出函数中输出变量的格式,由输出格式符决定。题中“%o”格式符表示以八进制的形式输出;“%x”格式符表示以十六进制的形式输出。“33”的八进制和十六进制分别是41和2l。
5.下列与队列结构有关联的是( )。(D)
A. 函数的递归调用
B. 数组元素的引用
C. 多重循环的执行
D. 先到先服务的作业调度
解析:队列的修改是依先进先出的原则进行的。故D正确。
6.以下关于return语句的叙述中正确的是( )。(B)
A. 一个自定义函数中必须有一条return语句
B. 一个自定义函数中可以根据不同情况设置多条return语句
C. 定义成void类型的函数中可以有带返回值的return语句
D. 没有return语句的自定义函数在执行结束时不能返回到调用处
解析:在函数中允许有多个return语句,但每次调用只能有一个return语句被执行,因此只能返回一个函数值。定义成void类型的函数.不允许从该函数取得返回值,也不允许使用return语句,C选项描述错误。没有return语句的函数在执行到函数的最后一条语句后会自动返回到调用处,A、D选项描述错误。因此B选项正确。
7.下列程序的输出结果为( )。
main()
{ union un
{char*name;
int age;
int pay;
}s;
s.name=\\(B )
A. 32
B. 3000
C. 0
D. 不确定
解析:本题考查的是联合体的有关概念。因为联合体是各个成员共享一段存储空间,此段存储空间最终存放的是最后存入的成员的值,所以题目中输出s.age实际上输出了最后存入的3000,因为3000已经把原来存入的s.age(32)的值覆盖。
8.对于长度为n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是( )。(A)
A. 冒泡排序为n(n一1)/2
B. 简单插入排序为n
C. 希尔排序为n
D. 快速排序为n/2
解析:在最坏情况下,冒泡排序所需要的比较次数为n(n-1)/2;简单插入排序所需要的比较次数为n(n-1)/2;希尔排序所需要的比较次数为O(n1.5);堆排序所需要的比较次数为O(nlog2n)。
9.有以下程序,其中%u表示按无符号整数输出( )。
main()
{unsigned int x=0xFFFF;/*x的初值为十六进制数*/
printf(\\(B)
A. -1
B. 65535
C. 32767
D. 0xFFFF
解析:因为%u表示按无符号整数输出,而x用十六进制表示为0xFFFF,所以输出无符号整数的最大值65535。
10.以下选项中,当x为大于1的奇数时,值为0的表达式为( )。(D)
A. x%2==1
B. x/2
C. x%2!=0
D. x%2==-0
解析:当x为大于1的奇数时,x对2求余的结果为1,不为0,所以选项D中表达式的值为0。
11.若有定义:int a=1,b=2,c=3;,则执行表达式(a=b+c)‖(++b)后,a,b,c的值依次为( )。(C)
A. 1,2,3
B. 5,3,2
C. 5,2,3
D. 5,3,3
解析:||表示或运算,当第一个表达式为真时,第二个表达式就不会被执行。根据优先级规则,两边都是括号,所以先计算(a=b+c),将b+c的值赋值给a,则a=5,而右边的括争不会被执行,所以b=2,c=3。
12.以下叙述中正确的是( )。(A)
A. 当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失
B. 打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖
C. 在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第1个数据
D. C语言中的文件是流式文件,因此只能顺序存取数据
解析:B选项中打开一个已存在的文件并进行了写操作后,原有文件中的全部数据不一定被覆盖,也可以对源文件进行追加操作等。C选项中在一个程序中当对文件进行了写操作后,不用先关闭该文件然后再打开,才能读到第1个数据,可以用fseek()函数进行重新定位即可。D选项中,C语言中的文件可以进行随机读写。
13.已知char**s,下而正确的语句是( )。(C)
A. s=\\
B. *s=\\
C. **s=\\
D. *s=’A’;
解析:“s”是代表数组首地址的地址常量,不是变量,“=”左边不能出现常量,因此s=\\
14.有以下程序:
#include<stdio.h>
struet S{int n;int a[20];};
voi
本文档预览:3600字符,共13898字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载