昨天去聯(lián)發(fā)博動(dòng)筆試了,人那個(gè)多呀,人山人?!?/span> 第一題,請編寫(xiě)兩個(gè)函數,函數的接口如下所示。第一個(gè)函數負責把一個(gè)ASCII字符串轉換成一個(gè)帶符號整數,第二個(gè)寒暑負責把一個(gè)帶符號的整數轉換為一個(gè)ASCII字符串。 (1) intStrToInt(const char *Str); (2) intIntToStr(int num, char *Str); 已知條件:傳遞給IntToStr函數的緩沖區的長(cháng)度足以容納下int整數范圍內的數,傳遞給StrToInt 的字符串只包含數字和負號,是一個(gè)格式正確的整數值。 int StrToInt(char *Str) { assert(Str!=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) { assert(Str!=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); 其中lower和upper分別是需要進(jìn)行搜索的開(kāi)始和結束的索引值,分別用遞歸和非遞歸兩種方式實(shí)現該函數。 遞歸: int BinarySearch(const int* array, int lower, intupper, int target) { if(lower > upper){ return -1; } int mid = lower + (upper -lower)/2; if(target == *(array +mid)) { return mid; } else if (target <*(array + mid)) { returnBinarySearch(array, lower, mid - 1, target); } else { returnBinarySearch(array, mid +1, upper, target); } } 非遞歸: int BinarySearch(const int* array, int lower, intupper, 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; } 問(wèn)答題。 int main(void){ unsigned char i; return 0; } 無(wú)限循環(huán) 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; 問(wèn) (1)*(cp+2)=? (2) *(ip+2)=? *(cp+2)應該是2所對應的ASCII碼吧,*(ip+2)=185207048(VC6.0的結果,不知道怎么算出來(lái)的,偶怎么也算不出這個(gè)數) 3. c是一個(gè)char型的變量,c的取值范圍是多少。如果c的值是0xf0,那么c>>3=?,請給出十進(jìn)制的答案。 0x00~0xff,即0~255(難道是-128~127?) c>>3= -16(vc6.0的結果,不知道為什么) 4.調用函數時(shí),請列舉不使用函數原型潛在的風(fēng)險。 這個(gè)的詳細答案在另外的文章,請參考: http://blog.csdn.net/haiyan0106/archive/2008/10/09/3043998.aspx 5.以下程序有什么問(wèn)題。如果有問(wèn)題,那該程序運行是正確的,為什么。 If(pa== NULL || pb==NULL) Return 0; *pt = *pa; int *pt = new int(1); 沒(méi)有為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的值是什么. i3,i4棧,i1,p1,i2靜態(tài)數據段。i1=0,i2=0,i3,*i4為隨機值。 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’;//這個(gè) *(pc+1) = ‘A’; Pb = pa;//pb是一個(gè)常指針,不能為左值 D) Char *pa; Const char* const pb=”BBB”; Char * const pc;//和A一樣,得初始化 Pa = “AAA”; Pc = pa;//assame as C) 舉例: 一個(gè)整型數(An integer) int a; 1)一個(gè)指向指針的的指針,它指向的指針是指向一個(gè)整型數( A pointer to a pointer to anintege)r 2)一個(gè)有10個(gè)整型數的數組( An array of 10 integers) 3) 一個(gè)有10個(gè) 指針的數組,該指針是指向一個(gè)整型數的。(An array of10 pointers to integers) 4) 一個(gè)指向有10個(gè)整型數數組的指針( A pointer to an array of 10 integers) 5) 一個(gè)指向函數的指針,該函數有一個(gè)整型參數并返回一個(gè)整型數(A pointer to a function thattakes an integer as an argument and returns an integer) 6) 一個(gè)有10個(gè)指針的數組,該指針指向一個(gè)函數,該函數有一個(gè)整型參數并返回一個(gè)整型數( An array of ten pointers tofunctions 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); Void put(short num1, short num2,int& result) { int t = (int)num1; result = (t<<16)+num2; } 10.下面是一個(gè)用來(lái)刪除單向鏈表頭節點(diǎn)的函數,請找出其中程序的漏洞并加以改正。 { free(head); head =head->next; } 改正: voidRemoveHead(node **head) { node *p = *head; *head= (*head)->next; free(p); }
說(shuō)題目吧。
第二題:請實(shí)現二分搜索函數,該函數對一個(gè)排好序的整數數組進(jìn)行二分法搜索,函數原型如下:
1.下列程序的運行有什么結果或效果。
#defineMAX 255
unsigned char a[MAX];
for(i=0;i<=MAX; i++)
{
a[i] = i;
}
int ExchangeValue(int *pa, int *pb)
{
int *pt;
*pa = *pb;
*pb =*pt;
return 1;
}
7。下列哪些語(yǔ)句沒(méi)有編譯和運行錯誤,對有錯誤的組,說(shuō)明哪些語(yǔ)句是錯誤的,為什么。
8. 用變量a給出下面的定義
9.將兩個(gè)有符號16位數分別放入有符號32位的高16位和低16位,寫(xiě)代碼。不要使用函數返回值傳遞數據。
void RemoveHead(node *head)
聯(lián)系客服