二级C语言选择题专项强化真题试卷28
选择题
1.有两个关系R,S如下:
(B)
A. 选择
B. 投影
C. 插入
D. 连接
解析:关系S是由关系R的第1、2列的元组组成,很显然这是对关系R进行投影运算的结果。可以简单理解为:选择运算是对行的操作,投影运算是对列的操作。投影是指将对象转换为一种新形式的操作,该形式通常只包含那些将随后使用的属性。由选择、投影、插入、连接的定义可知,本题所使用的运算是投影。
2.有以下程序:
#include<stdio.h>
main()
{
int a,b;
for(a=0;a<3;a++)
{
scanf(\\(A)
A. 2 3 3 4 5 6
B. 2 3 4
C. 2 2 3 4 4 4
D. 2 3 4 3 4 4
解析:本题是一个循环结构嵌套选择结构,按照外层循环,内层选择一步一步处理即可。重点注意地是,switch语句中并没有出现break语句,所以内层循环是不会跳出的。
3.一个运动队有多个队员,一个队员仅属于一个运动队,一个队一般都有一个教练,则实体运动队和队员的联系是( )。(A)
A. 一对多
B. 一对一
C. 多对一
D. 多对多
解析:一个运动队有多个队员,表明在运动队表中的每个队与队员表中的一个或多个队员相关;一个队员仅属于一个运动队,表明队员表中的每个队员只可以与运动队表中的一个队相关,为一对多关系。故正确答案为A。
4.下列数据结构中,能够按照“先进后出”原则存取数据的是( )。(B)
A. 循环队列
B. 栈
C. 队列
D. 二叉树
解析:栈是按“先进后出”的原则组织数据的;队列是按“先进先出”的原则组织数据的,因此本题答案为B。
5.设有定义:double x=5.16894;,则语句printf(\\(A)
A. 5.16900
B. 5.16800
C. 0.00000
D. 输出格式说明符与输出项不匹配,产生错误信息
解析:(x*1000+0.5)表示x向右移动3位小数,加0.5,也就是x的小数第4位加5,若这位大于等于5,则进1到个位。因为“5.16894*1000=5168.94,5168.94+0.5=5169.44”,所以(int)(x*1000+0.5)强制转换为整型结果为5169。“5169/1000.0=5.169”,由于分母1000.0为浮点型所以结果自动转换为浮点数,故printf(“%If\n”,5.169)结果是5.16900。故答案为A选项。
6.以下函数实现按每行8个输出w所指数组中的数据:
#include<stdio.h>
void fun(int*w,int n)
{int i;
for(i=0;i<n;i++)
{
______________
prinff(\\(C)
A. if(i/8==0)prinff(\\
B. if(i/8==0)continue;
C. if(i%8==0)prinff(\\
D. if(i%8==0)continue;
解析:要按照每行8个输出数据的话,横线处语句的功能应付该为:当i是8的倍数时(即i%8==0),输出一个换行符。因此C选项正确。
7.以下合法的转义字符是( )。(D)
A. ’\0X41’
B. ’\0x41’
C. ’\X41’
D. ’\x41’
解析:“\xhh”表示1到2位十六进制所代表的字符,故答案为D选项。
8.下列关于线性链表的叙述中,正确的是( )。(C)
A. 各数据结点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致
B. 各数据结点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续
C. 进行插入与删除时,不需要移动表中的元素
D. 以上说法均不正确
解析:一般来说,在线性表的链式存储结构中,各数据结点的存储序号是不连续的,并且各结点在存储空间中的位置关系与逻辑关系也不一致。线性链表中数据的插入和删除都不需要移动表中的元素,只需改变结点的指针域即可。
9.以下选项中的编译预处理命令行,正确的是( )。(A)
A. #define E 2.38
B. ##define PI_2 1.56
C. #define int INT
D. #DEFINE TRUE
解析:无参宏定义格式:#deftne标识符字符串,标识符与C语言规定相同,因此,可知选项B多了一个#,选项C使用了C语言的关键字,选项D格式不对。因此答案为A选项。
10.以下叙述中错误的是( )。(A)
A. 可以通过typedef增加新的类型
B. 可以用typedef将已存在的类型用一个新的名字来代表
C. 用typedef定义新的类型名后,原有类型名仍有效
D. 用typedef可以为各种类型起别名,但不能为变量起别名
解析:关键字typedef的作用只是将C语言中的已有的数据类型作了置换,并不是增加新的类型,所以A)错误。
11.有以下程序:
#include
struet S
{ int a,b;}data[2]={10,100,20,200};
main()
{struct S p=data[1];
printf(\\(D)
A. 10
B. 11
C. 20
D. 21
解析:声明data是结构s数组。初始化data[0].a=10;,data[0].b=100;,data[1].a=20;,data[1].b=200。主函数中p=data[1];,即p.a:data[1].a;,p.b:data[1].b;。执行语句printf(\\
12.有以下程序:
#include<stdio.h>
main( )
{
char a=4:
prinff(\\(B)
A. 16
B. 8
C. 40
D. 4
解析:本题考查位运算,题目中将4向左移一位然后重新赋值给a,4左移一位为8,程序运行结果为8,选项B正确。
13.以下叙述中正确的是( )。(A)
A. 在C语言中,预处理命令行都以“#”开头
B. 预处理命令行必须位于C源程序的起始位置
C. #include必须放在C程序的开头
D. C语言的预处理不能实现宏定义和条件编译的功能
解析:预处理命令是以“#”号开头的命令,它们不是C语言的可执行命令,这些命令应该在函数之外书写,一般在源文件的最前面书写,但不是必须在起始位置书写,所以B)、C)错误。C)语言的预处理能够实现宏定义和条件编译等功能,所以D)错误。
14.下
本文档预览:3600字符,共6874字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载