当前位置:文档之家› 东软培训考核试题(内部资料)

东软培训考核试题(内部资料)

一、单选题(共20分,每题1分)

1、快速排序的时间复杂度_____。

A)B) O(n*n); C)O(n*n/2);; D)O(log(n));;

2、计算程序执行完的结果:

short a;

char *p;

a = 1234;

p= (char *)&a;

*p = 56;

请问题变量a的数值为______。

A)1234; B) 3456; C)5634;

3、判断程序的结果:

char * p = “Hello World”;

*p = “A”;

程序执行后的结果_______。

A) p指向的字符串为“Aello World”;

“H ello World”;

C)

D) 结果未知;

4、请问这个结构体所占的空间大小是______。

Typedef {

Int a;

Char b,

Short c,

Short d,

}AA_t;

A)16byte; B) 9 byte; D)8

5、有下列程序段

char a[3],b[]=”China”;

a = b;

printf(“%s”,a);

则______。

A)运行后将输出China Ch;

C)运行后将输出Chi

6、若有语句int * point,a =4 ;和point = &a______。

7 、语句int (*ptr)();的含义是______。

A)ptr是指向一维数组的指针变量;

D)ptr是一个函数名,该函数的返回值是指向int类型的指针;

8、若有以下定义和语句:

struct student

{

int age;

int num;

};

struct student stu[3] = {{1001,20},{1002,19},{1003,21}};

main()

{

struct student *p;

p = stu;

...

}

则以下不正确的引用是______。

A)(p++)->num; B)p++; C)(*p).num;

9、请正确指出下列指针的最确切的含义,int (*ptr)[3]、int *(*ptr)[4]、

void* (*ptr)(void*)______。

A)一个指针数组,数组元素的个数为3个;一个指向4个元素数组的指针、数组的每个元素是一个指针;一个函数的指针,这个函数的返回值还是个指针;

C) 一个指针数组,数组元素的个数为3个;一个指针数组、数组的每个元素是一个指

针;一个函数的指针,这个函数的返回值还是个指针;

D) 一个指向3个元素数组的指针;一个指针数组、数组的每个元素是一个指针;一个

函数的指针,这个函数的返回值还是个指针;

10、下程序的运行结果为_______?

int x=0, y=0;

void func1(int x, int y)

{

x = 5, y=6;

}

void func2( )

{

x=12, y=13;

}

void main( void )

{

func1(x, y) ;

printf(“%d, %d”, x, y) ;

func2( );

printf(“%d,%d”, x,y) ;

}

A.

B.

C.5, 6, 0, 0

D. 0, 0, 0, 0

11、请指出以下操作的各个结果_______

char str[] = “Hello”;

char* pStr = str;

int n = 60;

sizeof(str) = ?;

sizeof(pStr) = ?

sizeof(n) = ?

A) 5, 5, 4 C) 5, 4, 4 D) 6, 4, 2

12、已知一个类A有一个成员变量m_iValue,以及一个SetValue函数设置这个值,需

要在构造的时候进行赋值。以下几种方式中错误的是:

A) A::A(int iValue) {m_iValue = iV alue;}

B) A::A(int iValue):m_iValue(iValue){}

C) A::A(int iValue){SetValue(iValue);}

13、有一个类,定义如下:

class A {

public:

A()

{

m_iMaxValue ++;

m_iValue = m_iMaxValue;

}

int GetValue(){return m_iValue;};

public:

Static int m_iMaxValue =0 ;

Int m_iValue;

};

在使用的时候,有如下操作

A* pObjectList = new A[100];

int a = pObjectList->GetValue();

int b = (pObjectList+10)->GetValue();

int c = pObjectList[99].GetValue();

请选则正确的结果是_______:

A: a = 0;b = 1; c = 1

C: a = 0, b = 1 c = 100

D: a = 1, b = 1 c = 1

14、有一个Class A重载等号操作符, 最良好和正确的方式是:

A: A& A::operator=(A& orig)

C: const A& A::operator=(const A& orig) const

D: const A& A::operator=( A& orig)

15、看以下代码:

class Base() {

public:

Base(){m_pcDataBase = new char[100]};

~Base(){delete m_pcDataBase}

char* pcDataBase;

};

class Derived() : public Base{

Derived(){m_pcDataDerived = new char[100];}

~Derived(){ delete m_pcDataDerived;}

char* m_pcDataDrived;

};

有两个操作

2.Base* pData1 = new Base;

delete pData1;

3.Base* pData2 = new Derived;

delete pData2;

4.Derived* pData3 = new Derived;

delete pData3;

5.Derived* pData4 = new Derived[100];

delete pData4;

问题:那几个操作会内存泄漏?

A: 2,3,4 C: 2, 3 D: 4

16、如果一个类继承了了另外一个类:

class Derived : protected Base{}

那么,Derived 可以访问Base类中的那些成员:__________

C:公有的和保护的成员变量或函数

D:保护的成员变量和函数

17、动态类型转换

class Base{

public:

virtual void Func(){m_iValue = 1;};

int m_iValue;

};

class Derived_A : public Base

{

public:

virtual void func() {m_iValue = 2;}

};

class Derived_B : public Base

{

public:

virtual void func() {m_iValue = 2;}

};

有以下变量:

Base* p1 = new Derived_A;

Base* p2 = new Derived_B;

Derived_A* p3 = new Derived_A;

Derived_B* p4 = new Derived_B;

问题,以下四个操作中,返回值不等于NULL的有:1: Derived_A* p = dynamic_cast p1;

2: Derived_B* p = dynamic_cast p1;

3: Derived_B* p = static_cast p1;

4: Derived_A* p = reinterpret_cast p2;

A: 1, 2, 3

C:1,2,3,4

D:1,2,4

18、有如下函数

void f(int iValue)

{

if ( iValue < 0 ) {

throw “This is a negative”

} else if (iValue > 100 ) {

throw iValue;

}

}

在调用的地方

try {

f ( 1024.34);

}

catch (char* pData) {

cout<<”Error : “<

}

catch (int iValue) {

cout<<”Error : “<

}

catch (double dValue) {

cout<<”Error : “<

}

则你认为的结果是:_________

A: 死机

B: Error: This is a negative

D:Error:1024.34

19、请选出以下说法中错误的:_________

C:进程比线程使用更多的系统资源,原因是它需要更多的地址空间.

D:Windows被成为抢占式多线程操作系统,因为一个线程可以随时停止运行,然后另外一个线程进行调度.

20、请看如下代码:

class Base

{

public:

virtual void Func1() = 0;

virtual int Func2(){printf(“%d”, m_iValue)}

int m_iValue;

};

class Derived : public Base

{

public:

virtual void Func1(){printf(“%d”, m_iValue)}

};

有一段代码:

Base* pBase1 = new Base;

pBase->m_iValue = 1;

Base* pBase2 = new Derived;

pBase2->m_iValue = 2;

pBase1->Func2();

pBase2->Func1();

则你认为的结果是:__________

A: 1,2

B: 2,1

C:1,1

二、填空题(共30分)

1、(8分)一双向链表的节点定义为:

struct stDulNode {

int iLeft,iRight,iTop,iBottom;

struct stDulNode * pPrior;

struct stDulNode * pNext;

};

stDulNode * pCurNode;

InsertNode(stDulNode *p);

DelNode(stDulNode *p);

现有在当前节点pCurNode前插入、删除函数,在空白处填上语句,使完整。不考虑删除表头、表尾、在表头之前插入、表为空等各种特殊情况。

InsertNode(strDulNode *p)

{

pCurNode->pPrior = p;

}

DelNode(strDulNode * p)

{

delete p;

}

2、(6分)阅读下列程序,填空,使栈的操作完整,

#define MAXSIZE 100

typedef struct{

int stkData[MAXSIZE];

int iTop;

} STKZone;

BOOL Push();

BOOL Pop();

以下是实现:

BOOL Push(int iElement,STKZone *pStack)

{//iElement 是入栈元素

if(pStack->iTop >= MAXSIZE)

return TRUE;

}

BOOL Pop(int* pRet,STKZone *pStack)

{//假如栈不为空

//pRet 为返回元素的指针

}

3、(4分)请说出C++的几大特征:

4、(6分)请简述以下两个For循环的优点和缺点:

1.for ( i=0;i

{

if ( condition ) {

DoSomthing();

} else {

DoOtherThing();

}

}

2.if ( condition ) {

for ( i=0;i

DoSomething();

}

} else {

for ( i=0;i

DoOtherThing();

}

}

____________________________________

5、(6分)const在定义类和他的成员函数时有什么用途?请说明至少两种:

三、找错题(共20分)

1、改错。以下程序要打印字符串”0123456789”,请找出其中的错误(可能不止一个)。

(找错扣分)

#include

#include

#define BUF_SIZE 10

void Sub()

{

char strBuffer[BUF_SIZE], * pBuffer;

int i;

pBuffer = (char*)malloc(BUF_SIZE*sizeof(char));

pBuffer = strBuffer;

for ( i=0; i

*pBuffer ++ = i;

}

printf(“%s\n”,strBuffer);

free(pBuffer);

}

2、找出程序错误(有多个)(重载拷贝构造中的内存泄漏):(10)

class A

{

public:

A(int iValue)

{

m_iValue = iValue;

}

A(int iValue, char* pcName = NULL)

{

m_iValue = iValue;

m_pcName = pcName;

}

~A()

{

if ( m_pcName ) {

delete m_pcName;

}

}

A& operator=(A& right)

{

m_iValue = right.value;

m_pcName = new char[strlen(right.m_pcName)];

strcpy(m_pcName, right.m_pcName);

}

public:

char* m_pcName;

int m_iValue;

};

void main()

{

A* pAList = new A[100];

A Orig(1, “hello”);

For ( int I = 0; I < 100; I ++ ) {

pAList[i] = Orig;

}

delete pAList;

}

四、编程题(共30分,每题15分)

1.假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编

写算法将表A和表B归并成一个按元素值非递减有序(允许值相同)排列的线性表C,并要求利用原表(即表A和表B)的结点空间存放表C。

2.编写String类的构造,析构和赋值函数

已知String类的原型为

class String

{

public:

String();

String (const char* str = NULL);

String ( const String &orig);

~String ();

String& operator = (const String &right);

Const char* GetData();

Private:

char * m_pcData;

};

请完成这个类。

相关主题
文本预览
相关文档 最新文档