聯發博動筆試題目

昨天去聯發博動筆試了,人那個多呀,人山人海~~
說題目吧。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

第一題,請編寫兩個函數,函數的接口如下所示。第一個函數負責把一個ASCII字符串轉換成一個帶符號整數,第二個寒暑負責把一個帶符號的整數轉換爲一個ASCII字符串。

(1)   int StrToInt(const char *Str);

(2)   int IntToStr(int num, char *Str);

已知條件:傳遞給IntToStr函數的緩衝區的長度足以容納下int整數範圍內的數,傳遞給StrToInt

的字符串只包含數字和負號,是一個格式正確的整數值。

int StrToInt(char *Str)

{

assertStr = NULL;

     int num = 0;

     char *p = Str;

     int flag = 0;

     if(*p == '-')

     {

         flag = 1;

         p++;

     }

     while(*p !='/0')

     {

         num += (int)(*p - 48);

         num *=10;

         p++;

     }

     num /=10;

     if(flag)

     {

         num = -num;

     }

     return num;

 

}

 

int IntToStr(int num, char *Str)

{

assertStr = NULL;

     char *p =Str;

     if(num<0)

     {

         *p = '-';

         p++;

         num =-num;

     }

     while(num>0)

     {

         *p = (char)(num%10 + 48);

         p++;

         num /= 10;

     }

     *p = '/0';

     char *q = Str;

     if(*q == '-')

     {

         q++;

     }

     p--;

     while(q < p)

     {

         char t = *q;

         *q = *p;

         *p = t;

         q++;

         p--;

     }

     return 1;

}
第二題:請實現二分搜索函數,該函數對一個排好序的整數數組進行二分法搜索,函數原型如下:

int BinarySearch(const int* array, int lower, int upper, int target);

其中lowerupper分別是需要進行搜索的開始和結束的索引值,分別用遞歸和非遞歸兩種方式實現該函數。

遞歸:

int BinarySearch(const int* array, int lower, int upper, int target)

{

     if(lower > upper){

         return -1;

     }

     int mid = lower + (upper - lower)/2;

     if(target == *(array + mid))

     {

         return mid;

     }

     else if (target < *(array + mid))

     {

         return BinarySearch(array, lower, mid - 1, target);

     }

     else {

         return BinarySearch(array, mid +1, upper, target);

     }

}

非遞歸:

int BinarySearch(const int* array, int lower, int upper, int target)

{

     assert(upper > = lower);

     while(lower <= upper){

     int mid = lower + (upper - lower)/2;

     if(target == *(array + mid))

     {

         return mid;

     }

     else if (target < *(array + mid))

     {

         upper = mid - 1;

     }

     else {

         lower = mid +1;

     }

     }

     return -1;

}

問答題。
1.
下列程序的運行有什麼結果或效果。
#define MAX 255

int main(void){

unsigned char i;
unsigned char a[MAX];
for(i=0; i<=MAX; i++)
{
a[i] = i;
}

return 0;

}

無限循環

2.32位小端字序系統裏,

Char array[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

Char *cp=array;

int *ip=(int*)array;

1*(cp+2)=?

(2) *(ip+2)=?

*(cp+2)應該是2所對應的ASCII碼吧,*(ip+2)=185207048(VC6.0的結果,不知道怎麼算出來的,偶怎麼也算不出這個數)

3. c是一個char型的變量,c的取值範圍是多少。如果c的值是0xf0,那麼c>>3 =?,請給出十進制的答案。

0x00~0xff,0255(難道是-128127?)

c>>3= -16(vc6.0的結果,不知道爲什麼)

4.調用函數時,請列舉不使用函數原型潛在的風險。

這個的詳細答案在另外的文章,請參考:

http://blog.csdn.net/haiyan0106/archive/<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2008/10/09/3043998.aspx

5.以下程序有什麼問題。如果有問題,那該程序運行是正確的,爲什麼。
int ExchangeValue(int *pa, int *pb)
{
    int *pt;

If(pa== NULL || pb==NULL)

Return 0;

*pt = *pa;
    *pa = *pb;
    *pb =*pt;
    return 1;
}

int *pt = new int(1);

沒有爲pt所指向的對象分配空間,造成運行錯誤。

6.

int i1;

Const char *p1 = “AAA”;

int main(){

static int i2;

int i3;

int *i4 = malloc(sizeof(int));

}

上面程序中的變量(i1,ip1,i2,i3,i4)分別存在於哪些內存位置(數據段,堆棧,堆)?i1,i2,i3,*i4的值是什麼.

i3i4棧,i1p1i2靜態數據段。i1=0,i2=0,i3,*i4爲隨機值。
7
。下列哪些語句沒有編譯和運行錯誤,對有錯誤的組,說明哪些語句是錯誤的,爲什麼。

A)   const int a;//只讀,必須初始化

B)   char *pa =”AAA”;

const char *pb = “BBB”;

pb = pa;//正確

C)  

 

char *pa = “AAA”:

char *const pb =”BBB”;

char *const pc = (char *)malloc(4);

*pb=’A’;//這個

*(pc+1) = ‘A’;

Pb = pa;//pb是一個常指針,不能爲左值

D)

Char *pa;

Const char* const pb=”BBB”;

Char * const pc;//A一樣,得初始化

Pa = “AAA”;

Pc = pa;//as same as C)


8.
用變量a給出下面的定義

舉例:

一個整型數(An integer int a;

 

1)一個指向指針的的指針,它指向的指針是指向一個整型數( A pointer to a pointer to an integer

2)一個有10個整型數的數組( An array of 10 integers

3) 一個有10 指針的數組,該指針是指向一個整型數的。(An array of 10 pointers to integers

4) 一個指向有10個整型數數組的指針( A pointer to an array of 10 integers

5) 一個指向函數的指針,該函數有一個整型參數並返回一個整型數(A pointer to a function that takes an integer as an argument and returns an integer

6) 一個有10個指針的數組,該指針指向一個函數,該函數有一個整型參數並返回一個整型數( An array of ten pointers to functions that take an integer argument and return an integer

1) int **a;

2) int a[10];

3) int *a[10];

4) int (*a)[10];

5) int (*a)(int);

6) int (*a[10])(int);
9.
將兩個有符號16位數分別放入有符號32位的高16位和低16位,寫代碼。不要使用函數返回值傳遞數據。

Void put(short num1, short num2, int& result)

{

int t = (int)num1;

result = t<<16+ num2;

}

10.下面是一個用來刪除單向鏈表頭節點的函數,請找出其中程序的漏洞並加以改正。
void RemoveHead(node *head)

{

free(head);

head = head->next;

}

改正:

void RemoveHead(node **head)

{

 node *p = *head;

*head = (*head)->next;

free(p);

}

這個公司連面試機會都沒有給我,聽說已經有同學拿到了offer,效率真高。人家都說80%的offer掌握在20%的人手裏。而我是80%的人。加油吧。

發佈了98 篇原創文章 · 獲贊 23 · 訪問量 41萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章