笔试部分
一、选择题
1.在深度为5的满二叉树中,叶子结点的个数为
A)32 B)31 C)16 D)15
【参考答案】 B
2.若某二叉树的前序遍历访问顺序是abdgcefh,中序遍历访问顺序是dgbaechf,则其后序遍历的结点访问顺序是
A)bdgcefha B)gdbecfha C)bdgaechf D)gdbehfca
【参考答案】 D
3.一些重要的程序语言(如C语言和Pascal语言)允许过程的递归调用。而实现递归调用中的存储分配通常用
A)栈 B)堆 C)数组 D)链表
【参考答案】 A
4.软件工程的理论和技术性研究的内容主要包括软件开发技术和
A)消除软件危机 B)软件工程管理 C)程序设计自动化 D)实现软件可重用
【参考答案】 B
5.开发软件时对提高开发人员工作效率至关重要的是
A)操作系统的资源管理功能 B)先进的软件开发工具和环境
C)程序人员的数量 D)计算机的并行处理能力
【参考答案】 B
6.在软件测试设计中,软件测试的主要目的是
A)实验性运行软件
B)证明软件正确
C)找出软件中全部错误
D)发现软件错误而执行程序
【参考答案】 D
7.数据处理的最小单位是
A)数据 B)数据元素 C)数据项 D)数据结构
【参考答案】 C
8.索引属于
A)模式 B)内模式 C)外模式 D)概念模式
【参考答案】 B
9.下述关于数据库系统的叙述中正确的是
A)数据库系统减少了数据冗余
B)数据库系统避免了一切冗余
C)数据库系统中数据的一致性是指数据类型一致
D)数据库系统比文件系统能管理更多的数据
【参考答案】 B
10.数据库系统的核心是
A)数据库 B)数据库管理系统
C)模拟模型 D)软件工程
【参考答案】 B
11.下列关于C++语言类的描述中错误的是
A)类用于描述事物的属性和对事物的操作
B)类与类之间通过封装而具有明确的独立性
C)类与类之间必须是平等的关系,而不能组成层次结构
D)类与类之间可以通过一些方法进行通信和联络
【参考答案】 C
12.C++语言中,表示一条语句结束的标号是
A)# B); C)// D)}
【参考答案】 B
13.以下叙述中正确的是
A)构成C++语言程序的基本单位是类
B)可以在一个函数中定义另一个函数
C)main()函数必须放在其他函数之前
D)所有被调用的函数一定要在调用之前进行定义
【参考答案】 A
14.已知有定义
const int D=5;
int i=1;
double f=0.32;
char c=15;
则下列选项错误的是
A)++i; B)D--; C)c++; D)--f;
【参考答案】 B
15.以下程序的输出结果是
#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 << s; }
A)22 B)10 C)34 D)30
【参考答案】 A
16.下面程序的功能是把316表示为两个加数的和,使两个加数分别能被13和11整除,在划线处应填入的选项是
#include
void main()
{ int i=0,j,k;
do{ i++;k=316-13*i;} while( );
j=k/11;
cout << "316=13*"<
A)k/11 B)k%11 C)k/11==0 D)k%11==0
【参考答案】 B
17.设有数组定义: char array[]="China";,则数组 array所占的空间为
A)4个字节 B)5个字节 C)6个字节 D)7个字节
【参考答案】 C
18.若已定义:
int a[]={0,1,2,3,4,5,6,7,8,9}, *p=a,i;
其中 0≤i≤9, 则对a数组元素不正确的引用是
A)a[p-a] B)*(&a[i]) C)p[i] D)a[10]
【参考答案】 D
19.以下程序的输出结果是
#include
void main()
{ int x=1,y=3;
cout << x++ << ",";
{ int x=0;x+=y*2;
cout << x <<"," << y << ","; }
cout << x <<"," << y; }
A)1,6,3,1,3 B)1,6,3,6,3 C)1,6,3,2,3 D)1,7,3,2,3
【参考答案】 C
20.函数fun的返回值是
fun(char *a,char *b)
{ int num=0,n=0;
while(*(a+num)!=′\0′)num++;
while(b[n]){*(a+num)=b[n];num++;n++;}
return num; }
A)字符串a的长度 B)字符串b的长度
C)字符串a和b的长度之差 D)字符串a 和b的长度之和
【参考答案】 D
21.下面程序输出的结果是
#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[2-i][i]<<""; }
A)1 5 9 B)7 5 3 C)3 5 7 D)5 9 1
【参考答案】 B
22.下面程序的结果为
#include
int c;
class A
{ private:
int a;
static int b;
public:
A(){a=0; c=0;}
void seta(){a++;}
void setb(){b++;}
void setc(){c++;}
void display(){cout << a << " " << b << " " << c;} };
int A::b = 0;
void main()
{
A a1,a2;
a1.seta();
a1.setb();
a1.setc();
a2.seta();
a2.setb();
a2.setc();
a2.display();
}
A)1 2 1 B)1 2 2 C)1 1 2 D)2 2 2
【参考答案】 B
23.下列描述中哪个是正确的?
A)私有派生的子类无法访问父类的成员
B)类A的私有派生子类的派生类C无法初始化其祖先类A对象的属性,因为类A的成员对类C是不可访问的
C)私有派生类不能作为基类派生子类
D)私有派生类的所有子孙类将无法继续继承该类的成员
【参考答案】 B
24.下列关于构造函数说法不正确的是
A)构造函数必须与类同名 B)构造函数可以省略不写
C)构造函数必须有返回值 D)在构造函数中可以对类中的成员进行初始化
【参考答案】 C
25.如果友元函数重载一个运算符时,其参数表中没有任何参数则说明该运算符是
A)一元运算符 B)二元运算符 C)选项A)和选项B)都有可能 D)重载错误
【参考答案】 D
26.在重载一个运算符时,如果其参数表中有一个参数,则说明该运算符是
A)一元成员运算符 B)二元成员运算符
C)一元友元运算符 D)选项B)和选项C)都可能
【参考答案】 D
27.下列关于模板的说法正确的是
A)模板的实参在任何时候都可以省略
B)类模板与模板类所指的是同一概念
C)类模板的参数必须是虚拟类型的
D)类模板中的成员函数全部都是模板函数
【参考答案】 D
28.表示在输出时显示小数位,和在文件输入时判断文件尾的函数分别是
A)showbase()和eof() B)showpoint()和eof()
C)showpoint()和bad() D)showpoint()和good()
【参考答案】 B
29.下面程序段的运行结果是
void main()
{ int t, a, b, c;
a=1;b=2;c=2;
while(a
{ t=a;a=b;b=t;c--;}
cout << a << "," << b << "," << c; }
A)1,2,0 B)2,1,0 C)1,2,1 D)2,1,1
【参考答案】 A
[NextPage]
30.下列程序中画线处应填入的语句是
class Base
{ public:
void fun(){cout<<"Base of fun"<
class Derived:public Base
{ void fun()
{ //显示基类的成员函数fun
cout<<"Derived of fun"<
A)fun(); B)Base.fun(); C)Base::fun(); D)Base->fun();
【参考答案】 C
31.若定义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
32.在位运算中,操作数每右移一位,其结果相当于
A)操作数乘以2 B)操作数除以2 C)操作数乘以4 D)操作数除以4
【参考答案】 B
33.有以下结构体说明和变量的定义,且指针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
34.一个类的友元函数能够访问该类的
A)私有成员 B)保护成员 C)公有成员 D)所有成员
【参考答案】 D
35.下面程序的输出结果是
#include
#include
void main()
{ char p1[10],p2[10];
strcpy(p1,"abc");
strcpy(p2,"ABC");
char str[50]= "xyz";
strcpy(str+2,strcat(p1,p2));
cout << str; }
A)xyzabcABC B)zabcABC C)xyabcABC D)yzabcABC
【参考答案】 C
二、填空题
(1)在树形结构中,树根结点没有 【1】 。
【参考答案】
【1】前件
(2)Jackson结构化程序设计方法是英国的M.Jackson提出的,它是一种面向 【2】 的设计方法。
【参考答案】
【2】数据结构
(3)面向对象的模型中,最基本的概念是对象和 【3】 。
【参考答案】
【3】类
(4)软件设计模块化的目的是 【4】 。
【参考答案】
【4】降低复杂性
(5)数据模型按不同应用层次分成3种类型,它们是概念数据模型、 【5】 和物理数据模型。
【参考答案】
【5】逻辑数据模型
(6)派生类的成员一般分为两部分,一部分是 【6】 ,另一部分是自己定义的新成员。
【参考答案】
【6】从基类继承的成员
(7)以下程序输出的结果是 【7】 。
#include
void main()
{ int a=5,b=4,c=3,d;
d=(a>b>c);
cout << d; }
【参考答案】
【7】 0
(8)设i,j,k均为int型变量,则执行完for(i=0, j=10; i<=j; i++, j--)k=i+j;语句后,k的值为 【8】 。
【参考答案】
【8】 10
(9)如果要把返回值为void的函数A声明为类B的友元函数,则应在类B的定义中加入的语句是 【9】 。
【参考答案】
【9】friend void A( );
(10)如果类B继承了类A,则称类A为类B的基类,类B称为类A的 【10】 。
【参考答案】
【10】派生类
(11)将x+y中的+运算符用友元函数重载应写为 【11】 。
【参考答案】
【11】operator+(x,y)
(12)已知程序的结果为1 2 3,请填空。
#include
template
class A
{ public:
T x,y,z;
void display(){cout << x << " " << y << " " << z;} };
void main()
{ Aa1;
【12】
【13】
【14】
a1.display(); }
【参考答案】
【12】a1.x=1 【13】a1.y=2 【14】a1.z=3
(13)下列程序段的输出结果是 【15】 。
cout << fixed << 509.123456789 << endl;
【参考答案】
【15】509.123457
上机部分
一、改错题
使用VC6打开考生文件夹下的工程kt14_1,此工程包含一个源程序文件kt14_1.cpp,但该程序运行有问题,请改正程序中的错误,使该程序的输出结果为:
A:noparameters
B:intparameter
A:noparameters
B:intparameter
C:intparameter
源程序文件kt14_1.cpp清单如下:
#include
classA
{ /*****************found*****************/
private:
A(){cout<<"A:noparameters\n";}
A(inta){cout<<"A:intparameter\n";} };
classB:publicA
{ public:
B(inta){cout<<"B:intparameter\n";} };
/*****************found*****************/
classC:publicB,publicA
{ public:
/*****************found*****************/
C(inta)::B(a){cout<<"C:intparameter\n";} };
voidmain()
{ Bb(1);
Cc(2); }
【参考答案】
(1)将private:改为:public:
(2)将class C:public B,public A改为:class C:public B
(3)将C(int a)::B(a){cout<<"C: int parameter\n"; }
改为:C(int a):B(a){cout<<"C: int parameter\n";}
【试题解析】
(1)一个类的构造函数和析构函数可以由系统自动生成,也可以由用户提供,但构造函数和析构函数都必须是该类的公有成员函数,否则编译时将出现错误,不能被调用;
(2)A已经是B的基类,C公有继承B,A也就成为了C的基类,根据程序的运行结果可知,C是要公有继承B;
(3)派生类的构造函数,初始化基类的参数,调用基类的构造函数时,使用符号“:”,而不是“::”;
二、简单应用题
编写函数fun(),它的功能是求n以内(不包括n)同时能被3与7整除的所有自然数之和的平方根s,并做为函数值返回。
例如:n为1000时,函数值应为s=153.909064。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include
#include
#include
doublefun(intn)
{ main()
{ clrscr();
printf("s=%f\n",fun(1000)); }
【参考答案】
double fun(int n)
{ double s=0.0;
int i;
for(i=0; i
/*从0~n中找到既能被3整除同时又能被7整除的数,并将这些数求和*/
if(i%3==0&&i%7==0)
s=s+i;
s=sqrt(s); /*对s求平方根*/
return s; }
【试题解析】
本题的解题思路是:逐个取得从0~n之间的所有数,对每次取得的数进行条件判断,条件是既能被3整除同时又能被7整除,注意:这两个条件要求同时成立,因此用到了“&&”运算符。满足条件,该数就被累加到s中去,所有符合条件的数找完后,用sqrt()函数对s求平方根。
[NextPage]
三、综合应用题
使用VC6打开考生文件夹下的工程kt14_3。此工程包含一个kt14_3.cpp,其中定义了二维坐标类Coordinate和三维坐标类ThreeDCoord,其中ThreeDCoord类由Coordinate类public派生,但两个类的定义并不完整。请按要求完成下列操作,将程序补充完整。
(1)定义类Coordinate的保护数据成员x和y,它们都是int型的数据,代表二维坐标的横纵坐标值。请在注释“//**1**”之后添加适当的语句。
(2)根据类Coordinate定义后的成员函数Display的实现,补充该函数在类Coordinate定义体内的声明,Display为二维坐标类的虚函数。请在注释“//**2**”之后添加适当的语句。
(3)完成二维坐标类Coordinate的构造函数,将参数a和b分别赋值给数据成员x和y。请在注释“//**3**”之后添加适当的语句。
(4)根据ThreeDCoord类构造函数的声明,补充ThreeDCoord构造函数的实现,参数a和b通过调用基类的构造函数来初始化基类的数据成员x和y,c赋值给数据成员z。请在注释“//**4**”之后添加适当的语句。
输出结果如下:
[1,2]
[3,4,5]
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
源程序文件kt14_3.cpp清单如下:
#include
classCoordinate
{ protected:
//**1**
public:
Coordinate(inta=0,intb=0);
//**2** };
Coordinate::Coordinate(inta,intb)
{ //**3** }
voidCoordinate::Display()const
{ cout<<'['<
classThreeDCoord:publicCoordinate
{ intz;
public:
ThreeDCoord(inta=0,intb=0,intc=0);
virtualvoidDisplay()const; };
//**4**
voidThreeDCoord::Display()const
{ cout<<'['<
voidmain()
{ Coordinatec(1,2);
ThreeDCoordt(3,4,5);
c.Display();
t.Display(); }
【参考答案】
(1)protected:
int x;
int y;
(2)virtual void Display() const;
(3)x=a; y=b;
(4)ThreeDCoord::ThreeDCoord(int a, int b, int c) : Coordinate(a, b)
【试题解析】
本题主要考查对类数据成员的定义、构造函数、派生类及虚函数的理解,是C++类知识的一个综合考核。对虚函数的定义格式及继承类构造函数的定义格式请多加注意。
| 广告合作:400-664-0084 全国热线:400-664-0084 Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号 珠峰网 版权所有 All Rights Reserved
|