目錄
IF語句
if語句
IF語句的基本的形式
if…else語句形式
else if語句形式
IF嵌套形式
if的嵌套形式
條件運算符
switch語句
switch語句的基本形式
多路開關模式的switch語句
if else語句和switch語句的差別
選擇結構程式應用
每文一語
IF語句
if語句
在日常生活中,為了使交通暢通有序,一般會在路口設立交通信号燈。在信号燈顯示為綠色時車輛可以行駛通過,當信号燈轉為紅色時車輛就要停止行駛。可見,信号燈給出了信号,人們通過不同的信号進行判斷,然後根據判斷的結果進行相應的操作。
在C語言程式中,想要完成這樣的判斷操作,利用的就是if語句。if語句的功能就像路口的信号燈一樣,根據判斷不同的條件,決定是否進行操作。
據說第一台數字計算機是用來進行決策操作的,使得之後的計算機都繼承了這項功能。程式員将決策表示成對條件的檢驗,即判斷一個表達式值的真假。除了沒有任何傳回值的函數和傳回無法判斷真假的結構函數外,幾乎所有表達式的傳回值都可以判斷真假。
IF語句的基本的形式
if語句通過對表達式進行判斷,根據判斷的結果選擇是否進行相應的操作。if語句的一般形式為:
if(表達式) 語句
其語句執行流程如圖所示。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SN4QzNxUjYyczY2YzMxMmYyYzXyATN1YTM5IzLcZDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
【執行個體6.1】 使用if語句模拟信号燈指揮車輛行駛。在本執行個體中,為了模拟十字路口上信号燈指揮車輛行駛,要使用if語句判斷信号燈的狀态。如果信号燈為綠色,則說明車輛可以行駛通過,通過輸出語句進行資訊提示說明車輛的行動狀态。
#include<stdio.h>
int main()
{
int iSignal; /*定義變量表示信号燈的狀态*/
printf("the Red Light is 0,the Green Light is 1\n");/*輸出提示資訊*/
scanf("%d",&iSignal); /*輸入iSignal變量*/
if(iSignal==1) /*使用if語句進行判斷*/
{
printf("the Light is green,cars can run\n"); /*判斷結果為真時輸出*/
}
return 0;
}
【執行個體6.2】 完善if語句的使用。原程式中僅對綠燈情況下做出相應的操作,為進一步完善信号燈為紅燈時的操作,在程式中再添加一次if語句對信号燈為紅燈時的判斷,并且在條件成立時給出相應的操作。
#include<stdio.h>
int main()
{
int iSignal; /*定義變量表示信号燈的狀态*/
printf("the Red Light is 0,the Green Light is 1\n");/*輸出提示資訊*/
scanf("%d",&iSignal); /*輸入iSignal變量*/
if(iSignal==1) /*使用if語句進行判斷*/
{
printf("the Light is green,cars can run\n");/*判斷結果為真時輸出*/
}
if(iSignal==0) /*使用if語句進行判斷*/
{
printf("the Light is red,cars can't run\n");/*判斷結果為真時輸出*/
}
return 0;
}
if…else語句形式
除了可以指定在條件為真時執行某些語句外,還可以在條件為假時執行另外一段代碼。這在C語言中是利用else語句來完成的,其一般形式為:
if(表達式)
語句塊1;
else
語句塊2;
其語句執行流程如圖所示。
【執行個體6.3】 使用if…else語句進行選擇判斷。在本執行個體中,使用if…else語句判斷使用者輸入的數值,輸入的數字為0表示條件為假,輸入的數字為非0表示條件為真。
#include<stdio.h>
int main()
{
int iNumber; /*定義變量*/
printf("Enter a number\n"); /*顯示提示資訊*/
scanf("%d",&iNumber); /*輸入數字*/
if(iNumber) /*判斷變量的值*/
{
/*判斷為真時執行輸出*/
printf("the value is true and the number is: %d\n",iNumber);
}
else /*判斷為假時執行輸出*/
{
printf("the value is flase and the number is: %d\n",iNumber);
}
return 0;
}
【執行個體6.4】 使用if…else語句得到兩個數的最大值。本執行個體要實作的功能是比較兩個數值的大小,這兩個數值由使用者輸入,然後将其中相對較大的數值輸出顯示。
#include<stdio.h>
int main()
{
int iNumber1,iNumber2; /*定義變量*/
printf("please enter two numbers:\n"); /*資訊提示*/
scanf("%d%d",&iNumber1,&iNumber2); /*輸入資料*/
if(iNumber1>iNumber2) /*判斷iNumber1是否大于iNumber2*/
{
printf("the bigger number is %d\n",iNumber1);
}
else /*判斷結果為假,則執行下面語句*/
{
printf("the bigger number is %d\n",iNumber2);
}
return 0;
}
【執行個體6.5】 使用if…else語句模拟信号燈。多數路口的信号燈還有一個黃燈,是用來提示車輛準備行駛或者停車的。6.2.1節使用if語句模拟信号燈,在本執行個體中使用if…else語句進一步完善這個程式,使得信号燈具有黃燈相應的功能。
#include<stdio.h>
int main()
{
int iSignal; /*定義變量表示信号燈的狀态*/
printf("the Red Light is 0,\nthe Green Light is 1,\nthe Yellow Light is other number\n"); /*輸出提示資訊*/
scanf("%d",&iSignal); /*輸入iSignal變量*/
if(iSignal==1) /*當信号燈為綠色時*/
{
printf("the Light is green,cars can run\n");/*判斷結果為真時輸出*/
}
if(iSignal==0) /*當信号燈為紅燈時*/
{
printf("the Light is red,cars can't run\n"); /*判斷結果為真時輸出*/
}
else /*當信号燈為黃燈時*/
{
printf("the Light is yellow,cars are ready\n");
}
return 0;
}
else if語句形式
利用if和else關鍵字的組合可以實作else if語句,這是對一系列互斥的條件進行檢驗,其一般形式如下:
if(表達式1) 語句1
else if(表達式2) 語句2
else if(表達式3) 語句3
…
else if(表達式m) 語句m
else 語句n
else if語句執行流程如圖
IF嵌套形式
if的嵌套形式
在if語句中又包含一個或多個if語句稱為if語句的嵌套。一般形式如下:
if(表達式1)
if(表達式2) 語句塊1
else 語句塊2
else
if(表達式3) 語句塊3
else 語句塊4
使用if語句嵌套的形式功能是對判斷的條件進行細化,然後進行相應的操作。
這就好比人們在生活中,每天早上醒來的時候想一下今天是星期幾,如果是周末就是休息日,如果不是周末就要上班;同時,休息日可能是星期六或者是星期日,星期六就和朋友去逛街,星期日就陪家人在家。
根據這個比喻來看一下上述一般形式表示:if語句判斷表達式1就像判斷今天是星期幾,假設判斷結果為真,則用if語句判斷表達式2,這就好像判斷出今天是休息日,然後去判斷今天是不是周六;如果if語句判斷表達式2為真,那麼執行語句塊1中的内容。如果不為真,那麼執行語句塊2中的内容。就比如,如果為星期六就陪朋友逛街,如果為星期日就陪家人在家。外面的else語句表示不為休息日時的相應操作。代碼如下所示。
if(iDay>Friday) /*判斷為休息日的情況*/
{
if(iDay==Saturday) /*判斷為周六時的操作*/
{}
else /*為周日時的操作*/
{}
}
else /*不為休息日的情況*/
{
if(iDay==Monday) /*判斷為周一時的操作*/
{}
else
{}
}
條件運算符
在使用if語句時,可以通過判斷表達式為“真”或“假”,而執行相應的表達式。例如:
if(a>b)
{max=a;}
else
{max=b;}
上面的代碼可以用條件運算符“? :”來進行簡化,例如:
max=(a>b)?a:b;
條件運算符對一個表達式的真或假值結果進行檢驗,然後根據檢驗結果傳回另外兩個表達式中的一個。條件運算符的一般形式:
表達式1?表達式2:表達式3;
在運算中,首先對第一個表達式的值進行檢驗。如果值為真,則傳回第二個表達式的結果值;如果值為假,則傳回第3個表達式的結果值。例如上面使用條件運算符的代碼,首先判斷表達式a>b是否成立,成立則說明結果為真,否則為假。當為真時,将a的值賦給max變量;如果為假,則将b的值賦給max變量。
switch語句
switch語句的基本形式
switch語句是多分支選擇語句。例如,如果隻需要檢驗某一個整型變量的可能取值,那麼可以用更簡便的switch語句。switch語句的一般形式如下:
switch (表達式)
{
case 情況1:
語句塊1;
case 情況2:
語句塊2;
…
case 情況n:
語句塊n;
default:
預設情況語句塊;
}
switch語句的程式流程如圖所示
多路開關模式的switch語句
設計多路開關模式的switch語句,其形式如下:
switch(表達式)
{
case 1:
語句1
break;
case 2:
case 3:
語句2
break;
……
default:
預設語句
break;
}
可以看到如果在case 2後不使用break語句,那麼符合檢驗時與符合case 3檢驗時的效果是一樣的。也就是說,使用多路開關模式使得多種檢驗條件使用一種解決方式。
if else語句和switch語句的差別
if else語句和switch語句都用于根據不同的情況檢驗條件做出相應的判斷。那麼if else語句和switch語句有什麼差別呢?下面從兩者的文法和效率的比較進行講解。
文法的比較
if是配合else關鍵字進行使用的,而switch是配合case使用的;if語句先對條件進行判斷,而switch後進行判斷。
效率的比較
if else結構對開始少量的檢驗判斷速度比較快,但是随着檢驗的增長會逐漸變慢,其中的預設情況是最慢的。使用if else結構可以判斷表達式,但是也不能減少選擇深度的增加使得檢驗速度變慢的趨勢,并且也不容易進行後續的添加擴充。
switch結構中,對其中每一項case檢驗的速度都是相同的,但除去default的預設情況,default預設情況比其他情況都快。
當判定的情況占少數時,if else結構比swtich結構檢驗速度快。也就是說,如果分支在3或者4個以下,用if else比較好,否則選擇switch結構。
選擇結構程式應用
【執行個體6.14】 使用switch語句計算運輸公司的計費。某運輸公司的收費按照使用者運送貨物的路程進行計費。路程(s)越遠,每公裡運費越低,收費标準如表6.1所示。
路程(KM) | 運費 |
s<250 | 沒有折扣 |
250≤s<500 | 2%折扣 |
500≤s<1000 | 5%折扣 |
1000≤s<2000 | 8%折扣 |
2000≤s<3000 | 10%折扣 |
3000≤s | 15%折扣 |
#include<stdio.h>
int main()
{
int iDiscount; /*表示折扣*/
int iSpace; /*表示路程*/
int iSwitch; /*表示折扣的檢驗情況*/
float fPrice,fWeight,fAllPrice;
printf("enter the price , weight and space\n");
scanf("%f%f%d",&fPrice,&fWeight,&iSpace);
if(iSpace>3000)
{
iSwitch=12; /*折扣的檢驗情況為12*/
}
else
{
iSwitch=iSpace/250; /*計算折扣的檢驗情況*/
}
switch(iSwitch) /*使用switch進行檢驗*/
{
case 0:
iDiscount=0;
break;
case 1:
iDiscount=2;
break;
case 2:
case 3:
iDiscount=5;
break;
case 5:
case 6:
case 7:
iDiscount=8;
break;
case 8:
case 9:
case 10:
case 11:
iDiscount=10;
break;
case 12:
iDiscount=12;
break;
default:
break;
}
fAllPrice=fPrice*fWeight*iSpace*(1-iDiscount/100.0); /*計算總價格*/
printf("AllPrice is :%.4f\n",fAllPrice); /*輸出結果*/
return 0;
}
本本介紹了選擇結構的程式設計方式,包括if語句和switch語句。同時對if…else語句和else if語句的形式也進行了介紹,為選擇結構程式提供了更多的控制方式。然後介紹了switch語句,當switch語句用在當檢驗的條件較多時,如果使用if語句進行嵌套也是可以實作的,不過其程式的可讀性會降低。最後通過兩種選擇語句的比較來進行區分。