02.C++笔试题

一、选择题
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;
}

请问程序执行的结果及原因?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值