3.if...elseif語句
實際應用中常常面對更多的選擇,這時,將if...else擴展一下,就得到if...elseif結構,其一般形式為:
if<表達式1> 語句1 else if<表達式2> 語句2 else if<表達式3> 語句3
else 語句4
對應的流程圖見圖3-4。
[例3-7]貨物征稅問題,價格在1萬元以上的征5%,5000元以上1萬元以下的征3%,1000元以上5000以下的征2%,1000元以下的免稅,讀入貨物價格,計算並輸出稅金。
分析:讀入price,計算tax,這是一個較復雜的分支結構程序設計(應注意避免重復征稅)。假定貨物的價格在1萬元以上,征稅應分段累計,各段采用不同稅率進行征收。
算法:
若price>=10000
則tax=0.05*(price-10000);price=10000;
否則,若price>=5000
則tax=0.03*(price-5000)+tax;price=5000;
否則,若price>=1000
則tax=0.02*(price-1000)+tax;price=1000;
程序如下:
#include <stdio.h>
main()
{
float price,tax=0;
printf("input price:");
scanf("%f",&price);
if(price>=10000.0)
{
tax=0.05*(price-10000)+tax;price=10000;
}
if(price>=5000.0)
{
tax=0.03*(price-5000)+tax;price=5000;
}
if(price>=1000.00)
{
tax=0.02*(price-1000)+tax;
}
printf("thetax=%10.3f",tax);
}
運行程序:
RUN¿
15000¿
thetax=480.000
4.if語句嵌套
在一個if語句中可以又出現另一個if語句,這稱為if語句的嵌套或多重if語句:
if<表達式1>
if<表達式11>
......
else
語句2;
[例3-8]計算函數
1x>0
y=0x=0
-1x<0
流程圖見圖3-5。
源程序如下:
main()
{
float x,y;
printf("inputx,y:");
scanf("%f",&x);
if(x>=0)
if(x>0)
y=1;
else
y=0;
else
y=-1;
printf("y=%4.0f\n",y);
}
對多重if,最容易犯的錯誤是if與else配對錯誤,例如,寫成如下形式:
y=0;
if(x>=0)
if(x>0)
y=1;
else
y=-1;
從縮排上可以看出,作者希望else是與ifx>=0配對,但是C語言規定else總是與離它最近的上一個if配對,結果,上述算法的流程圖變成圖3-6,完全違背了設計者的初衷。改進的辦法是使用復合語句,將上述程序段改寫如下:
y=0;
if(x>=0)
{
if(x>0)
y=1;
}
else
y=-1;