搜狗2016 C++笔试题

搜狗2016C++研发工程师笔试题

2015/12/6 0047(网上收集整理的,参考答案在后面,若有错误请大神指出)

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 Atest函数为virtual,则输出2

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

A.安排小亮先取硬币;

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

C.安排自己先取硬币

D.不可能必胜

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

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

#include <stdio.h>//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;

}

Ab存在堆区

Bc存在堆区

Cd存在栈区

Da存在全局变量区

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

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

Avoid 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;

   }

Cvoidfunc3(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<stdio.h>

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

所以-211111110)时,溢出变成254

同理-111111111)时,溢出变成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.下列各树形结构中,哪些是平衡二叉查找树:

A.           4

            / \

           3   5

          /     \

         2       8

        /         \

       1           9

B.            7

             / \

            2   8

           / \

          1   4

             / \

            3   5

C.             5

             /   \

            2     8

           / \   /

          1   4 7

             /

            3

D               7

              /   \

             2     8

            / \   /

           1   4 6

              /

             3

解析:二叉平衡查找树:左子树中所有节点的值小于根的值,右子树中的所有节点的值大于根的值;左右子树的高度之差的绝对值为01,选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

Bqueue

Cbinary tree

Dstack

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语句查询能较好的利用索引?()

Aselect bfrom WHERE b like 'aaa%';

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

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

Dselecta,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%.

ST的距离为1.

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

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

再进入反复刷.

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

A40

B25

C35

D30

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

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

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

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

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

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

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

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

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

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

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

ACreateThread

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

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值