以下是rotate_right函式的**:
unsigned rotate_right(unsigned x, int n)
} return x;
}
這裡用到的原理是,區分n的情況,如果是0則直接返回原值,如果不是0,就按照移位的次數控制迴圈,每次迴圈只移位1位。
具體迴圈的實現,是借助了乙個變數為endbit,最後一位,用來保留右移一位後損失掉的那位,再通過移位使這位變成最高位,最後與x移位後的資料進行或運算,這樣就完成了迴圈右移一次的功能;共需迴圈右移幾次,就重複幾次這個迴圈。
完成的**如下:
#include unsigned rotate_right(unsigned x, int n);
int main()
else
flag = 1;
}printf("please input your data:\n0x");
scanf("%x",&x);
result = rotate_right(x,n);
printf("the result is:0x%x\n",result);
return 0;
}unsigned rotate_right(unsigned x, int n)
} return x;
}
實驗執行結果如下:
這道題本身難度不算大,我主要還是栽在了自己的粗心上,沒有注意輸入輸出格式,只想當然的去做,吸取了這次教訓,以後的作業就不會有那麼多冤枉路了。
從每次右移一位,按迴圈次數控制右移位數,能不能擴充套件成一步到位移動n位呢?我把**變成了以下樣子:
unsigned rotate_right(unsigned x, int n)
return x;
}
這樣就可以直接移動n位了。
這裡還有乙個小插曲,關於開始的左移位數是要-n還是-什麼,是右移了n位,上面的左移就要減n。
然後我又想,n=0的情況能不能並進去?**就變成了這樣子:
unsigned rotate_right(unsigned x, int n)
驗證是可以的。
endbit作為乙個中間值,是不是有點多餘?去掉之後變成:
unsigned rotate_right(unsigned x, int n)
也是可以的,更簡潔了。
那麼可以乾脆直接用return返回:
unsigned rotate_right(unsigned x, int n)
這個一步步簡化**的過程讓我做完了之後十分滿意,最開始的想法很簡單,但是**實現卻很複雜,通過一步步的簡化最終使**變的簡潔好看,成就感很大。但是對於我現在的水平,如果直接給我這樣的乙個**,閱讀起來還是有些費勁的,需要多加練習。 20135202閆佳歆 第三章家庭作業 3 63
原來的函式 int sum col int n,int a e1 n e2 n int j int i int result 0 for i 0 i轉化為goto 的版本 int sum col int n,int a e1 n e2 n int j int i 0 int result 0 if ...
MySQL第二章總結 Mysql第二章 儲存引擎
1 本章目標 儲存引擎 資料型別 重點 2 儲存引擎 在關係型資料庫中,資料儲存在表中,表由行和列組成。開發中,可能需要各種不同的表,有的表簡單,有的表複雜,有的表讀取快,有的讀取資料慢,有的表更新快等。根據對資料的不同的處理需求,使用不同的儲存引擎,可以將mysql資料庫的效能發揮到最大。查詢my...
領悟(第二章)
當火車緩緩駛進車站的時候,夜幕已經降臨了。終於到了!望著窗外鐵道兩旁的燈火,我的內心不禁再一次的激動起來,一路上對今後在這個大都市的未來生活的想象已經讓我從昨天晚上上車一直興奮到現在了!平常這個時候應該正和朋友們一起在酒吧聊天吧,朋友們,你們現在還在談論我來這裡的目的麼?說實話,這個問題連我自己都說...