在c語言中yaaa ,那麼y的值是多少呢

2022-11-11 23:50:17 字數 6106 閱讀 2725

1樓:鬼火狼煙

lz,這個題目按照c規範來說的確等於15,但是實際上每個編譯器對規範的支援都不相同,如果lz是應付考試的話,15應該是正確的,因為使用規範上的++解釋來作為考試是絕對天經地義的.處於對樓上幾位xd的尊重,使用事實來說話.我用了3個編譯器測試了一下,結果全部不為15,這個++a和a++的實現,由於棧結構的操作差異,每個編譯器都不相同,我同時比較了vc6.

0 borland c++ build6 redhat 7.0自帶的g++,結果是vc6.0是16,bcb是18,g++是18.

由於我上網的機器是windows,所以g++的實現我沒辦法貼上過來,下面是vc6.0和bcb的實現,大家仔細看一下就知道了,g++的實現我比較了,和bcb是一樣的,詳細的地方我註釋了:

vc6.0:

6: int a =3,y;

00401548 mov dword ptr [ebp-4],3 'a是[ebp-4]

7:8: y=(++a)+(++a)+(++a);

0040154f mov eax,dword ptr [ebp-4]

00401552 add eax,1 '首先a+1值4進eax

00401555 mov dword ptr [ebp-4],eax 將4賦值給a

00401558 mov ecx,dword ptr [ebp-4]

0040155b add ecx,1 '然後a的值4加1為5進ecx

0040155e mov dword ptr [ebp-4],ecx '將5賦值給a

00401561 mov edx,dword ptr [ebp-4] 'edx進5

00401564 add edx,dword ptr [ebp-4] '將edx+a 得10進edx

00401567 mov eax,dword ptr [ebp-4] 'eax進5

0040156a add eax,1 '將eax+1得6進eax,注意,這步是關鍵,vc是先進2運算1步後再進1.

0040156d mov dword ptr [ebp-4],eax 將6賦值給a

00401570 add edx,dword ptr [ebp-4] 將edx+a得16進eax

00401573 mov dword ptr [ebp-8],edx 將edx得值給y

bcb:

unit1.c.11: int a =3,y;

mov [edp-0x04],0x00000003 'a賦值3

unit1.c.13: y=(++a)+(++a)+(++a);

inc dword prt [edp-0x04] 'a值+1為4

inc dword prt [edp-0x04] 'a值+1為5

inc dword prt [edp-0x04] 'a 值+1 為6,注意bcb得操作,先將a連續加3次.和vc有差別

mov eax,[edp-0x04] '將a值6給eax

add eax,[edp-0x04] ' 將eax+a值6得12給eax

add eax,[edp-0x04] '將eax+a值6得18給eax

mov [edp-0x08],eax '將eax值給y

比較可知道:vc得操作更能表示++a是一個表示式得思想(採用獨立暫存器儲存++a得值.不像bcb直接將++a得值存在a中),但是由於棧操作得順序,導致和規範有差異(我想原因應該是微軟比較排斥不是自己開發得規範吧呵呵)

希望我得解釋能給這個永恆得爭論得解決一點幫助,需要提醒lz和樓上各位得是:bcb和g++之所以這麼做,引用原bcb得設計者得話來說,是對效率的尊重,與其為了一個很混淆的++概念的完美實現,不如犧牲一點和規範的不相容來得到高效率,在這一點上,通過上面的**可知,從++的實現,bcb和g++要遠高於vc的效率.所以就和樓上xd所說:

概念只是存在於書本,只有我們使用到了才是有用的,事實才能判斷一切.

2樓:魚尾唯一

我來說一下哦

裡面一共出現3個++a

第一個++a的值是3自+所以是4,此時a的值是4了第二個++a的值就是4自+,所以是5,此時a的值就是5了第三個++a的值就是5自+,所以是6

所以y=4+5+6=15

3樓:守望中的守護

首先明確執行順序,有括號的先執行括號中語句,由於問題中的語句有三個括號,則應該自左向右的順序執行。

++a的意思是在使用a之前把a加1。

現在假設a的初始值為a,根據之前所說的執行順序,先執行左邊第一個括號,結果為a+1,再相繼執行後面兩個括號,注意到a的值已經在上一次運算中發生變化,所以後面兩個括號的結果分別為a+2和a+3,最後將三個括號結果相加,y=3a+6,把a=3代入,結果為15.

但是這只是按照標準c的規則得到的答案,不同的編譯器有不同的解釋方法,所以實際上可能得到不同的結果。

4樓:

編譯器不同,可能會出現不同的結果。

用 ms vc++ 和 linux cc, linux gcc 得 15.00

程式中最好不要用二義性或多義性的語句形式,編譯器不同,可能會出現不同的結果,給自己帶來麻煩。

把 y=(++a)+(++a)+(++a)拆開來,寫明確了多好:

a = 3;

a = a + 1;

y = a + a + a;

-----------------

或:a = 3; b = a + 1; c = b + 1; d = c + 1;

y = b + c + d;

語句是為人服務的,程式設計師要做語句的主人。

書是人寫的,書上錯的東西有的是。書為我而用,取其精華,去其糟粕。

5樓:匿名使用者

不同的編譯器可以得到不同的結果。因為不同的編譯器它們運算的順序是不一樣的。所以這種問題要具體問題具體對待拉

6樓:匿名使用者

正確答案是15我是問的我的大學老師啊!!!

是絕對對的@@

就是=是從右往左算的一個一個自增1的

6+5+4=15

我的回答也許不是很詳細能幫助你是我高興的事!!

7樓:

編一個自己試一下

ps:討論這個沒有什麼意義,讓別人看你**的時候也要想上半天,語言是讓人看懂的,不是讓人感到困惑的

8樓:

15「=」是自右向左運算

(++a)+(++a)+(++a)

6 + 5 + 4 =15

9樓:匿名使用者

是15,自右向左計算!15 =6 + 5 + 4

10樓:

y=4+5+6=15

11樓:

不同的編譯器會出現不同的結果.全是對的

12樓:

研究這些有什麼意義呢?

13樓:

用編譯器試下吧,我覺得應該是15

b=(++a)+(++a)+(++a)怎麼運算

14樓:飯盒與玫瑰

3a+6,第一個括,++a過後a=a+1,第二個括號之後a=a+1+1,第三個括號之後a=a+1+1+1,所以b=3a+6

15樓:紫舞玥汐

舉例子說,設a=0

分解式子b=x+y+z

從左到右計算,其中x=++a,先算++a,得到x=1,a=1然後計算第二個++a時,得到y=2,a=2最後第三個++a,得到z=3,a=3

最後將x+y+z =6,得到b的值

16樓:匿名使用者

這種問題出現過很多次了,要說b=(++a)+(++a)+(++a)怎麼運算?那是取決於編譯程式的。因為c語言標準沒有明確的規定,其結果是未定義(undefined)。

可以放在程式裡去執行看。

假如a的初值是1,用vc編譯運算的結果 b=12,而用gcc編譯則 b=10。結果與上面的分析沒有相同的。

int main()

所以說這種**沒有意義。

17樓:

括號的優先順序最高,先算括號,從左自右;++a是先+1再運算,所以該式子相當於:

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

18樓:匿名使用者

假如說a=1,那麼++a之後,a就是2,依次類推,因此:

b=(2)+(++a)+(++a)=>

b=(2)+(3)+(++a)=>

b=(2)+(3)+(4)=>

b=2+3+4=>

b=9;

19樓:木子靈脩

b=a+1+a+2+a+3=3a+6

20樓:官人有話說

回答您好,很高興為您解答,具體運算如下哦:

int main()

希望我的解答對您有所幫助

提問已知a=[1,2,3;4,5,0;7,8,9];b=[1,0,3;1,5,0;0,1,2]

怎麼算出來

a==bans=___

回答稍等哈

更多12條

c語言中計算機如何處理(++a)+(a++)的,當a=10那麼式的值是多少?

21樓:匿名使用者

你寫個輸出函式試試就行,是22

#include

int main()

22樓:

不同的編譯器處理的方式不一樣,儘量避免這種寫法

23樓:匿名使用者

那個qq數字使用者說的是對的~這個屬於未定義行為,主要由編譯器實現。

24樓:

c語言中無法識別帶+號的變數

a=1,a=2(a++)+(++a)等於多少c語言

25樓:獅子龍翔

4 執行**如下。。。有用請採納,伸手黨請點贊

26樓:明柯答疑

回答同學你好,化簡結果為:3(a+1)

這道題分別把實數相加和未知數相加,最後結合提出3即可。

提問謝謝

更多2條

c語言正確的賦值是哪一個:y++;++y;a=3,b=3;a=b=2;a=b==3;在這幾項賦值時都有什麼要求?

27樓:匿名使用者

y++;++y; // 這是自增運算

a=3,b=3;// 這是賦值

a=b=2; //這也是賦值,操作的結果是a和b的值都為2a=b==3; // 這也是賦值,如果b的值是3,則a = 1,否則a = 0

28樓:匿名使用者

不明白你說的意思!y++;++y;a=3,b=3;這3項都是沒有問題的,但是a=b=2;a=b==3;要看是什麼情況下了,如果是在這語句之前都已經定義了a、b就沒什麼問題,如果是在定義的同時這樣賦值就是錯誤的,至於有什麼要求,沒什麼具體的要求,這都是基本的用法,只要基礎知識掌握了一般都沒問題的!解釋一下就是:

1.y++是先使用y然後自身加1,;

2.++y是y先自身加1然後再使用y;

3.a=3,b=3;就不用解釋了是基本的賦值。

4.a=b=2如果是在定義時這樣:int a=b=2;就會顯示b未定義,很明顯不能這樣;如果是這樣int a,b;

a=b=2;這樣就沒任何問題了;

5.a=b==3如果在定義時這樣:int a=b==3;同4也是錯誤的;如果這樣:

int a,b;a=b==3;表示的是先判斷b是否為3,如果b等於3,則把1賦值給a,如果b不等於3,把0賦值給a,而b自身的值不變;

合法不合法我上面都說了,要看是在什麼情況下,如果都是已經定義了的int變數,那麼就是合法的。

在c語言中其值是多少,1033在C語言中其值是多少

結果是 1.0 這裡的運算全部按照浮點來進行的,等價於1.0 3.0 3.0 不可能是1 輸出是什麼格式 d 為0 f為 1 d為0 f lf和 g為1 c語言中表示式1.0 3 3的值是 對呀,確實是這樣的 因為浮點數的精度是這個1.0是浮點數,精度是小數點後6位。所以1.0 3是0.333333...

C語言中42的值為1困惑,C語言中402的值為1困惑

首先 和 的有限級別是相同的 4 0 同時為真才是真所以為 他的值為 0然後0 2 因為 是隻要一個為真就為真 所以最後結果為1 邏輯運算子的運算優先順序是 所以先算4 0,因為4為非0,即為真,但這並能表明整個4 0就是真,還要判斷後面的0,為假,所以整個表示式4 0就為假,值為0,然後再算0 2...

pa在C語言中的意思,c語言中pa是啥子意思

a是一個指標 把指標a所指向的內容賦值p a為指標 a表示指標地址的內容 p a 把指標內容賦值給p 將a指向的變數的值賦給p c語言中p a是啥子意思 p 是一個結構體或者共用體型別資料的指標。p a表示訪問該指標上,名為a的資料成員。等效於 p a p是一個結構體型別的指標變數,這個結構體中有一...