問個問題,C語言的,關于if語句中條件判斷是一個賦值語句問題
復制表達式x=5本身是有值的,這個值等于左值。也就是說x=5這個式子的值是x,也就是5。而x=5這個式子的值是5不為零,就是真的,還會執行k=2。
一般來說,if后面語句是禁止使用單等于號,也就是賦值號的,就是為了防止出錯。
980515024 這位回答的有錯誤。if(x=5)編譯是不會報錯的。
如果是x=0,這個表達式的值就是0,也就是假的,就不執行后面的語句了。用什么軟件編譯無所謂,6.0還是dev還是vs08都行。
C語言 if 判斷語句
這考的是省略{}的if的作用域
if中的語句多于一句要加{} ,只有一句就可以不加
我把省略的{}給你加上,你就能看清楚了
if(!x)
{
y++; //這只有一句
}
else if(x==0)
{
if(x) //這個 if和下面的 else 合起來算一句,相對于包含它們的 if(x==0) 來說
{
y+=2; // 一句
}
else
{
y+=3; //一句
}
}
if判斷語句快還是switch快
if語句每次都需要判斷,而switch則只判斷一次,所以switch快,但也要看情況,一般5個選項(包括default)的情況下,switch和if/else if相同。低于5個選項if快,高于5給選項switch快。
1 兩者本質的區別是if語句更適合于對區間(范圍)的判斷,而switch語句更適合于對離散值的判斷。
2 示例
判斷65分到85分之間的學生有哪些適合用if語句,因為[65,85]是區間。而判斷一個學生的班級是一班、二班還是三班適合用switch語句,因為一班、二班、三班是離散值。
3 擴展
所有的switch語句都可以用if語句來替換(因為if語句只需對每個離散值分別做判斷即可),而并不是所有的if語句都可以用switch語句來替換(因為區間里值的個數是無限的并且switch所接受的值只能是整型或枚舉型,所以不能用case來一一列舉)。
條件判斷表達式與if語句的區別
if(表達式){
執行語句
}
如果條件成立則會進入if的作用域并執行其內容,否則該語句結束
if(表達式){
執行語句
}else{
執行語句
}
如果if條件不成立則會進入else的作用域并執行其內容
if(表達式){
執行語句
}else if(表達式){
執行語句
}else if(表達式){
執行語句
}
。。。..
如果if表達式不成立則會進入下一個 else if 的表達式進行再次判斷,成立則進入,否則繼續。。.
在這注意一點,當發生嵌套if結果時如果條件不成立執行的else是根據誰離我進我執行誰的原則.
說完if來講講三元運算符
三元運算符:
表達式 ? 表達式1 : 表達式2
什么意思了?
boolean a =true;
String b = a?"你是true":"抱歉你不是true";
*n(b);
運行結果:
你是true
boolean a =false;
String b = a?"你是true":"抱歉你不是true";
*n(b);
運行結果:
抱歉你不是true
分析:這2段代碼中通過設置a的真假分別得到 “你是true” “抱歉你不是true” 因此我們發現如果 a 是true 會執行?后面的數據賦值, 如果是false(條件不滿足就會執行):好后面的數據賦值。
int a =5;
int b = (5+3)>8?1:2;
*n(b);
結果:2
也可以這么寫
*n((a+3)>8?1:2);
執行流程:如果表達式成立,就執行表達式1,否則執行表示2,是不是和if判斷語句很相似,如果條件成立執行XXX否則執行XXX
那么兩者有什么區別了?
booelan a = true;
if(a)
*n("true");
else
*n("false");
------------------------------------------------
boolean a = true
String b = a?"true":"false";
*n(a);
分析:這只是簡單的判斷,我們發現三元運算符在對簡單的邏輯判斷的代碼量比if判斷結構少,提高了復用性,并且iif判斷語句只是單純的判斷并輸出結果判斷后的結果,而三元運行符,發生了運算符的賦值動作,也就是運算,而if判斷結構沒有,簡單來說就是三元運算符有運算結果,而if判斷結果沒有運算結果,如果是相對復雜的邏輯判斷,三元運算符則不能替代if判斷結果,反之如果是簡單的邏輯判斷三元運算符更加簡潔,根據不同情況來選擇。
if(表達式){
執行語句
}else{
執行語句
}
C語言if判斷語句問題
if(a>=1&&a<=3) 輸入1,2,3 都會跳過 else 語句。這是你的條件規定的。
輸入不是 1,2,3 都會 進入 else 語句 并顯示 請輸入1--9的正整數:
顯示 請輸入1--9的正整數 -- 證明了進入了 else。
至于 scanf("%c",&c); 它讀到了前面輸入數據流中的 殘余 字符,例如空格,回車之類。
如果你 想跳過 空白, 輸入 格式 用 scanf(" %c",&c); 就可以了。
在C語言的if 語句中,用作判斷的表達式是( )a關系表達式 b邏輯表達
一般情況下這個是選邏輯表達式的。因為if是邏輯判斷,但如果放在c和C++語言中,所有非零運算結果均識為true,不須強制轉換,所以這里選d是正確的。但是在其他語言中是不正確的。
它主要考查的內容就是,C/CPP中并沒有真正的布爾值,只是將非零數認作false而已。所以你可以理解為if是判斷非零數即可,或者理解為其它。實際上,在C/CPP中的布爾值是用int表示的。也就是16位進制數表示,并不是單純的一個bit。
如
int a =5;
if(a)
語句塊;
該代碼在C/CPP中是合法的,但是C#中是不合法的,無法通過編譯器編譯。所以若在C/CPP中選邏輯表達式時,很明顯算術達式是不能成立的。而關系表達式的結果就是邏輯值(也可以將邏輯值認為是邏輯表達式)。
比如
int a=5, b=6;
a>b是關系表達式,結果是邏輯值false,但false可以看作是邏輯值,也可以看作是邏輯表達式。而a-b則是算術表達式,三者均可以做為if的判斷條件。所以即使在C#語言中,嚴格區分的情況下,關系表達式也是被認為可行的,而邏輯表達式也是可以得到邏輯結果的。所以這里應當是選擇了做任意表達式。