return __(5)__;
}
三 C++语言部分 共30分
1判断题目:(共10分)
(1)函数体内声明的静态变量,至多只会被初始化一次。
(2) 对于同一个类中的两个非静态成员函数,它们的函数的名称、参数类型、参数个数、参数顺序以及返回值的类型不能完全相同。
(3) inline函数表示编译器一定会将函数体直接插入到调用此函数的地方,这样可以加快程序的运行速度。
(4) 每个cpp文件是单独编译的,但一个程序中多个cpp文件的编译顺序是不固定的。
(5) 将类A所有构造函数的可访问性都限制为私有的,那么在main函数中不可能得到类A的实例对象。
(6) 名字空间是可以多层嵌套的;对于类A中的函数成员和数据成员,它们都属于类名A代表的一层名字空间。
(7) 若在类Base和派生类Derived中,分别声明一个同名的整型成员变量int x; ,那么通过Derived类的实例对象,不可能输出基类Base中的变量x的值。
(8) 若类A是类B的友员类,且类B是类C的友员类,那么类A也是类C的友员类。
(9) 虽然抽象类的析构函数可以是纯虚函数,但要实例化其派生类对象,仍必须提供抽象基类中析构函数的函数体。
(10) 构造函数的初始化列表中的内容,不会影响构造对象中成员数据的初始化顺序。
2、回答下列各题(共12分)
(1) 说明类中的public、 protected和 private成员函数分别在public、protected和private继承方式下在派生类中的可访问性。(2分)
(2)若类A和类B没有继承关系,对于函数void func(A&) ,请至少用两种不同方法说明如何才能传递一个非常量的B类对象给func函数。(2分)
(3)在声明类中的构造函数、析构函数、纯虚函数、静态成员函数、非静态的成员函数以及全局函数作为类的友元函数时,哪些可以是常量成员函数?(2分)
(4)举例说明重载(overload) 和重写(override)的含义。(2分)
(5)通常类A的拷贝构造函数的原型写为A(const A&);,请问为什么参数一定要使用引用形式?使用const修饰符除了可以防止修改传递给构造函数的实参外,还有什么作用?(2分)
(6)程序员规范中要求不要写出类似(++i)+(i++) 或 f(++i,i++)这样的代码,请说明原因。(2分)
4 程序题目8分
数组排序 写一个函数 完成一个数组的升序排列。
Sort(int a[] ,int n)
{
}
四 智力测试 共10分
1、你让工人为你工作7天,给工人的回报是一根金条。金条平分成相连的7段,你必须在每天结束时给他们一段金条,如果只许你两次把金条弄断,你如何给你的工人付费?
2、门外三个开关分别对应室内三盏灯,线路良好,在门外控制开关时候不能看到室内灯的情况,现在只允许进门一次,确定开关和灯的对应关系?
五 英语能力测试 共10分
从供选择的答案中,选出应填入下面叙述中__ __内的最确切的解答,把相应编号写在答卷的对应栏内。
Software quality assurance is now an __A__ sub-discipline of software engineering. As Buckly and Oston point out, __B__ software quality assurance is likely to lead to an ultimate __C__ of software costs. However, the major hurdle in the path of software management in this area is the lack of __D__ software standards. The development of accepted and generally applicable standards should be one of the principal goals of __E__ in software engineering.
供选择的答案
A:(1)emerging (2)emergent (3)engaging (4)evolve
B:(1)effective (2)effortless (3)light (4)week
C:(1)balance (2)growth (3)production (4)reduction
D:(1)usable (2)usage (3)useless (4)useness
E:(1)management(2)planning (3)production (4)research
第二部分:高级部分
(只考虑实习或就业的学员必须测试此部分内容)
考试时间:120分钟 考试成绩___________
一、 填空题(共15分)
1、 在计算机内部通常都是以二进制 码形式表示整数的。
2、 C++进程的内存布局分为四个空间区域: 。
3、 若有运算符>、*=、sizeof、%,则它们按优先级由高至低的排列次序为
4、 描述命题”A小于B或小于C”的表达式为 。
5、 对嵌套if语句的规定是: 。
6、 在C++中有二种参数传递方式: 。
7、 定义重载函数时,应在 有所不同。
8、 类是用户定义的类型,具有类类型的变量称作 。
9、 当建立一个新对象时,程序自动调用 。
10、当一个成员函数被调用时,该成员函数的 指向调用它的对象。
11、拷贝初始化构造函数使用 来初始化创建中的对象。
12、派生类可以定义其 中不具备的数据和操作。
13、网络协议HTTP、FTP和POP3使用的端口分别是 。
14、一元操作符++,作为友元函数重载时只能声明 形参;作为类成员函数重载 时 形参。
15、定义int **a[3][4] , 则变量a占有的内存空间为: 。
二、 单项选择题(10分)
1、连接器所生成的文件的扩展名为( )
A、.cpp B、.obj C、.lib D、.exe
2、设int a=3,b=4,c=5;表达式(a+b)>c&&b==c的值是( )。
A、2 B、-1 C、0 D、1
3、下列标识符中,不合法的用户标识符为( )
A、a#b B、_int C、a_10 D、PAd
4、while(!x)中的(!x)与下面条件( )等价。
A、x==1 B、x!=1 C、x!=0 D、x==0
5、定义析构函数时,应该注意( )
A、其名与类名完全相同 B、返回类型是void类型
C、无形参,也不可重载 D、函数体中必须有delete语句
6、每个类( )构造函数。
A、只能有一个 B、只可有公有的
C、可以有多个 D、只可有缺省的
7、在一个类中可以对一个操作符进行( )重载。
A、1种 B、2种以下 C、3种以下 D、多种
8、重载赋值操作符时,应声明为( )函数。
A、 友元 B、 虚 C、 成员 D、 多态
9、在公有继承的情况下,基类成员在派生类中的访问权限( )
A、 受限制 B、 保持不变 C、 受保护 D、 不受保护
10、通过( )调用虚函数时,采用动态绑定。
A、 对象指针 B、 对象名 C、 成员名限定 D、 派生类名
三、 双项选择题(在每小题的五个备选答案中,选出二个正确的答案,并将其序号填在题中的括号内,15分)
1、在( )( )情况下适宜采用inline定义内联函数。
A、 函数体含有循环语句
B、 函数体含有递归语句
C、 函数代码少、频繁调用
D、 函数代码多、不常调用
E、 需要加快程序执行速度
2、在类中说明的成员可以使用关键字( )( )进行修饰。
A、 private B、 extern C、 auto D、 public E、 register
3、如果类A被说明成类B的友元,则( )( )。
A、 类A的成员即类B的成员
B、 类B的成员即类A的成员
C、 类A的成员函数不得访问类B的成员
D、 类A的成员函数可以访问类B的成员
E、 类B不一定是类A的友元
4、创建或删除堆对象,需要使用操作符( )( )
A、-> B、new C、delete D、. E、*
5、在类中声明转换函数时不能指定( )( )
A、 参数 B、 访问权限 C、 返回类型 D、 操作 E、 标识符
6、在派生类中重新定义虚函数时必须在( )( )方面与基类保持一致。
A、 参数个数 B、 参数类型 C、 参数名字 D、 操作内容 E、 赋值
7、字符串之间的比较按( )( )进行。
A、 字符串的长度 B、 字符的大小写种类
C、 字符串的内部代码 D、 字符串的含意 E、 从头至尾的顺序
8、C++类体系中,不能被派生类继承的有( )( )。
A、 转换函数 B、 构造函数 C、 虚函数
D、 静态成员函数 E、 赋值操作函数
9、下列虚基类的声明中正确的是( )( )
A、 class virtual B: public A
B、 class B: virtual public A
C、 class B: public A virtual
D、 class B: public virtual A
E、 virtual class B: public A
四、 简答题(共40分)
1. 给出下面程序的运行结果。
# include “iostream.h”
int main( )
{ int i=1;
while (i<=15)
if (++i%3!=2) continue;
else cout <<”i=”< }
2. 给出下面程序的运行结果。
#include “iostream.h”
class test{
private:int num
float fl;
public:test( );
int getint( ){return num;}
float getfloat( ){return fl;}
~test( );
};
test ∷ test( )
{ cout << “Initalizing default” << endl;
num=0;fl=0.0;
}
test ∷ ~test( )
{ cout << “Desdtructor is active” << endl;}
int main( )
{test array[2];
cout << array[1].get int( )<< ” ” << array[1].getfloat( ) <
3.给出下面程序的运行结果。
#include “iostream.h”
int main( )
{ int num=50;
int *& ref=#
*ref+=10;
cout << “num=” << num << endl;
num+=40;
cout << “*ref=” <<* ref << endl;
return 0;
}
4. C++中为什么用模板类?
5.程序什么时候应该使用线程,什么时候单线程效率高?
6.什么是网络套接字(Socket) 流套接字(SOCK_STREAM)基于什么协议?简述Winsock的编程流程.
7. 解释ODBC、SQL 、STL、MFC 、TCP/IP。
8 .什么是回调函数?如何定义和实现一个类的成员函数为回调函数?
五、 编程题(共20分)
1、 下面函数chnum将一个整数字符串转换为一个整数。请在[1]、[2]、[3]、[4]处填入正确 内容。
int chnum (char *str)
{ int i, j, k, h, len, num=0;
len=strlen(str);
for(i=0; [1] ; i++)
{ k=1;
j= len-1;
while ([2])
{
k=k*10;
j–;
}
h=[3]-’0′;
num=num+h*[4];
}
return num;
}
2.
已知strcpy函数的原型是:
char * strcpy(char * strDest,const char * strSrc);
1.不调用库函数,实现strcpy函数。
2.解释为什么要返回char *。
C++技能测试试卷二答案
第一部分:基础部分
一、计算机基础知识30分
3-1-2-2-4 2-3-4-3-1 2-2-1-1-3 2-3-1-4-3 1-3-2-2-2 3-2-2-3-1
二、C语言部分15分
(1) h = b
(2) q->next = b
(3) q->next = p
(4) return 1
(5) dec(a+1,n-1)
三、C++语言部分45分
1、判断10分
(1)对
(2)错 如可有两个成员函数,int f();和 int f() const;
(3)错 是否真正内联,由编译器决定。如函数是递归函数,那么永远不会内联。
(4)对
(5)错 可通过类的静态成员函数创建实例,如单件模式。
(6)对
(7)错 如可通过继承自基类的成员函数访问基类中的x.
(8)错 友员关系不具有传递性。
(9)对
(10)对
2、回答问题12分
(1)重点是基类中的任何Private在派生类中都是不可访问的。4 2分。
(2)可在A类中定义一个构造函数:A(const B&);
或在B类中定义一个自动转换函数: operator A( ) const;2分
(3)有纯虚函数、非静态的成员函数可以是常量成员函数。
(这题有点问题,析构函数可以是纯虚函数,但不能是常量函数)2分
(4)类A中有函数 int f(void);和int f(int);为重载(overload) (同名,参数不同)
如类A中有函数 int f(void);,A的派生类B中给int f(void)一个新的实现体,为redefine
如类A中有虚函数 virtual int f(void);,A的派生类B中给virtual int f(void)一个新的实现体,
为override. 2分
(5)A(const A& one ).当调用此拷贝构造函数时,需将参数压栈,若不使用&,就需要在
栈内创建一个one的副本,而这需要用拷贝构造函数。这样就会形成递归调用。 使用const,还允许用一个常量对象作为样本,来构造一个新的对象。 2分
(6)计算子表达式的顺序由编译器决定的,虽然参数的压栈顺序在给定的调用方式下式固定的,
但参数表达式的计算顺序也由编译器决定的。不同的编译器或不同的表达式计算的顺序可能
不一致。 2分。
3程序题目8分
Sort(int a[] ,int n)
{
for(int i=0;i
{
for(int j=i+1;j
if(a[i]>a[j])
{
int temp;
temp = a[i];
a[i] =a[j];
a[j] =temp;
}
}
}
四、智力测试答案5分
1、两次弄断就应分成三份,我把金条分成1/7、2/7和4/7三份。这样,第1天我就可以给他1/7;第2天我给他2/7,让他找回我1/7;第3天我就再给他1/7,加上原先的2/7就是3/7;第4天我给他那块4/7,让他找回那两块1/7和2/7的金条;第5天,再给他1/7;第6天和第2天一样;第7天给他找回的那个1/7
2、三个开关分别:关,开,开10分钟,然后进屋,暗且凉的为开关1控制的灯,亮的为开关2控制的灯,暗且热的为开关3控制的灯。
五、英语答案:5分
1-1-2-1-4
第二部分:高级部分
一、 填空题(每空1分,共15分)
1、 补 2、code area、data area、heap area、stack area
。
3、 sizeof、%、*=、> 4、 A 5、else总是与 离它最近的if 配对。
6、 值传递和 地址传递 。
7、 应在参数个数或参数类型上 有所不同 。
8、对象 。
9、 它的构造函数 。
10、this指针 11、引用 12、基类
13、HTTP协议用80端口,协议用21端口,POP3协议用110端口
14、 一个/对象 ;不需要 15、48
二、
D C A D C C D A B A
三、 双项选择题
1、(C )(E )2、( A )( D )3、( D )( E ) 4、( B )( C ) 5、( A )( C )
6、 A )( B )7、( C )( E )8、 B )( E )9、B )( D )
四、 简答题(每小题5分,共30分)
1. i=2
i=5
i=8
i=11
i=14
2.
Initalizing default
Initalizing default
0 0
Desdtructor is active
Desdtructor is active
3.给出下面程序的运行结果。
答:输出结果:
num=60
ref=100
4、C++中为什么用模板类?答:(1)可用来创建动态增长和减小的数据结构
(2)它是类型无关的,因此具有很高的可复用性。
(3)它在编译时而不是运行时检查数据类型,保证了类型安全
(4)它是平台无关的,可移植性
(5)可用于基本数据类型
5. 程序什么时候应该使用线程,什么时候单线程效率高?
6.什么是网络套接字(Socket) 流套接字(SOCK_STREAM)基于什么协议?简述Winsock的编程流程.
通信的双方要建立连接,这个连接的终端就是套接字.客户端和服务器端都有一个套接字,每个套接字与特定的IP地址和端口号关联. TCP .
Winsock库的初始化,套接字的创建和关闭,绑定套接字,监听LISTEN,接受连接请求,收发数据.
8. 所谓的回调函数,就是预先在系统的对函数进行注册,让系统知道这个函数的存在,以后,当某个事件发生时,再调用这个函数对事件进行响应。
定义一个类的成员函数时在该函数前加CALLBACK即将其定义为回调函数,函数的实现和普通成员函数没有区别
五、 编程题(共20分)
1、[1] i0 [3] str[i] [4] k
2.
1.strcpy的实现代码
char * strcpy(char * strDest,const char * strSrc)
{
if ((strDest==NULL)||(strSrc==NULL)) //[1]
throw “Invalid argument(s )”; //[2]
char * strDestCopy=strDest; //[3]
while ((*strDest++=*strSrc++)!=’\0′); //[4]
return strDestCopy;
}
2.返回strDest的原始值使函数能够支持链式表达式,增加了函数的”附加值”。同样功能的函数,如果能合理地提高的可用性,自然就更加理想。
链式表达式的形式如:
int iLength=strlen(strcpy(strA,strB ));
又如:
char * strA=strcpy(new char[10],strB );
返回strSrc的原始值是错误的。其一,源字符串肯定是已知的,返回它没有意义。其二,不能支持形如第二例的表达式。其三,为了保护源字符串,形参用const限定strSrc所指的内容,把const char *作为char *返回,类型不符,编译报错。