您的位置:首页 > 职场人生

面试题

2014-02-12 17:47 381 查看


2013年海康威视校园招聘笔试题
1、10、10、4、4四个数,怎么算出24点?

(10*10-4)/4=24

2、下列表达式在32位机器编译环境下的值()

[cpp] view plaincopy

class A  

{  

};  

  

class B  

{  

public:  

    B();  

    virtual ~B();  

};  

  

class C  

{  

private:  

#pragma pack(4)  

    int i;  

    short j;  

    float k;  

    char l[64];  

    long m;  

    char *p;  

#pragma pack()  

};  

  

class D  

{  

private:  

#pragma pack(1)  

    int i;  

    short j;  

    float k;  

    char l[64];  

    long m;  

    char *p;  

#pragma pack()  

};  

  

int main(void)  

{  

    printf("%d\n",sizeof(A));  

    printf("%d\n",sizeof(B));  

    printf("%d\n",sizeof(C));  

    printf("%d\n",sizeof(D));  

    return 0;  

}  

A、1、4、84、82      B、4、4、82、84      C、4、4、84、82      D、1、4、82、82

3、以下程序在32位机器下运行的结果是()

[cpp] view plaincopy

#pragma pack(4)  

struct info_t  

{  

    unsigned char version;  

    unsigned char padding;  

    unsigned char extension;  

    unsigned char count;  

    unsigned char marker;  

    unsigned char payload;  

    unsigned short sequence;  

    unsigned int timestamp;  

    unsigned int ssrc;  

};  

  

union info_u  

{  

    unsigned char version;  

    unsigned char padding;  

    unsigned char extension;  

    unsigned char count;  

    unsigned char marker;  

    unsigned char payload;  

    unsigned short sequence;  

    unsigned int timestamp;  

    unsigned int ssrc;  

};  

#pragma pack()  

  

int main(void)  

{  

    printf("%d\n",sizeof(info_t));  

    printf("%d\n",sizeof(info_u));  

    return 0;  

}  

A、12  12      B、12  4       C、16  4   D、16  12     E、16  1

4、以下表达式result的值是()

[cpp] view plaincopy

#define VAL1(a,b) a*b  

#define VAL2(a,b) a/b--  

#define VAL3(a,b) ++a%b  

  

int a = 1;  

int b = 2;  

int c = 3;  

int d = 3;  

int e = 5;  

  

int result = VAL2(a,b)/VAL1(e,b)+VAL3(c,d);  

A、-2     B、1     C、0     D、2

5、请写出以下程序的输出(5分)

[cpp] view plaincopy

void swap_1(int a , int b)  

{  

    int c;  

    c = a;  

    a = b;  

    b = c;  

    return ;  

}  

void swap_2(int &a , int &b)  

{  

    int c;  

    c = a;  

    a = b;  

    b = c;  

    return ;  

}  

void swap_3(int *a , int *b)  

{  

    int c;  

    c = *a;  

    *a = *b;  

    *b = c;  

    return ;  

}  

  

int main(void)  

{  

    int a = 100;  

    int b = 200;  

    swap_1(a , b);  

    printf("a = %d , b = %d\n",a , b);  

    swap_2(a , b);  

    printf("a = %d , b = %d\n",a , b);  

    swap_3(&a , &b);  

    printf("a = %d , b = %d\n",a , b);  

    return 0;  

}  

输出结果:

a = 100 , b = 200

a = 200 , b = 100

a = 100 , b = 200

6、下面的程序是否有问题,如有问题,请重构代码(5分)

[cpp] view plaincopy

void test_type(bool b , const char *p , float f)  

{  

    if(!b)  

    {  

        return ;  

    }  

    else if(!p)  

    {  

        return ;  

    }  

    else if(!f)  

    {  

        return ;  

    }  

}  

修改如下:

[cpp] view plaincopy

void test_type(bool b , const char *p , float f)  

{  

    if(!b)  

    {  

        return ;  

    }  

    else if(!p)  

    {  

        return ;  

    }  

    else if(f > -1e-10 && f < 1e-10)  

    {  

        return ;  

    }  

}  

7、请指出以下程序有什么问题(5分)

[cpp] view plaincopy

void test_mem()  

{  

    char *p = new char[64];  

    delete p;  

    p = NULL;  

    return ;  

}  

应该修改为 delete[]p;  p指向的是一个字符型的数组空间,原来的代码只是简单的释放了指向申请空间的指针,并没有释放申请的空间,容易造成内存崩溃。

回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。

8、以下程序有什么问题,请指出。

[cpp] view plaincopy

char* GetMem()  

{  

    char p[] = "hello";  

    return p;  

}  

  

void test_get_mem()  

{  

    char *p = GetMem();  

    printf(p);  

    return ;  

}  

GetMem函数中的p是一个在栈上的局部变量,当函数运行结束的时候,栈上的内容会自动释放的,此处返回的值有可能会成为一个野指针,会出现一个意想不到的结果。

9、请写出strcpy 和 memcpy 的区别(5分)

答:strcpy和memcpy都是标准C库函数,它们有下面的特点。

strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。

strcpy函数的原型是:char* strcpy(char* dest, const char* src);

memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。

memcpy函数的原型是:void *memcpy( void *dest, const void *src, size_t count );

strcpy和memcpy主要有以下3方面的区别。

1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。

2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。

3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy。

10、请写出以下程序的输出结果

[cpp] view plaincopy

class Base  

{  

public:  

    Base()  

    {  

        printf("I am Base()\n");  

    }  

    virtual ~Base()  

    {  

        printf("I am ~Base()\n");  

    }  

public:  

    virtual void SayHello()  

    {  

        printf("Hello Base\n");  

    }  

    void SayWorld()  

    {  

        printf("World Base\n");  

    }  

};  

class Derived : public Base  

{  

public:  

    Derived()  

    {  

        printf("I am Derived()\n");  

    }  

    virtual ~Derived()  

    {  

        printf("I am ~Derived()\n");  

    }  

public:  

    void SayHello();  

    void SayWorld();  

};  

  

void Derived::SayHello()  

{  

    printf("Hello Derived\n");  

}  

void Derived::SayWorld()  

{  

    printf("World Derived\n");  

}  

  

int main(void)  

{  

    Base *b1 = new Base;  

    Base *b2 = new Derived;  

    Derived *d = new Derived;  

  

    b1->SayHello();  

    b1->SayWorld();  

  

    b2->SayHello();  

    b2->SayWorld();  

  

    d->SayHello();  

    d->SayWorld();  

  

    delete d;  

    delete b2;  

    delete b1;  

  

    d= NULL;  

    b2 = NULL;  

    b1 = NULL;  

  

    return 0;  

}  

输出结果:

I am Base()

I am Base()

I am Derived()

I am Base()

I am Derived()

Hello Base

World Base

Hello Derived

World Base

Hello Derived

World Derived

I am ~Derived()

I am ~Base()

I am ~Derived()

I am ~Base()

I am ~Base()

11、阅读以下程序并给出执行结果

[cpp] view plaincopy

class Bclass  

{  

public:  

    Bclass(int i , int j)  

    {  

        x = i;  

        y = j;  

    }  

    virtual int fun()  

    {  

        return 0;  

    }  

protected:  

    int x , y;  

};  

  

class lclass : public Bclass  

{  

public:  

    lclass(int i , int j , int k) : Bclass(i , j)  

    {  

        z = k;  

    }  

    int fun()  

    {  

        return (x+y+z)/3;  

    }  

private:  

    int z;  

};  

int main(void)  

{  

    lclass obj(2,4,10);  

    Bclass p1 = obj;  

    cout<<p1.fun()<<endl;  

  

    Bclass &p2 = obj;  

    cout<<p2.fun()<<endl;  

    cout<<p2.Bclass::fun()<<endl;  

  

    Bclass *p3 = &obj;  

    cout<<p3->fun()<<endl;  

  

    return 0;  

}  

输出结果:

0

5

0

5

12、如何减少频繁分配内存(malloc或者new)造成的内存碎片?(10分)

13、请写出strchr的实现(10分)

函数功能:找出在字符串str中第一次出现字符ch的位置,找到就返回该字符位置的指针(也就是返回该字符在字符串中的地址的位置),找不到就返回空指针(就是NULL)

const char* strchr(const char* str , char ch)

[cpp] view plaincopy

const char* strchr(const char* str , char ch)  

{  

    char *p = NULL;  

    const char* s = str;  

    for( ; *s != '\0' ; ++s)  

    {  

        if(*s == ch)  

        {  

            p = (char *)s;  

            break;  

        }  

    }  

    return p;  

}  

14、请写出冒泡排序法算法(20分)

void BubbleSort(int r[] , int n);

[cpp] view plaincopy

void BubbleSort(int r[] , int n)  

{  

    int i , j , temp;  

    for(i = 0 ; i < n - 1 ; ++i)  

    {  

        for(j = 0 ; j < n-i-1 ; ++j)  

        {  

            if(r[j] > r[j + 1])  

            {  

                temp = r[j];  

                r[j] = r[j + 1];  

                r[j + 1] = temp;  

            }  

        }  

    }  



阅读(2) | 评论(0) | 转发(0) |

0
上一篇:2012搜狗校园面试题

下一篇:ubuntu下软件包安装

相关热门文章
LINUX内核经典面试题

linux面试题目

LINUX内核经典面试题

linux面试题

嵌入式面试题

test123

编写安全代码——小心有符号数...

使用openssl api进行加密解密...

一段自己打印自己的c程序...

sql relay的c++接口

一个简单的shell脚本问题...

网站如何做图片的防盗链功能呢...

如何将printf输出的字符(含有...

嵌入式linux wifi移植 libert...

Ø ⊆ {Ø} 是否是对的 ,这么...

给主人留下些什么吧!~~

评论热议
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: