一篇文章帶你了解C語言的選擇結(jié)構(gòu)
一、if-else語句
1.單選擇
單選擇通過if語句就可以實(shí)現(xiàn),if語句的語法及執(zhí)行流程如下:
if(表達(dá)式)
{
代碼塊(表達(dá)式返回值為真時(shí)執(zhí)行)
}
當(dāng)程序運(yùn)行到if語句時(shí),會(huì)由表達(dá)式進(jìn)行判定,諾表達(dá)式的返回值為真,則進(jìn)入代碼塊執(zhí)行語句,為假便跳過代碼塊繼續(xù)執(zhí)行。(當(dāng)代碼塊語句僅有一句時(shí),可以省略大括號(hào)。)
舉一個(gè)簡(jiǎn)單的例子
例:判斷10是否為3的倍數(shù)
int main()
{
int i = 10;
if (i % 3 == 0) //表達(dá)式結(jié)果為假
printf("是");//代碼塊內(nèi) 未執(zhí)行
return 0;
}2.雙選擇
雙選擇通過if-else語句實(shí)現(xiàn),if-else語句的語法及執(zhí)行流程如下:
(else的匹配:else是和它相距的最近的if匹配的)
if(表達(dá)式)
{
語句一(表達(dá)式返回值為真時(shí)執(zhí)行)
}
else
{
語句二(表達(dá)式返回值為假時(shí)執(zhí)行)
}

當(dāng)程序運(yùn)行到if語句時(shí),會(huì)由表達(dá)式進(jìn)行判定,表達(dá)式的返回值為真,則執(zhí)行語句1,為假便塊執(zhí)行語句2。
舉一個(gè)簡(jiǎn)單的例子
例:判斷學(xué)生分?jǐn)?shù)及格
#include<stdio.h>
int main()
{
int i = 0;
scanf("%d", &i);
if (i >= 60)
printf("及格");
else
printf("不及格");
return 0;
}3.多選擇
通過else if語句實(shí)現(xiàn)的多選擇,else if語句的語法及執(zhí)行流程如下:
if(表達(dá)式1)
{
語句1 (表達(dá)式1返回值為真時(shí)執(zhí)行)
}
else if(表達(dá)式2)
{
語句2 (表達(dá)式返回值為真時(shí)執(zhí)行)
}
else if(表達(dá)式3)
{
語句3(表達(dá)式返回值為真時(shí)執(zhí)行)
}
else
{
代碼塊(以上表達(dá)式均為假時(shí)執(zhí)行)
}

當(dāng)程序運(yùn)行到if語句時(shí),會(huì)由表達(dá)式進(jìn)行判定,表達(dá)式1的返回值為真,則進(jìn)入if下的代碼塊執(zhí)行語句1,為假便進(jìn)入表達(dá)式2。當(dāng)然if-else可以實(shí)現(xiàn)的分支不止這四種,通過增加else if 語句的數(shù)量便可以實(shí)現(xiàn)更多的選擇。
舉一個(gè)簡(jiǎn)單的例子
例:年齡分段
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age < 18)
{
printf("少年\n");
}
else if (age >= 18 && age < 30)
{
printf("青年\n");
}
else if (age >= 30 && age < 50)
{
printf("中年\n");
}
else if (age >= 50 && age < 80)
{
printf("老年\n");
}
else
{
printf("老壽星\n");
}
return 0;
}二.switch語句
switch語句也是一種分支語句。 常常用于多分支的情況。else if 語句也能實(shí)現(xiàn)多分支情況,但在某些情況下使用else if來實(shí)現(xiàn),會(huì)使代碼過于復(fù)雜。
比如:
輸入1,輸出星期一
輸入2,輸出星期二
輸入3,輸出星期三
輸入4,輸出星期四
輸入5,輸出星期五
輸入6,輸出星期六
輸入7,輸出星期日
如果使用else if
#include<stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
if (1 == day)
printf("星期一");
else if (2 == day)
printf("星期二");
else if (3 == day)
printf("星期三");
else if (4 == day)
printf("星期四");
else if (5 == day)
printf("星期五");
else if (6 == day)
printf("星期六");
else
printf("星期日");
return 0;
}那么這個(gè)代碼便會(huì)太過復(fù)雜,而使用switch就會(huì)很多
switch語句的語法及執(zhí)行流程如下:
switch(整型表達(dá)式)
{
//在一個(gè) switch 中可以有任意數(shù)量的 case 語句。
case 整形常量表達(dá)式:
語句;
}
case 是一個(gè)入口,按照輸入整型表達(dá)式的值進(jìn)入,后按照順序依次運(yùn)行。
單使用switch語句是無法實(shí)現(xiàn)分支的,需要搭配break使用才能實(shí)現(xiàn)真正的分支。
舉一個(gè)例子:
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
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");
}
return 0;
}輸入值分別為2 4時(shí),輸出結(jié)果如下:


與想要實(shí)現(xiàn)的效果相差甚遠(yuǎn),而搭配break使用就能解決這個(gè)問題。
#include <stdio.h>
int main()
{
int day = 0;
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;
}
return 0;
}

break語句 的實(shí)際效果是把語句列表劃分為不同的分支部分。
switch除了搭配break語句使用,往往也會(huì)搭配 default語句
如果表達(dá)的值與所有的case標(biāo)簽的值都不匹配時(shí),所有的語句都會(huì)被跳過。程序并不會(huì)終止,也不會(huì)報(bào)錯(cuò),因?yàn)檫@種情況在C中并不認(rèn)為是個(gè)錯(cuò)誤。
諾并不想忽略不匹配所有標(biāo)簽的表達(dá)式的值時(shí),可以在語句列表中增加一條default子句。
當(dāng) switch 表達(dá)式的值并不匹配所有 case 標(biāo)簽的值時(shí),這個(gè) default 子句后面的語句就會(huì)執(zhí)行。
例如:
#include <stdio.h>
int main()
{
int day = 0;
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ò)誤");
}
return 0;
}
switch 語句可以有一個(gè)可選的 default case,出現(xiàn)在 switch 的結(jié)尾。default case 可用于在上面所有 case 都不為真時(shí)執(zhí)行一個(gè)任務(wù)。default case 中的 break 語句不是必需的。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Qt?QGraphicsItem?移動(dòng)時(shí)出現(xiàn)殘影問題記錄
自定義QGraphicsItem時(shí),繪制rect,對(duì)象移動(dòng)時(shí)出現(xiàn)殘影的問題記錄,本文給大家介紹Qt?QGraphicsItem?移動(dòng)時(shí)出現(xiàn)殘影問題記錄,感興趣的朋友跟隨小編一起看看吧2024-06-06
C語言詳解如何實(shí)現(xiàn)堆及堆的結(jié)構(gòu)與接口
堆是計(jì)算機(jī)科學(xué)中一類特殊的數(shù)據(jù)結(jié)構(gòu)的統(tǒng)稱,通常是一個(gè)可以被看做一棵完全二叉樹的數(shù)組對(duì)象。而堆排序是利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計(jì)的一種排序算法。本文將詳細(xì)介紹堆的結(jié)構(gòu)與接口,需要的可以參考一下2022-04-04
c++調(diào)用動(dòng)態(tài)庫LNK2019和LNK1120無法解析的外部命令
本文主要介紹了c++調(diào)用動(dòng)態(tài)庫LNK2019和LNK1120無法解析的外部命令, 出現(xiàn)這個(gè)錯(cuò)誤一般都是函數(shù)只找到聲明但沒有實(shí)現(xiàn),或者是少了什么鏈接庫,下面就來解決一下2024-06-06
基于C++ list中erase與remove函數(shù)的使用詳解
本篇文章是對(duì)C++ list中erase與remove函數(shù)的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
MATLAB中subplot函數(shù)的語法與使用實(shí)例
subplot()是將多個(gè)圖畫到一個(gè)平面上的工具,下面這篇文章主要給大家介紹了關(guān)于MATLAB中subplot函數(shù)的語法與使用的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08

