C語言的題,幫忙看看

時間 2022-05-23 07:50:06

1樓:匿名使用者

首先,n=0,

第乙個printf,往函式裡傳的值為1,【++n,是先對n增一,再使用n的值】

看看函式怎麼操作吧,宣告了乙個全域性變數,【全域性的】,第一次呼叫返回的是0+1=1對吧

第二次,往函式裡傳的值為1,【n++,是先取n的值,再增一,往函式裡傳的是未加1的值,即1,不是2】

函式裡的n是全域性變數,n經過上一次運算 ,值已經是1了,傳進來的是1,那麼返回的自然是1+1=2了,列印的就是返回的這個全域性變數的值

第二次呼叫函式的時候,是不是把函式裡的n又賦值為0了呢,不會的,經過編譯器的編譯,目標**的內容會是,宣告乙個全域性變數,而函式裡面已經不包含static int n=0;這條語句了,要用n是去全域性資料區拿的。【也就是說,全域性變數只會被宣告定義一次,不會重複定義的】

2樓:匿名使用者

printf("%d,",f(++n));第一次呼叫函式時,由於++n是先加再執行,那麼就執行f(1),靜態變數n = 1(靜態變數存在靜態資料區,其值在函式呼叫時維持不變)

printf("%d\n",f(n++));第二次呼叫函式時,由於n++是先執行再加,也就是執行f(1),此時靜態變數n=1,執行函式f(1)時n= 1+1 = 2

所以第二個輸出是2,有疑問請追問,多謝~

3樓:匿名使用者

第一次列印是f(1),f()中的static n變為1

第二次列印是f(1),f()中的static n是1加1,變為2

所以列印出的值為2

4樓:匿名使用者

f(int m)函式中的n變數是,static型別的,靜態變數,的時間週期和程式執行週期一樣長,第一次執行函式之後,n變成1,第二次進行,n還是1,不會變成0.

所以第二次返回的是2

5樓:匿名使用者

這好像不同的版本有不同的結果,和它編譯的時候有關,如果能除錯的時候看一下它的彙編**就好了

6樓:梁為育

因為使用了靜態型別static int n,當執行了printf("%d,",f(++n));後static int n=1所以第二個輸出的是2

幾道c語言的選擇題,大家幫忙看看

1.b 比 優先順序高,所以 最後算.而y 1,左邊不管是什麼,最終結果都是1 2.b陣列名是常量,不允許改變.3.db a,b變成9,然後a a變成2.再判斷b 0,條件不成立,結束迴圈,再是b 後面的 起作用,b變成8 4.c不用多說了,b,c,d,e,f 5.cd a 1指向的是zhang的第...

幫忙分析道C語言題

迴圈時,對下標判斷,對偶數下標和奇數下標進行處理對於偶數下標,即a 0 和a 2 對其內容進行進一步判斷,如果內容為偶數,則遞加,如內容為奇數,則遞減,這樣的話,相當與 原先a 0 2,a 2 5,處理結果得到a 0 3,a 2 4 對於奇數下標,置零處理。即a 1 0,a 3 0,所以最後結果是3...

幫忙解決C語言的題目,一道C語言題!請幫忙解決一下!!急,要考試了!!謝謝

支渟 第一題好象錯了 我在vc 上執行 只有x的值 一道c語言題!請幫忙解決一下!急,要考試了!謝謝 printf 4d s i j 應改為printf 4d s1 i j for i 0 i n i sum sum2 sum3 printf sum1 d n sum1 printf sum d s...