我要投稿 投诉建议

搜狗C++笔试题

时间:2022-09-25 15:38:34 笔试题目 我要投稿
  • 相关推荐

搜狗2017C++笔试题

  搜狗2017C++笔试题有哪些呢?以下是CN人才网小编为大家整理的搜狗2017C++笔试题,欢迎阅读参考。

搜狗2017C++笔试题

  1.关于重载和多态正确的是?

  A.如果父类和子类都有相同的方法,参数个数不同,将子类对象赋给父类后,由于子类继承于父类,所以使用父类指针调用父类方法时,实际调用的是子类的方法;

  B.选项全部都不正确

  C.重载和多态在C++面向对象编程中经常用到的方法,都只在实现子类的方法时才会使用

  D.

  class A{

  void test(floata){cout<<"1";}

  };

  class B:public A{

  void test(intb){cout<<"2";}

  };

  A *a=new A;

  B *b=new B;

  a=b;

  a.test(1.1);

  结果是1

  解析:A中由于没有说明使用虚函数,使程序有多态性,所以实际是调用父类的方法;

  C中重载在一般函数中也会使用;

  D中,题目有2个错误,class A中,需添加成员函数的Public访问属性,否则在类外不能访问成员函数,并且指针对象的访问方式只能使用间接访问方式,即a->test(1.1)或者(*a).test(1.1),同样,由于没有多态性,输出结果为1,若class A中test函数为virtual,则输出2

  2.现有两堆硬币,小明和小亮玩游戏,每次每人只能从其中一堆中取走1个或2个硬币,最后将硬币取完者算作胜利,当两堆硬币的个数分别是12,13时,小明应该如何安排策略才能必定获得胜利?

  A.安排小亮先取硬币;

  B.小明或小亮均一定必胜

  C.安排自己先取硬币

  D.不可能必胜

  解析:很好理解,小明先从13个里面取出一个,剩下12个,以后的取法就是:无论小亮每次取多少个,自己都从另外一堆中取相同的个数,则可保证自己会取胜,因为两堆都是12个。

  3.不考虑任何编译器优化(如:NRVO),下述代码的第10行会发生

  #include //1

  class B//2

  {//3

  };//4

  B func(const B& rhs){//5

  return rhs;//6

  }//7

  int main(int argc,char **argv){//8

  B b1,b2;//9

  b2=func(b1);//10

  }//11

  A.一次默认构造函数,一次拷贝构造函数,一次析构函数,一次(拷贝赋值运算符)operator=

  B.二次拷贝构造函数,一次析构函数

  C.一次(拷贝赋值运算符)operator=,一次析构函数

  D.一次拷贝构造函数,一次析构函数,一次(拷贝赋值运算符)operator=

  解析:b2=func(b1),首先b1作为形参传递到const B& rhs,会发生拷贝构造函数,然后fun函数结束时发生析构函数,最后是operator=,赋值给b2.

  4.下面代码的输出结果是()

  int main(){

  int pid;

  int num=1;

  pid=fork();

  if(pid>0){

  num++;

  printf("in parent:num:%daddr:%x\n",num,&num);

  }

  else if(pid==0){

  printf("in child:num:%daddr:%x\n",num,&num);

  }

  A.父子进程中输出的num相同,num地址不相同

  B.父子进程中输出的num不同,num地址相同

  C.父子进程中输出的num相同,num地址也相同

  D.父子进程中输出的num不同,num地址不相同

  5.关于以下代码中的变量在内存中的存储位置描述不正确的是()

  int a=0;

  class someClass{

  int b;

  static int c;

  };

  int main(){

  int d=0;

  someClass *p=new someClass();

  return 0;

  }

  A.b存在堆区

  B.c存在堆区

  C.d存在栈区

  D.a存在全局变量区

  解析: C应该在全局静态区

  6.以下代码段有问题的是()

  A.void func1(char *e){

  char *p1;

  p1=malloc(100);

  sprintf(p1,error:"%s'.",e);

  local_log(p1);

  }

  B. int func2(char *filename)

  {

  FILE *fp;

  int key;

  fp=fopen(filename,"r");

  fscanf(fp,"%d",&key);

  return key;

  }

  C.voidfunc3(char *info){

  char *p,*pp;

  p=malloc(100);

  pp=p;

  free(p);

  sprintf(pp,*info:"%s'.",info);

  free(pp);

  }

  D.选项全部都正确

  解析:答案是ABC,答案是A申请了空间没有释放,答案B打开流没有关闭,答案C其实指针都是一块内存空间,free了二次,程序会因为内存错误崩溃.

  7.请问该程序的输出是多少?

  #include

  int main()

  {

  unsigned char i=7;

  int j=0;

  for(;i>0;i-=3)

  {

  ++j;

  }

  printf("%d\n",j);

  return 0;

  }

  A.2

  B.死循环

  C.173

  D.172

  解析:unsigned char 8位数据位,范围0-255,

  所以-2(11111110)时,溢出变成254;

  同理-1(11111111)时,溢出变成255;

  最后减到0时,不满足循环条件,for停止。

  刚好173次。

  7 4 1 -2 ==>共4次

  254 251 ... 5 2 -1 ==>共85次

  255 252 ... 6 3 ==>共85-1=84次(因为3-3=0,不能进入循环了)

  所以总共173次。(相减相除)

  更快捷的计算方法:256*2+7=519=173*3

  8.快速排序在下面哪种情况下优势最明显()

  A.数据有多个相同数值

  B.数据基本有序

  C.数据基本无序

  D.数据无任何相同数值

  9.下列各树形结构中,哪些是平衡二叉查找树:

  解析:二叉平衡查找树:左子树中所有节点的值小于根的值,右子树中的所有节点的值大于根的值;左右子树的高度之差的绝对值为0或1,选C

  10.下面哪种数据结构最适合创建一个优先级队列()

  A.堆

  B.双向链表

  C.单向链表

  D.栈

  11.某个大型的网络游戏网站,现有几亿用户,为了实时获取前十名游戏分数最高的玩家,使用以下哪个排序算法比较合理()

  A.基数排序

  B.快速排序

  C.二叉排序

  D.堆排序

  12.有A,B,C,D,E五个字符,出现的频率分别为2,5,3,3,4,由A,B,C,D,E生成的最优二叉树中,该树的带权路径长是多少()

  A35

  B.49

  C.39

  D.45

  13.从根开始按层次(第0层->第1层->第2层)遍历一颗二叉树,需要使用什么辅助数据结构?()

  A. heap

  B.queue

  C.binary tree

  D.stack

  14.假设MySQL数据库表:

  create table T{

  k int unsigned not null auto_increment,

  a date,

  b varchar(24),

  c int,d varchar(24),

  primary key(k),unique key a_index (a DESC,b DESC),

  key k1(b),key k2(c),key k3(d));

  如下哪些sql语句查询能较好的利用索引?()

  A.select bfrom WHERE b like 'aaa%';

  B.select a,bfrom T WHERE a='2015-10-25' ORDER BY b ASC,c ASC;

  C.selecta,b,c from T WHERE a='2015-10-25' ORDER BY b ASC;

  D.selecta,b,c from T WHERE a='2015-10-25' ORDER BY a,b;

  15.在一个游戏的任务中,玩家需要进入1个山洞,取得宝石,之后回到入口.

  山洞的地图如下:

  S--------------------T

  S是入口

  T处有宝箱,打开宝箱之后可能得到的物品有:

  1)宝石,出现概率为5%.

  2)魔法券.出现概率为50%.玩家每消耗一个魔法券,可以直接传送到入口S.

  3)什么也没有,概率为45%.

  S到T的距离为1.

  每次玩家回到S之后,宝箱T的状态会重置,再次进入山洞可以重新打开宝箱获得物品.

  玩家的任务是到达T获取宝石之后回到入口S.如果到达T之后没有获得宝石,可以走出山洞之后再进入反复刷.

  问题:玩家完成任务所走路程的数学期望是()

  A.40

  B.25

  C.35

  D.30

  16.下面关于TCP的描述,错误的是()

  A.TCP是一种面向连接的协议,给用户进程提供可靠的全双工的字节流

  B.TCP客户端和服务器之间建立连接需要经过3次握手

  C.只要有一方主动关闭连接后,这个TCP连接就结束了

  D.只要有一方主动关闭连接后,这个TCP连接就结束了

  17.关于进程和线程描述正确的是()

  A.线程不拥有系统资源,但可以访问隶属于进程的资源

  B.在创建或销毁进程时,系统开销明显大于创建或销毁线程时开销

  C.进程是调度和拥有资源的基本单位

  D.不仅进程自检可以并发执行,同一个进程的多个进程之间也可以并发执行

  18.下面()哪个函数返回的有效句柄用完后不需要CloseHandle

  A.CreateThread

  B. GetCurrentProcess

  C. OpenProcess

  D. CreateFile

  19. invalidateRect的作用是()

  A.擦除一个矩形区域

  B.删除一个矩形

  C.使一个矩形区域变为无效,从而释放部分GDI资源

  D.使一个矩形区域变为无效,从而可以重绘

  20.典型的创建Windows窗口过程的流程为:()

  A.注册窗口类->创建窗口->更新窗口->显示窗口->消息循环

  B.创建窗口->注册窗口类->显示窗口->更新窗口->消息循环

  C.注册窗口类->创建窗口->显示窗口->更新窗口->消息循环

  D.创建窗口->注册窗口类->更新窗口->显示窗口->消息循环

  参考答案:

  1.B 2.C 3.D 4.B 5.B 6.ABC 7.C 8.C 9.C 10.A

  11.D 12.C 13.B 14.AD 15.D 16.C 17.ABCD 18.B 19.D 20.C