1樓:匿名使用者
這個很好理解。給你解釋一下下,
從main 開始。
定義就不說了,說迴圈,迴圈了2次,迴圈裡面定義了a=3 這個定義,只是在迴圈裡有效的,出了迴圈他就沒效了。這就是生存期的問題。
第一次迴圈。k+= 呼叫函式,然後去函式裡。c 是main裡面傳的值,c=a=3 c+=4;return a++ 其實這裡和a一樣。
所以 return (a++)+c =2+4=6;
第二次迴圈也是一樣的道理。只是 a++ 已經經過了一次,這事第二次,這個時候開始累加 所以這個a++=3 return 的結果是 7
然後就是返回到main函式裡了。這個時候已經出了迴圈,兩次迴圈的結果是 6 ,7 所以 出迴圈之後 k=6+7=13。你看清楚 main函式裡面沒有定義a (for裡的生存期已經結束,所以除外。
)而在函式外邊定義了 int a=1 這是個全域性變數。生存期直到程式結束,所以這個時候 k=k+a=13+1=14。
後面的輸出就不解釋了。
說了這麼多,你應該明白了吧?
2樓:
迴圈變數i=0,f(a)的返回值是 6。f(a)中的a的值是3.
迴圈變數i=1,f(a)的返回值是 8。f(a)中的a的值是4.當第二次呼叫f(a)的時候,static int a=2;沒有從新給a賦值。
還是以上次呼叫之後的結果進行執行的,返回值是7.k的值是13.
迴圈變數i=3,跳出迴圈,執行k+=a;a=1,之前定義過的,所以k值是14.
明白了嗎?
3樓:匿名使用者
for中的a在語句塊中,是區域性的,改變這個a不能改變全域性變數a,所以最後一步實際上是k+=1。
樓主試下這個輸出什麼:
int a=1;
int main()
printf("%d\n",a);
return 0;}
4樓:匿名使用者
當i=0時;
c=a=3(因為迴圈中int a=3;始終不變);
f(3)=(2++)+4=6,此時f()函式中a的值為2++即3k+=6;k的初始值為0;所以k=6
i=1時;
c任然是a的值3(因為迴圈中int a=3;始終不變);
f(3)=(3++)+4=7,
k+=7,k=k+7=6+7=13;
i=2跳出迴圈;
k+=a (此時的a為全域性變數a=1)
k=13+1=14
分清a在不同的地方值是不同,分清a在什麼情況下是全域性變數,什麼情況下是區域性變數。
C語言題目,c語言題目
3 若有兩條語句。static char x abcde static char y x存的是a,b,c,d,e,0 比y多了一個 0 p2 就是將p2串到p1上去啊。所以是abcabc 陣列名不能作為左值。要與最近的if配對。再分析下吧。static char x abcde static cha...
求c語言題目,求C語言題目
c語言經典100題 程式1 題目 有1,2,3,4個數字,能組成多少個互不相同且無重複數字的三位數 都是多少 1.程式分析 可填在百位,十位,個位的數字都是1,2,3,4.組成所有的排列後再去 掉不滿足條件的排列.2.程式源 main 程式2 題目 企業發放的獎金根據利潤提成.利潤 i 低於或等於1...
幾道C語言題目,一道c語言題目
1.為了方便敘述,現將程式的沒一行進行編號。注 語句 for i 0 i void main 注 n j n i 1 等效於n j n j n i 1 1 4 比較簡單,就不說了。具體說說 5 7 是怎麼執行的。具體過程如下 首先,對 i 進行賦值,i 0時,j 分別等於 0,1,2.把 i,j 的...