当前位置: 首页 > 面试经验 >

30道c++笔试题

优质
小牛编辑
139浏览
2023-03-28

30道c++笔试题

记录一下自己做过的笔试题

c++笔试题30道

记录一下做的笔试题目

1.下列关于纯虚函数的描述中,正确的是

A.纯虚函数是一种特殊的虚函数,是空函数

B.具有纯虚函数的类称为虚基类

C.一个基类中说明有纯虚函数,其派生类一定要实现该纯虚函数

D.具有纯虚函数的类不能创建类对象
答案:C

2.关于引用与指针的区别,下列叙述错误的是

A.引用必须被初始化,指针不必

B.删除空指针是无害的,不能删除引用

C.不存在指向空值的引用,但是存在指向空值的指针

D.指针初始化以后不能被改变,引用可以改变所指的对象
答案:D

3.下面关于描述内存分配方式以及它们的区别描述正确的是

A.从静态存储区分配。在执行任务时,函数内部局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集。

B.从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多的内存,程序员自己负责在何时用free或者delete释放内存。动态内存的生存期由程序员决定,使用非常灵活,但问题也最多。

C.在栈上分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。

D.以上都不对。
答案:B

4.在创建类派生对象时,构造函数的执行顺序是

A.对象成员构造函数,派生类本身的构造函数,基类构造函数

B.派生类本身的构造函数,基类构造函数,对象成员构造函数

C.派生类本身的构造函数,对象成员构造函数,基类构造函数

D.基类构造函数,对象成员构造函数,派生类本身的构造函数
答案:D

5.将父类的析构函数定义为虚函数,下列正确的是

A.释放子类指针时能正确释放父类对象

B.这样做是错误的

C.释放父类指针时能正确释放子类对象

D.以上全错
答案:A

6.假定指针变量p定义为“int *p = new int(100);”,要释放p所指向的动态内存,应使用语句

A. delete *p;

B. delete p;

C. delete &p;

D. delete []p;
答案:B

7.关于重载函数,哪个说明是正确的?

A. 函数名相同,参数类型或个数不同

B. 函数名相同,返回值类型不同

C. 函数名相同,函数内部实现不同

D. 函数名称不同
答案:A

8.如果默认参数的函数声明为 ”void fun(int a, char b=’a’, double c=3.2, int d=1);”,则下面调用写法正确的是

A. fun();

B. fun(2, 3.2);

C. fun(2, ‘c’, 3.14);

D. fun(int a = 1);
答案:C

9.short a = 10,要使a的低八位翻转,必须进行下列哪个操作

A. a^0x00FF

B. a|0x00FF

C. a&0x00FF

D. ~a
答案:A

10.下面关于类的继承和派生的程序,其输出结果是

#include <iostream>
using namespace std;

class A 
{
public:
    A(){cout << "A";}
};

class B
{
public:
    B(){cout << "B";}
};

class C : public A
{
B b;
public:
    C(){cout << "C";}
};

int main() {
    C obj;
    return 0;
}

A. CBA

B. BAC

C. ACB

D. ABC
答案:C

11.下面程序的输出结果是

#include <iostream>
using namespace std;

class ClassA {
  friend long fun(ClassA a) {
    if (a.i < 2)
      return 3;
    return a.i * fun(ClassA(a.i-1));
  }

public:
  ClassA(long a) { i = a; }

private:
  long i;
};

int main() {
  int sum = 0;
  for (int i = 0; i < 3; i++) {
    sum += fun(ClassA(i));
  }
  cout << sum << endl;
}

A. 12

B. 10

C. 15

D. 9
答案:A

12.下面代码执行后的结果为

#include <stdio.h>

int main() {
  int sum = 0;
  int i = 0, j = 0;

  for (j = 0; j < 8; j++) {
    if (j % 2)
      continue;
    sum += j;
  }

  printf("sum = %d", sum);
  return 0;
}

A. sum=10

B. sum=11

C. sum=12

D. 其他几项都不对
答案:C

13.下列一段c++代码的输出是

#include <stdio.h>

class Base {
public:
  int Bar(char x) { return (int)(x); }
  virtual int Bar(int x) { return 2 * x; }
};

class Derived : public Base {
public:
  int Bar(char x) { return (int)(-x); }
  int Bar(int x) {
    return (x / 2);    
  }
};

int main() {
  Derived Obj;
  Base *pObj = &Obj;
  printf("%d,",pObj->Bar((char)(50)));
  printf("%d,",pObj->Bar(50));
  return 0;
}

A. 50, 25

B. 100, 50

C. -50, 25

D. 50, 100
答案:A

14.下面C++代码的输出结果是
#include <iostream>
#include <vector>
#include <iterator>
using namespace std;

int main() {
  vector<int> myvector;
  for (int i = 1; i <= 10; i++) {
    myvector.push_back(i);
  }
  myvector.erase(myvector.begin()+6);
  myvector.erase(myvector.begin(), myvector.begin() + 4);
  for (unsigned i = 0; i < myvector.size(); i++) {
    cout << myvector[i] << ' ';
  }
}

A. 5 6 7 8 9

B. 5 6 8 9 10

C. 6 7 8 9 10

D. 4 7 5 9 10
答案:B

15.以下程序的输出结果是

#include <iostream>
using namespace std;

int main() {
  int x = -1;
  try {
    cout << "Inside try" << endl;
    if (x < 0) {
      throw x;
      cout << "After throw" << endl;
    }
  } catch (int x) {
    cout << "Exception Caught" << endl;
  }
  cout << "After catch" << endl;
  return 0;
}

A. Inside try Exception Caught After throw After catch

B. Inside try Exception Caught After catch

C. Inside try Exception Caught

D. Inside try After throw After catch


16.对于c++语言,下面描述正确的是

A. 线性表的逻辑顺序和物理顺序总是一致的。

B. 线性表的顺序存储表示优于链式存储表示。

C. 线性表若采用链式存储表示时所有节点之间的存储单元地址可连续可不连续

D. 二维数组是其数组元素为线性表的线性表。


17.设哈希表长m=13,哈希函数H(key)=key MOD 11。表中已有4个节点:addr(16)=5,addr(28)=6,addr(84)=7,addr(19)=8其余地址为空,如用线性探测再散列处理冲突,则其关键字为38的地址为

A. 9

B. 6

C. 8

D. 4


18.铁路调度用“栈”,假设进栈车厢编队序列为123(进栈过程中可以出栈),出栈则有许多编队序号,以下不可能出现的序号是

A. 123

B. 321

C. 213

D. 312


19.下述哪个容器是使用连续内存空间保存的

A. map

B. list

C. vector

D. set


20.已知有序序列 1 2 3 4 5 6 7 8 9 10,在二分查找关键字1的过程中,先后进行比较的关键字依次是多少

A. 5 3 1

B. 5 2 1

C. 6 2 1

D. 6 3 1


21.一组记录的排序码为(46, 79, 56, 38, 40, 84),一趟排序的结果为(40, 38, 46, 56, 79, 84),则采用的是什么排序方法

A. 冒泡

B. 直接插入

C. 快速

D. 2路归并


22.对N个数排序,最坏情况下时间复杂度最低的是()排序算法

A.归并

B. 插入

C. 冒泡

D. 快速


23.现有如下代码段

x = 2;
while (x < n/2)
x = 2 * n

假设n ≥ 0,则其时间复杂度应为

A. O(n^2)

B. O(nlog2(n))

C. O(log2(n))

D. O(n)


24.下面关于线程的叙述中,正确的是

A. 不论是系统级线程还是用户级线程,其切换都需要内核的支持

B. 线程是资源分配的单位,进程是调用和分配的单位

C. 在引入线程的系统中,进程仍是资源分配和调度分派的基本单位

D. 不管系统中是否有线程,进程都是拥有资源的独立单位


25.在操作系统中,临界区是

A. 进程的共享正文段

B. 进程中访问临界资源的程序段

C. 进程访问系统资源的程序段

D. 进程访问外部设备的程序段


26.下面关于const正确的是(多选题)

A. 欲阻止一个变量被改变,可以使用cosnt关键字

B. 在定义该const变量时,不用将其初始化

C. 在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值

D. 对于类的成员函数,有时候必须指定其返回值为const类型,以使其返回值不为”左值“


27.下列关于死锁的叙述中,哪些是正确的(多选题)

A. 死锁产生的原因是进程推进顺序不当

B. 环路是死锁产生的必要条件

C. 采用银行家算法能有效地实现死锁避免

D. 系统出现死锁是因为进程调度不当


28.对数据库,关于索引的理解正确的是(多选题)

A. 索引应该根据具体的检索需求来创建,在选择性好的列上创建索引

B. 索引并非越多越好

C. 建立索引可加速查询

D. 创建索引能提高数据插入的性能

29.TCP/UDP下面正确的是(多选题)

A. Both TCP and UDP provide retransmission mechanism;

B. TCP also provides flow control;

C. Both TCP and UDP provide reliability service

D. TCP provide connection-oriented ,byte-stream service;


30.公司网络中心存储服务器ip是192.168.0.200/255.255.255.128,下面是各部门计算机ip,哪些计算机可以访问存储服务器(多选题)

A. 192.168.0.126

B. 192.168.0.154

C. 192.168.0.250

D. 192.168.0.10


#笔试##C/C++#
 类似资料: