C語言套用

2022-07-29 02:00:02 字數 1009 閱讀 5995

1樓:

我知道,就是函式套用,就拿6來說,第一次是fun函式呼叫的是6,第二次呼叫的是3,第三次呼叫的是1,第四次呼叫的是0;

先說第一次,當x是6時,執行if(x/2>0),這句用來判斷x/2後是否大於零,當然大於零,注意此時x的值任然是6。

然後就執行fun(x/2),這一句執行就是第二次呼叫fun函式,過程如第一次,此時x是3;

接著是第三次呼叫fun函式,過程如上,此時x是1

接著是第四次呼叫fun函式,此時x為零,在執行if(x/2>0)這條語句時,不成立,

所以返回上乙個第三個fun函式裡,執行printf("%d",x);此時x是1,所以輸出1,

接著返回上乙個第二個fun函式裡,執行printf("%d",x);此時x是3,所以輸出3,

接著返回上乙個第乙個fun函式裡,執行printf("%d",x);此時x是6,所以輸出6,

接著返回主函式,執行printf("\n");整個程式結束。

所以看到輸出的是136;

這裡要說的是,在乙個子函式裡如:

fun(int x)

x的值僅僅在這個函式裡起作用,出了這個函式就不起作用了,同樣其他函式裡的x的值也不會影響在這個函式裡的x的值,這個函式裡,沒有對x重新賦值,所以在一次呼叫中x的值始終未變

2樓:魔法師00可可

這是乙個遞迴呼叫,

從主函式得到x=6

一、fun(int x)》x=6

二、fun(int x)

}printf("%d",x);}三、

fun(int x)

}printf("%d",x);輸出3

}}printf("%d",x);輸出6}

3樓:匿名使用者

因為你每呼叫一次fun()都要執行一次printf啊,總共呼叫了三次,是分別輸出1和3和6,不是136,呵呵

4樓:匿名使用者

這是遞迴函式部分的知識,請查詢遞迴的相關資料.

C語言問題,C語言問題

符合,相當於一個字元,ascii字元可以直接轉成short整型數字。101 不符合,這是一個字串,不能作為常數。不符合,因為 會對雙引號轉義,找不到另一個雙引號。會出錯。而且就算是 也不符合,因為編譯器會把它理解成一個字串,而非單個字元。e3不符合。019不符合,0開頭代表8進位制數,不能出現9。0...

C語言求解,C語言求解

我去,你也太大意了吧!1 定義的bml變數是小寫的 float w,h,bmi 在後面各處使用該變數的時候卻是大寫的 bmi fbmi w,h 2 scanf函式名你又打多了乙個字母t scantf f,f w,h 3 定義的函式fbmi,呼叫函式的時候同樣大小寫不匹配 bmi fbmi w,h 4...

C語言問題,c語言問題

這是值傳遞,值傳遞的過程的是,系統會給你的實參的值進行乙個拷貝,把這個拷貝傳遞給形式引數。因為是拷貝,所以實參裡頭的值是不會改變的。如果是位址傳遞就不一樣了。補充 你可以定義乙個指標,這個指標指向主函式的結構體。然後子函式的形參也定義乙個指向結構提的指標。這樣就是位址傳遞了。樓主還是好好花點時間看看...