參考答案(大部分答案和都和卷子上給的相同,歡迎討論)轉載請注明來源http://www.cnblogs.com/jerry19880126/
一、單選題
- B。p2是int型,只有p1是int*型。
- D。區分0和\0。
- C。
- B。除號與取余的優先級是一樣的,所以順序是從左向右。快速與(邏輯與)只要不是0的都認為是true(1),是0則認為是false(0)。
- 重復。
- 重復。
- A。字符串常量不可更改。
- 重復。
- C。可以用排除法。
- D。
- C or D。沒查到,C6000是指DSP嗎?如果是32位PC機上,D是錯的,因為long還是4字節。但本科做過單片機知道,int是2字節的,所以C是錯的。這里貌似是硬件環境,所以選C還是保穩些。
- C。只要有一個被顯式初始化了,數組中其他元素也會被初始為0。
- B。百度一下就知道了。
- B。注意while里面的==誤寫成=了。
- B。
- B。我覺得是D,百度上沒有找到確切的。
- A。應該是A,我百度到了。
- C。
- A。
- B。語句覆蓋是最弱的,其次是條件覆蓋,再次是條件及判定覆蓋,最強的是條件組合覆蓋。
二、多選題
- ABD。
- ABCD。形參、實參不一致時,會有默認的轉換,若不能轉換,則編譯器報錯。
- ACD。
- ACD。A只有是字符串數組時,才可以整體輸出。B編譯器沒那么聰明,不知道是下標越界,報的只是讀沖突錯。C可以的。D是對的,數組名為地址常量。
- ABD。D是左移運算符,也是位操作。
- BCD。C和D都可以訪問。
- 后面題目是軟件測試、linux的,請自行百度確認答案。第16題好像有問題,信號量是進程互斥用的,信號才是用來通信的。
三、判斷題
- 錯。
- 對。
- 對。
- 對。
- 重復。
- 重復。
- 對。
- 錯。
- 錯。不是沒有結果,而是垃圾值。
- 對。
四、問答題
- static全局變量與普通的全局變量有什么區別:static全局變量只初使化一次,防止在其他文件單元中被引用;static局部變量和普通局部變量有什么區別:static局部變量只被初始化一次,下一次依據上一次結果值;static函數與普通函數有什么區別:static函數在內存中只有一份,普通函數在每個被調用中維持一份拷貝,且static函數只能使用static變量。
- (1)和(2)是一樣的,為指向常量的指針,(3)是指針常量。
- ZTE 垃圾值 DB。字符串常量存儲於字符串常量區,在整個程序運行完畢后才釋放。
- 程序代碼在代碼段,常量分為字符串常量和其他常量,字符串常量存儲於字符串常量區,其他常量存儲於代碼段,局部變量存儲於棧上,全局變量(包括靜態變量)存儲於全局數據區。
五、如下。
1. 鏈表反序

1 #include <iostream> 2 using namespace std; 3 //鏈表反序 4 struct node 5 { 6 struct node *next; 7 int data; 8 }; 9 10 11 struct node* Reverse(struct node *p) 12 { 13 node *p1, *p2; 14 if(!p) return 0; 15 p1 = p->next; 16 if(!p1) return p; 17 p2 = p1->next; 18 p->next = 0; 19 while(true) 20 { 21 p1->next = p; 22 p = p1; 23 p1 = p2; 24 if(!p2) break; 25 p2 = p2->next; 26 } 27 return p; 28 } 29 30 void output(struct node *p) 31 { 32 while(p) 33 { 34 cout << p->data << " "; 35 p = p->next; 36 } 37 cout << endl; 38 } 39 40 41 int main() 42 { 43 //添加鏈表 44 node *head, *p; 45 head = new node(); 46 head->data = 0; 47 p = head; 48 for(int i = 1; i < 5; ++i) 49 { 50 p->next = new node(); 51 p = p->next; 52 p->data = i; 53 } 54 p->next = 0; 55 output(head); 56 head = Reverse(head); 57 output(head); 58 }
2. 雙向鏈表

1 #include <iostream> 2 using namespace std; 3 //刪除兩個鏈表中的重復數據 4 typedef struct node 5 { 6 int data; 7 struct node *front, *next; 8 }Node; 9 10 11 void output(Node *head) 12 { 13 Node *p = head; 14 while(p->next != head) 15 { 16 p = p->next; 17 cout << p->data << " "; 18 } 19 cout << endl; 20 } 21 22 //構造一個雙鏈表 23 Node* createLink(int* a, int len) 24 { 25 Node *pHeadA = new Node; 26 Node *p; 27 pHeadA->data = 0xffffffff; 28 pHeadA->next = pHeadA; 29 pHeadA->front = pHeadA; 30 p = pHeadA; 31 for(int i = 0; i < len; ++i) 32 { 33 Node *p1 = new Node; 34 p1->data = a[i]; 35 p->next = p1; 36 p1->front = p; 37 pHeadA->front = p1; 38 p1->next = pHeadA; 39 p = p1; 40 } 41 return pHeadA; 42 } 43 44 //刪除指定的結點 45 Node* removeNode(Node* p) 46 { 47 Node *pPrevious = p->front; 48 Node *pNext = p->next; 49 pPrevious->next = pNext; 50 pNext->front = pPrevious; 51 delete p; 52 return pPrevious; 53 } 54 55 //找到要刪除的結點 56 bool findRemoveNode(Node* head, int data) 57 { 58 Node *p = head; 59 bool flag = false; 60 while(p->next != head) 61 { 62 p = p->next; 63 if(p->data == data) 64 { 65 p = removeNode(p); 66 flag = true; 67 } 68 } 69 return flag; 70 } 71 72 //刪除重復結點 73 void DeleteSameNodes(Node* pHeadA, node* pHeadB) 74 { 75 Node *pA = pHeadA; 76 Node *pAPre; 77 while(pA->next != pHeadA) 78 { 79 pAPre = pA; 80 pA = pA->next; 81 int Adata = pA->data; 82 int flag = findRemoveNode(pHeadB, Adata); 83 if(flag) 84 { 85 //在B中重復的結點,那么A中的結點也要都刪去 86 findRemoveNode(pHeadA, Adata);//注意會引起A中pA失效 87 pA = pAPre;//重定位指針 88 } 89 } 90 } 91 92 int main() 93 { 94 cout << "刪除前:"<<endl; 95 //創建A鏈表 96 int a[6] = {1,2,3,2,4,3}; 97 Node* pHeadA = createLink(a, 6); 98 cout << "A鏈表中的元素為:"; 99 output(pHeadA); 100 101 //創建B鏈表 102 int b[4] = {0,2,4,2}; 103 Node* pHeadB = createLink(b, 4); 104 cout << "B鏈表中的元素為:"; 105 output(pHeadB); 106 107 //刪除兩個鏈表中重復的值,題意不是很清楚,這里理解為若B中與A有相同的元素data, 108 //則A與B中所有含data的結點都要刪去,而若B中沒有相同的data,那么即使A內部有多 109 //個data,也不刪除。 110 cout <<endl<< "刪除后:"<< endl; 111 DeleteSameNodes(pHeadA, pHeadB); 112 cout << "A鏈表中的元素為:"; 113 output(pHeadA); 114 cout << "B鏈表中的元素為:"; 115 output(pHeadB); 116 return 0; 117 }