一个栈的初始状态为空。现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈的顺序是( )。
A) 12345ABCDE
B) EDCBA54321
C) ABCDE12345
D) 54321EDCBA
参考答案:B
【解析】栈是先进后出的原则组织数据,所以入栈最早的最后出栈,所以选择B)。
下列叙述中正确的是( )。
A) 循环队列有队头和队尾两个指针,因此,循环队列是非线性结构
B) 在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况
C) 在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况
D) 循环队列中元素的个数是由队头指针和队尾指针共同决定
参考答案:D
【解析】循环队列有队头和队尾两个指针,但是循环队列仍是线性结构的,所以A)错误;在循环队列中只需要队头指针与队尾两个指针来共同反映队列中元素的动态变化情况,所以B)与C)错误。
在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是( )。
A) O(n)
B) O(n2)
C)
D)
参考答案:C
【解析】当有序线性表为顺序存储时才能用二分法查找。可以证明的是对于长度为n的有序线性表,在最坏情况下,二分法查找只需要比较次,而顺序查找需要比较n次。
下列叙述中正确的是( )。
A) 顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的
B) 顺序存储结构只针对线性结构,链式存储结构只针对非线性结构
C) 顺序存储结构能存储有序表,链式存储结构不能存储有序表
D) 链式存储结构比顺序存储结构节省存储空间
参考答案:A
【解析】链式存储结构既可以针对线性结构也可以针对非线性结构,所以B)与C)错误。链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以D)错误。
数据流图中带有箭头的线段表示的是( )。
A) 控制流
B) 事件驱动
C) 模块调用
D) 数据流
参考答案:D
【解析】数据流图中带箭头的线段表示的是数据流,即沿箭头方向传送数据的通道,一般在旁边标注数据流名。
在软件开发中,需求分析阶段可以使用的工具是( )。
A) N-S图
B) DFD图
C) PAD图
D) 程序流程图
参考答案:B
【解析】在需求分析阶段可以使用的工具有数据流图DFD图,数据字典DD,判定树与判定表,所以选择B)。
在面向对象方法中,不属于"对象"基本特点的是( )。
A) 一致性
B) 分类性
C) 多态性
D) 标识唯一性
参考答案:A
【解析】对象有如下一些基本特点:标识唯一性、分类性、多态性、封装性、模块独立性好。所以选择A)。
一间宿舍可住多个学生,则实体宿舍和学生之间的联系是( )。
A) 一对一
B) 一对多
C) 多对一
D) 多对多
参考答案:B
【解析】因为一间宿舍可以住多个学生即多个学生住在一个宿舍中,但一个学生只能住一间宿舍,所以实体宿舍和学生之间是一对多的关系。
在数据管理技术发展的三个阶段中,数据共享最好的是( )。
A) 人工管理阶段
B) 文件系统阶段
C) 数据库系统阶段
D) 三个阶段相同
参考答案:C
【解析】数据管理发展至今已经历了三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。其中最后一个阶段结构简单,使用方便逻辑性强物理性少,在各方面的表现都最好,一直占据数据库领域的主导地位,所以选择C)。
有三个关系R、S和T如下:
由关系R和S通过运算得到关系T,则所使用的运算为( )。
A) 笛卡尔积
B) 交
C) 并
D) 自然连接
参考答案:D
【解析】自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以根据T关系中的有序组可知R与S进行的是自然连接操作。
下列叙述中错误的是( )。
A) C程序可以由多个程序文件组成
B) 一个C语言程序只能实现一种算法
C) C程序可以由一个或多个函数组成
D) 一个C函数可以单独作为一个C程序文件存在
参考答案:B
【解析】在一个C语言程序中可以进行多种算法的实现,对算法的个数没有规定,所以B)错误。
以下选项中,能用作数据常量的是( )。
A) 115L
B) 0118
C) 1.5e1.5
D) o115
参考答案:A
【解析】A)选项中115L表示115是长整型数据,合法。B)选项是八进制常量的表示方法,但是在八进制中不能含有数字8,所以B)错误。C)选项中e后面应该是整数不能是小数1.5,所以C)错误。D)选项中八进制常量应该是数字"0"开始,而不是字母"o"开始。
按照C语言规定的用户标识符命名规则,不能出现在标识符中的是( )。
A) 大写字母
B) 下划线
C) 数字字符
D) 连接符
参考答案:D
【解析】C语言中标识符由字母、下划线、数字组成,且开头必须是字母或下划线。所以D)选项中的连接符不合法。
设变量已正确定义并赋值,以下正确的表达式是( )。
A) x=y+z+5, ++y
B) int(15.8%5)
C) x=y*5=x+z
D) x=25%5.0
参考答案:A
【解析】B)与D)选项中取模运算符%的左右两个操作数均应为整数,所以B)、D)错误。C)选项中不能将x+y的值赋给表达式y*5,所以C)错误。
设有定义:int x=2;,以下表达式中,值不为6的是( )。
A) 2*x,x+=2
B) x++,2*x
C) x*=(1+x)
D) x*=x+1
参考答案:A
有以下程序:
#include
main()
{ int x, y, z;
x=y=1;
z=x++,y++,++y;
printf("%d,%d,%d
",x,y,z);
}
程序运行后的输出结果是( )。
A) 2,3,3
B) 2,3,2
C) 2,3,1
D) 2,2,1
参考答案:C
【解析】z=x++,y++,++y;因为赋值运算符的优先级高于逗号运算符的优先级,所以可以将上式表示成(z=x++),(y++),(++y)。然后从左向右先计算表达式z=x++,因为x++先使用后自增,所以z的值为1,x的值为2。再计算逗号表达式第二个表达式y++,此时y的值为2,最后计算第三个表达式++y,y的值为3。
有以下程序:
#include
main()
{ char c1,c2;
c1='A'+'8'-'4';
c2='A'+'8'-'5';
printf( "%c,%d
",c1,c2);
}
已知字母A的ASCII码为65,程序运行后的输出结果是( )。
A) E,68
B) D,69
C) E,D
D) 输出无定值
参考答案:A
【解析】本题目中字符变量c1是字符'A'的ASCII码加上4,即69所对应的字符'E'。 字符变量c2是字符'A'的ASCII码加上3,即68所对应的字符'D'。但是打印输出时,c1以%c的格式输出,所以是E,c2以%d的格式输出,所以是68。
若有定义int x,y; 并已正确给变量赋值,则以下选项中与表达式(x-y)?(x++) : (y++)中的条件表达式(x-y) 等价的是( )。
A) (x-y<0||x-y>0)
B) (x-y<0)
C) (x-y>0)
D) (x-y==0)
参考答案:A
【解析】条件表达式:x=表达式1?表达式2:表达式3 的含义是:先求解表达式1,若为非0(真),则求解表达式2,将表达式2的值赋给x。若表达式1的值为0(假),则求解表达式3,将表达式3的值赋给x。在本题中与表达式1:(x-y)等价的是(x-y<0||x-y>0)。
有以下程序:
#include
main()
{ int x=1, y=0;
if (!x) y++;
else if (x==0)
if (x) y+=2;
else y+=3;
printf("%d
", y);
}
程序运行后的输出结果是( )。
A) 3
B) 2
C) 1
D) 0
参考答案:D
【解析】 在if else语句中 else总是与离它最近的if配对。本题目中x为1所以!x为0,所以执行else if语句中的内容,判断(x==0)是否成立,因为x为1所以条件不成立,所以else if 内部的if…else语句不再执行,所以y的值还是初始值0。
若有定义:float x=1.5; int a=1,b=3,c=2; 则正确的switch语句是( )。
A) switch(a+b)
{ case 1: printf("*
");
case 2+1: printf("**
"); }
B) switch((int)x);
{ case 1: printf("*
");
case 2: printf("**
"); }
C) switch(x)
{ case 1.0: printf("*
");
case 2.0: printf("**
"); }
D) switch(a+b)
{ case 1: printf("*
");
case c: printf("**
"); }
参考答案:A
【解析】B)选项中switch((int)x);语句中不应该有最后的分号。switch(expr1), 中的expr1不能用浮点类型或long类型,也不能为一个字符串,所以C)错误。case后面常量表达式的类型必须与switch后面表达式的类型一致,所以D)错误。
有以下程序:
#include
main()
{ int y=9;
for( ; y>0; y--)
if(y%3==0) printf("%d", --y);
}
程序的运行结果是( )。
A) 852
B) 963
C) 741
D) 875421
参考答案:A
【解析】第一次for循环,y的值为9,y%3的值为0,满足条件打印 - - y,即先减一后打印,所以打印8;第二次for循环,y的值为7, y%3的值为1,不执行打印语句;第三次for循环,y的值为6,y%3的值为0,满足条件打印--y,即先减一后打印,所以打印5;第四次for循环,y的值为4,不满足if条件,不执行打印语句;第五次for循环,y的值为3,满足if条件,打印输出2;第六次for循环,y的值为1,不满足条件,不执行打印语句。
有以下程序:
#include
main()
{ int i,j,m=1;
for(i=1;i<3;i++)
{ for(j=3;j>0;j-- )
{ if(i*j>3) break;
m*=i*j;
}
}
printf("m=%d
",m);
}
程序运行后的输出结果是( )。
A) m=4
B) m=2
C) m=6
D) m=5
参考答案:C
【解析】 第一次外循环i的值为1,第一次内循环j的值为3,不满足条件执行m*=i*j即m的值为3;第二次j的值为2,不满足条件执行m*=i*j,即m的值为6;第三次j的值为1,不满足条件执行m*=i*j,即m的值仍为6。第二次外循环i的值为2,j的值为3,满足条件,执行break语句,跳出循环。
有以下程序:
#include
int fun (int x, int y )
{ if (x!=y) return ( (x+y) /2 );
else return ( x );
}
main()
{ int a=4, b=5, c=6;
printf( "%d
" , fun(2*a,fun(b,c)));
}
A) 6
B) 3
C) 8
D) 12
参考答案:A
【解析】 本题中第一次调用为fun(8,fun(5,6)),因为fun(5,6)返回值为5,所以第二次调用为fun(8,5)=6。所以选择A)。
有以下程序:
#include
int add( int a,int b){ return (a+b); }
main()
{ int k, (*f)(), a=5,b=10;
f=add;
…
}
则以下函数调用语句错误的是( )。
A) k=f(a,b);
B) k=add(a,b);
C) k=(*f)(a,b);
D) k= *f(a,b);
参考答案:D
【解析】D)选项中*f(a,b)表示调用后返回一个指向整型数据的地址指针,即该函数的返回值为指针类型,所以不能将其赋值给整形变量k。
有以下程序:
#include
main()
{ int n,*p=NULL;
*p=&n;
printf("Input n:"); scanf("%d",&p); printf("output n:"); printf("%d
",p);
}
该程序试图通过指针p为变量n读入数据并输出,但程序有多处错误,以下语句正确的是( )
A) int n,*p=NULL;
B) *p=&n;
C) scanf("%d",&p)
D) printf("%d
",p);
参考答案:A
【解析】选项B)的正确写法应为p=&n;选项C)的正确写法