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