1樓:明哥歸來
輸入的number是1234
main()中呼叫convert(number);進入了轉換函式。
void convert(int n)
1.第一次進入convert( int n)函式時,n=1234 , i=n/10=123 非0,因此遞迴呼叫convert(123); 這時的n=1234會被壓入棧。
2.運算convert(123)時, n=123 , i=n/10=12非0,因此遞迴呼叫convert(12); 這時的n=123會被壓入棧。
3.運算convert(12)時, n=12 , i=n/10=1非0,因此遞迴呼叫convert(1); 這時的n=12會被壓入棧。
4.運算convert(1)時, n=1 , i=n/10=0,因此,輸出putchar(n%10+'0'); 1(字元1)。函式返回。
5.n=12出棧,輸出putchar(n%10+'0'); 2(字元2)。函式返回。
6.n=123出棧,輸出putchar(n%10+'0'); 3(字元3)。函式返回。
7.n=1234出棧,輸出putchar(n%10+'0'); 4(字元4)。函式返回。
棧空,函式返回到主函式。
c語言,這個看不懂,遞迴呼叫怎麼結束的?
2樓:岔路程式緣
1、那個return(c);中的c,是前面的表示式計算出來的。
所以,表示式是有意義的。
2、age(5)是用回5做引數呼叫答age()函式。
第一次呼叫時n=5,c=age(4)+2,這時再呼叫age函式;
第二次呼叫時n=4,c=age(3)+2,用到age(3),需要再呼叫;
第三次呼叫時n=3,c=age(2)+2,用到age(2),繼續呼叫;
第四次呼叫時n=2,c=age(1)+2,用到age(1),再呼叫;
第五次呼叫時n=1,c=10,不再呼叫了,返回c即10,作為age(1)的值;
程式返回第四次呼叫的運算公式中:c=age(1)+2=10+2=12,返回12作為age(2)的值;
程式返回第三次呼叫的公式中:c=age(2)+2=12+2=14,返回14作為age(3)的值;
程式繼續返回第二次呼叫的公式c=age(3)+2=14+2=16,返回作為age(4)的值。
程式返回第一次呼叫的公式c=age(4)+2=16+2=18,返回作為age(5)的值。
程式返回主程式,列印age(5)的值18。
看不懂**:用遞迴法將一個整數n轉化成字串。
3樓:匿名使用者
關鍵的部分:遞迴,初學者會搞不明白,但一旦搞清遞迴原理,就會覺得很簡單。
一個整數 3456 要變成 '3456'
只要反覆除以10, 商 345, 餘數就是 6那 345 可以再次呼叫自已進行處理,6就可以+'0' 輸出了,
4樓:匿名使用者
//總思想是:從右向左逐位輸出後,使原數去除最後一位(已輸出),重複以上操作,直到沒有位數可輸出為止(0不可能是最高位)。
void convert(int n)
請問c語言中,用遞迴將一個整數轉換成字串時,為什麼每次都要加一個『0』
5樓:匿名使用者
舉個例子: '5' = '0' + 5
你要知道5作為字元輸出時看不到的,因為它不是字元'5'
6樓:艾井柏然
有嗎?是最後加一個\0?或者每次+『0』,因為『0』為字元,加過之後就把結果也變成字元了。
c語言程式設計:用遞迴法將一個整數n轉換成字串。
7樓:用著追她
1、新建一個工程和.c檔案 ,輸入標頭檔案和主函式。
2、宣告被呼叫的函式,定義變數型別。
3、輸入整數。
4、用一個if語句去判斷整數是否為負數,若為負數則用putchar函式輸出一個負號。
5、呼叫一個函式。
6、定義函式的返回型別和形參型別。
7、通過if語句判斷該數是否僅剩一位數,若不是則執行else語句。
8、編譯執行。
8樓:匿名使用者
while的條件是不對的
n%10!=0 如果n=10 就退出了!
n的值也沒改變 所以是死迴圈。
而且即使改正之後輸出的結果也是與原數相反的
9樓:匿名使用者
#include
void main()
每輸入一個資料,敲一個空格,或者敲一個回車!這是個十位數的的轉換!
你的是不是沒輸入語句啊!沒有n值,所以沒資料吧
10樓:匿名使用者
你不是用遞迴做的,如果只是簡單的輸出,可以這樣做:
void tran(int a)
void main()
c語言,黑框裡面是一個函式呼叫,他的意思是?將輸入的數值變為字串輸出。我認為這個遞迴函式的呼叫最
11樓:喵不語
當輸入整數2345678後,i=234567然後再遞迴一直到i=2時,不再遞迴,然後putchar輸出,最後一次n=2,所以n%10還是2,上一次n=23,n%10便是3,再上一次n=234,n%10為4,就這樣一直回到第一次,從後往前輸出n=2345678,n%10=8
c語言:將十進位制正整數轉成二進位制後輸出。圖中源**的遞迴函式是怎麼實現的?看不懂,求詳細點指教..
12樓:匿名使用者
如果n為13,二進位制為1101
那麼程式執行是這樣的:
dtob(13)
dtob(6)
dtob(3)
dtob(1)
最後就是
dtob(13)
printf 0 -------------------0}printf 1 -----------------------1}
13樓:e小小u盤
遞迴函式,在函式體中又呼叫函式本身,上述函式應該不難理解,樓主應該多瞭解進位制轉換,printf("%d",n%2);實際上是輸出了該十進位制數轉換成二進位制數的最後一位,接下來要做的就是輸出二進位制數的倒數第二位,所以又呼叫了dtob,形參作為n/2消掉了最後一個二進位制位,所以在這次呼叫時輸出了倒數第二個二進位制位……函式體中繼續呼叫,輸出的數以此類推,最後會將二進位制數的各位輸出。希望能夠幫到你。
c語言:用遞迴法講一個整數n轉換成字串。例如輸入483,應輸出字串「483」,n的位數不定,為任意位數整
14樓:4747哦
輸入一個十進位制bai數,輸du出它的二進位制數zhi,這狠類似#include
void fun(int n, int r)main()
15樓:あ耨多羅
n%10 這是對10取餘數,bai
如n=2345 時 n%10=5 ,n%10+'0' 就是在du'0' 的ascii碼值
zhi上再加上daon%10得到的值,如'0' 的ascii碼值是48,n%10+'0'=5+48=53。這麼做是因為
回ascii碼錶中數字字答
符是從0到9升序排列的,這樣寫就不用去考慮'0' 的ascii碼值是多少了。
至於為什麼用putchar而不用printf,其實putchar()函式的作用等同於printf("%c", ch),所以用printf也是可以的。只是putchar()的功能就是輸出一個字元,不需要格式化,這種場合下比printf方便。
16樓:人生笑
為什麼是逆迴圈輸出的
c語言,用遞迴法並通過函式呼叫方法將一個整數換成字串,如整數123對應的字串為「123」
17樓:匿名使用者
#include
#include
double length(char *s)double number(double n, char *s)else }
void main()
18樓:匿名使用者
#include
int n=-1
void copy(int i,char x)}
c語言程式設計用遞迴法將整數n轉換成字串
1 新建一個工程和.c檔案 輸入標頭檔案和主函式。2 宣告被呼叫的函式,定義變數型別。3 輸入整數。4 用一個if語句去判斷整數是否為負數,若為負數則用putchar函式輸出一個負號。5 呼叫一個函式。6 定義函式的返回型別和形參型別。7 通過if語句判斷該數是否僅剩一位數,若不是則執行else語句...
請問C語言中,用遞迴將整數轉換成字串時,為什麼每次都要
舉個例子 5 0 5 你要知道5作為字元輸出時看不到的,因為它不是字元 5 有嗎?是最後加一個 0?或者每次 0 因為 0 為字元,加過之後就把結果也變成字元了。c語言程式設計 用遞迴法將一個整數n轉換成字串。1 新建一個工程和.c檔案 輸入標頭檔案和主函式。2 宣告被呼叫的函式,定義變數型別。3 ...
C語言字串問題,C語言中,字串是什麼?
這迴圈需要執行4次,對應的字元就是0001,也就是說這個sc需要5個空間,加一個 0 for i 0 i 2.你這個程式每次執行的結果可能是不確定的,因為你沒有初始化sc陣列,printf以字串的形式輸出,他是遇到 0 字元才結束的,所以為了保證程式的結果是一致的,建議初始化陣列。sc 5 這樣就可...