程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 深入理解計算機系統第二版習題解答CSAPP 2.11,csapp2.11

深入理解計算機系統第二版習題解答CSAPP 2.11,csapp2.11

編輯:關於C語言

深入理解計算機系統第二版習題解答CSAPP 2.11,csapp2.11


在2.10中的inplace_swap函數的基礎上,你決定寫一段代碼,實現將一個數組中的元素兩端依次對調,你寫出下面這個函數:

 1 void reverse_array(int a[], int cnt)
 2 {
 3     int first, last;
 4     for(first = 0, last = cnt - 1;
 5          first <= last;
 6          first ++, last --)
 7     {
 8         inplace_swap(&a[first], &a[last]);
 9     }
10 }

當對一個數組包含1、2、3、4時,得到預期的結果4、3、2、1。不過,當一個包含元素為1、2、3、4、5的數組使用這個函數時,你會很驚奇看到結果為5、4、0、2、1。對於偶數個元素的數組正常工作,奇數個元素的數組會把中間元素設置為0。

A.對於一個長度為奇數的數組,長度為cnt = 2k + 1,函數reverse_array最後一次循環中,變量first和last的值分別是什麼?

B.為什麼這時調用函數inplace_swap會將數組元素設置為0?

C.對reverse_array的代碼做哪些簡單改動就能消除這個問題?

解答:

A. first和last都為k。

B. 最後一次循環時。假設a[k]為p。

步驟 *x *y 初始 a[k]=p a[k]=p 第一步 0 p^p=0 第二步 0 0 第三步 0 0

C. 將第5行代碼改為如下即可。

1 first < last

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved