1樓:匿名使用者
考你遞迴的用法:
10送入fun(10)
void fun(int n)
n/2=5,條件為真,呼叫函式fun(5),printf("%d",10%2);被壓棧
n/2=2,條件為真,呼叫函式fun(2),printf("%d",5%2);被壓棧
n/2=1,條件為真,呼叫函式fun(1),printf("%d",2%2);被壓棧
n/2=0,條件為假,列印printf("%d",1%2);也就是1
由於棧是先進後出的,所以反相出棧,列印printf("%d",2%2);也就是0
然後列印printf("%d",5%2);也就是1
然後列印printf("%d",10%2);也就是0
所以結果為:1010
2樓:洪冷松
四題選項b和d明顯是相反條件啊,你只要判斷出d是等價的,b肯定就是不等價的啊。
再說題意,while( e ) 就是說只有e的值為0的時候,條件判斷結果為:false
d選項中 ( e != 0 ),當 e 的值為 0 的時候,條件判斷為假:false----等價
b選項中 ( e == 0 ), 當 e 的值為 0 的時候,條件判斷為真:true----不等價
綜上,選b
3樓:聽不清啊
這個題,就是選擇答案d。
圖中,if(n/2)其實就是等價於if(n/2!=0),考慮到n是正數,它也就等價於if(n>1)
總之,第一次呼叫,就滿足條件,進行遞迴呼叫:fun(5)…………具體見圖所示(乙個紅框,就是一次函式呼叫):
依輸出的先後次序,總的輸出就是:1010
4樓:匿名使用者
fun(10);
fun: n=10, n/2不等於0成立,fun(n/2); [n/2=5]
fun: n=5, n/2不等於0成立,fun(n/2); [n/2=2]
fun: n=2, n/2不等於0成立,fun(n/2); [n/2=1]
fun: n=1, n/2不等於0不成立,printf輸出:1fun:
n=2, printf輸出:0,累計輸出:10fun:
n=5, printf輸出:1,累計輸出:101fun:
n=10, printf輸出:0,累計輸出:1010printf輸出:
換行並不是a
5樓:自我程式設計
列印1010。
這是遞迴函式,每次執行到呼叫自己的時候,要等呼叫的那個執行完
才會返回繼續執行下一條語句。
也就是說
if(n/2)fun(n/2);//每一次呼叫自己的這一句執行結束,才會執行下面的列印。
printf("%d",n%2);
所以每一層都會列印自己的變數n%2的值。
而最先執行列印的是最裡一層的呼叫,整個執行過程分別是fun(10)->fun(5)->fun(2)->fun(1)。
既列印1%2,2%2,5%2,10%2,也就是1010。
6樓:夏天的小紅花
這是乙個把十進位制數n轉換為二進位制數的程式,選擇答案d。程式的執行是這樣的,裡面判斷語句的功能就是說,如果n除以2的值大於0,就進行遞迴呼叫。這個語句也可以寫成為如果n大於1就進行遞迴呼叫。
等到遞迴呼叫返回時,再輸出這個n除以2的餘數,但是這個操作是要等遞迴呼叫返回後才輸出的,所以是最後一次呼叫的時候的輸出是最靠前的。這樣就實現了反向除二取餘數的功能,也就是說把n轉換為二進位制進行輸出。
c語言這道題怎麼做?
7樓:大展鴻圖
/*若希望以下面的格式輸出這三個變數的值
x: -000025173 mm
y: +000000189 mm
z: -348634726 mm
則輸出語句應為*/
#include
main()
C語言請問這道題怎麼做
fun a,strlen a p1 w p2 w m 1 字串的啟示位址賦給p1,也就是p1指向字串的開始,即 p1 a w m 1是在字串w的起始位置偏移7 1個字元,也就是指向字串的結尾,即 p2 g 整個程式的執行順序如下 開始p1指向開始,p2指向末尾 p1的位址小於p2的時候執行while...
C語言的題這道很簡單的題我怎麼做不對呢,答案為什麼是C呢
注意表示式中y z 不是y z也是真,所以x z y z 為真,整個表示式為真,即值為1 你好,我是程式設計師。首先這個表示式是邏輯表示式,結果肯定是true或false。在c語言中true的值是1,false的值是0。你說的d選項是字串,百分百是錯的。你注意 與 的判斷 前者是第乙個為假 就為假 ...
C語言這個怎麼做,c語言怎麼做
在執行完第乙個case 1後面沒有break所以沒有跳出迴圈,就執行下去case 2,然後case 2後面有break就跳出迴圈所以是a 2,b 1 你可以把case 2 和case 遮蔽掉看結果 和case 1後面加break,就明白了。c語言怎麼做?include include void de...