條件跳躍用的IF (若)及ELSE(否則)指令,能夠安排假若某一個條件成立時,執行某一段程式,否則執行另一段程式。 如以下流程圖所示,當進入IF-ELSE指定時,會依據if (condition)來判斷結果來決定是要依據那一個箭頭來走,當成立時,亦即ture,則遵循標示ture的箭頭下一步執行標示block1方塊的程式碼,否則,亦即else,則遵循標示else,的箭頭下一步執行標示block2方塊的程式碼。流程圖中籃色方菱形由IF-ELSE語法實現,白色兩區塊則可以容納其它程式碼。
IF-ELSE標準流程圖
若要上述要執行的程式段只有一個指令時,用以下的原型
if (condition) statement1;
else statement2;
若條件(condition )成立,即ture值為1,則執行 statement1 內的程式碼否則執行statement2 的程式碼。
完整的IF-ELSE程式碼原型如下
if (condition){
statement block1
}
else {
statement block2
}
假如條件(condition )成立,即值為1,則執行statement block1 區塊內的程式碼否則執行statement block2區塊內的程式碼。
我們知道任何數都不能夠除以0,以下範例程式在執行除法前,先檢查除數,只有在除數不為零時執行除法,為零時則輸出警語。
自動避免除以0的IF-ELSE程式流程圖
程式流程圖所示,程式一開始用printf()提示問使用者要輸入兩個值,再呼叫scanf()取得兩由使用者輸入的值。之後進入IF-ELSE判斷式菱形方塊,判斷b是否不是0(不是0則是真),當真時,執行除法之後將結由以printf()送回PC人機。否則,(即b=0),以printf()列出除法不能除以0的提示。
範例:自動除法機
#include "c4mlib.h" //引入ASA Seriesc函式庫
#include "math.h" //引入math,h函式庫
#include "stdlib.h" //引入stdlib函式庫
int main(void)
{
C4M_DEVICE_set(); //執行ASAM128板初始設定
int a,b;
printf("Enter two numbers:\r");
scanf("%d,%d",&a,&b);
if(b){printf("%d\n", a/b);}
else {printf("connot devide by zero\n");}
return 0;
}
顯示結果
>> Enter two numbers:
<< 20,4
>> 20,4
輸入兩個數字後→按","→輸入要除以的數→按enter→顯示結果
>> Enter two numbers:
<< 20,3
>> 20,3
>> 6
>> Enter two numbers:
<< 20,0
若是除以奇數還是會顯示出結果,但若除以0則是會顯示 con not divide by zero
C語言的語法很彈性,對IF-ELSE指令除了標準的用法之外,也接受一些變形使用,包括只有IF,沒有ELSE,
if (condition) statement;
還有可以巢狀IF-ELSE。如以下流程圖,第一個IF-ELSE判斷,分出兩條路,ELSE這一條經由block2。而ture這一條則經過一個藍色框框內的執行路徑後再往下走。藍色框,可視為一個巢,巢內又有一個IF-ELSE判斷,將路徑再分割為block1-1及block1-2兩個方塊。C語言中,在一個分岔語法框內,再插入另一個分岔語法框,稱為巢狀語法結構。
兩個藍色菱形,分別為外層的IF-ELSE指令,以及內層的IF-ELSE指令。
巢狀IF-ELSE流程圖
if (condition1){
if (condition2){
statement block1-1
}
else {
statement block1-2
}
}
else {
statement block2
}