【求职】搜狗2016 C++笔试题

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

  1. 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

相关推荐
Reese_Cool1 分钟前
【C语言二级考试】循环结构设计
android·java·c语言·开发语言
海里真的有鱼2 分钟前
Spring Boot 项目中整合 RabbitMQ,使用死信队列(Dead Letter Exchange, DLX)实现延迟队列功能
开发语言·后端·rabbitmq
zxctsclrjjjcph18 分钟前
【C语言】常见的C语言概念
c语言·开发语言
小灰灰爱代码23 分钟前
C++——求3个数中最大的数(分别考虑整数、双精度数、长整数的情况),用函数模板来实现。
开发语言·c++·算法
Eiceblue30 分钟前
Python 复制Excel 中的行、列、单元格
开发语言·python·excel
项目題供诗33 分钟前
尚品汇-秒杀商品存入缓存、Redis发布订阅实现状态位(五十一)
开发语言·php
m0_7145902642 分钟前
汇编(实现C语言程序的调用)
c语言·开发语言·汇编
做技术的Pandaer1 小时前
Go 第二期
开发语言·golang
新知图书1 小时前
Rust编程的作用域与所有权
开发语言·后端·rust
Whappy0011 小时前
51单片机-DA(数字转模拟)
单片机·嵌入式硬件·51单片机