1樓:節俊智雲旋
最後值為7,這是一個if語句,就是
inta=5,b=6;
if(++a==b--)
++a;
else
--b;
++ar的規則是先運算,所以括號中左值++a=6,a=6;
==的優先順序低過--,所以先計算b--
b--的規則是先賦值,所以括號中右值b--=6,b=5;
左值6==右值6,即條件為真,執行++a,因為a值已是6,所以加1操作後,
結果為7
2樓:汲廣英武巳
49運算a=‘0’賦值,得到a=48,
運算邏輯非,前面是0,後面b--就不運算了,這個是&&的特性。所以b=1
最後a+b=48+1=49
這個是逗號運算子,得到的是最後一個逗號後面的表示式的值,也就是49
3樓:班汀蘭榮子
答案是48
表示式1,表示式2
返回的值是表示式2的值,計算過表示式1,a的值被賦值成'0'也就是48,b的值是0,相加得到48
所以返回48
4樓:綦問凝倫雲
“!(a=‘0’)&&b--”
分步解答:
第一步:a='0',
'0'是字元,其對應的acsii碼值是48,則賦值後a的值是48。
第二步:b--
,b先運算,再執行自減運算,所以,執行
&&運算是b是
1,執行後
b的值是0;
第三步:a+
b即是48+
0=48且這是一個逗號表示式,其值為表示式2
的值,故
答案:48
5樓:波暢鄲嫚
結果變數a值為48,b值為1,表示式!(a='0')&&b--,a+b值為49
!(a='0')&&b--,a+b
根據運算子優先順序,結合性,即
(!(a='0'))
&&(b--)
,a+b
由於逗號運算子和&&運算子的求值順序定義為自左向右,逗號表示式的值由最某項決定
故這個表示式的值必為a+b
由於&&運算子的短路效應
!(a='0')值為0,且a值為字元‘0’的ascii碼值48所以b--未執行,即b值仍為1
因此48+1=49
6樓:捷遠扈珍
從優先順序開始算起,()>
-->!
>&&(a=‘0’用的ascii碼錶查的)
a=48
b--b=0
表單式的值為0,
a+b=48
假定int a=3,b=2,c=0表示式c=a>b>1&&(a++==1+b++),a+b+c的值是?
7樓:夕婕官以
因為a>b為真所以a>b=1,而1不可能大於1,所以a>b>1為假,所以a>b>1=0,導致&&後的語句不執行,所以c=0,a=3,b=2,所以a+b+c=5
8樓:黎哲妍多名
a+b+c的值是5。
因為a>b為假,值為0
0>1的值也是0。
所以後面的&&(a++==1+b++)不執行。
c的值就是0,a和b的值未變,所以,a+b+c的值是5。
設 int a=0,b=1;表示式(!a||++b)後b的值是什麼
9樓:匿名使用者
優先順序問題
!的優先順序最高,其次++,最後才||
又因為!a==1 ,||在c語言中,只要||前面的值為1,就不再執行||後面的
所以它不會執行++b b因此沒有增值,還是原來的值,b=1
10樓:匿名使用者
短路求值問題,||的結合性是從左到右的,因此會先計算!a的值,由於a==0,所以!a不等於0,因此不必再計算後面的++b了,因為到此整個表示式的結果已經可以確定了,所以b值沒有改變,還是1.
請到以下頁面檢視短路求值的詳細解釋
11樓:悲劇故土
b=1;
具體操作是#include
#include
int main()
然後輸出是1 1 0;
至於為什麼呢,是因為在c中,對於||或運算子來說,如果它前面一個表示式為真的話,它就不會執行後一個語句,從而直接判斷這個表示式是真!!
因為表示式(!a||++b)中!a為真,所以++b這個語句沒有執行,這個問題經常會被忽略,建議看看《c語言解惑》這本書,對你有很大的好處!
12樓:叔淑蘭本乙
這個問題涉及運算子優先順序的問題。
首先,.++(自增)運算子的優先順序要高於||(邏輯或),所以要先進性自增(++)運算,也就是++a,此時a=1,
然後輪到||運算子了,邏輯或是雙目運算子,它的規則是如果第一個運算元是非0,那麼整個的運算結果就是真(非0),也就是不會進行第二個運算元的運算,即++b是不會參與運算的,此時b還是5.
然後再執行,a+b,基於上面兩步,那麼a+b=1+5=6over,希望你明白了。
已知inta=1,b=2;表示式!(a+b)-a&&b+2×4的值,表示式!(a-b)的值?求詳細
13樓:金色潛鳥
!(a+b)- a && b+2*4 按運算子優來
先律和結合律,可寫為自
:(!(a+b)- a) && (b+2*4)
由於 int a=1,b=2; 所以bai !(a+b) = !(1+2) = !3 = 0. 0-a= -1 ( 非0 為真du)。
(b+2*4) = 2+8 = 10 也為真。 && 是與運算zhi,真真dao得真。
printf("%d\n",(!(a+b)-a && b+2*4)); 輸出 1。
後面問的 !(a-b) = ! (-1) = 0; 因為 非0的值都是真,-1 不是0 ,所以 -1 也是真。
真求反,得非,非就是 0。 printf("%d\n", !(a-b)); 輸出0。
c語言 假定int a=3,b=2 c=1 表示式(c==a>c)+(a/b/2.0)的值是多少
14樓:匿名使用者
分析:首先(c==a>c):右結合。因為c=1,a=3,因此,a>c返回1,c==1返回1
然後,a/b/2.0,左結合。a/b,結果商為1,1/2.0的結果是0.5,1+0.5=1.5
最終結果1.5
15樓:匿名使用者
可以寫程式執行一下
#include"stdio.h"
main()
執行一下是1.500000
c語言中有一道題目:已知"int a=4,b=5,c;",則執行表示式"c=a=a>b後變數a的值為( ) a 0 b 1 c 4 d 5
16樓:匿名使用者
這個涉及到c語言的單目運算子優先順序與結合性的知識:
62616964757a686964616fe59b9ee7ad9431333330356165
優先順序:
在表示式中,優先順序較高的先於優先順序較低的進行運算。而在一個運算量兩側的運算子優先順序相同時,則按運算子的結合性所規定的結合方向處理。
結合性:
c語言中各運算子的結合性分為兩種,即左結合性(自左至右)和右結合性(自右至左)。例如算術運算子的結合性是自左至右,即先左後右。如有表示式x-y+z 則y 應先與“-”號結合,執行x-y 運算,然後再執行+z 的運算。
這種自左至右的結合 方向就稱為“左結合性”。而自右至左的結合方向稱為“右結合性”。
在你的問題中,"="在表示式中是賦值運算子,而在c語言中,賦值運算子是典型的右結合性運算子。如x=y=z,由於“=”的右結合性,應先執行y=z 再執行x=(y=z)運算。
所以,本例就是先計算雙目運算子“>”:a>b,因為a=4,b=5,a是小於b的,所以式子計算就變成了c = a = 0,然後再計算a = 0(即a = (a > b)),最後式子就是c = 0, 所以答案選a
具體運算子優先順序和結核性請參考:
17樓:0冷雨
答案是a;因為a=a>b意思為把波爾值a>b賦值給a,因為a大於b,a>b等於0,所以a為0.望採納~
18樓:匿名使用者
a, a=0
= 是由du右向zhi左運算的,
a>b值為daofalse,值為0
所以c=a=0
另外也可以專寫程式屬驗證:
#include
int main(void)
設int a 0,b 1表示式 ab 後b的值是什麼
優先順序問題 的優先順序最高,其次 最後才 又因為 a 1 在c語言中,只要 前面的值為1,就不再執行 後面的 所以它不會執行 b b因此沒有增值,還是原來的值,b 1 短路求值問題,的結合性是從左到右的,因此會先計算 a的值,由於a 0,所以 a不等於0,因此不必再計算後面的 b了,因為到此整個表...
若有定義 int a 3,b 2,c 1並有表示式 a b,abc,b c 1,c 1,則表示式值相等的是哪兩個
你是誰會想 表示式一值為1,表達二好象有錯誤,不能那樣表示,應寫成a b b c,這樣寫二式為真,值為1,三式且符號兩邊都非零,都為真,所以三式值為2,四式為賦值語句,最終結果是c的值為2 湯福書屋 第一個 a b 輸出結果為 1 第二個 a b c為真,3 2為真 即為1,但1 1為假 即為0第三...
設a 5,b 2,則表示式“ ab”的值是A 1 B 0 C 1 D
寧金芳 1 設int型變數x有初始值3,則表示式x 5 10的值.首先,x 是後置加加,先使用變數,然後變數再加1.所以,x 先使用變數的值3與5相乘,得到15 由於x為int型變數,所以,15 10之後只取整數部分1.因此,答案選 b 1.2 x 5 y x x 首先,x 是後置加加,先使用變數,...