C語言高手速來

2022-11-19 03:46:16 字數 2025 閱讀 5749

1樓:匿名使用者

這個拆開就知道了

1. a = 1 a+=a-=a+a;

先算a+a 為 2,並記下這個值

a -= 2

這時 a值為 -1

a += -1

最後 a 為 -2

2 a =1 b=(a++) +(++a)

這個 b的結果為3 或 4, a 為3

這個是屬於c標準中的未定義行為,如果你是一個管理人員,你的員工寫出這種**,你可以fire掉他了。

給你補充一下第二個問題,這個之所以說是,3或4,是因為這行**是有問題的,可以認為這是一個有歧義的語句,因為不同的編譯器會做不同的處理。

有的可能會把 a++ 中a的值先拿出來,也就是1, 再把++a的值拿出來,也就是2,並把置為2,再把1+2的值傳為b,這樣就是3了,也有的是,把所有的前自增放在前面自增完了再用,這時可以拆成

a=1;

a+=1;

b= a + a;

a+=1;

這樣b就是4了。

語言標準裡是明確指出,這是一種未定義行為的,如果你的編譯器對標準嚴格支援,那麼這類**是不應該通過編譯的,換言之,這**是錯的。

2樓:匿名使用者

這是程式設計裡面的,要從右向左看,意思是將等號右邊的計算結果賦值給等號左邊的變數(本題中等號左邊的變數即為a),可以拆分成兩個式子:

1. a-=a+a;

2. a+=(a-=a+a);

+=、-=這兩個符號好像是為了節約記憶體什麼的而設計的,上面兩個式子的真實意思為:

1. a=a-(a+a);

2. a=a+(第一個式子的計算結果)

由於是從右向左的,所以需要先計算整個式子最後邊的等號,即第1個式子:

a=a-(a+a)

計算結果為a=a,意思為將等號右邊的a的值賦值給等號左邊的a,因此第1個式子的計算結果為a的值不變,依然是a的原始值;

再計算第2個式子:

a=a+(第一個式子的計算結果)

代入第1個式子的計算結果,得到:

a=a+a

即a=2

第二個是 先用後加 先加後用

所以是3

3樓:

結果:a=-2,b=4

a+=a-=a+a:根據c語言語法運算子優先順序,先計算的是a+a結果為2,再計算a-=a+a,即:a=a-2,結果為-1,此時a的值也為-1,再計算a+=a,即:

-1加-1結果為-2。

可按此理解:a+=[a-=(a+a)]

b=(a++)+(++a):a++結果為2,++a結果也為2,b的值為4。

附程式執行結果圖:

看看c語言運算優先順序就知道了……

4樓:清瘋臥月

1a-=a+a;//a=-1;

a+=a;//a=-2;

2b=4;//用括號括起來表示兩個同時操作

5樓:旺仔大氣球

一個是自加 一個是賦值

6樓:匿名使用者

1 a+=a-=a+a 你這樣看編譯器見到 += 這樣計算的 a= a+ (a-=a+a)

依次拆分 不就是從右往左

2 b=(a++)+(++a) ()的優先順序別最高 先計算 a++ a++的值為 1 a = 2

在計算 ++a 因為a=2 ++a 和 a都是 3b = 1 + 3 = 4 a= 3

7樓:

1、分析下來就是 a=a+(a-(a+a)) =>a=a+(a-2a) =>a=a+(-a) =>a=0

至於為什麼從右開始,應該就是數學裡的小括號的問題了:)2、a++ 先計算後+1 所有(a++)=1 但是a已經=2了++a 先+1再計算,2+1=3 再計算1+3所以結果肯定是4啦

至於順序,還是小括號的問題啊 小括號擁有優先權。學過數學的都知道小括號裡的先計算嘛

c語言程式設計,求高手,C語言程式設計,求高手!!!!!!!!

include void main if max i int num scanf d num for n 0 d n num n printf d n 位序從0開始 include int main if noswap 1 break for i 0 i 10 i printf d a i prin...

c語言習題請高手幫忙解答,C語言習題請高手幫忙解答

1.1 200 2500 2 i 200,j 2500 3 i 200 j 2500 2.i 12 j 0k 0 3.複合語句在語法上被認為是一條語句。空語句形式是隻有一個分號的空行 4.c語句最後用分號結束 1 200 2500 2 i j 200 2500 3 i j 200 2500 第二道題...

求高手解答c語言問題,求高手解答,C語言問題

當使用者按下某個鍵時,1.鍵盤會檢測到這個動作,並通過鍵盤控制器把掃描碼 scan code 傳送到計算機 鍵盤掃描碼跟具體的硬體有關的,不同廠商對同一個鍵的掃描碼有可能不同。2.計算機接收到掃描碼後,將其交給鍵盤驅動程式 3.鍵盤驅動程式把這個掃描碼轉換為鍵盤虛擬碼 虛擬碼與具體硬體無關,不同廠商...