笔试部分
一、选择题
1.已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是( )
A.acbed B.decab
C.deabc D.cedba
【参考答案】 D
2.结构化程序设计的3种结构是( )
A.顺序结构、选择结构、转移结构 B.分支结构、等价结构、循环结构
C.多分支结构、赋值结构、等价结构 D.顺序结构、选择结构、循环结构
【参考答案】 D
3.算法的时间复杂度是指( )
A.执行算法程序所需要的时间 B.算法程序的长度
C.算法执行过程中所需要的基本运算次数 D.算法程序中的指令条数
【参考答案】 C
4.数据库管理系统DBMS中用来定义模式、内模式和外模式的语言为( )
A.C B.Basic C.DDL D.DML
【参考答案】 C
5.下列有关数据库的描述,正确的是( )
A.数据处理是将信息转化为数据的过程
B.数据的物理独立性是指当数据的逻辑结构改变时,数据的存储结构不变
C.关系中的每一列称为元组,一个元组就是一个字段
D.如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个关系的关键字,则称其为本关系的外关键字
【参考答案】 C
6.用链表表示线性表的优点是( )
A.便于随机存取 B.花费的存储空间较顺序存储少
C.便于插入和删除操作 D.数据元素的物理顺序与逻辑顺序相同
【参考答案】 C
7.结构化程序设计主要强调的是( )
A.程序的规模 B.程序的效率 C.程序设计语言的先进性 D.程序易读性
【参考答案】 D
8.检查软件产品是否符合需求定义的过程称为( )
A.确认测试 B.集成测试 C.验证测试 D.验收测试
【参考答案】 A
9.应用数据库的主要目的是( )
A.解决数据保密问题
B.解决数据完整性问题
C.解决数据共享问题
D.解决数据量大的问题
【参考答案】 C
10.在数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。其中数据独立性最高的阶段是( )
A.数据库系统 B.文件系统 C.人工管理 D.数据项管理
【参考答案】 A
11.下列选中不全是C++语言关键字的是( )
A.const,break,default B.long,void,using
C.virtual,extern,include D.try,throw,this
【参考答案】 C
12.在32位的计算机中,一个char型数据所占的内存长度的字节是( )
A.4 B.1 C.2 D.8
【参考答案】 B
13.有如下程序:
#include″iostream.h″
void main()
{ int x=1,a=0,b=0;
switch(x) {
case 0:b++;
case 1:a++;
case 2:a++;b++; }
cout<<″a=″<
该程序的输出结果是( )
A.a=2,b=1 B.a=1,b=1 C.a=1,b=0 D.a=2,b=2
【参考答案】 A
14.若有说明int a[3][4];,则a数组元素的非法引用是( )
A.a[0][2*1] B.a[1][3] C.a[4-2][0] D.a[0][4]
【参考答案】 D
15.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是( )
A.函数调用可以作为独立的语句存在 B.函数调用可以无返回值
C.函数调用可以出现在表达式中 D.函数调用可以作为一个函数的形参
【参考答案】 D
16.以下类定义可能会引起错误的语句是( )
class A
{ public:
~A(){ } //1
int i; //2
private:
int j; //3
A(int i){i++;} //4 };
A.1 B.2 C.3 D.4
【参考答案】 D
17.下列描述中错误的是( )
A.派生类可以作为基类派生其他的子类 B.派生类继承基类的所有数据成员
C.派生类可以有多个基类 D.派生类不能继承一些函数成员
【参考答案】 B
18.下列运算符中哪些是不能够被重载的?( )
A..,.*,->*,::,? B.++,--,new,delete,==
C.sizeof,new,delete,++,-- D.sizeof,new,delete,+,-
【参考答案】 A
19.下列关于函数模板实参不能省略的情况说明不正确的是( )
A.从模板函数实参表获得的信息有矛盾
B.需要获得特定类型的返回值,而不管参数的类型如何
C.虚拟类型参数没有出现在模板函数的形参表中
D.函数模板不含有常规形参
【参考答案】 D
20.表达式10>5&&6%3的值是( )
A.-1 B.非零值 C.0 D.1
【参考答案】 C
21.以下函数调用语句中含有参数的个数是( )
excc((v1,v2),(v2,v3,v4),v6);
A.3 B.4 C.5 D.6
【参考答案】 A
22.下列程序段的输出结果是( )
#include
void fun(fun *x,int *y)
{ cout<<*x<<*y;
*x=3;
*y=4; }
void main()
{ int x=1,y=2;
fun(&y,&x);
cout<
A.2143 B.1212 C.1.4 D.2112
【参考答案】 A
23.下列程序的输出结果是( )
#include
void main()
{ char *str=″12123434″;
int x1=0,x2=0,x3=0,x4=0,i;
for(i=0;str[i]!=′\0′;i++)
switch(str[i])
{ case′1′:x4++;
case′2′:x3++;
case′3′:x2++;
case′4′:x1++; }
cout<
A.8,6,4,1 B.8,6,3,2 C.8,8,4,1 D.8,6,4,2
【参考答案】 D
24.每个C++程序都必须有且仅有一个( )
A.类 B.预处理命令
C.主函数 D.语句
【参考答案】 C
25.设有int x=11;,则表达式(x++*2/3)的值是( )
A.7 B.8 C.11 D.12
【参考答案】 A
26.对表达式for(表达式1;;表达式3)可理解为( )
A.for(表达式1;0;表达式3) B.for(表达式1;1;表达式3)
C.for(表达式1;表达式3) D.for(;;表达式3)
【参考答案】 B
27.有如下说明
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
则数值为9的表达式是( )
A.*p+9 B.*(p+8) C.*p+=9 D.p+8
【参考答案】 B
28.以下对C++语言函数的有关描述中,正确的是( )
A.在C++语言中调用函数,只能把实参的值传给形参,形参的值不能传送给实参
B.C++语言函数既可以嵌套定义又可以递归调用
C.函数必须无返回值,否则不能使用函数
D.函数必须有返回值,返回值类型不定
【参考答案】 A
[NextPage]
29.拷贝构造函数的参数一般是( )
A.某对象名 B.某对象成员名 C.某对象的引用名 D.指向对象的指针名
【参考答案】 C
30.下面这个程序的结果是( )
#include
class A
{ private:
int a;
public:
void seta();int geta(); };
void A::seta()
{ a=1; }
int A::gate()
{ return a;}
class B
{ private:
int a;
public:
void seta();int geta();};
void B::seta()
{a=2;}
int B::geta()
{return a;}
class C:public A,public B
{ private:
int b;
public:
void display();};
void C::display()
{ int b=geta();
cout<
void main()
C c;
c.seta();
c.display(); }
A.1 B.2 C.随机输出1或2 D.程序有错
【参考答案】 D
31.对于模板定义关键字class和typename说法不正确的是( )
A.程序中的class并不能都替换为typename
B.class和typename都可互相替换
C.程序中的typename都能替换为class
D.程序中的部分class可以替换为typename
【参考答案】 B
32.以下程序的输出结果是( )
#include
long fun(int n)
{ long s;
if(n==1||n==2)s=2;
else s=n-fun(n-1);
return s; }
void main()
{ cout<
A.1 B.2 C.3 D.4
【参考答案】 A
33.有如下程序
#include
void main()
{ char ch[2][5]={″6937″,″8254″},*p[2];
int i,j,s=0;
for(i=0;i<2;i++)p[i]=ch[i];
for(i=0;i<2;i++)
for(j=0;p[i][j]>′\0′;j+=2)
s=10*s+p[i][j]-′0′;
cout<
该程序的输出结果是( )
A.69825 B.63825 C.6385 D.693825
【参考答案】 C
34.以下程序的输出结果是( )
#include
void main()
{ char x=040;
cout<<(x<<1); }
A.100 B.80
C.64 D.32
【参考答案】 C
35.对以下说明语句的正确理解是( )
int a[10]={6,7,8,9,10};
A.将5个初值依
次赋给a[1]至a[5]
B.将5个初值依次赋给a[0]至a[4]
C.将5个初值依次赋给a[6]至a[10]
D.因为数组长度与初值的个数不相同,所以此语句不正确
二、填空题
1.在长度为n的有序线性表中进行二分查找。最坏的情况下,需要的比较次数为【1】。
【参考答案】
【1】long2n
2.通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为【2】。
【参考答案】
【2】软件生命周期
3.顺序存储方法是把逻辑上相邻的结点存储在物理位置【3】的存储单元中。
【参考答案】
【3】相邻
4.软件工程研究的内容主要包括:【4】技术和软件工程管理。
【参考答案】
【4】软件开发
5.数据的逻辑结构有线性结构和【5】两大类。
【参考答案】
【5】非线性结构
6.C++语言中表示双精度浮点数的关键字是【6】。
【参考答案】
【6】double
7.若从键盘入70,则以下程序输出的结果是【7】。
#include
void main()
{ int a;cin>>a;
if(a>50) cout<
if(a>40) cout<
if(a>30) cout<
【参考答案】
【7】707070
8.以下程序运行后的输出结果是【8】。
#include
void fun(int x,int y)
{ x=x+y;y=x-y;x=x-y;
cout<
void main()
{ int x=2,y=3;fun(x,y);
cout<
【参考答案】
【8】3,2,2,3
【参考答案】 B
[NextPage]
9.类test的析构函数是【9】。
【参考答案】
【9】~test();
10.要采用“cin,cout”进行输入输出时,必须包含的头文件是【10】。
【参考答案】
【10】iostream.h
11.以下程序输出的结果是【11】。
#include
void main()
{ int a=5,b=4,c=3,d;
d=(a>b>c);
cout<
【参考答案】
【11】0
12.如果要把返回值为void的函数A声明为类B的友元函数,则应在类B的定义中加入的语句是【12】。
【参考答案】
【12】friend void A();
13.将x+y中的+运算符用友元函数重载应写为【13】。
【参考答案】
【13】operator+(x,y)
14.下列程序段的输出结果是【14】。
cout<
【参考答案】
【14】509.123457
15.假设int a=1,b=2;则表达式a+++--b的值为【15】。
【参考答案】
【15】2
上机部分
一、改错题
使用VC6打开考生文件夹下的工程kt18_1,此工程包含一个源程序文件kt18_1.cpp,但该程序运行有问题,请改正函数中的错误,使该程序的输出结果为:
2isafactorof10
源程序文件kt18_1.cpp清单如下:
#include
classmyclass
{ /*****************found*****************/
intn,d
public:
myclass(inti,intj){n=i;d=j;}
friendintfactor(myclassob); };
/*****************found*****************/
intmyclass::factor(myclassob)
{ /*****************found*****************/
if(ob.n%ob.d)
return1;
else
return0; }
voidmain()
{ myclassob1(10,2),ob2(13,3);
if(factor(ob1))
cout<<"2isafactorof10\n";
if(factor(ob2))
cout<<"3isnotafactorof13\n"; }
【参考答案】
(1)将int n,d 改为:int n,d;
(2)将int myclass::factor(myclass ob)
改为:int factor(myclass ob)
(3)将if(ob.n%ob.d)
改为:if(!(ob.n%ob.d))
【试题解析】
(1)主要考查对变量定义的理解,同类型的变量定义中间使用逗号分开,同时可以进行初始化,但是在整个定义的结尾必须使用分号,这是C++的规定;
(2)主要考查友元函数的定义,友元是在类的内部声明,类的外部实现的一种特殊的函数,它可以访问类内的所有成员,不过在类外的实现和调用的时候均不需要使用作用域符号“::”限制;
(3)主要考查对if条件语句的掌握,只有括号内的条件为真,即值为1时,才执行if后面的语句,根据题目要求应该执行的是对象ob1,即2可以整除10,所以应该定义函数factor的返回值为能整除返回1,否则为0,而能够整除即取余运算值为0,所以在判断前应该加上非运算。
二、简单应用题
请编写函数fun(),其功能是计算并输出当x<0.97时下列多项式的值,直到∣Sn-Sn-1∣<0.000001为止。
Sn=1+0.5x+0.5(0.5-1)x2/2!+0.5(0.5-1)(0.5-2)x3/3!+…0.5(0.5-1)(0.5-2)…(0.5-n+1)xn/n!
例如:主函数从键盘给x输入0.21后,则输出为s=1.100000。
注意:部分源程序以存在文件kt18_2.cpp中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
文件kt18_2.cpp的内容如下:
#include
#include
#include
doublefun(doublex)
{
}
voidmain()
{ doublex,s;
cout<<"Inputx:"<
cin>>x;
s=fun(x);
cout<<"s="<
【参考答案】
double fun(double x)
{ double s1=1.0,p=1.0,sum=0.0,s0,t=1.0;
int n=1;
do
{ s0=s1;
sum+=s0;
t*=n;
p*=(0.5-n+1)*x;
s1=p/t;
n++;
}while(fabs(s1-s0)>=1e-6);
return sum; }
【试题解析】
解答本题的关键是观察所给的多项式,并从中找出变化规律。观察得出,每一项分子的变化规律是每一项比前一项多乘一项“(0.5-n+1)*x”。分母的变化规律是每一项比前一项多乘一个n(即在不断变化的各项的编号)。
三、综合应用题
使用VC6打开考生文件夹下的工程kt18_3。此工程包含一个kt18_3.cpp,其中定义了类complex,但类的定义并不完整。请按要求完成下列操作,将程序补充完整。
(1)添加类complex的无参数的构造函数的定义,将私有成员real和imag都初始化为0。请在注释“//**1**”之后添加适当的语句。
(2)添加类complex的带两个参数的重载构造函数,两个参数r和i都是double类型,要求将r赋值给私有成员real,i赋值给私有成员imag,同时允许调用时参数i可是省略,请在注释“//**2**”之后添加适当的语句。
(3)完成类complex重载加法函数的定义,该函数直接返回一个类complex的对象,同时把参数对象c的实部real和虚部imag分别与当前对象对应部分分别相加,请在注释“//**3**”之后添加适当的语句。
(4)完成类complex的友元函数print的定义,使其以格式"real+imagi"输出,请在注释“//**4**”之后添加适当的语句。
源程序文件kt18_3.cpp清单如下:
#include
classcomplex
{ public:
//**1**
//**2**
{ real=r;imag=i; }
complexoperator+(complex&c);
friendvoidprint(complex&c);
private:
doublereal,imag; };
complexcomplex::operator+(complex&c)
{ //**3** }
//**4**
{ cout<
voidmain()
{ complexc1(2.0,3.0),c2(4.0,-2.0),c3;
c3=c1+c2;
print(c3);
c3=c3+complex(3.5);
print(c3); }
【参考答案】
(1)complex( ) {real=imag=0; }
(2)complex(double r, double i=0)
(3)return complex(real+c.real,imag+c.imag);
(4)void print(complex &c)
【试题解析】
主要考查类的构造函数重载、缺省参数的设置、运算符的重载和友元函数的定义的掌握,其中(2)使用了参数赋初值的方式使得带两个参数的构造函数可以省略后一个参数,这是一种重要的方法,(3)直接返回类的一个使用带两个参数的构造函数生成的临时对象,这是把运算符重载为类的成员函数时经常使用的方式,(4)友元函数应该在类内声明,类外定义,调用时和普通函数一样,这一点要切记。
| 广告合作:400-664-0084 全国热线:400-664-0084 Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号 珠峰网 版权所有 All Rights Reserved
|