笔试部分
一、选择题
1.已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历为
A)GEDHFBCA
B)DGEBHFCA
C)ABCDEFGH
D)ACBFEDHG
【参考答案】 B
2.树是结点的集合,它的根结点数目是
A)有且只有1 B)1或多于1 C)0或1 D)至少2
【参考答案】 A
3.如果进栈序列为e1,e2,e3,e4,则可能的出栈序列是
A)e3,e1,e4,e2 B)e2,e4,e3,e1 C)e3,e4,e1,e2 D)任意顺序
【参考答案】 B
4.在设计程序时,应采纳的原则之一是
A)不限制goto语句的使用 B)减少或取消注解行
C)程序越短越好 D)程序结构应有助于读者理解
【参考答案】 D
5.程序设计语言的基本成分是数据成分、运算成分、控制成分和
A)对象成分 B)变量成分 C)语句成分 D)传输成分
【参考答案】 D
6.下列叙述中,不属于软件需求规格说明书的作用的是
A)便于用户、开发人员进行理解和交流
B)反映出用户问题的结构,可以作为软件开发工作的基础和依据
C)作为确认测试和验收的依据
D)便于开发人员进行需求分析
【参考答案】 D
7.下列不属于软件工程的3个要素的是
A)工具 B)过程 C)方法 D)环境
【参考答案】 D
8.单个用户使用的数据视图的描述称为
A)外模式 B)概念模式 C)内模式 D)存储模式
【参考答案】 A
9.将E-R图转换到关系模式时,实体与联系都可以表示成
A)属性 B)关系 C)键 D)域
【参考答案】 B
10.SQL语言又称为
A)结构化定义语言 B)结构化控制语言 C)结构化查询语言 D)结构化操纵语言
【参考答案】 C
11.下面关于类和对象的描述中,错误的是
A)类就是C语言中的结构体类型,对象就是C语言中的结构体变量
B)类和对象之间的关系是抽象和具体的关系
C)对象是类的实例,一个对象必须属于一个已知的类
D)类是具有共同行为的若干对象的统一描述体
【参考答案】 A
12.以下各选项组中,均是C++语言关键字的组是
A)public operator this B)shod string static
C)it while >= D)private cout printf
【参考答案】 A
13.设int a=10,b=11,c=12;,表达式(a+b)
A)2 B)0 C)-2 D)1
【参考答案】 B
14.下列描述正确的是
A)表示m>n为true或mn&&m
B)switch语句结构中必须有default语句
C)if语句结构中必须有else语句
D)如果至少有一个操作数为true,则包含"||"运算符的表达式为true
【参考答案】 D
15.下列语句中不是死循环的是
A)int i=10;
while (1)
{ i--;
if(i==1)break; }
B)for(int i=1;i<10;i++)
{ i--; }
C)int i=0;
do{
i++;
}while(i>=0);
D)int i=1;
for(;;)i=i+1;
【参考答案】 A
16.下面关于break语句的描述中,不正确的是
A)break可以用于循环体内
B)break语句可以在for循环语句中出现多次
C)break语句可以在switch语句中出现多次
D)break语句可用于if条件判断语句内
【参考答案】 D
17.下面关于数组的描述错误的是
A)在C++语言中数组的名字就是指向该数组第一个元素的指针
B)长度为n的数组,下标的范围是0~n-1
C)数组的大小必须在编译时确定
D)数组只能通过值参数和引用参数两种方式传递给函数
【参考答案】 D
18.下面程序错误的语句是
① #include
② void main()
③ {
④ int *p=new int[1];
⑤ p=9;
⑥ cout <<*p<
⑦ delete []p;
⑧ }
A)④ B)⑤ C)⑥ D)⑦
【参考答案】 B
19.下面的哪个选项不能作为函数的返回类型?
A)void B)int C)new D)long
【参考答案】 C
20.不能作为重载函数的调用的依据是
A)参数个数 B)参数类型
C)函数类型 D)函数名称
【参考答案】 D
21.下列程序的输出结果为
#include
int func(int n)
{ if (n<1)return 1;
else return n+func(n-1);
return 0; }
void main()
{ cout<
A)0 B)10 C)15 D)16
【参考答案】 D
[NextPage]
22.在C++语言中,数据封装要解决的问题是
A)数据的规范化 B)便于数据转换
C)避免数据丢失 D)防止不同模块之间数据的非法访问
【参考答案】 D
23.以下程序中,错误的行为
(1) #include
(2) ClassA
(3) {
(4) public:
(5) int n=2;
(6) A(int val){cout<
(7) ~A( ){}
(8) };
(9) void main( )
(10) {
(11) Aa(o);
(12) }
A)(5) B)(6) C)(7) D)(11)
【参考答案】 A
24.对类的构造函数和析构函数描述正确的是
A)构造函数可以重载,析构函数不能重载
B)构造函数不能重载,析构函数可以重载
C)构造函数可以重载,析构函数也可以重载
D)构造函数不能重载,析构函数也不能重载
【参考答案】 A
25.下面程序的运行结果为
#include
class A
{ int num;
public:
A(int i){num=i;}
A(A &a){num=a.num++;}
void print(){cout<
void main()
{ A a (1),b(a);
a.print();
b.print(); }
A)11 B)12 C)21 D)22
【参考答案】 C
26.下面对静态数据成员的描述中,正确的是
A)静态数据成员是类的所有对象共享的数据
B)类的每个对象都有自己的静态数据成员
C)类的不同对象有不同的静态数据成员值
D)静态数据成员不能通过类的对象调用
【参考答案】 A
27.如果类A被说明成类B的友元,则
A)类A的成员即类B的成员
B)类B的成员即类A的成员
C)类A的成员函数不得访问类B的成员
D)类B不一定是类A的友元
【参考答案】 D
28.可以用p.a的形式访问派生类对象p的基类成员a,其中a是
A)私有继承的公有成员 B)公有继承的私有成员
C)公有继承的保护成员 D)公有继承的公有成员
【参考答案】 D
29.建立派生类对象时,3种构造函数分别是a(基类的构造函数)、b(成员对象的构造函数)、c(派生类的构造函数)这3种构造函数的调用顺序为
A)abc B)acb C)cab D)cba
【参考答案】 A
30.下面关于虚函数的描述,错误的是
A)在成员函数声明的前面加上virtual修饰,就可把该函数声明为虚函数
B)基类中说明了虚函数后,派生类中对应的函数也必须说明为虚函数
C)虚函数可以是另一个类的友元函数,但不能是静态成员函数
D)基类中说明的纯虚函数在其任何派生类中都必须实现
【参考答案】 B
31.下面关于模板的描述,错误的是
A)函数模板和类模板的参数可以是任意的数据类型
B)类模板不能直接使用,必须先实例化为相应的模板类,然后定义了模板类的对象后才能使用
C)函数模板不能直接使用,需要实例化为模板函数后才能使用
D)类模板的成员函数都是模板函数
【参考答案】 A
32.语句ofstream f("SALARY.DAT",ios::app|ios::binary);的功能是建立流对象f,试图打开文件SALARY.DAT并与之连接,并且
A)若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个新文件
B)若文件存在,将其置为空文件;若文件不存在,打开失败
C)若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个新文件
D)若文件存在,打开失败;若文件不存在,建立一个新文件
【参考答案】 A
33.下面程序的运行结果是
#include
void main()
{ int num=1;
int &ref=num;
ref=ref+2;
cout <
num=num+3;
cout <
A)13 B)16 C)36 D)33
【参考答案】 C
[NextPage]
34.下面程序的运行结果是
#include
void fun(int *a,int *b)
{
int x=*a;
*a=*b; *b=x;
cout<<*a<<*b<<" ";
}
void main()
{ int x=1, y=2;
fun(&x,&y);
cout<
A)1212B)1221C)2112D)2121
【参考答案】 D
35.下列程序的运行结果为
#include
int i=0;
class A{
public:
A(){i++;} };
void main()
{ A a,b[3],*c;
c=b;
cout<
A)2 B)3 C)4 D)5
【参考答案】 C
二、填空题
(1)数据结构分为逻辑结构与存储结构,线性链表属于 【1】 。
【参考答案】
【1】存储结构
(2)在面向对象方法中,类之间共享属性和操作的机制称为 【2】 。
【参考答案】
【2】继承
(3)耦合和内聚是评价模块独立性的两个主要标准,其中 【3】 反映了模块内各成分之间的联系。
【参考答案】
【3】内聚
(4)一个项目具有一个项目主管,一个项目主管可管理多个项目,则实体"项目主管"与实体"项目"的联系属于 【4】 的联系。
【参考答案】
【4】一对多或1∶N
(5)数据库设计分为以下6个设计阶段:需求分析阶段、 【5】 、逻辑设计阶段、物理设计阶段、实施阶段、运行和维护阶段。
【参考答案】
【5】数据库概念设计阶段
(6)开发一个C++语言程序的步骤通常包括编辑、 【6】 、链接、运行和调试。
【参考答案】
【6】编译
(7)假设int a=1,b=2;则表达式a+++--b的值为 【7】 。
【参考答案】
【7】2
(8)下面程序的输出结果为 【8】 。
#include
void main()
{ int num=0,i=8;
do{
i--;
num++;
}while(--i);
cout<
【参考答案】
【8】4
(9)通过使用new和delete两个运算符进行的分配为 【9】 存储分配。
【参考答案】
【9】动态
(10)下面程序的运行结果为 【10】 。
#include
void fun(int x=0,int y=0)
{
cout<
}
void main()
{
fun (5);
}
【参考答案】
【10】50
(11)在C++语言中,访问一个对象的成员所用的运算符是 【11】 ,访问一个指针所指向的对象的成员所用的运算符是 【12】 。
【参考答案】
【11】成员选择运算符 【12】成员访问运算符
(12)C++语言支持的两种多态性分别是编译时的多态性和 【13】 的多态性。
【参考答案】
【12】运行时
(13)重载的运算符保持其原有的 【14】 、优先级和结合性不变。
【参考答案】
【13】操作符个数
(14)cout.put(′A′);,还可以表示为 【15】 。
【参考答案】
【14】cout<<′A′;)
[NextPage]
上机部分
一、改错题
使用VC6打开考生文件夹下的工程kt12_1,此工程包含一个源程序文件kt12_1.cpp,但该程序运行有问题,请改正函数中的错误,使该程序的输出结果为:
100
源程序文件kt12_1.cpp清单如下:
#include
template
classpair
{ Tvalue1,value2;
public:
pair(Tfirst,Tsecond)
{value1=first;value2=second;}
/*****************found*****************/
chargetmax(); };
/*****************found*****************/
Tpair::getmax()
{ Tretval;
/*****************found*****************/
retval=value1>value2??value1:value2;
returnretval; }
voidmain()
{ pairmyobject(100,75);
cout<
【参考答案】
(1)将char getmax ();改为:T getmax ();
(2)缺少模板的声明,应改为:template
(3)将retval = value1>value2?? value1 : value2;
改为:retval = value1>value2? value1 : value2;
【试题解析】
(1)主要考查对模板使用的理解,该函数属于模板类定义的一部分,对于返回值类型,应该使用模板类名称T,这样编译的时候才能被接受;
(2)主要考查是模板的使用,前面的模板类已经声明完成了,在类的外面定义类的成员函数时仍然需要使用模板的声明,这样在后面的函数定义体中才能使用模板类;
(3)主要考查对“表达式1? 表达式2 : 表达式3”语句的掌握,这个语句是一个复合语句,先计算第一个表达式,如果为真则整个式子值为表达式2的值,否则为表达式3的值,题目中错误的使用了两个问号。
二、简单应用题
请编写函数fun(),其功能是将s所指字符串中除了下标为奇数、同时ASCII值也为奇数的字符之外,其余的所有字符都删除。字符串中剩余的字符所形成的一个新的字符串放在t所指的数组中。
例如:s所指字符串中的内容为ABCDEFG12345,其中字符A的ASCII码值虽为奇数,但元素所在的下标为偶数,因此必需删除;字符1的ASCII码值为奇数,所在数组中的下标也为奇数,不删除,最后t所指的数组中的内容应是135。
请勿修改主函数main和其他函数中的任何内容,仅在函数su的花括号中填写若干语句。
文件kt12_2.cpp的内容如下:
#include
#include
#include
#include
voidfun(char*s,chart[])
{
}
voidmain()
{ chars[100],t[100];
cout<<"PleaseenterstringS:"<
gets(s);
fun(s,t);
puts(t); }
【参考答案】
void fun(char *s,char t[ ])
{ int i,j=0,n;
n=strlen(s);
for(i=0;i
if(i%2!=0&&s[i]%2!=0)
{ t[j]=s[i];j++;}
t[j]='\0'; }
【试题解析】
本体的解题思路是要先搞清楚在字符参与数值运算时,用的是其ASCII码值来进行计算。其次是判断某数是奇数的方法,即判断该数与2的余数是否为0。
[NextPage]
三、综合应用题
使用VC6打开考生文件夹下的工程kt12_3。此工程包含一个kt12_3.cpp,其中定义了类ARRAY,但类的定义并不完整。请按要求完成下列操作,将程序补充完整。
(1)完成类ARRAY的带一个参数的构造函数,参数i为int型,如果i不是正数则输出错误信息并退出,否则申请int型的大小为i的空间,然后把i赋值给类的数据成员num。请在注释“//**1**”之后添加适当的语句。
(2)完成类ARRAY的拷贝初始化构造函数,注意解决重复删除的问题,请在注释“//**2**”之后添加适当的语句。
(3)完成类ARRAY的重载的运算符函数[],参数i为int型,如果i超界则输出错误信息并退出,否则把下标为i的元素返回,请在注释“//**3**”之后添加适当的语句。
(4)完成类ARRAY的重载的运算符函数=,同样需要注意解决重复删除的问题,不能只是简单的赋值,请在注释“//**4**”之后添加适当的语句。
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
源程序文件kt12_3.cpp清单如下:
#include
#include
classARRAY
{ private:
int*p,num;
public:
ARRAY(){p=newint[10],num=10;}
ARRAY(inti)
{ //**1**
{ cout<<"错误!数组长度应为正。\n";
exit(0); }
p=newint[i];
num=i; }
ARRAY(constARRAY&a);
int&operator[](inti);
~ARRAY(){deletep;}
ARRAY&operator=(constARRAY&a);
friendARRAYoperator+(ARRAY&a,ARRAY&b);
friendostream&operator<<(ostream&os,ARRAY&a); };
ARRAY::ARRAY(constARRAY&a)
{ //**2**
for(inti=0;i
p[i]=a.p[i]; }
int&ARRAY::operator[](inti)
{ //**3**
{ cout<<"越界访问!";
exit(0); }
returnp[i]; }
ARRAY&ARRAY::operator=(constARRAY&a)
{ num=a.num;
p=newint[num];
for(inti=0;i
p[i]=a.p[i];
//**4** }
ARRAYoperator+(ARRAY&a,ARRAY&b)
{ if(a.num!=b.num)
{ cout<<"数组长度不相同!"<
exit(0); }
ARRAYt(a.num);
for(inti=0;i
t.p[i]=a.p[i]+b.p[i];
returnt; }
ostream&operator<<(ostream&os,ARRAY&a)
{ inti=0;
for(;i
{ cout<
if(!((i+1)%10))cout<
returnos; }
voidmain()
{ ARRAYa(3);
a[0]=a[1]=a[2]=3;
cout<<'a'<
ARRAYb(a);
cout<<'b'<
ARRAYc(2);
c=a+b+b;
cout<<'c'<
c=((b=(a+b))+c);
cout<<'a'<
a[7]=3;
cout<
【参考答案】
(1)if(i<=0)
(2)num=a.num;
p=new int[num];
(3)if(i>=num||i<0)
(4)return *this;
【试题解析】
主要考查对一个特殊的类--安全数组的掌握,其中涉及了友元函数、重载函数等,其中(2)中必需申请新的空间,这样可以使得两个对象分别占用不同的两个空间,在自动调用析构函数时不会遇到重复删除的问题,这种方法要掌握。
| 广告合作:400-664-0084 全国热线:400-664-0084 Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号 珠峰网 版权所有 All Rights Reserved
|