C語言之選擇分支語句詳解

1.if-else語句

1.1 例子與總結

例子:

①隻有一個if

    if (1 == a)
    {
        printf("yes\n");
    }

②if-else語句

    if (1 == a)
    {
        printf("yes\n");
    }
    else
    {
        printfr("no\n");
    }

③if-else if-else if-else語句

    printf("今天星期幾?\n");
    int a = 0;
    scanf("%d", &a);
    if (1 == a)
    {
        printf("Monday\n");
    }
    else if (2 == a)
    {
        printf("Tuesday\n");
    }
    else if (3 == a)
    {
        printf("Wednesday\n");
    }
    else
    {
        printf("Other Day\n");
    }

總結:

if-else語句有三種形式。

①隻有一個if,沒有對應的else。(適用於隻有一個判斷的語句)

初學者在學習if-else語句的時候,可以隻用這個if解決大部分選擇分支語句題目。

如:寫一個程序,90-100為A,80-90為B,70-80為C,其他為D

#include <stdio.h>
 
int main()
{
 
    
    float grade = 0;
    scanf("%f", &grade);
    if ( (grade >= 90) && (grade <= 100) )
    {
        printf("A\n");
    }
    if ( (grade >= 80) && (grade < 90) )
    {
        printf("B\n");
    }
    if ( (grade >= 70) && (grade < 80) )
    {
        printf("C\n");
    }
    if (grade < 70)
    {
        printf("D\n");
    }
 
    return 0;
}

反思:初學者寫這種題目的時候,剛開始建議先采用這種形式,等熟悉瞭可以用②和③。其實這種寫代碼的方式就和枚舉差不多。

②一個if,一個與之對應的else。(適用於A或B的情況)

eg:根據硬幣的正反面,決定是否聽課。正面假定為1,即聽課。反面假定為0,即逃課。

#include <stdio.h>
 
int main()
{
    int a = 1;
    scanf("%d", &a);
    if (1 == a)//1即為正面
    {
        printf("聽課\n");
    }
    else//隻有正面與非正面(即反面)
    {
       printf("聽課\n");
    }
    
    return 0;
}

③if-n個else if-最後else(適用於至少三種情況的例子)

eg:以①中成績輸出為例子。

#include <stdio.h>
 
int main()
{
 
    
    float grade = 0;
    scanf("%f", &grade);
    if ( (grade >= 90) && (grade <= 100) )
    {
        printf("A\n");
    }
    else if ( (grade >= 80) && (grade < 90) )
    {
        printf("B\n");
    }
    else if ( (grade >= 70) && (grade < 80) )
    {
        printf("C\n");
    }
    else
    {
        printf("D\n");
    }
 
    return 0;
}

1.2 if與else的配對問題

eg:

    float grade = 0;
    scanf("%f", &grade);
    if ( (grade >= 90) && (grade <= 100) )
    {
        printf("A\n");
    }
        if (0 == grade)
        printf("鴨蛋\n");
    else
    {
        printf("正分\n");
    }

親愛的讀者,請你判斷一下else與哪個if配對?

else配對規則是與最近的還未配對的if配對。

因此,例子中,if (0 == grade)和上面的if均沒有配對,else與最近的if (0 == grade)配對。

總結:else與離它最近的還未配對的if配對,if同理。

1.3 if-else代碼編寫建議

①無論if-else後面執行的語句是一個語句或者是一個語句塊,都建議打上大括號。

eg:

if ( (grade >= 90) && (grade <= 100) )
    {
        printf("A\n");
    }
        if (0 == grade)
        {
          printf("鴨蛋\n");
        }
        
        else
        {
          printf("正分\n");
        }

②if中的括號表示判斷條件,如果出現數字,特別是等於0一類的,建議數字放左邊。

不太建議把數字放右邊,因為放左邊代碼很容易發現問題

if (0 == grade)

如果不小心寫成0 = grade,編譯器會報錯。

③出現多個if-else,甚至是if-else嵌套代碼,建議代碼最好有縮進。因為如果要舉例,這個代碼寫起來較為麻煩,後期作者刷題將會補上。

1.4 其他需要註意的問題

①if括號內的條件問題

這裡需要註意,if-else內的條件隻有0與1,非0就是1.

eg:

    if (i = -1)
    if (i)//i=-1
    if (0)
    if (-1)

第一行是把-1賦值給i,非0,直接執行if。

第二行為i,具體需要判斷i的大小,正如其下的兩行,第三行為0不執行if,第四行為-1為真執行if。

②if-else的相關語句都可以進行嵌套。

③if-else if-else的知識點。

eg:

#include <stdio.h>
 
int main()
{
 
    
    float grade = 0;
    scanf("%f", &grade);
    if ( (grade >= 90) && (grade <= 100) )
    {
        printf("A\n");
    }
    else if ( (grade >= 80) )
    {
        printf("B\n");
    }
    else if ( (grade >= 70) )
    {
        printf("C\n");
    }
    else
    {
        printf("D\n");
    }
 
    return 0;
}

else if中的條件其實是默認是非上一行的if范圍或者if-else范圍的。

如例子中的代碼的第一個else if默認grade < 90,第二個else if默認grade < 80.

2. switch (case)語句

2.1例子和總結

這裡,我依舊用成績和對應等級寫瞭一個代碼。

#include <stdio.h>
int main()
{
    float grade;
    printf("Input integer number:");
    scanf("%f", &grade);
    int shiwei = (int) (grade / 10);
    switch (shiwei)
    {
        case 10:
        case 9:
        printf("A\n");
        break;
        case 8:
        printf("B\n");
        break;
        case 7:
        printf("C\n");
        break;
        default:
        printf("D\n");
        break;
    }
 
    return 0;
}

分析:我註意到不同等級對應的分數對十位數是不一樣的,同時符合switch(整型表達式)和case 整型常量表達式的條件。

總結:

switch (整型表達式/整型變量)

{

   case 常量整數/整型常量表達式:

   語句;/語句塊;

  break;

……

}

②switch語句執行步驟及各個操作符表達含義

swich-選擇表達式的關鍵字

case:各種情況分支,同時也是語句執行的起點

語句塊:執行語句

break:跳出switch語句。

default:除case以外的情況均默認為default,其他情況從這裡開始。

eg:以2.1中的代碼作為例子進行講解

一、假設grade為100,則shiwei=10,進入switch語句,以case 10為起點,開始執行語句。case 10後面不是break也沒有語句塊,繼續執行case 9,再執行打印A的操作,接下來碰到break跳出switch語句。

二、假設輸入的位101,shiwei=11,不是case的情況,進入default,打印D,再碰到break跳出。

2.2 switch語句其他知識點

①switch支持嵌套

②switch中的case和default無所謂順序。

③switch中括號為整型(無所謂常量變量),case必須為整型常量,如case 9+1也是可以的。

到此這篇關於C語言之選擇分支語句詳解的文章就介紹到這瞭,更多相關C語言選擇分支語句內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: