二级C语言选择题专项强化真题试卷8
选择题
1.若有以下程序:
#include<stdio.h>
main()
{
int a=—11,b=10;
a%=b%=4;
printf(\\(B)
A. 1 2
B. —1 2
C. —1 —2
D. 1 —2
解析:先计算b%=4,即b=b%4,结果为2,然后计算a%=2,结果为—1,最后输出a的值为—1,b的值为2,故B选项正确。
2.设有定义语句:
float a[10],x;
则以下叙述中正确的是( )。(A)
A. 语句a=&x;是非法的
B. 表达式a+1是非法的
C. 三个表达式a[1]、*(a+1)、*&a[1]表示的意思完全不同
D. 表达式*&a[1]是非法的,应该写成*(&(a[1]))
解析:数组名表示该数组的首地址,是一个地址常量,不能对它重新赋值,A正确。但是可以把数组名看做一个指针常量,则表达式a+1表示的是数组中第二个元素的地址,选项B错。表达式a[1]、*(a+1)、*&a[1]都指的是数组a中第二个元素的值,选项C错。口运算符的优先级高于*、&,取值*和取址&运算符优先级相等,同一优先级的运算符,运算次序由结合方向所决定,*&a[1]在运算符优先级和结合性上没有问题,并且取值*和取址&运算符互逆,*&a[1]和a[1]等价,相当于求得数组a第二个元素的值,选项D错。答案选A。
3.下列叙述中正确的是( )。(D)
A. 有两个指针域的链表称为二叉链表
B. 循环链表是循环队列的链式存储结构
C. 带链的栈有栈顶指针和栈底指针,因此又称为双重链表
D. 结点中具有多个指针域的链表称为多重链表
解析:双向链表与二叉链表均是有两个指针域的链表,故A选项错误。在单链表的第一个结点前增加一个表头结点,队头指针指向表头结点,最后一个结点的指针域的值由NULL改为指向表头结点,这样的链表称为循环链表。循环队列是队列的一种顺序存储结构。循环链表与循环队列是两种存储结构,故B选项错误。双向链表结点有两个指针域,指向前一个结点的指针和指向后一个结点的指针,而带链的栈是单链表形式,C选项中应为双向链表,而不是双重链表,故C选项错误。由排除法可知,正确答案为D选项。
4.在数据库技术中,为提高数据库的逻辑独立性和物理独立性,数据库的结构被划分成用户级、存储级和( )。(A)
A. 概念级
B. 外部级
C. 管理员级
D. 内部级
解析:数据库系统在其内部分为三级模式,即概念模式、内模式和外模式。概念模式是数据库系统中全局数据逻辑结构的描述,全体用户的公共数据视图。外模式也称子模式或者用户模式,是用户的数据视图,也就是用户所能够看见和使用的局部数据的逻辑结构和特征的描述,是与某一应用有关的数据的逻辑表示。内模式又称物理模式,是数据物理结构和存储方式的描述,是数据在数据库内部的存储方式。所以数据库的结构被划分成用户级、存储级和概念级。故选A选项。
5.设数据集合为D={1,3,5,7,9},D上的关系为R,下列数据结构B=(D,R)中为非线性结构的是( )。
D
解析:一个非空的数据结构如果满足以下两个条件:有且只有一个根结点;每一个结点最多有一个前件,也最多有一个后件,则称为线性结构,在数据结构中习惯称为线性表。A选项中,5为根结点,线性表为51793。B选项中,9为根结点,线性表为97135。C选项中,1为根结点,线性表为19753。D选项,结点1与7都是根结点,属于非线性结构,故D选项正确。
6.有以下定义语句,编译时会出现编译错误的是( )。(D)
A. char a=’\x2d’;
B. char a=’\n’;
C. char a=’a’;
D. char a=\\
解析:D选项中将字符串常量“aa”赋给字符变量a是错误的。
7.以下程序拟实现计算sum=1+1/2+1/3+…+1/50。
#include
main()
{ int i;double 8um;
sum=1.0;
i=1;
do
{i++;sum+=1/i;}
while(i<50);
printf(\\(A)
A. sum+=1/i;
B. while(i<50);
C. sum=1,0;
D. i++;
解析:选项A中,sum+=1/i;i为整型,因此1/i是整型类型,当1/i有小数时,小数部分会被截断。因此1/i结果始终为0,导致结果出错,应改为sum+=1.0/i。因此答案为A选项。
8.有以下程序:
#include
int fun(int*b,int n)
{ int i,r=1;
for(i=0;i<=n;i++)r=r*b[i];
return r;
}
main()
{ int x,a[]={2,3,4,5,6,7,8,9};
x=fun(a,3);
printf(\\(C)
A. 24
B. 720
C. 120
D. 6
解析:函数fun()求数组指定返回的元素的积。函数fun(a,3)求的是数组a[0]一a[3]的积。因此结果为2*3*4*5=120,故答案为C选项。
9.若有定义:char*ps[]={\\(A)
A. *ps[0]是字符’a’
B. *ps[0]是字符串\\
C. ps[0]是字符’a’
D. ps是字符串\\
解析:指针数组ps[]定义后,ps[0]代表数组首个元素的地址,即“aa”的地址,同时也是“aa”第一个字符a的地址,所以*ps[0]代表字符a,答案为A选项。
10.有三个关系R、S和T如下:
(D)
A. 笛卡儿积
B. 交
C. 并
D. 自然连接
解析:自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以根据T关系中的有序组可知R与S进行的是自然连接操作。
11.若有定义:double x;,则表达式:x=0,x+10,x++的值是( )。(C)
A. 11.0
B. 10.0
C. 0.0
D. 1.0
解析:C语言中,逗号运算符可以把两个以上(包含两个)的表达式连接成一个表达式。逗号运算符的优先级是所有运算符中级别最低的,逗号运算符保证左边的子表达式运算结束后才进行右边的子表达式的运算。也就是说,逗号运算符是一个序列点,其左边所有副作用都结束后,才对其右边的子表达式进行运算,并以最右边表达式值作为整个逗号表达式的值。后置自增运算:k++表示先运算,后自加。前置自增运算:++k表示先自加,后运算。因此,表
本文档预览:3600字符,共7849字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载