我們知道,C語言提供了三種基本流程控制結構,分別為順序結構、選擇結構和循環結構。對於選擇結構,則是程序根據輸入條件或中間執行結果的不同而選擇執行不同的語句塊。選擇結構分為if語句和switch語句兩種。本文僅談一談if語句基本用法與使用技巧。
1、 if語句基本用法
if語句基本用法有如下四種形式,我們分別來看。
1) 簡單的if語句形式
if(表達式)
語句塊;
該語句形式的語義是:如果表達式為真,則執行語句塊;否則,將跳過該語句塊,執行整個if分支語句後面的其它語句。上述語句塊,可以是一條語句,也可以是多條語句組合。(下同)
2) if-else語句形式
if(表達式)
語句塊1;
else
語句塊2;
該語句形式的語義是:如果表達式為真,則執行語句塊1;否則,執行語句塊2。也就是說語句塊1和語句塊2兩者必執行其一。然後,再執行整個if分支語句後面的其它語句。
3) if-else-if語句形式
if(表達式1)
語句塊1;
else if(表達式2)
語句塊2;
……
else if(表達式m)
語句塊m;
else
語句塊n;
該語句形式的語義是,如果依次判斷各表達式,若表達式為真,就執行對應的語句塊,然後跳出整個if分支語句,執行後面的語句;如果前m個表達式均不為真,則會執行語句塊n,然後再跳出整個if分支語句,執行後面的語句;也就是整個if分支語句的n個語句塊,程序必定會執行其一。
4) if語句嵌套形式
所謂的if語句嵌套形式是指if語句某一分支裡又是一個if語句。通俗的理解是,前三種用法形式裡的語句塊,又是一個if語句,而且可以是前三種用法形式的任一種。C語言的C89標準指明,編譯程序必須最少支持15層嵌套;C99標準把限度提升到127層。不過雖然支持這麼多層嵌套,但實際編程應用時,為了保持程序的可讀性及簡潔程度,應儘量減少嵌套層次。
2、 if語句用法技巧
1) 合理調整if分支順序
在編程應用時,應合理調整if分支順序,把大概率為真對應情況的語句塊直接放在if後面,不要放在else後面。這樣做有利於減少程序的判斷次數,提高執行效率。
例如,我們把學生成績分成60分及以上、40-60分、40分以下三個分數段。很顯然,及格的學生是大多數,也就是某個學生及格的可能性較大,低於60分較少,低於40分的更少。在編程處理學生成績的應用時,通常用if-else-if語句形式,就應該把60分及以上的學生處理情況直接放到if語句之後,40-60分段放到else if語句後面,低於40分的情況放到else語句後面處理,這種安排很符合大家的邏輯思維習慣。如果把順序顛倒,if語句處理40分以下,else if語句處理40-60分段,60分及以上放到else語句後面,無形中增加了成倍的成績比較次數。
2) else結合問題
C語言if語句編程應用時,應該注意else的配對問題,它始終與最近的未匹配的if相結合。如果不注意該問題,有可能程序執行結果與預期相去甚遠。請看下面的例子說明。
if(表達式1)
if(表達式2)
語句塊1;
else
語句塊2;
上面的例子我們來看,作者的意圖是,如果表達式1與表達式2均為真的情況下,執行語句塊1;如果表達式1為假,則執行語句塊2。這裡雖然else與表達式1的if對齊,但它們並不能配對;事實上else是與表達式2的if相結合。實際執行邏輯是:在表達式1為真的情況下,繼續判斷表達式2,若表達式2為真則執行語句塊1,若表達式2為假則執行語句塊2。可見與作者的意圖相差太遠。
要想實現作者意圖,解決辦法是合理使用「{}」,將上述表達式修改成如下形式即可。
if(表達式1)
{
if(表達式2)
語句塊1;
}
else
語句塊2;
3) 避免if/else語句後面加分號「;」
C語言中,分號「;」組成的語句稱為空語句,它什麼都不做,通常被用來做空循環體。如果不小心在if/else語句後面加了分號「;」,程序執行有可能違背了你的意圖,導致意外結果。例如:
if(表達式);
語句塊;
本來意圖是表達式為真就執行語句塊,現在不小心在if後面加了個分號「;」,則上述表達式實際上變成了如下形式:
if(表達式)
;
語句塊;
也就是說如果表達式為真,則執行一個空語句。然後再執行語句塊。此時上述語句塊不再是在表達式為真的條件下執行,而是會無條件的執行。
可見,一個分號「;」誤用會帶來不可預計的後果。而且,此種錯誤在程序編譯時是發現不了的,不會有任何錯誤提示。因此,建議大家編程時一定要細心。
好了,關於if語句的用法今天就總結到這,如果大家有任何疑問請留言探討。我是「C語言知識傳播者」,志在瞄準C語言,挖掘和總結C語言的難點和痛點,給C語言編程愛好者和本領域從業人員提供參考,我會用心總結C語言知識的點點滴滴,您的關注是我持續創作的動力,請收藏本文、轉發並點讚,希望得到您的持續關注,謝謝!