C語言選擇結構


前面的代碼都是按照順序結構進行設計。在開發系統的時候有時候需要實現:當年齡大於 18 歲的時候,執行 A,否則執行 B。就要用選擇結構。
C 語言為實現選擇結構提供了 2 種語句:
(1) if 選擇語句。
(2) switch 選擇語句。

(一) if 語句

if 語句是通過判斷給定的條件是否為真,來決定是否執行指定的代碼,if 語句常用的形式有 3 種。

1. if 語句的第一種形式

if(表達式) 語句

if(表達式)
{
語句塊
}
(1) 表達式一般是比較表達式、或邏輯表達式。
(2) 語句可以是單行語句,也可以是復合語句(語句塊)。
如果表達式運算結果為真(非 0 為真),則執行 if 后面的語句,如果為假(0 為假)直接跳過
該語句(語句塊)。

//if 語句應用
#include<stdio.h>
int main()
{
    int age=8;
    if(age>18)
    {
    	printf("年齡大於 18\n");
    }
    printf("執行結束\n");
    getchar();
    return 0;
}

當 if 語句后面指定的語句只有一行時,花括號{ }可以省略不寫,例如:

#include<stdio.h>
int main()
{
    int age=8;
    if(age>18)
    	printf("年齡大於 18\n");
    printf("執行結束\n");
    getchar();
    return 0;
}

不過為了使程序更加清晰、避免出錯,建議讀者無論 if 語句后面指定的語句有多少行,都加上花括號{ }。

2. if 語句的第二種形式

if(表達式)
{
語句 1
}//這里不要寫分號,因為不是一個獨立的代碼結構
else
{
語句 2
}
該語句的執行過程為:如果表達式結果為真(非 0),執行 if 后面{ }中的語句 1。如果為假(0),則執行 else 后面{ }中的語句 2。也就是說 if 與 else 后面的語句只能有一個被執行。

#include<stdio.h>
int main()
{
    int age=10;
    if(age>18)
    {
    	printf("成年人\n");
    }
    else
    {
    	printf("未成年人");
    }
    getchar();
    return 0;
}

3. if 語句的第三種形式

if(表達式 1)
{
語句 1;
}
else if(表達式 2)
{
語句 2;
}
……
else if(表達式 m)
{
語句 m;
}
else
{
語句 n;
}

這種形式的 if 語句也被稱為 if…else if…esle 語句,該語句的執行過程為:依次判斷表達式的值,當其中一個表達式結果為真(非 0),執行其后面對應的語句,然后直接跳出整個 if語句。如果所有的表達式都是假,則執行 else 后面的語句,然后跳出整個 if 語句。

#include<stdio.h>
int main(void)
{
    int age=16;
    if(age<0)
    {
    	printf("年齡不正確\n");
    }
    else if(age<6)
    {
    	printf("%s\n","小嬰兒");
    }
    else if(age<18)
    {
    	printf("%s\n","小鮮肉");
    }
    else if(age<50)
    {
    	printf("%s\n","大叔");
    }
    else
    {
    	printf("%s\n","老爺爺");
    }
    getchar();
    return 0;
}

else 也可以省略,那么就是如果上面的每個 if 都不匹配,就什么都不做。

(二) if 語句常見錯誤

1. 常見錯誤 1

//if 語句后面多加了分號,出錯代碼:
#include<stdio.h>
int main()
{
    int age=10;
    if(age>18); //錯誤寫法
    {
    	printf("年齡大於 18\n");
    }
    printf("執行結束");
    getchar();
    return 0;
}

第 5 行 if 后面多加了分號。前面講過 C 語言中單獨的分號也是一條語句,叫做空語句。因此,系統會將左側第 5 行當做一個完整的 if 語句看待,當條件為真時執行后面的空語句。而第 6-8 行,則當做普通的語句塊,所以無論 if 條件是真、是假,該語句塊都會被執行。

2. 常見錯誤 2

在 if 語句中,將比較運算(==)錯誤寫成了賦值運算符(=),例如:

#include<stdio.h>
int main()
{
    int a=0;
    if(a=0) //出錯代碼
    {
    	printf("a 等於 0\n");
    }
    else
    {
    	printf("a 不等於 0\n");
    }
    getchar();
    return 0;
}

這樣 a=0 就是賦值表達式,值就是賦值之后的值 0,也就是 if(a=0)永遠是“假”。
為了避免失誤寫錯,有人習慣這樣寫相等判斷:
if(0==a)
這樣萬一寫錯成了 if(0=a)那么就會有編譯錯誤導致編譯失敗,就能提前發現問題了。

(三) if 語句嵌套

if 語句嵌套指的是在 if 語句中再嵌套使用 if 語句。以第一種形式 if 語句為例:
if(表達式 1)
{
if(表達式 2) //if 語句嵌套
{
語句;
}
}

下面通過例子來理解 if 語句嵌套使用。

#include<stdio.h>
int main()
{
    int age=35;
    if(age>18) //外層 if 語句
    {
        printf("age 大於 18");
        if(age>30) //內層 if 語句
        {
            printf("age 大於 30");
        }
    }
    getchar();
    return 0;
}

看起來很復雜,其實只要知道“每一級嵌套都是一個小世界”,在看外層嵌套的時候,把內層的嵌套看成一個語句就行了,分析內部嵌套的時候再忽略外部的嵌套。

(五) switch 語句

C 語言提供了另外一種多分支處理語句:switch 語句。

1. switch 語句形式

switch 語句的一般形式:
switch(表達式)
{
case 字面量表達式 1: 語句 1;
break;
case 字面量表達式 2: 語句 2;
break;
……
case 字面量表達式 n: 語句 n;
break;
default: 語句 n+1;
}

【說明】

  1. switch 小括號中表達式的運算結果必須是整數類型(包括字符類型),比如:long、int、short、char 等等。不能是 float 等其他類型。
  2. case 后面的字面量表達式運算結果也必須是整數類型。
  3. switch 下面的花括號內是一個語句塊。語句塊中包含多個以 case 開頭、break 結尾的行、最多一個以 default 開頭的行出現在語句塊的結束部分,並且只能出現一次。
  4. 當表達式的值與 case 后面的值相等時,就執行該 case 后面的語句,接着執行下一行的break,然后退出整個switch語句,switch中其他語句都不再執行,這一點和if…else if…else語句有點類似。
  5. 如果表達式的值與所有 case 后面的值都不匹配時,則執行 default 后面的語句,然后退出 switch。
  6. switch 中的“case 字面量”只是一個標記,一旦 switch 表達式的值與其中一個 case后面字面量匹配時,就會從該 case 行一直執行下去,直到遇到 break 才停止,然后退出 switch語句塊。因此寫 case 的時候結尾不要忘了寫 break。

switch 中只要有一個 break 語句被執行,就會直接結束整個 switch 語句塊。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM