c語言,整數轉成字串,遞迴看不懂,為什麼呼叫完自己之後會再次呼叫?求解

2021-03-24 11:50:46 字數 4211 閱讀 8825

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 這樣就可...