搜狗923校园招聘会笔试题.docx

上传人:b****5 文档编号:5707830 上传时间:2022-12-31 格式:DOCX 页数:17 大小:292.91KB
下载 相关 举报
搜狗923校园招聘会笔试题.docx_第1页
第1页 / 共17页
搜狗923校园招聘会笔试题.docx_第2页
第2页 / 共17页
搜狗923校园招聘会笔试题.docx_第3页
第3页 / 共17页
搜狗923校园招聘会笔试题.docx_第4页
第4页 / 共17页
搜狗923校园招聘会笔试题.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

搜狗923校园招聘会笔试题.docx

《搜狗923校园招聘会笔试题.docx》由会员分享,可在线阅读,更多相关《搜狗923校园招聘会笔试题.docx(17页珍藏版)》请在冰豆网上搜索。

搜狗923校园招聘会笔试题.docx

搜狗923校园招聘会笔试题

1、以下程序的输出是(12)

[cpp] viewplaincopy

1.class Base  

2.{  

3.public:

  

4.    Base(int j) :

 i(j) {  }   

5.    virtual ~Base() {  }  

6.    void func1()  

7.    {  

8.        i *= 10;  

9.        func2();  

10.    }  

11.    int getValue()  

12.    {  

13.        return i;  

14.    }  

15.protected:

  

16.    virtual void func2()  

17.    {  

18.        i++;  

19.    }  

20.protected:

  

21.    int i;  

22.};  

23.  

24.class Child :

 public Base  

25.{  

26.public:

  

27.    Child(int j) :

 Base(j) {  }  

28.    void func1()  

29.    {  

30.        i *= 100;  

31.        func2();  

32.    }  

33.protected:

  

34.    void func2()  

35.    {  

36.        i += 2;  

37.    }  

38.};  

39.  

40.int main(void)  

41.{  

42.    Base *pb = new Child

(1);  

43.    pb->func1();  

44.    cout<getValue()<

45.    delete pb;  

46.      

47.    return 0;  

48.}  

2、请问程序的输出结果是(30)

#defineDOUBLE(x)x+x//x*2

inti=DOUBLE(5)*5;

cout<

3、写出一下程序的输出(死循环)

[cpp] viewplaincopy

1.int main(void)  

2.{  

3.    char num;  

4.    for(num = 0; num < 255; )  

5.        num += num;  

6.    printf("%d\n",num);  

7.    return 0;  

8.}  

4、程序出错在什么阶段?

()

[cpp] viewplaincopy

1.int main(void)  

2.{  

3.      

4.    cout<<"welcome to sogou"<

5.      

6.    return 0;  

7.}  

A、编译阶段出错    B、运行阶段出错    C、编译和运行都出错    D、程序运行正常

因为中//后面是注释,前面的http:

是标签(类似于goto语句中的标签)。

(这个题目碉堡了)

5、下面程序执行结果为【说明:

X86_64环境】(D)

[cpp] viewplaincopy

1.int main(void)  

2.{  

3.    int a[4][4] = {  

4.                  {1,2,3,4},  

5.                  {50,60,70,80},  

6.                  {900,1000,1100,1200},  

7.                  {13000,14000,15000,16000} };  

8.    int (*p1)[4] = a;  

9.    int (*p2)[4] = &a[0];  

10.    int *p3 = &a[0][0];  

11.    printf("%d %d %d %d\n",*(*(a+1)-1),*(*(p1+3)-2)+1,*(*(p2-1)+16)+2,*(p3+sizeof(p1)-3));  

12.      

13.    return 0;  

14.}  

A、160001101 130022

B、4 2 3 60

C、16000 2 3 2

D、4 1101 13002 60

p1为指向一维数组的指针,所以a+1指向{50,60,70,80}这一维的地址。

减一则为4的地址;同理第二个输出1101。

同理,由于数组的列是4,所以*(p2-1)+16就相当于*(p2)+12,所以第三个输出13002。

第四个由于p1是指针,所以sizeof(p1)为8(68位的系统),所以第四个输出60。

6、在32位操作系统gcc编译器环境下,下面的程序的运行结果是(A)

[cpp] viewplaincopy

1.class A  

2.{  

3.public:

  

4.    int b;  

5.    char c;  

6.    virtual void print()  

7.    {  

8.        cout<<"this is father's function!

"<

9.    }  

10.};  

11.  

12.class B :

 A  

13.{  

14.public:

  

15.    virtual void print()  

16.    {  

17.        cout<<"this is children's function!

"<

18.    }  

19.};  

20.int main(void)  

21.{  

22.    cout<

23.      

24.    return 0;  

25.}  

A、12 12

B、8 8

C、9 9

D、12 16

7、以下哪些做法是不正确或者应该极力避免的:

【多选】(ACD)

A、构造函数声明为虚函数

B、派生关系中的基类析构函数声明为虚函数

C、构造函数调用虚函数

D、析构函数调用虚函数

8、关于C++标准模板库,下列说法错误的有哪些:

【多选】(AD)

A、std:

:

auto_ptr类型的对象,可以放到std:

:

vector

:

auto_ptr>容器中

B、std:

:

shared_ptr类型的对象,可以放到std:

:

vector

:

shared_ptr>容器中

C、对于复杂类型T的对象tObj,++tObj和tObj++的执行效率相比,前者更高

D、采用new操作符创建对象时,如果没有足够内存空间而导致创建失败,则new操作符会返回NULL

A中auto是给别人东西而自己没有了。

所以不符合vector的要求。

而B可以。

C不解释。

new在失败后抛出标准异常std:

:

bad_alloc而不是返回NULL。

9、有如下几个类和函数定义,选项中描述正确的是:

【多选】(B)

[cpp] viewplaincopy

1.class A  

2.{  

3.public:

  

4.    virtual void foo()   {  }  

5.};  

6.  

7.class B  

8.{  

9.public:

  

10.    virtual void foo()   {  }  

11.};  

12.  

13.class C :

 public A , public B  

14.{  

15.public:

  

16.    virtual void foo()   {  }  

17.};  

18.  

19.void bar1(A *pa)  

20.{  

21.    B *pc = dynamic_cast(pa);  

22.}  

23.  

24.void bar2(A *pa)  

25.{  

26.    B *pc = static_cast(pa);  

27.}  

28.  

29.void bar3()  

30.{  

31.    C c;  

32.    A *pa = &c;  

33.    B *pb = static_cast(static_cast(pa));  

34.}  

A、bar1无法通过编译

B、bar2无法通过编译

C、bar3无法通过编译

D、bar1可以正常运行,但是采用了错误的cast方法

选B。

dynamic_cast是在运行时遍历继承树,所以,在编译时不会报错。

但是因为A和B没啥关系,所以运行时报错(所以A和D都是错误的)。

static_cast:

编译器隐式执行的任何类型转换都可由它显示完成。

其中对于:

(1)基本类型。

如可以将int转换为double(编译器会执行隐式转换),但是不能将int*用它转换到double*(没有此隐式转换)。

(2)对于用户自定义类型,如果两个类无关,则会出错(所以B正确),如果存在继承关系,则可以在基类和派生类之间进行任何转型,在编译期间不会出错。

所以bar3可以通过编译(C选项是错误的)。

10、在IntelCPU上,以下多线程对int型变量x的操作,哪几个不是原子操作,假定变量的地址都是对齐的。

【多选】(ABC)

A、x=y  B、x++    C、++x    D、x=1

看下在VC++6.0下的汇编命令即可:

从图可以看出本题只有D选项才是原子操作。

11、一般情况下,下面哪些操作会执行失败?

【多选】(BCD)

[cpp] viewplaincopy

1.class A  

2.{  

3.public:

  

4.    string a;  

5.    void f1()  

6.    {  

7.        printf("Hello World");  

8.    }  

9.    void f2()  

10.    {  

11.        a = "Hello World";  

12.        printf("%s",a.c_str());  

13.    }  

14.    virtual void f3()  

15.    {  

16.        printf("Hello World");  

17.    }  

18.    virtual void f4()  

19.    {  

20.        a = "Hello World";  

21.        printf("%s",a.c_str());  

22.    }  

23.};  

A、A*aptr=NULL; aptr->f1();

B、A*aptr=NULL; aptr->f2();

C、A*aptr=NULL; aptr->f3();

D、A*aptr=NULL; aptr->f4();

至于A为什么正确,因为A没有使用任何成员变量,而成员函数是不属于对象的,所以A正确。

其实,A*aptr=NULL;aptr->f5();也是正确的,因为静态成员也是不属于任何对象的。

至于BCD,在B中使用了成员变量,而成员变量只能存在于对象,C有虚表指针,所以也只存在于对象中。

D就更是一样了。

但是,如果在ClassA中没有写public,那么就全都是private,以至于所有的选项都将会失败。

12、C++下,下面哪些template实例化使用,会引起编译错误?

【多选】(CEF)

[cpp] viewplaincopy

1.template class stack;  

2.void fi(stack);      //A  

3.class Ex  

4.{  

5.    stack &rs;    //B  

6.    stack si;        //C  

7.};  

8.  

9.int main(void)  

10.{  

11.    stack *sc;      //D  

12.    fi(*sc);              //E  

13.    int i = sizeof(stack);    //F  

14.      

15.    return 0;  

16.}  

选CEF; 请注意stack和fi都只是声明不是定义。

我还以为在此处申明后,会在其他地方定义呢,坑爹啊。

由于stack只是声明,所以C是错误的,stack不能定义对象。

E也是一样,stack只是申明,所以不能执行拷贝构造函数,至于F,由于stack只是声明,不知道stack的大小,所以错误。

如果stack定义了,将全是正确的。

13、以下哪个说法正确()

[cpp] viewplaincopy

1.int func()  

2.{  

3.    char b[2]={0};  

4.    strcpy(b,"aaa");  

5.}  

A、Debug版崩溃,Release版正常

B、Debug版正常,Release版崩溃

C、Debug版崩溃,Release版崩溃

D、Debug版正常,Release版正常

选A。

因为在Debug中有ASSERT断言保护,所以要崩溃,而在Release中就会删掉ASSERT,所以会出现正常运行。

但是不推荐如此做,因为这样会覆盖不属于自己的内存,这是搭上了程序崩溃的列车。

数据结构类

37、每份考卷都有一个8位二进制序列号,当且仅当一个序列号含有偶数个1时,它才是有效的。

例如:

0000000001010011都是有效的序列号,而11111110不是,那么有效的序列号共有(128)个。

38、对初始状态为递增序列的数组按递增顺序排序,最省时间的是插入排序算法,最费时间的算法(B)

A、堆排序  B、快速排序  C、插入排序  D、归并排序

39、下图为一个二叉树,请选出以下不是遍历二叉树产生的顺序序列的选项【多选】(BD)

A、ABCDEFIGJH

B、BDCAIJGHFE

C、BDCAIFJGHE

D、DCBJHGIFEA

40、在有序双向链表中定位删除一个元素的平均时间复杂度为()

A、O

(1)  B、O(N)  C、O(logN)     D、O(N*logN) 

41、将10阶对称矩阵压缩存储到一维数组A中,则数组A的长度最少为()

A、100    B、40     C、55     D、80

42、将数组a[]作为循环队列SQ的存储空间,f为队头指示,r为队尾指示,则执行出队操作的语句为(B)

A、f=f+1     B、f=(f+1)%m     C、r=(r+1)%m    D、f=(f+1)%(m+1)

43、以下哪种操作最适合先进行排序处理?

A、找最大、最小值  B、计算算出平均值   C、找中间值 D、找出现次数最多的值

44、设有一个二维数组A[m][n],假设A[0][0]存放位置在644(10),A[2][2]存放位置在676(10),每个元元素占一个空间,问A[3][3]存放在什么位置?

(C)脚注(10)表示用10进制表示

A、688    B、678     C、692    D、696

45、使用下列二维图形变换矩阵A=T*a,将产生的变换结果为(D)

A、图形放大2倍

B、图形放大2倍,同时沿X、Y坐标轴方向各移动一个单位

C、沿X坐标轴方向各移动2个单位

D、沿X坐标轴放大2倍,同时沿X、Y坐标轴方向各移动一个单位

46、体育课的铃声响了,同学们都陆续地奔向操场,按老师的要求从高到矮站成一排。

每个同学按顺序来到操场时,都从排尾走向排头,找到第一个比自己高的同学,并站到他的后面,这种站队的方法类似于()算法。

A、快速排序      B、插入排序     C、冒泡排序   D、归并排序

47、处理a.html文件时,以下哪行伪代码可能导致内存越界或者抛出异常(B)

        inttotalBlank=0;

        intblankNum=0;

        inttaglen=page.taglst.size();

A      for(inti=1;i

       {

               //checkblank

B           while(page.taglst[i]=="
"&&i

             {

C                    ++totalBlank;

D                    ++i;

             }

E           if(totalBlank>10)

F                   blankNum+=totalBlank;

G         totalBlank=0;

       }

注意:

以下代码中taglen是html文件中存在元素的个数,a.html中taglen的值是15,page.taglst[i]取的是a.html中的元素,例如page.taglst[1]的值是

a.html的文件如下:

test

aaaaaaa






48、对一个有向图而言,如果每个节点都存在到达其他任何节点的路径,那么就称它是强连通的。

例如,右图就是一个强连通图,事实上,在删掉哪几条边后,它依然是强连通的。

(A)

A、a      B、b       C、c            D、d

100、一种计算机,其有如下原子功能:

1、赋值  a=b

2、+1操作,++a;a+1;

3、循环,但是只支持按次数的循环  for(变量名){/*循环里面对变量的修改不影响循环次数*/}

4、只能处理0和正整数

5、函数调用   fun(参数列表)

请用伪代码的形式分别在这个计算机上编程实现变量的加法、减法、乘法。

fun_add(a,b)

{

}

fun_multi(a,b)

{

}

fun_minus(a,b)

{

}

问题的关键在于如何实现自减一操作。

本来让-1自增n次即可实现n的自减的,但系统偏偏又不支持负数。

[cpp] viewplaincopy

1.fun_add(a , b)  

2.{  

3.    result = a;  

4.    for(b)  

5.        ++result;  

6.    return result;  

7.}  

8.  

9.fun_muti(a , b)  

10.{  

11.    result = 0;  

12.    for(b)  

13.        result = fun_add(result , a);  

14.    return result;  

15.}  

16.  

17.dec(int n)  

18.{  

19.    temp = 0;  

20.    result = 0;  

21.    for(n)  

22.    {  

23.        result = temp;   //result永远比temp少1,巧妙地减少了一次自增  

24.        ++temp;  

25.    }  

26.    return result;  

27.}  

28./* 

29.上面的dec这段函数代码执行后,result的值将变为n-1。

注意到这段代码在自增时是如何巧妙地延迟了一步的。

 

30.现在,我们相当于有了自减一的函数dec。

实现a-b只需要令a自减b次即可 

31.*/  

32.fun_minus(a , b)  

33.{  

34.    result = a;  

35.    for(b)  

36.        result = dec(result);  

37.}  

101、实现一个队链表排序的算法,C/C++可以使用std:

:

list,Java使用LinkedList

要求先描述算法,然后再实现,算法效率尽可能高效。

主要考察链表的归并排序。

要点:

需要使用快、慢指针的方法,找到链表的的中间节点,然后进行二路归并排序

[cpp] viewplaincopy

1.typedef struct LNode  

2.{  

3.    int data;  

4.    struct LNode *next;  

5.}LNode , *LinkList;  

6.  

7.// 对两个有序的链表进行递归的归并  

8.LinkList MergeList_recursive(LinkList head1 , LinkList head2)  

9.{  

10.    LinkList result;  

11.    if(head1 == NULL)  

12.        return head2;  

13.    if(head2 == NULL)  

14.        return head1;  

15.    if(head1->data < head2->data)  

16.    {  

17.        result = head1;  

18. 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 动态背景

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1