一、选择题
1. 下列哪一种STL容器内的元素是连续存储的()
A. set
B. map
C. vector
D. list
2. 以下代码输出的结果为()
class CBase
{
public:
CBase() {
cout << "CBase()\n";
}
~CBase() {
cout << "~CBase()\n";
}
public:
virtual void func() {}
};
class CDerive : public CBase
{
public:
CDerive() {
cout << "CDerive\n";
}
~CDerive() {
cout << "~CDerive\n";
}
public:
virtual void func() {}
};
CBase *base = new CDerive();
...
delete base;
A. CDerive()
~CDerive()
B. CDerive()
CBase()
~CDerive()
~CBase()
C. CDerive()
CBase()
~CDerive()
D. CBase()
CDerive()
~CBase()
3. 执行以下代码后,data中的数据个数为()
std::vector<int>data;
data.resize(10);
data.push_back(2);
data[0] = 5;
A. 1
B. 9
C. 10
D. 11
4.现需要设计一种方案,实现大量文件的数据共享功能,下列哪个协议无法用于实现当前方案()
A. UDP
B. ARP
C. TCP
D. FTP
5. 操作系统出现死锁的原因是()
A. 计算机系统发生重大故障
B. 有多个封锁的检查同时存在
C. 若干进程因竞争资源而无休止的等待着它方释放已占有的资源
D. 资源数大大少于进程数,或进程同时申请的资源数大大超过资源总数
6. 某函数Fun(unsigned int uData)使用查表法实现从任意32位无符号整形数据中获得指定掩码Mark(0~32个有效位)整合为新整数,如Data=0x12345678,Mark=0xF0F0F0F0,则Fun(Data)=0x1357,在32位操作系统下该函数的查找表空间大小(字节数)可能为以下哪种()
A. 1K
B. 4K
C. 64K
D. 1024K
7. 双向链表中,在A节点后插入一个新节点B,下列代码正确的是()
A. B->next = A->next; A->next = B;
B. B->next = A->next; B->prior = A; A->next->prior = B; A->next = B;
C. A->next = B; B->next = A; B->prior = A;
D. A->next = B; B->prior = A; B->next->prior = B; B->next = A->next;
8. 为了方便快捷定位查找某一个节点,会选择下面什么类型的存储方式()
A. 顺序表
B. 双向链表
C. 堆
D. 哈希表
9. 以下程序中,如果参数pb指向的是B类对象,pd1和pd2的值分别为()
class B
{
int m_iNum;
virtual void foo();
};
class D:public B
{
char *m_szName[100];
};
void func(B* pb)
{
D *pd1 = static_cast<D *>(pb);
D *pd2 = dynamic_cast<D *>(pb);
}
A. pb1为空
B. pb2为空
C. pb1, pb2都为空
D. pb1, pb2都不为空
10. 有如下两个类定义
class CBase{
private:
double x1;
protected:
double x2;
public:
double x3;
};
class CItem : protected CBase
{
private:
double y1;
protected:
double y2;
public:
double y3;
};
在类CItem中保护成员变量的个数是()
A. 1
B. 2
C. 3
D. 4
11. 假设由你来控制三个士兵1、2、3,每个人均有一面黑旗和一面白旗且每次只能举起一面旗子。士兵1、2各自随意举旗,而3根据1、2举的旗子颜色再进行举旗。当1、2举旗次序为黑黑、黑白、白黑、白白时,而3依次举起的旗子是黑、白、白、白,这便是“与门”。当1、2的举起次序不变,下面选项可以正确表示“或非门”的是()
A. 3的举旗次序为:白,黑,黑,黑
B. 3的举旗次序为:白,白,白,黑
C. 3的举旗次序为:白,白,黑,黑
D. 3的举旗次序为:黑,白,黑,黑
12. 请问下面的代码的输出结果为()
class CTestClass
{
public:
CTestClass()
{
}
~CTestClass()
{
}
static int m_nTest;
};
int CTestClass::m_nTest = 100;
int main()
{
CTestClass tc1, tc2, tc3;
tc1.m_nTest = 101;
tc2.m_nTest = 102;
cout << tc3.m_nTest << endl;
}
A. 100
B. 101
C. 102
D. 随机
13. 下述程序输出结果为() 备注:此题目不确定是否出错。
#include <iostream>
#include <algorithm>
#include <list>
bool check(int n)
{
return n%3 == 0;
}
int main()
{
int arr[] = {5, 2, 6, 1, 13, 9, 19};
std::list<int> l(arr, arr+7);
std::list<int>::iterator
it = std::remove_if(l.begin(), l.end(), check);
std::cout << l.size();
l.erase(it, l.end());
std::cout << l.size() << std::endl;
return 0;
}
A. 55
B. 57
C. 75
D. 77
14. 定义一个二维数组int Array[20][20],一程序员不小心使用了int *p = &Array[0][0]; p += 154;请问p指向的是哪个下标的元素()
A. Array[7][5]
B. Array[6][4]
C. Array[7][14]
D. 语法错误
15. 下列方法中不能实现进程间同步的是()
A. Critical Section
B. Mutex
C. Semaphore
D. Event
二、填空题
16. 在下面这个程序片段中的划线处填上适当的表达式,是数组元素逆序例如{7, 5, 6, 3, 8}逆序为{8, 3, 6, 5, 7}。
void recur(int a[], int k)
{
int tmp;
if (____) {
recur(____, ____);
tmp = a[0];
a[0] = a[k-1];
a[k-1] = tmp;
}
}
17. 以下代码在win32编译器默认情况下,sizeof(a)结果为(), sizeof(b)结果为()。
class a
{
public:
virtual void funa();
virtual void funb();
void fun();
private:
int i;
char c;
};
class b : public a
{
public:
void funa();
void funb();
static void fund();
static int si;
private:
char d;
};
18. 函数char *strcpy(char *strDest, const char *strSrc)实现字符串的拷贝功能,填入正确的语句使得程序符合要求。
char *strcpy(char *strDest, const char *strSrc)
{
assert((strDest != NULL) && (strSrc != NULL));
char *address = strDest;
while ((________ = ________) != '\0');
return address;
}
19. 以下函数htoi的功能是,将一个十六进制数字的字符串转成相应的整数值,划线处应填入_________。
int htoi(char s[])
{
int i, n = 0;
for (i = 0; s[i] != '\0'; i++) {
if (s[i] >= '0' && s[i] <= '9')
n = ________;
if (s[i] >= 'a' && s[i] <= 'f')
n = n * 16 + s[i] - 'a' + 10;
if (s[i] >= 'A' && s[i] <= 'F')
n = n * 16 + s[i] - 'A' + 10;
}
return n;
}
20.
class CNullPointerDie
{
public:
void sayHello() const {cout << "hello" << endl;}
void showName() const {cout << name << endl;}
CNullPointerDie(): name("zlgmcu") {}
protected:
string name;
};
int main()
{
CNullPointerDie *p =NULL;
p->sayHello();
p->showName();
return 0;
}
请问程序执行的结果及原因?