C語言——選擇結構
阿新 • • 發佈:2018-11-12
選擇結構和條件判斷
(一)if語句——實現兩個分支
if 語句可以寫成不同形式
- if (表示式) 語句1——可以沒有else語句
- if (表示式)
語句 1
else
語句 2
——————————有else語句 - if (表示式 1) 語句 1
else if (表示式 2) 語句 2
else if (表示式3) 語句 3
… …
———————————可以使用巢狀
注意:
(1)如果語句 1,語句 2,,,是複合語句,應該使用花括號括起來。即寫成一個程式碼塊。
(2)內嵌語句可以是 if 語句 ,如果不使用花括號的話, else與最近的 if 相匹配。最好寫成程式碼塊形式。
舉例如下:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> int main() { int a = 0; int b = 1; if (1 == a) if (b == 1) printf("bbbbbb"); else printf("aaaaaa"); //主觀感覺輸出應該為aaaaaa, //實際上else與最近的if相匹配,所以什麼也不輸出 system("pause"); return 0; }
執行結果如下:
(3)if語句後的表示式如果是判斷表示式中的等於的話,最好將用於比較的值放在左邊,防止寫成賦值表示式。這樣的話寫錯的話容易報錯。
如:
int main()
{
int a = 0;
if (0 == a) //如 此處如果寫 a == 0的話就容易寫成 a = 0
printf("%d", a);
system("pause");
return 0;
}
(4)C語言中0表示假,非0表示真。
所以if 後面的表示式可以是一個變數。
(5)if語句的書寫規範
- bool值和0比較
bool表示真假,只有 true 和 false
在C語言中bool值的語義是 0為假,非0為真,true和false這些識別符號在C中一定會被定義為一個固定值。
flag是個整數,可以被賦值為非0整數表示真。
在表示式中不能寫成 if(flag == true)
原因是:如果flag本身是5,非0,表示真,true為3的話,flag == true為假,則表示式假。
錯誤程式碼如下:
int flag;
if (flag == TRUE);
{
printf("TRUE");
}
if (flag == FALSE)
{
prirntf("FALSE");
}
正確 形式應該為
if (flag);
{
printf("TRUE");
}
if (!flag)
{
prirntf("FALSE");
}
- 整型變數和0比較
如果一個變數就是整型,(不表示真假)則這個數不能和0比較
int num = 0;
//正確寫法
if(0 == num)
//錯誤寫法
if(num) //如果num本身是0的話,則該語句判斷為假,就不能執行if語句
(5)if(表示式1)語句 1 else 語句 2
等價於
表示式1 ? 表示式 2 : 表示式3
舉例程式碼如下:
int main()
{
int max = 0;
int a = 1;
int b = 2;
if (a > b)
{
max = a;
}
else
{
max = b;
}
system("pause");
return 0;
}
該程式碼等價於以下程式碼
int main()
{
int max;
int a = 1;
int b = 2;
max = (a > b) ? a: b;
system("pause");
return 0;
}
(二)switch語句——實現多分支
switch語句的一般形式
switch(表示式)
{
case 常量1:語句 1
case 常量2:語句 2
case 常量3:語句 3
…
default : 語句n
}
· switch 後面的表示式為整數型別,包括字元型,不能為字串。
· case 後面可以跟一個常量或常量表達式,用來標誌一個位置。
執行switch語句時,先計算表示式的值,然後將該值與case後的標號比較,如果相同,則轉到該case後的語句,如果不相同,則與後一個case判斷,如果沒有相匹配的case,則執行default標號後的語句。
·可以沒有default語句,如果沒有相匹配的case,則執行switch後的下一個語句。
· 各case標號與default標號順序沒有影響。
· 每一個case常量必須不相同,不能出現一個表示式的值有兩種及以上執行方案。
· 一般,每個case子句後,應該用一個break語句跳出switch結構。
否則會一直執行下去。
舉例如下
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch (n)
{
case 1:
printf("今天是星期一\n");
break;
case 2:
printf("今天是星期二\n");
break;
case 3:
printf("今天是星期三\n");
break;
case 4:
printf("今天是星期四\n");
break;
case 5:
printf("今天是星期五\n");
break;
case 6:
printf("今天是星期六\n");
break;
case 7:
printf("今天是星期天\n");
break;
default:
break;
}
system("pause");
return 0;
}
執行結果如下
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch (n)
{
case 1:
printf("今天是星期一\n");
case 2:
printf("今天是星期二\n");
case 3:
printf("今天是星期三\n");
case 4:
printf("今天是星期四\n");
case 5:
printf("今天是星期五\n");
case 6:
printf("今天是星期六\n");
case 7:
printf("今天是星期天\n");
default:
;
}
system("pause");
return 0;
}
執行結果如下
· 多個case標號可以公用一個執行語句
舉例如下
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch (n)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("今天是工作日\n");
break;
case 6:
case 7:
printf("今天是休息日\n");
break;
default:
break;
}
system("pause");
return 0;
}
執行結果如下