1、if-else判斷語句
一個基本的if語句由一個關(guān)鍵字if開頭,跟上在括號()里邊的是表示邏輯條件的表達(dá)式,然后是一對大括號{}中間是若干條語句,如果條件的邏輯表達(dá)式的結(jié)果不是零,那么就執(zhí)行大括號中間的語句,否則就跳過不執(zhí)行。
if的返回值為真或假,可以用bool型變量進(jìn)行存儲,占用一字節(jié)。
當(dāng)if的條件滿足或者不滿足的時候要執(zhí)行的語句也可以是一條或者多條if-else 語句,這時候叫嵌套的if語句,而else 總是和最接近的 if 匹配。
tips:
在if或else后面總加上{}大括號,即使只有一條語句的時候。風(fēng)格就是三觀。常見的錯誤:忘了大括號,if后面的分號,錯誤使用 == 和 = ,沒有匹配或令人困惑的else
例子題目:
描述請判斷它能否被 3,5,7 整除,并輸出以下信息:
能同時被 3, 5, 7 整除(直接輸出3 5 7,每個數(shù)中間一個空格);
只能被其中兩個數(shù)整除(輸出兩個數(shù),小的在前,大的在后。例如:3 5或者3 7或者5 7,中間用空格分隔);
只能被其中一個數(shù)整除(輸出這個除數(shù));
不能被任何數(shù)整除,輸出小寫字符'n',不包括單引號。:
如:
輸入 105
輸出 3 5 7
解決答案:
int main(void) { int a; scanf("%d", &a); //輸入一個數(shù)//if圓括號所表示的 如果 a能被3整除 并且 a也能被 5整除 并且 a也能被7整除 if (a % 3 == 0 && a % 5 == 0 & a % 7 == 0) {//如果圓括號條件里邊的條件滿足 printf("3 5 7");//執(zhí)行這條語句 } else if (a % 3 == 0 && a % 5 == 0&& a % 7 !=0) {//否則,判斷這條語句是否滿足 printf("3 5");//滿足執(zhí)行這條語句 //下面的依次類推 } else if (a % 3 == 0 && a % 7 == 0 && a % 5 != 0) { printf("3 7"); } else if (a % 5 == 0 && a % 7 == 0 && a % 3 != 0) { printf("5 7"); } else if (a % 3 == 0 && a % 5 != 0 && a % 7 != 0) { printf("3"); } else if (a % 5 == 0 && a % 3 != 0 && a % 7 != 0) { printf("5"); } else if (a % 7 == 0 && a % 5 != 0 && a % 3 != 0) { printf("7"); } else { printf("n"); } return 0;}
2、switch-case選擇語句
switch語句是多分支選擇語句.用來實(shí)現(xiàn)多分支選擇結(jié)構(gòu)
Switch 函數(shù)圓括號的參數(shù)列表可由多對表達(dá)式和數(shù)值組成,ANSI標(biāo)準(zhǔn)允許它為任何類型.,表達(dá)式是由左至右加以計(jì)算的,而數(shù)值則會在第一個相關(guān)的表達(dá)式為 True 時返回。如果其中有部分不成對,則會產(chǎn)生一個運(yùn)行錯誤。
當(dāng)表達(dá)式的值與某一個case后面的常量表達(dá)式的值相等時,就執(zhí)行此case后面的語句,若所有的case中的常量表達(dá)式的值都沒有與表達(dá)式的匹配的,就執(zhí)行default后面的語句,每一個case的常量表達(dá)式的值必須互不相同,否則就會出現(xiàn)互相矛盾的現(xiàn)象,(對表達(dá)式的同一個值,有兩種或多種執(zhí)行方案),當(dāng)沒有一個表達(dá)式為 True,或者第一個為 True 的表達(dá)式的對應(yīng)值為 Null時,Switch 會返回一個Null值。
switch 后面的表達(dá)式不能跟double,float,long,String ,boolean,可以接int,short,byte,char,
返回值:
switch(表達(dá)式, 值1, 結(jié)果1, 值2, 結(jié)果2, ...)
如果表達(dá)式的結(jié)果是值1,整個函數(shù)返回結(jié)果1
如果表達(dá)式的結(jié)果是值2,整個函數(shù)返回結(jié)果2
如果表達(dá)式的結(jié)果是值3,整個函數(shù)返回結(jié)果3
雖然它只返回其中的一個值,但是 Switch會計(jì)算所有的表達(dá)式。因此應(yīng)該注意到其所產(chǎn)生的副作用。例如,只要其中一個表達(dá)式導(dǎo)致被零除錯誤,則運(yùn)行就會發(fā)生錯誤。
例子: //請輸入一個數(shù)字n,然后輸出相應(yīng)的星期幾
int main(void) { int n; scanf("%d", &n); switch (n) {//判斷輸入進(jìn)來的數(shù)值是什么 case 1:printf("Monday"); break;//n=1就輸出此語句,平且用break函數(shù)退出 case 2:printf("Tuesday"); break; case 3:printf("Wednesday"); break; case 4:printf("Thursday"); break; case 5:printf("Friday"); break; case 6:printf("Sturday"); break; case 7:printf("Sunday"); break; default : printf("error"); } return 0;}
說明:
在使用switch-case函數(shù)時,在語句完畢后加上break函數(shù)表示將不再執(zhí)行下面的語句直接結(jié)束switch函數(shù)了。如果什么也不加,則是繼續(xù)執(zhí)行。
一:從“優(yōu)缺點(diǎn)”分析
if…else
優(yōu)點(diǎn):使用靈活,代碼空間小 ;
缺點(diǎn):效率低,因?yàn)?if else 必須遍歷所有的可能值;
switch…case
優(yōu)點(diǎn):代碼結(jié)構(gòu)清晰,效率高;
缺點(diǎn):
1、不夠靈活,switch 僅支持 int, char, unsigned char 等基本類型。
2、代碼空間大,因?yàn)樗商恚貏e是當(dāng) case 常量分布范圍很大但實(shí)際有效值又比較少的情況,switch…case 的空間利用率將變得很低。對于 switch,實(shí)際上是根據(jù) case 最小值與最大值,維系了一段連續(xù)的內(nèi)存空間,以空間換取時間;
二:從“底層原理”分析
if…else
系統(tǒng)是自上而下逐個條件去判斷,直到符合條件,所以應(yīng)將機(jī)率大的條件置于最前面。
switch…case
switch 語句根據(jù)一個整數(shù)索引值進(jìn)行多重分支,底層采用跳轉(zhuǎn)表這種數(shù)據(jù)結(jié)構(gòu)。跳轉(zhuǎn)表是一個數(shù)組,表項(xiàng) i 對應(yīng)代碼段的地址。當(dāng) switch 索引值等于表項(xiàng) i 時采取對應(yīng)的程序操作。
可簡單理解為:
執(zhí)行 switch 時生成一個長度為最大 case+1 的數(shù)組,程序首先判斷 switch 變量是否大于最大 case 常量,若大于,則跳到 default 分支處理。否則取得數(shù)組索引號為 switch 變量值大小,取得數(shù)組對應(yīng)值即為相應(yīng) case 代碼塊地址,程序接著跳到此地址執(zhí)行,完成分支的跳轉(zhuǎn)。
三:從“選擇性”分析
當(dāng)選擇分支較少時,選用 if else 比 switch…case 的效率要高。一般 3個 以內(nèi)的分支我會用 if…else 結(jié)構(gòu),大于3個的分支我都會用 switch…case,個人習(xí)慣,這樣結(jié)構(gòu)看著舒服。
當(dāng)選擇分支較多時,選用switch…case結(jié)構(gòu)會提高程序的效率。
四:總結(jié)
switch…case 只能處理 case 為常量的情況,對非常量的情況是無能為力的。
例如 if (x > 1 && x < 100),是無法使用 switch…case 來處理的。
所以,switch 只能是在常量選擇分支時比 if…else 效率高,但是 if…else 能應(yīng)用于更多的場合,它比較靈活。
-
存儲
+關(guān)注
關(guān)注
13文章
4461瀏覽量
86876 -
Switch
+關(guān)注
關(guān)注
1文章
534瀏覽量
59075 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4363瀏覽量
63797
原文標(biāo)題:【零基礎(chǔ)學(xué)C語言】知識總結(jié)四:if-else判斷語句和switch-case選擇語句
文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
詳解C語言中if-else和switch-case語句
C語言中if語句、if-else語句和switch語句詳解

python判斷語句
Proteus之if-else語句的應(yīng)用
FPGA學(xué)習(xí)系列:if-else與case

C語言的switch case多分支選擇語句的詳細(xì)資料說明

FPGA代碼經(jīng)驗(yàn) case,casez,casex語句
不會有人不知道怎么優(yōu)雅的替換if-else語句吧

python判斷語句的詳細(xì)說明
什么是SystemVerilog-決策語句-if-else語句?

評論