為什麼我這個C語言程式執行完結果還是a 3,b 5 不是應該互換嗎?求解答

2021-04-20 03:03:40 字數 3322 閱讀 6816

1樓:陌路賣醬油

你傳來的引數是值,在函式裡交換完後源,會bai釋放空間,而du且你並沒有接收函式傳zhi出的資料。

# include

void f(int*

dao i, int* j)

}int main(void)

2樓:匿名使用者

c語言給函式傳遞引數的時候,實際上傳遞的是引數的副本(陣列除外),所以在函式內對引數的修改對原引數沒有影響。

3樓:匿名使用者

f函式不能修改你主函式中定義的變數a和b的值。函式需要傳址引數才可以。就是說你必須將f函式的兩個引數定義為指標型別。

c語言問題,程式如下,執行結果為什麼是3,5,3,我看是3,5,5

4樓:汐日南莘

int a=3,b=5,c=7;

if(a>b)a=b;//這個if語句不成立 所以b不會賦值給ac=a;//這是把a賦值給c  這時a=3,b=5,c=3if(c!=a)c=b;//因為c等於a 所以這句不執行printf("%d,%d,%d\n",a,b,c);//最後結果 3 5  3

5樓:貌似風輕

#include

main()

等價於#include

main()

c=a;

if(c!=a)

printf("%d,%d,%d\n",a,b,c);

}兩個if都不成立,只執行了c=a;

所以結果是3,5,3

if、for、while等語句如果沒加大括號怎預設只有下乙個語句在大括號內。

if()

a=b;

b=c;

等價於if()

{a=b;

}b=c;

6樓:蜻蜓點水

第一次的if語句只有一條語句

a=b後面有個分號,c=a不是if的語句,所以是一定要執行的語句執行完之後c和a是相等的

那麼第二個if就不會執行

意思是,如果a和c不相等,就執行

7樓:

if(a>b)//3<5不執行if下的語句a=b;

c=a;//這條執行c=a

if(c!=a)//上條執行完c==a

c=b;

printf(........);//故353

8樓:水裡風

a=b;是第乙個if的,而後面的c=a;不屬於第乙個if,,所以哪怕第乙個if不執行這條語句也會執行

c語言程式 為什麼此程式的執行結果為 3,5,5,3??我自己分析是5,3,6,2

9樓:

首先你的自定義函式沒有返回值 是void的,所以fun函式只做輸出x,y值的作用

那麼來分析一下,你給fun函式傳遞進去 ,5,3首先賦值運算這,1.x=x+y;x=5+3;x=8;

2.y=x-y;y=8-3;y=5;

3.x=x-y;x=8-5;x=3;

所以輸出個 3,5;

既然fun函式沒有返回值,所以x,y的值不影響main函式的執行,也就是說main函式中,x,y的值沒有被改變

所以輸出 5,3

10樓:匿名使用者

首先fun函式內

x=5 y=3

x=x+y 後 x=8

y=x-y 後 y=5

x=x-y 後 x=3

所以第一

組輸出是3,5,

至於為什麼第二組是5,3,

那是因為你函式使用的是值參 而函式執行完成後 值參的傳參方式不改變引數的值

11樓:匿名使用者

void fun()功能為互換兩個數,結果:3,5,

main()呼叫fun(a,b)後,由於引數傳遞為值傳遞,單向傳遞,結果不能傳回主調函式,所以main()內a和b之不變,結果5,3

所以,此程式的執行結果為 3,5,5,3

c語言,,第9題,為什麼a++和b++執行的時候不是4和5呢?為什麼還是初值3和4

12樓:匿名使用者

sub是乙個巨集,其定義為:

#define sub(x,y) (x+1)*y巨集在編譯的時候被替換,所以,你的printf語句:

printf("%d\n",sub(a++,b++));

在編譯時替換為:

printf("%d\n",(a+++1)*b++);

結果也就是:

4*4=16

因為(a+++1)*b++是指將a的值自增1再加1,和b相乘後,b的值自增1.

不知道有沒有回答了你的問題?

13樓:

後置++是先用這個值然後再自增,前置++才是先自增然後再用值如果是printf("%d %d\n", ++a, ++b);才是4和5

printf("%d %d\n", a++, b++);

等價於printf("%d %d\n", a, b);

a = a + 1;

b = b + 1;

你可以在這句話之後再輸出一次,你會發現a,b就變成4和5了。

14樓:匿名使用者

a++和b++都是在程式執行完一次後自動加1,在執行的過程中他的值還是他們本身即3、4

15樓:匿名使用者

樓主沒有分清a++和++a的區別,a++是先用後加,++a是先加後用,你給個題目中是屬於先用後加,所以在用的時候(作為函式的引數)a和b都還是原來的值,用完以後a和b都加了1,只是你沒有輸出所以也看不到。

16樓:匿名使用者

a++ 跟 ++a是不同的, a++和 b++作為引數時,先算 a 和b 的原值,然後再a 和b自加1,如果這道題改為sub(++a,++b)那麼結果就是20了

17樓:七夕的橋

它先是在sub裡面用了a,b的值,然後再做++/--運算的;如果++放在字母前面,就會先對值進行加,就是列印出4和5了

18樓:何渡忘川

字首++先自加後運算,字尾++先運算再自加。

19樓:祁

a++是先將a的值輸出再加1,++a是先加1再將a的值輸出

20樓:匿名使用者

要分清++a和a++,a++是先將a使用了再加一,++a就是先將a+1再使用

21樓:夢醒

(++a,++b)這個題就是20了

C語言程式沒有錯誤但執行不了,為什麼我的C語言程式沒有錯誤卻總是不能執行

scanf應該使用 語句修改為 scanf d a i 為什麼我的c語言程式沒有錯誤卻總是不能執行 linking.link fatal error lnk1104 cannot open file debug cpp1.exe 執行 link.exe 時出錯.這個我也抄 遇見過,其實你這段話寫的沒...

c語言程式執行結果顯示不完全,C語言程式可以執行,但不顯示結果

1.手動修改 單擊控制台視窗左上角 屬性 布局 這裡的螢幕緩衝區大小的寬度和高度就是指每行顯示的字元數和行數 2.程式修改 createconsolescreenbuffer 建立螢幕緩衝區 setconsoleactivescreenbuffer 設定某個緩衝區為當前緩衝區 要用到這兩個函式 可以...

給我解釋一下這個C語言程式段為什麼執行時候要輸入兩次呢

scanf lf x 不要在scanf中隨意使用 n,他表示忽略一切空白符直至下乙個非空白符出現 scanf lf n x 把換行符去掉就行了,這是緩衝區的問題。scanf 函式的問題 簡單解釋一下,scanf 函式中 n 相當於乙個空格,例如 d n 首先scanf 跳過空格讀取乙個整數,然後跳到...