麻煩幫我解釋這支程式

Home Home
引用 | 編輯 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