2013年海康威视校园招聘笔试题
生活随笔
收集整理的這篇文章主要介紹了
2013年海康威视校园招聘笔试题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、10、10、4、4四個數,怎么算出24點?
(10*10-4)/4=24
2、下列表達式在32位機器編譯環境下的值()
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位機器下運行的結果是()
#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的值是()
#define VAL1(a,b) a*b #define VAL2(a,b) a/b-- #define VAL3(a,b) ++a%bint 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分)
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分)
void test_type(bool b , const char *p , float f) {if(!b){return ;}else if(!p){return ;}else if(!f){return ;} }修改如下:
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分)
void test_mem() {char *p = new char[64];delete p;p = NULL;return ; }應該修改為 delete[]p; ?p指向的是一個字符型的數組空間,原來的代碼只是簡單的釋放了指向申請空間的指針,并沒有釋放申請的空間,容易造成內存崩潰。
回收用 new 分配的單個對象的內存空間的時候用 delete,回收用 new[] 分配的一組對象的內存空間的時候用 delete[]。
8、以下程序有什么問題,請指出。
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、請寫出以下程序的輸出結果
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、閱讀以下程序并給出執行結果
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)
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);
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;}}} }
(10*10-4)/4=24
2、下列表達式在32位機器編譯環境下的值()
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位機器下運行的結果是()
#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的值是()
#define VAL1(a,b) a*b #define VAL2(a,b) a/b-- #define VAL3(a,b) ++a%bint 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分)
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分)
void test_type(bool b , const char *p , float f) {if(!b){return ;}else if(!p){return ;}else if(!f){return ;} }修改如下:
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分)
void test_mem() {char *p = new char[64];delete p;p = NULL;return ; }應該修改為 delete[]p; ?p指向的是一個字符型的數組空間,原來的代碼只是簡單的釋放了指向申請空間的指針,并沒有釋放申請的空間,容易造成內存崩潰。
回收用 new 分配的單個對象的內存空間的時候用 delete,回收用 new[] 分配的一組對象的內存空間的時候用 delete[]。
8、以下程序有什么問題,請指出。
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、請寫出以下程序的輸出結果
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、閱讀以下程序并給出執行結果
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)
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);
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;}}} }
總結
以上是生活随笔為你收集整理的2013年海康威视校园招聘笔试题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hulu 2013北京地区校招笔试题
- 下一篇: 2013年完美世界校园招聘笔试题