笔试部分
一、选择题
1.算法分析的目的是( )
A.找出数据结构的合理性
B.找出算法中输入和输出之间的关系
C.分析算法的易懂性和可靠性
D.分析算法的效率以求改进
【参考答案】 D
2.在单链表中,增加头结点的目的是( )
A.方便运算的实现 B.使单链表至少有一个结点
C.标识表结点中首结点的位置 D.说明单链表是线性表的链式存储实现
【参考答案】 A
3.软件开发离不开系统环境资源的支持,其中必要的测试数据属于( )
A. 硬件资源 B.通信资源 C. 支持软件 D.辅助资源
【参考答案】 D
4.分布式数据库系统不具有的特点是( )
A.数据分布性和逻辑整体性 B.位置透明性和复制透明性
C.分布性 D.数据冗余
【参考答案】 D
5.下列数据模型中,具有坚实理论基础的是( )
A. 层次模型 B.网状模型
C. 关系模型 D.以上3个都是
【参考答案】 C
6.栈底至栈顶依次存放元素A、B、C、D,在第五个元素E入栈前,栈中元素可以出栈,则出栈序列可能是( )
A.ABCED B.DCBEA C.DBCEA D.CDABE
【参考答案】 B
7.在结构化程序设计思想提出之前,在程序设计中曾强调程序的效率。与程序的效率相比,人们更重视程序的( )
A. 安全性 B.一致性 C. 可理解性 D.合理性
【参考答案】 C
8.软件开发的结构化生命周期方法将软件生命周期划分成( )
A.定义、开发、运行维护 B.设计阶段、编程阶段、测试阶段
C.总体设计、详细设计、编程调试 D.需求分析、功能定义、系统设计
【参考答案】 A
9.数据管理技术发展过程中,文件系统与数据库系统主要区别是数据库系统具有( )
A.特定的数据模型 B.数据无冗余 C.数据可共享 D.专门的数据管理软件
【参考答案】 A
10.实体是信息世界中广泛使用的一个术语,它用于表示( )
A.有生命的事物 B.无生命的事物
C.实际存在的事物 D.一切事物
【参考答案】 C
11.下列关于C++类的描述中错误的是( )
A.类用于描述事物的属性和对事物的操作
B.类与类之间通过封装而具有明确的独立性
C.类与类之间必须是平等的关系,而不能组成层次结构
D.类与类之间可以通过一些方法进行通信和联络
【参考答案】 C
12.以下叙述中正确的是( )
A.构成C++语言程序的基本单位是类
B.可以在一个函数中定义另一个函数
C.main()函数必须放在其他函数之前
D.所有被调用的函数一定要在调用之前进行定义
【参考答案】 A
13.以下程序的输出结果是( )
#include
void reverse(int a[],int n)
{ int i,t;
for(i=0;i
{ t=a[i];a[i]=a[n-1-i];a[n-1-i]=t; } }
void main()
{ int b[10]={1,2,3,4,5,6,7,8,9,10};int i,s=0;
reverse(b,8);
for(i=6;i<10;i++)s+=b[i];
cout<
A.22 B.10 C.34 D.30
【参考答案】 A
14.设有数组定义:char array[]=″China″;,则数组array所占的空间为( )
A.4个字节 B.5个字节 C.6个字节 D.7个字节
【参考答案】 C
15.下面的哪个选项不能作为函数的返回类型?( )
A.void B.int C.new D.long
【参考答案】 C
16.下面程序输出的结果是( )
#include
void main()
{ int i;
int a[3][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++)
cout<
A.1 5 9 B.7 5 3 C.3 5 7 D.5 9 1
【参考答案】 B
17.下列描述中哪个是正确的?( )
A.私有派生的子类无法访问父类的成员
B.类A的私有派生子类的派生类C无法初始化其祖先类A对象的属性,因为类A的成员对类C是不可访问的
C.私有派生类不能作为基类派生子类
D.私有派生类的所有子孙类将无法继续继承该类的成员
【参考答案】 B
18.如果友元函数重载一个运算符时,其参数表中没有任何参数是说明该运算符是( )
A.一元运算符 B.二元运算符 C.选项A和选项B都可能 D.重载错误
【参考答案】 D
19.下列关于模板的说法正确的是( )
A.模板的实参在任何时候都可以省略
B.类模板与模板类所指的是同一概念
C.类模板的参数必须是虚拟类型的
D.类模板中的成员函数全部都是模板函数
【参考答案】 D
20.下面程序段的运行结果是( )
void main()
{ int t,a,b,c;
a=1;b=2;c=2;
while(a
{ t=a;a=b;b=t;c--;}
cout<
A.1,2,0 B.2,1,0 C.1,2,1 D.2,1,1
【参考答案】 A
21.若定义int k=7,x=12;,则能使值为3的表达式是( )
A.x%=(k%=5) B.x%=(k-k%5) C.x&=k-k%5 D.(x%=k)-(k%=5)
【参考答案】 D
22.有以下结构体说明和变量的定义,且指针p指向变量a,指针q指向变量b。则不能把结点b连接到结点a之后的语句是( )
struct node
{ char data;
struct node *next;
}a,b,*p=&a,*q=&b;
A.a.next=q; B.p.next=&b; C.p->next=&b; D.(*p).next=q;
【参考答案】 B
23.以下都是C++语言标识符的是( )
A.dsfa,df4,f$ B.huhj,a^,k2 C.3k,h,j_9 D._ok,jk,k8
【参考答案】 D
24.设以下变量均为int类型,则值不等于7的表达式是( )
A.(x=y=6,x+y,x+1) B.(x=y=6,x+y,y+1) C.(x=6,x+1,y=6,x+y) D.(y=6,y+1,x=y,x+1)
【参考答案】 C
25.while和do-while循环的主要区别是( )
A.do-while的循环体至少无条件执行一次
B.while的循环控制条件比do-while的循环控制条件更严格
C.do-while允许从外部转到循环体内
D.do-while的循环体不能是复合语句
【参考答案】 A
26.若二维数组a有m列,则计算任一元素a[i][j]在数组中相对位置的公式为(假设a[0][0]位于数组的第一个位置上)( )
A.i*m+j B.j*m+i
C.i*m+j-1 D.i*m+j+1
【参考答案】 A
27.下面叙述不正确的是( )
A.派生类一般都用公有派生 B.对基类成员的访问必须是无两义性的
C.赋值兼容则也适用于多重继承的组合 D.基类的公有成员在派生类中仍然是公有的
【参考答案】 D
28.关于友元的概念错误的是( )
A.友元函数没有this指针
B.调用友元函数时必须在它的实参中给出要访问的对象
C.一个类的成员函数也可以作为另一个类的友元函数
D.只能在类的公有段声明友元
【参考答案】 D
29.下面程序的结果是( )
#include
class test{ private:
int num;
public:
test();
int getint() {return num;}
~test();};
test::test()
{num =0;}
test::~test()
{cout<<″Destructor is active″<
void main()
{ test x[3];
cout<<″Exiting main″<
A.Exiting is actice B.Exiting main
Destructor is active Destructor is active
Destructor is active Destructor is active
Destructor is active
C.Exiting main D.Exiting main
Destructor is active
【参考答案】 A
[NextPage]
30.下列语句不能够用于打开C根目录下文件test.txt的语句是( )
A.ifstream fin;fin.open(″C:\\test.txt″);
B.ifstream fin(″C:\\test.txt″);
C.A和B
D.ifstream fin;fin(″C:\\test.txt″);
【参考答案】 D
31.下列关于C++函数的描述中正确的是( )
A.主函数是程序的入口,它由用户定义的函数调用
B.函数在调用之前必须先被声明
C.每个用户定义的函数只能被其他函数调用一次
D.函数是C++中面向对象程序设计框架的基本组成单元
【参考答案】 B
32.下列程序的运行结果为( )
#include
class Location {
protected:
int X,Y;
public:
void SetX(int myx) {X=myx;}
void SetY(int myy) {Y=myy;}
void showxy() {cout<<″X=″<
class Rectangle:public Location{
private:
int H,W;
public:
void SetH(int myh) {H=myh;}
void SetW(int myw) {W=myw;}
void show() {cout<<″X=″<
Y<<″ ″<<″H=″<
void main()
{ Rectangle r1;
r1.SetX(3);
r1.SetY(5);
r1.SetH(4);
r1.SetW(6);
r1.showxy();
r1.show(); }
A.X=3 Y=5
X=3 Y=5 H=4 W=6
B.X=3 Y=5
X=3 Y=5 H=3 W=6
C.X=3 Y=5
X=3 Y=4 H=4 W=6
D.X=3 Y=5
X=3 Y=3 H=4 W=6
【参考答案】 A
33.有以下程序
#include
void main()
{ int a=5,b=0,c=0;
if(a=b+c)cout<<″***″<
else cout<<″$$$″<
下列选项叙述正确的是( )
A.有语法错不能通过编译 B.可以通过编译但不能通过连接
C.输出*** D.输出$$$
【参考答案】 D
34.以下程序中循环体总的执行次数是( )
int i,j;
for(i=6;i>1;i--)
for(j=0;j
{……}
A.20 B.261 C.15 D.25
【参考答案】 A
35.下列程序的输出结果是( )
#include
void main()
{ int a[3],i,j,k=2;
for(i=0;i<3;i++)a[i]=i;
for(i=0;i
for(j=0;j
a[j]=a[i];
cout<
A.2 B.3 C.1 D.0
【参考答案】 A
二、填空题
1.将代数式
______________
╱ X*X+Y*Y
Z= ╱ ----------
╲╱ a+b
换成程序设计中的表达式为【1】。
【参考答案】
【1】SORT(x^2+y^2)/(a+b)
2.【2】是数据库设计的核心。
【参考答案】
【2】数据模型
3.测试的目的是暴露错误,评价程序的可靠性;而【3】的目的是发现错误的位置并改正错误。
【参考答案】
【3】调试
4.在面向对象的设计中,用来请求对象执行某一处理或回答某些信息的要求称为【4】。
【参考答案】
【4】消息
5.常用的黑箱测试有等价分类法、【5】、因果图法和错误推测法4种。
【参考答案】
【5】边值分析法
6.【6】是C++语言程序的入口。
【参考答案】
【6】main()函数
7.C++语言的基本控制结构为顺序结构、选择结构和【7】。
【参考答案】
【7】循环结构
8.函数重载要求重载的函数必须有和原函数一样的【8】。
【参考答案】
【8】函数名{#page#}
9.设置虚基类的目的是【9】,通过【10】表示虚基类。
【参考答案】
【9】解决二义性问题 【10】用关键字virtual
10. 语句cout<<′\n′还可表示为【11】。
【参考答案】
【11】cout<
11.若已知a=10,b=20,则表达式!a
【参考答案】
【12】1
12.友元类的所有成员函数都是另一个类的【13】。
【参考答案】
【13】友元函数
13.表达式x.operator++()还可写成【14】。
【参考答案】
【14】++x
14.若要在C盘根目录下作为二进制文件打开文件test.dat,则应该用的语句是【15】。
【参考答案】
【15】ifstream fin(″C:\test.dat″,ios_binary);或ifstream fin;fin.open(c:\test.dat″,ios_bin
[NextPage]
上机部分
一、改错题
使用VC6打开考生文件夹下的工程kt17_1,此工程包含一个源程序文件kt17_1.cpp,但该程序运行有问题,请改正函数中的错误,使该程序的输出结果为:
0149162536496481
源程序文件kt17_1.cpp清单如下:
#include
templateclassVector
{ Tvec[N];
public:
voidset(intpos,Tval);
Tget(intpos);
/*****************found*****************/ }
templatevoidVector::set(intpos,Tval)
{ vec[pos]=val; }
/*****************found*****************/
templateVector::get(intpos)
{ returnvec[pos]; }
intmain()
{ Vectorv;
inti=0;
doubled=0.0;
for(i=0;i<10;i++)
v.set(i,double(i*i));
for(i=0;i<10;i++)
cout<
cout<
/*****************found*****************/ }
【参考答案】
(1)在“}”后添加分号。
(2)将template Vector::get(int pos)
改为:template T Vector::get(int pos)
(3)将缺少返回值
改为:加入return 0;
【试题解析】
(1)主要考查对于类定义的理解,即使使用了类模板,在类定义的结尾仍然需要使用分号,这是C++的规定;
(2)主要考查是模板类的定义,template是关键字,在<>中间是类型的定义,题目中Vector是一个类的名称,前面应该有该模板的名称,即T,这样才是完整的定义;
(3)主要考查对函数返回值的掌握,任何返回值类型不为int型的函数最后都必须使用returen语句返回对应类型的值,就算是main函数也不例外。
二、简单应用题
请编写函数fun(),其功能是计算并输出下列多项式值
Sn=1+1/1!+1/2!+1/3!+1/4!+…+1/n!
例如:从键盘输入15,则输出为s=2.718282。
注意:部分源程序以存在文件kt17_2.cpp中。
请勿改动主函数main和其他函数中的内容,仅在函数fun的花括号中填入所编写的若干语句。
文件kt17_2.cpp的内容如下:
#include
#include
doublefun(intn)
{
}
voidmain()
{ int n;
doubles;
cout<<"Inputn:"<
cin>>n;
s=fun(n);
cout<<"s="<
【参考答案】
double fun(int n)
{ double t,sn=1.0;
int i,j;
for(i=1;i<=n;i++)
{ t=1.0;
for(j=1;j<=i;j++)
t*=j;
sn+=1.0/t; }
return sn; }
【试题解析】
本题解法是通过观察所给的多项式,可以找出该多项式相应的数学规律。本题中,多项式是一个累加求和的多项式,并且每一项总是比前一项多乘一个整数,所乘整数恰好等于每一项的编号,这样利用循环语句进行阶乘、累加就可以实现功能。由于函数中出现了"/"的运算,所以最终的函数值要考虑到用double类型。
三、综合应用题
使用VC6打开考生文件夹下的工程kt17_3。此工程包含一个kt17_3.cpp,其中定义了类Letter和Number以及Grid,其中Grid类由Letter类和Number类public派生,但三个类的定义并不完整。请按要求完成下列操作,将程序补充完整。
(1)添加类Letter的带一个参数c的构造函数,c是char型的数据,默认值为“A”,该函数把参数c的值赋给类的保护成员ch,请在注释“//**1**”之后添加适当的语句。
(2)添加类Number的带一个参数n的构造函数,n是int型的数据,默认值为0,该函数把参数n的值赋给类的保护成员num,请在注释“//**2**”之后添加适当的语句。
(3)添加派生类Grid构造函数的定义,传入的参数为char型的c和int型的n,并将其分别赋值给基类的ch和num,请在注释“//**3**”之后添加适当的语句。
(4)完成派生类Grid的友元函数--"<<"运算符重载的定义,使其以格式"[g.ch,g.num]"输出,请在注释“//**4**”之后添加适当的语句。
源程序文件kt17_3.cpp清单如下:
#include
classLetter
{ protected:
charch;
public:
//**1** };
classNumber
{ protected:
intnum;
public:
//**2** };
classGrid:publicLetter,publicNumber
{ public:
//**3**
friendostream&operator<<(ostream&o,Grid&g); };
//**4**
{ o<<"["<
returno; }
intmain()
{ Gridg('C',3);
cout<<"Gridreference:"<
return0; }
【参考答案】
(1)Letter(char c = 'A') {ch = c;}
(2)Number(int n = 0) {num = n;}
(3)Grid(char c = 'A', int n = 0) : Letter(c), Number(n){}
(4)ostream &operator<<(ostream &o,Grid &g)
【试题解析】
主要考查对类和派生类的构造函数的定义,以及重载为友元的运算符函数的定义的掌握,其中(3)使用了参数列表进行变量赋值,这是派生类构造函数中经常使用的,(4)对于友元函数在类体外的定义不需要使用作用域符,而ostream类的对象引用可直接使用原来意义的符号“<<”进行输出。
| 广告合作:400-664-0084 全国热线:400-664-0084 Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号 珠峰网 版权所有 All Rights Reserved
|