一、单选题(共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
2: Derived_B* p = dynamic_cast
3: Derived_B* p = static_cast
4: Derived_A* p = reinterpret_cast
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; }; 请完成这个类。