C語言中文網 目錄
首頁 > C語言專題 > if else 閱讀:9,445

if else語句,C語言if else用法完全攻略

生活中的很多事情都是在滿足一定條件下發生的,同樣,程序中的“某操作語句”也是在滿足一定邏輯條件下才執行的,這種語句稱作條件語句,或稱為“if 語句”。使用 if 關鍵字,該“某操作語句”稱為“if 體”或“條件語句體”。

顯然,if 語句是一種分支結構,當條件滿足時,有“執行該操作語句”和“跳過執行該操作語句”的兩條分支。 if 語句的格式如下。

當 if 體中的語句多于一條時,要用 {} 把這些語句括起來形成一條復合語句,如下所示。

if (條件表達式)
{
    復合語句A;
}

當 if 體為一條簡單語句時,可以省略 {},即:

if (條件表達式)
    簡單語句A; //if體

該條件表達式可以是關系表達式、邏輯表達式、算術表達式或混合表達式等。只要其值為真或非零均執行 if 體。例如:

if (a>6) //關系表達式,當 a>6 時表達式值為真,執行if體
    Statement(s);
if (a||b) //邏輯表達式,只要a、b中有一個為真,結果為真,執行if體
    Statement(s);
if (3-6) //算術表達式,只要該表達式的值非0,結果為真,執行if體
    Statement(s);
/*關系、邏輯混合表達式,只要age>=60或age<=10其中一項為真,結果為真,執行if體*/
if (age>=60 ||age<=10)
    Statement(s);

if 語句的執行流程:首先判斷關鍵詞 if 后括號內條件表達式的值,如果該表達式的值為邏輯真(非 0),則執行 if 體,接著執行 if 體后的其他語句;否則,若該表達式的值為邏輯假(0),則不執行該 if 體,直接執行 if 體后的其他語句。

if 語句的執行流程圖如圖 1 所示。由圖可見,if 語句有兩條執行分支。


圖 1
 
if 分支結構通常用在:在數據有默認值或事件有默認操作的前提下,對特殊情況進行特殊處理的場景。

【例 1】一公園門票正常價格是 80 元,老人(>60歲)或兒童(<10歲)門票半價。輸出每個游客的年齡和門票價格。

本題屬于票價有默認值,針對特殊群體(老人或兒童)對票價做特殊處理的情況,故可用 if 結構。

1) 定義整型變量 age 表示年齡,price 表示票價,并初始為默認票價 80 元。

2) 輸入游客年齡,并進行判斷,老人(age>60)、兒童(age<10),兩者是邏輯“或”的關系,即:age>60||age<10。老人及兒童票價的特殊處理代碼如下。
if(age>=60||age<=10)
    price/=2;
3)輸出年齡及票價。

參考代碼:
#include<stdio.h>
int main (void)
{
    int age,price=80;
    printf ("請輸入您的年齡:");
    scanf ("%d", &age);
    if (age>=60||age<=10)
        price/=2;
    printf("您的年齡:%d,票價:%d\n",age,price);
    return 0;
}
【運行結果1】游客年齡 35 歲,運行結果如下:
請輸入您的年齡:35
您的年齡:35,票價:80

【運行結果2】游客年齡 6 歲,運行結果如下:
請輸入您的年齡:6
您的年齡:6,票價:40

【運行結果3】游客年齡 72 歲,運行結果如下:
請輸人您的年齡:72
您的年齡:72,票翁:40

if-else語句

if-else 語句的格式如下。當 if 語句體或 else 語句體中的語句多于一條時,要用 {} 把這些語句括起來形成一條復合語句,如下所示。

if(條件表達式)
{
    復合語句A; //if體
}
else
{
    復合語句B; //else體
}

當 if 體或 else 體為一條簡單語句時,可以省略 {},即:

if(條件表達式)
    簡單語句A;//if體
else
    簡單語句B;//else體

同 if 語句一樣,條件表達式可以是關系表達式、邏輯表達式、算術表達式或混合表達式等。

if-else 語句的執行流程:首先判斷關鍵詞if后括號內條件表達式的值,如果該表達式的值為邏輯真(非 0),則執行 if 體(語句 A),而不執行 else 體(語句 B),然后繼續執行 if-else 之后的其他語句;否則,若該表達式的值為邏輯假(0),則不執行該 if 體(語句 A),而執行 else 體(語句 B),然后繼續執行 if-else 之后的其他語句。if-else 語句的執行流程圖如圖 2 所示。


圖 2

由于表達式的值在邏輯上只有真和假,故 if 和 else 在執行流程上是互斥的,執行且只能執行兩者中的一個。

【例 2】從鍵盤任意輸入一個整數,求其絕對值并輸出。

正整數和零的絕對值是其本身,負整數的絕對值是其相反數,所以求絕對值操作可分為該整數是正或負兩種情況考慮,故可使用 if-else 結構實現。
#include<stdio.h>
int main (void)
{
    int n,abs;
    printf ("請輸入一個整數:");
    scanf ("%d",&n);
    if(n>=0)
        abs=n;
    else
        abs=-n;
    printf ("%d 的絕對值是:%d\n",n,abs);
    return 0;
}
【運行結果1】若輸入 3 回車,輸出結果如下:
請輸入一個整數:3
3的絕對值是:3

【運行結果2】若輸入 -5 回車,輸出結果如下:
請輸入一個整數:-5
-5的絕對值是:5

條件表達式

C 語言中提供了一種稱為條件運算符或問號運算符的特殊運算符,該運算符是唯一要求三個操作數的運算符,即三目運算符。該操作符由“問號”和“冒號”兩個符號構成,把三個操作數隔開,形成條件表達式。

條件表達式的格式為:

表達式?語句1:語句2

條件表達式可實現與 if-else 語句相似的功能,即可根據表達式的值,選擇執行兩個操作中的其中一個。

說明:冒號前后對應于兩個互斥的操作:語句 1 和語句 2。

條件表達式的執行流程與 if-else 相似:首先判斷表達式的值,如果該值為真,則選擇執行操作 1;否則,如果表達式的值為邏輯假,則選擇執行操作 2。

條件表達式的結果參與運算時,如果表達式的值為真,則取操作 1 的結果作為整個條件表達式的值參與運算;否則,取操作 2 的結果作為整個條件表達式的值參與運算。

條件表達式與 if-else 的等價關系如下。

if (表達式)
    語句1;
else
    語句2;

需要注意以下兩點:
  • 條件運算符?:的優先級高于賦值運算符=的優先級。
  • 條件運算符的結合性是從右向左。

【例 3】分析以下程序的功能。
#include<stdio.h>
int main(void){
    int n,abs;
    printf ("請輸入一個整數:");
    scanf ("%d",&n);
    (n>=0)?(abs=n):(abs=-n);
    printf ("%d 的絕對值是:%d\n",n,abs);
    return 0;
}
該程序的功能是:從鍵盤輸入一個整數,使用條件表達式語句,計算其絕對值,若該整數為非負,則其絕對值為其本身;若該整數為負,則其絕對值為其相反數。

若條件表達式 n≥0 的值為真,即 n 非負時,則選擇執行操作 1,把其本身 n 賦給 abs,即 abs=n。若 n≥0 為假,即 n<0 為負數,則選擇執行操作 2,把 n 取反后賦給 abs,即
 abs=-n。

if 語句嵌套

以下情況均屬于 if 結構嵌套。
  • if 語句體中可以含有 if 語句或 if-else 語句。
  • if-else 語句中的 if 體或者 else 體中含有 if 語句或 if-else 語句。

注意:
1)在嵌套結構中會有多個“if”與多個“else”關鍵詞,每一個“else”都應有對應的“if”相配對。原則:“else”與其前面最近的還未配對的“if”相配對。

2)配對的 if-else 語句可以看成一條簡單語句。

3)一條 if 語句也可以看成一條簡單語句。

【例 4】分析以下程序的運行結果。
#include<stdio.h>
int main (void)
{
    int n;
    printf ("Input a Integer:");
    scanf ("%d",&n);
    if(n>=0)
    {
        if (n>0)
            printf ("%d is greater than 0\n",n);
        else
            printf ("%d is equal to 0\n",n);
    }
    else
        printf ("%d is less than 0\n",n);
    return 0;
}
1) 本題是在 if 體中嵌入if-else語句。先分析外層的 if-else 結構:
if(n>=0)
{
    //該if體中包含:n>0和n=0兩種情況
}
else //該外層else體中只包含n<0的情況
    printf ("%d is less than 0\n",n);
2) 分析外層 if 體中嵌套的 if-else 結構。
if (n>=0)
{
    if (n>0) //顯式指出n>0情況
        printf ("%d is greater than 0\n",n);
    else
        printf ("%d is equal to 0\n",n);
}
外層 if 體中包含 n>0 和 n=0 兩種情況,而嵌套 if-else 結構中的 if 體已排除 n>0 情況,故 else 體為 n=0 的情況。

【運行結果1】
Input a Integer:5
5 is greater than 0

【運行結果2】
Input a Integer:0
0 is equal to 0

【運行結果3】
Input a Integer:-3
-3 is less than 0

級聯else-if多分支語句

在程序設計中,經常使用級聯的 if-else-if 實現多路分支結構。其基本結構如下。

if (條件表達式1)
    語句1;
else if (條件表達式2)、
    語句2;
...
else if (條件表達式n)
    語句n;
else
    語句n+1;

該級聯的 if-else-if 多分支結構的執行流程是:從前往后計算各個表達式的值,如果某個表達式的值為真,則執行對應的語句,并終止整個多分支結構的執行。如果上述所有表達式均不成立,即均為邏輯假時,則執行對應的 else 部分。else 部分可以省略,但一般情況下不省略。

該級聯的多分支結構并非新的結構類型,而是 if-else 嵌套結構的變形。

例如,分析如下的代碼:
if(sc<60)
    printf ("不及格\n");
else
    if(sc<85)
        printf ("合格\n");
    else
        printf ("優秀\n");
把上述代碼中嵌套的 if 語句與 else 寫在同一行,并去掉所有的縮進,即變成如下形式。
if(sc<60)
    printf ("不及格\n");
else if(sc<85)
    printf ("合格\n");
else
    printf ("優秀\n");
也就變形成為本節級聯的 if-else-if 多分支結構。

由于該結構中含有 else 關鍵字,故后面表達式已隱含排除了前面表達式的邏輯。因此,在設計該類結構中,應盡量避免不必要的重復包含,否則失去了使用該級聯 else-if 結構實現多分支的意義。

精美而實用的網站,提供C語言、C++、STL、Linux、Shell、Java、Go語言等教程,以及socket、GCC、vi、Swing、設計模式、JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo