引用 | 編輯
ericfan007
2006-12-06 20:06 |
樓主
▼ |
||
x0
我剛開始學C++不久,還不太了解,敬請見諒喔這程式是要輸出2進位的ASCII碼 助教上課講的非常快,邊講邊寫 我趕著抄所以沒去注意聽講 可以麻煩幫我講解一下嗎,謝謝 #include<iostream> using std: .. 訪客只能看到部份內容,免費 加入會員 x0
|
引用 | 編輯
ericfan007
2006-12-08 17:25 |
1樓
▲ ▼ |
請問可以幫忙解答嗎
萬分感謝 x0 |
引用 | 編輯
HadesDer
2006-12-15 01:19 |
2樓
▲ |
int main()
{ char words[10]; cout<<"Please input the strings:"; cin>>words; //輸入一串字串 for(int i=0;i<strlen(words);i++) {a(words[ i ]); //按照順序把字串中的每一個字丟進 a 這個函式裡 cout<<" "; } system("pause"); return 0; } 主程式其實不困難..大概就這樣.. 接下來看 a 這個函式.. int a(char c) { int i=0; i=c; //把丟進來的字元轉換成數字..如字元 A 就等於 65..這個查 ASCII 碼表就有了.. fib(i); //再把轉換後的數字丟到 fib 函式中.. } 這個 fib 函式才是這支程式主要的核心.. 也就是要怎麼把數字變成二進位.. 這裡用到遞迴的寫法..建議你可以先看一下書中遞迴的說明.. int fib(int i) { int k; if(!i)return 0; //如果傳進來的 i 值是 0 的話..就結束..這個寫法的說明請見底下註解一 k=i%2; //k 的值是 i 除 2 取餘數..所以如果 i = 2..那 k = 0 fib(i/2); //再把 i/2 的值丟到 fib 函式中運算..自己呼叫自己..這就是遞迴.. cout<<k; //把剛剛 k 的值印出來.. } 假設 i 的值是 3..那整個 fib 的執行過程如下: fib(3): 因為 i = 3..不等於 0 所以繼續往下執行.. k = 3 % 2 = 1 fib(3/2)..無條件捨去.. 所以是 fib(1) 因為 i = 1不等於 0 所以繼續往下執行.. k = 1 % 2 = 1 fib(1/2)..無條件捨去.. 所以是 fib(0) 因為 i = 0 所以就結束了..又因為是遞迴..所以會往回繼續執行.. 回到 fib(1)..印出 k 的值 = 1 底下沒有程式碼了..結束.. 回到 fib(3)..印出 k 的值 = 1 所以整個印出的順序是 11 也就是 3 的二進位碼.. 希望這段回文對你有幫助.. 註解一: if (!i) 我們知道 if () 括號裡如果為 True..就會執行xx動作.. 那我們來看看這段程式碼..if(!i)return 0; 如果 i = 0 的話..會發生什麼狀況.. if (!0) ..0 是 False ..所以加上個 ! 運算子..就反過來..變成 True 了.. 也就是說.. if(!i)return 0; 如果當 i = 0 也就是 False 的時候..就 return 0.. x0 |