1.已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历为()
A.GEDHFBCAB.DGEBHFCA
C.ABCDEFGHD.ACBFEDHG
【参考答案】B
2.如果进栈序列为e1,e2,e3,e4,则可能的出栈序列是()
A.e3,e1,e4,e2B.e2,e4,e3,e1C.e3,e4,e1,e2D.任意顺序
3.程序设计语言的基本成分是数据成分、运算成分、控制成分和()
A.对象成分B.变量成分C.语句成分D.传输成分
【参考答案】D
4.下列不属于软件工程的3个要素的是()
A.工具B.过程C.方法D.环境
5.将E-R图转换到关系模式时,实体与联系都可以表示成()
A.属性B.关系C.键D.域
6.在深度为5的满二叉树中,叶子结点的个数为()
A.32B.31C.16D.15
7.一些重要的程序语言(如C语言和Pascal语言)允许过程的递归调用。而实现递归调用中的存储分配通常用()
A.栈B.堆C.数组D.链表
【参考答案】A
8.开发软件时对提高开发人员工作效率至关重要的是()
A.操作系统的资源管理功能B.先进的软件开发工具和环境
C.程序人员的数量D.计算机的并行处理能力
9.数据处理的最小单位是()
A.数据B.数据元素C.数据项D.数据结构
【参考答案】C
10.下述关于数据库系统的叙述中正确的是()
A.数据库系统减少了数据冗余
B.数据库系统避免了一切冗余
C.数据库系统中数据的一致性是指数据类型一致
D.数据库系统比文件系统能管理更多的数据
11.以下各选项组中,均是C++语言关键字的组是()
A.publicoperatorthis
B.shodstringstatic
C.itwhile>=
D.privatecoutprintf
12.下列描述正确的是()
A.表示m>n为true或mn&&m
B.switch语句结构中必须有default语句
C.if语句结构中必须有else语句
D.如果至少有一个操作数为true,则包含“||”运算符的表达式为true
13.下面关于break语句的描述中,不正确的是()
A.break可以用于循环体内
B.break语句可以在for循环语句中出现多次
C.break语句可以在switch语句中出现多次
D.break语句可用于if条件判断语句内
14.下面程序错误的是()
①#include②voidmain()
③{
④int*p=newint[1];
⑤p=9;
⑥cout<<*p<
⑦delete[]p;
⑧}
A.④B.⑤C.⑥D.⑦
15.不能作为重载函数的调用的依据是()
A.参数个数B.参数类型C.函数类型D.函数名称
16.在C++语言中,数据封装要解决的问题是()
A.数据的规范化B.便于数据转换
C.避免数据丢失D.防止不同模块之间数据的非法访问
17.类的构造函数和析构函数描述正确的是()
A.构造函数可以重载,析构函数不能重载
B.构造函数不能重载,析构函数可以重载
C.构造函数可以重载,析构函数也可以重载
D.构造函数不能重载,析构函数也不能重载
18.对静态数据成员的描述中,正确的是()
A.静态数据成员是类的所有对象共享的数据
B.类的每个对象都有自己的静态数据成员
C.类的不同对象有不同的静态数据成员值
D.静态数据成员不能通过类的对象调用
19.可以用p.a的形式访问派生类对象p的基类成员a,其中a是()
A.私有继承的公有成员B.公有继承的私有成员
C.公有继承的保护成员D.公有继承的公有成员
20.下面关于虚函数的描述,错误的是()
B.基类中说明了虚函数后,派生类中对应的函数也必须说明为虚函数
C.虚函数可以是另一个类的友元函数,但不能是静态成员函数
D.基类中说明的纯虚函数在其任何派生类中都必须实现
21.语句ofstreamf(″SALARY.DAT″,
ios::app|ios::binary);的功能是建立流对象f,试图打开文件SALARY.DAT并与之连接,且()
A.若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个新文件
B.若文件存在,将其置为空文件;若文件不存在,找开失败
C.若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个新文件
D.若文件存在,找开失败;若文件不存在,建立一个新文件
22.下面程序的运行结果是()
#includevoidfun(int*a,int*b)
{intx=*a;
*a=*b;*b=x;
cout<<*a<<*b<<″″;}
voidmain()
{intx=1,y=2;
fun(&x,&y);
cout<
A.1212B.1221C.2112D.2121
23.以下哪个特征不是面向对象思想中的主要特征()
A.多态B.继承C.封装D.垃圾回收
24.C++中运算符优先级由高到低排列正确的是()
A.::+++||B.<*||,
C.sizeof%+::D.,&&newsizeof
25.以下for语句中不是死循环的是()
A.for(inti=0;i<1;++i);B.for(inti=0;;++i);C.for(inti=1;i>0;++i);D.for(;;);
26.以下定义数组中错误的是()
A.inta[10];B.inta[2][20];C.inta[20][];D.inta[];
27.下面程序错误的语句是()
#include″iostrteam.h″
①voidmain()
②{
③intA=0;
④int&B;
⑤B=A;
⑥cout<
⑦cout<
A.②B.③C.④D.⑥
28.函数inttest(inta,intb=1,intc=0),下列调用不合法的个数是()
test(0);test(0,0);test();test(0,0,0);
A.0B.1C.2D.3
29.C++语言中关于构造函数的说法正确的是()
A.构造函数的函数名不必和类名相同B.构造函数只能每一个
C.每个类必定有构造函数D.构造函数必有返回值
30.下面程序的执行结果为()
#include″iostream″
usingnamespacestd;
classA
{
inta;
public:
voidSeta(intx){a=x;}
voidDisplay_a(){cout<
};
classB
intb;
voidSetb(intx){b=x;}
voidDispaly_b(){cout<
classC:publicA,privateB
{private:
intc;
voidSetc(intx,inty,intz)
{c=z;Seta(x);Setb(y);}
voidDisplay_c(){cout<
③Ccc;
④cc.Seta(1);
⑤cc.Display_a();
⑥cc.Setc(2,2,3);
⑦cc.Dispaly_b();
⑧cc.Display_c();
}
A.输出为223B.有错误在第5行C.输出为123D.有错误在第7行
31.多态性指的是()
A.以任何方式调用一个虚函数
B.以任何方式调用一个纯虚函数
C.借助于指向对象的基类指针或引用调用一个虚函数
D.借助于指向对象的基类指针或引用调用一个纯虚函数
32.只能作为成员函数重载的是()
A.=B.++C.*D.new
33.语句cout<
A.1024.4567B.1024C.1024.45D.1e+003
34.下列程序的结果是()
#include″iostream.h″
char*str;
str=″test!″;
A.程序错误B.!C.′\0′D.为空字符
35.C++语言函数中不能由系统自动生成的是()
A.析构函数B.构造函数C.内联函数D.拷贝构造函数
二、填空题
1.数据结构分为逻辑结构与存储结构,线性链表属于【1】。
【参考答案】
【1】存储结构
2.耦合和内聚是评价模块独立性的两个主要标准,其中【2】反映了模块内各成分之间的联系。
【2】内聚
3.数据库设计分为以下6个设计阶段:需求分析阶段、【3】、逻辑设计阶段、物理设计阶段、实施阶段、运行和维护阶段。
【3】数据库概念设计阶段
4.面向对象的模型中,最基本的概念是对象和【4】。
【4】类
5.数据模型按不同应用层次分成3种类型,它们是概念数据模型、【5】和物理数据模型。
【5】逻辑数据模型
6.开发一个C++语言程序的步骤通常包括编辑、【6】、链接、运行和调试。
【6】编译
7.下面程序的输出结果为【7】。
#includevoidmain()
intnum=0,i=8;
do{
i--;
num++;
}while(--i);
cout<
【7】-4
8.下面程序的运行结果为【8】。
#includevoidfun(intx=0,inty=0)
{cout<
{fun(5);}
【8】50
9.C++语言支持的两种多态性分别是编译时的多态性和【9】的多态性。
【9】运行时
10.cout.put(′A′);,还可以表示为【10】。
【10】cout<<′A′;
11.将以下程序写成三目运算表达式是【11】。
if(a>b)max=a;
elsemax=b;
【11】max=(a>b)a:b;
12.下面程序的功能是将字符数组a中下标值为偶数的元素从小到大排列,其他元素不变,请填空。
#include#includevoidmain()
{chara[]=″clanguage″,t;
inti,j,k;
k=strlen(a);
for(i=0;i<=k-2;i+=2)
for(j=i+2;j<=k;【12】)
if(【13】)
{t=a[i];a[i]=a[j];a[j]=t;}
【12】j+=2【13】a[i]>=a[j]或a[i]>a[j]
13.请定义一个函数名为A,返回值为int,没有参数的纯虚函数的定义是【14】。
【14】virtualintA()=0;
14.假设fin是一个文件流对象,则关闭文件的语句是【15】。
【15】fin
上机部分
一、改错题
使用VC6打开考生文件夹下的工程kt5_1,此工程包含一个源程序文件kt5_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:
(1,2)
5,6
(6,9)
源程序文件kt5_1.cpp清单如下:
#includeclassA{
A(inti,intj){a=i;b=j;}
/****************found*******************/
voidMove(intx,inty){a+=x;b+=y}
voidShow(){cout<<"("<
private:
inta,b;
classB:privateA
B(inti,intj,intk,intl):(i,j){x=k;y=l;}
voidShow(){cout<
voidfun(){Move(3,5);}
voidf1(){Show();}
intx,y;
Ae(1,2);
e.Show();
Bd(3,4,5,6);
d.fun();
d.Show();
d.f1();
(1)将voidMove(intx,inty){a+=x;b+=y}
改为:voidMove(intx,inty){a+=x;b+=y;}
(2)将B(inti,intj,intk,intl):(i,j){x=k;y=l;}
改为:B(inti,intj,intk,intl):A(i,j){x=k;y=l;}
(3)将voidf1(){Show();}
改为:voidf1(){A::Show();}
【试题解析】
(1)主要考查对表达式定义规则的掌握,此处缺少一个“;”,任何一个表达式都应该以分号作为结束标志;
(2)主要考查对派生类构造函数定义的掌握,参数列表中基类的成员应使用基类构造函数初始化,因此必须向基类传递参数,传递时直接使用基类名;
(3)主要考查对基类函数调用方法的掌握,为了调用基类的函数应该使用作用域符“::”以限定访问的位置。
二、简单应用题
请编写一个函数intpattern_index(charsubstr[],charstr[]),该函数执行含通配符""的字符串的查找时,该通配符可以与任一个字符匹配成功。当子串substr在str中匹配查找成功时,返回子串substr在str中的位置,否则返回值为0。要求使用for循环实现。输出结果如下:
子串起始位置:5
注意:部分源程序已存在文件kt5_2.cpp中。
请勿修改主函数main和其他函数中的任何内容,仅在函数pattern_index的花括号中填写若干语句。
文件kt5_2.cpp的内容如下:
#includeintpattern_index(charsubstr[],charstr[])
char*substring,*string;
intsame;
substring="gram";
string="thisprogramreturnindexofsubstring";
same=pattern_index(substring,string);
if(same)
cout<<"子串起始位置:"<
else
cout<<"匹配不成功"<
intpattern_index(charsubstr[],charstr[])
{inti,j,k;
for(i=0;str[i];i++)
for(j=i,k=0;(str[j]==substr[k])||(substr[k]=='');j++,k++)
if(!substr[k+1])
return(i);
return(0);}
本题主要考查使用for循环和一维数组的能力。对于复杂查找,往往使用for的多重循环。
三、综合应用题
使用VC6打开考生文件夹下的工程kt5_3,此工程包含一个源程序文件kt5_3.cpp,其中定义了用于表示复数的类comp,但类comp的定义并不完整。请按要求完成下列操作,将类comp的定义补充完整。
(1)定义comp的构造函数,函数含参数x和y,它们都是int型的数据,默认值都为0,请使用参数列表的形式分别将类数据成员a和b初始化x和y的值。请在注释“//**1**”之后添加适当的语句。
(2)完成类comp的成员函数input(intx,inty)的定义,将int型的参数x和y分别赋值给数据成员a和b,请在注释“//**2**”之后添加适当的语句;
(3)完成类comp的友元函数friendcompplus(comp&x,comp&y)的定义,该函数首先要定义一个comp类的对象c,然后将参数x和y的数据成员a与b分别相加并分别赋值给c的成员a和b,最后返回c的值,请在注释“//**3**”之后添加适当的语句。输出结果如下:
10+20i
2+3i
result:12+23i
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。