在C語(yǔ)言中,有三種條件判斷結(jié)構(gòu):if語(yǔ)句、if-else語(yǔ)句和switch語(yǔ)句。
if (條件) { // 代碼塊1}
代碼示例#include < stdio.h >int main() { int num = 5; if (num > 0) { printf("這個(gè)數(shù)為正數(shù).n"); } return 0;}
運(yùn)行結(jié)果if (條件) { // 代碼塊1} else { // 代碼塊2}
代碼示例#include < stdio.h >int main() { int num = -2; if (num > 0) { printf("這個(gè)數(shù)為正數(shù).n"); } else { printf("這個(gè)數(shù)為負(fù)數(shù).n"); } return 0;}
運(yùn)行結(jié)果#include < stdio.h >int main() { int num = 3; if (num > 0) { if (num < 5) { printf("num在1到4之間n"); } else { printf("num大于等于5n"); } } else { printf("num小于等于0n"); } return 0;}
在這個(gè)示例中,外層的if語(yǔ)句判斷num是否大于0,如果成立,進(jìn)入內(nèi)層的if語(yǔ)句繼續(xù)判斷num是否小于5;
【資料圖】
如果不成立,執(zhí)行else語(yǔ)句塊,輸出"num小于等于0"。
num的值是3,它既符合外層if語(yǔ)句的條件,也符合內(nèi)層if語(yǔ)句的條件,所以程序輸出"num在1到4之間"。
運(yùn)行結(jié)果#include < stdio.h >int main() { int score = 85; if (score >= 90) { printf("優(yōu)秀n"); } else if (score >= 80) { printf("良好n"); } else if (score >= 70) { printf("中等n"); } else if (score >= 60) { printf("及格n"); } else { printf("不及格n"); } return 0;}
在這個(gè)示例中,if else語(yǔ)句被鏈?zhǔn)绞褂?,程序從上到下依次判斷score的值是否大于等于90、是否大于等于80、是否大于等于70、是否大于等于60,最終輸出對(duì)應(yīng)的成績(jī)等級(jí)。
score的值是85,它大于等于80,但小于90,所以程序輸出"良好"。
運(yùn)行結(jié)果switch (expression) { case constant1: statement1; break; case constant2: statement2; break; ... default: statementN; break;}
switch語(yǔ)句的執(zhí)行過(guò)程如下:表達(dá)式的值被計(jì)算。表達(dá)式的值被依次與各個(gè)case后的常量進(jìn)行比較,直到找到與之匹配的常量。如果找到匹配的常量,執(zhí)行該常量對(duì)應(yīng)的代碼塊,并跳出switch語(yǔ)句。如果沒(méi)有找到匹配的常量,執(zhí)行default對(duì)應(yīng)的代碼塊(如果有),并跳出switch語(yǔ)句。?
switch
語(yǔ)句中的case
標(biāo)簽可以是整數(shù)、字符或枚舉常量。每個(gè)
case
標(biāo)簽必須是唯一的,且必須以冒號(hào)(:
)結(jié)尾。在
case
后面的代碼塊中可以包含任意數(shù)量的語(yǔ)句,用花括號(hào)({}
)來(lái)組成代碼塊。
switch
語(yǔ)句的default
標(biāo)簽是可選的,它通常放在case
標(biāo)簽的最后面。如果沒(méi)有匹配到任何case
標(biāo)簽,那么default
標(biāo)簽下的代碼塊將被執(zhí)行。
default
標(biāo)簽只能出現(xiàn)一次,且必須放在最后一個(gè)case
標(biāo)簽之后,否則會(huì)引發(fā)編譯錯(cuò)誤。
#include < stdio.h >int main() { int day; printf("請(qǐng)輸入數(shù)字(1-7):"); scanf("%d", &day); switch (day) { 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: printf("輸入錯(cuò)誤!n"); break; } return 0;}
運(yùn)行結(jié)果除了基本用法外,switch語(yǔ)句還有一些高級(jí)用法,可以更靈活地使用。
在switch語(yǔ)句中,如果沒(méi)有在一個(gè)case語(yǔ)句塊中使用break語(yǔ)句,那么程序會(huì)從這個(gè)case開(kāi)始,一直執(zhí)行到switch語(yǔ)句的結(jié)尾,這種現(xiàn)象被稱為case標(biāo)簽穿透。
下面是一個(gè)case標(biāo)簽穿透的示例:#include < stdio.h >int main() { int num = 3; switch (num) { case 1: case 2: printf("num是1或2n"); break; case 3: case 4: printf("num是3或4n"); break; default: printf("num不是1、2、3、4n"); break; } return 0;}
在這個(gè)示例中,num的值是3,它既符合case 3的條件,也符合case 4的條件,但是由于case 3的語(yǔ)句塊中使用了break語(yǔ)句,所以程序執(zhí)行完case 3之后就跳出了switch語(yǔ)句,不會(huì)繼續(xù)執(zhí)行case 4的語(yǔ)句塊。
運(yùn)行結(jié)果#include < stdio.h >int main() { int num = 1; switch (num) { case 1: printf("num是1n"); switch (num) { case 2: printf("num是2n"); break; default: printf("num不是2n"); break; } break; case 3: printf("num是3n"); break; default: printf("num既不是1也不是3n"); break; } return 0;}
在這個(gè)示例中,switch語(yǔ)句被嵌套使用,內(nèi)層的switch語(yǔ)句只有在外層的case 1被匹配時(shí)才會(huì)執(zhí)行。
運(yùn)行結(jié)果通過(guò)這篇文章,我們學(xué)會(huì)了
1、if語(yǔ)句
2、if-else語(yǔ)句
3、switch語(yǔ)句
標(biāo)簽: