官术网_书友最值得收藏!

4.2 if 語句

在生活中,每個人都要進行各種各樣的選擇。例如,吃什么菜?走哪條路?找什么人?那么當程序遇到選擇時,該怎么辦呢?這時需要使用選擇結構語句。if 語句是最基礎的一種選擇結構語句,它主要有3 種形式,分別為if 語句、if…else 語句和if…else if…else 多分支語句,本節將分別對它們進行詳細講解。

4.2.1 最簡單的if 語句

img

C# 中使用if 關鍵字來組成選擇語句,其最簡單的語法形式如下。

img

學習筆記

在使用if 語句時,如果只有一條語句,那么省略{} 是沒有語法錯誤的,而且不影響程序的執行,但是為了程序代碼的可讀性,建議不要省略。

其中,表達式部分必須用() 括起來,它可以是一個單純的布爾類型的變量(或常量),也可以是關系表達式(或邏輯表達式)。如果表達式的值為真,則執行 “語句塊”,之后繼續執行 “下一條語句”;如果表達式的值為假,則跳過 “語句塊”,執行 “下一條語句”。這種形式的if 語句相當于漢語中的 “如果……那么……”,其流程圖如圖4.4 所示。

img

圖4.4 if 語句流程圖

示例1.判斷輸入的數字是不是奇數

使用if 語句判斷用戶輸入的數字是不是奇數,代碼如下。

img

學習筆記

第4 行代碼使用Convert.ToInt32 方法將用戶輸入的數字強制轉換成了int 類型,然后使用int 類型的變量進行記錄。

奇數的條件是不能被2 整除,因此,第5 行代碼判斷用戶輸入的數字求余2 是否不等于0,以此來判斷用戶輸入的數字是不是奇數。

運行上面代碼,當輸入5 時,結果如圖4.5 所示;當輸入6 時,結果如圖4.6 所示。

img

圖4.5 奇數運行結果

img

圖4.6 不是奇數的運行結果

學習筆記

if 語句后面如果只有一條語句,那么可以不使用大括號({}),但是,不建議開發人員使用這種形式,不管if 語句后面有多少要執行的語句,都建議使用大括號括起來,這樣方便代碼的閱讀。例如,下面的代碼未使用大括號。

img

學習筆記

●if 語句后面多加了分號。例如,if 語句正確表示如下。

img

上面兩行代碼的本意是,當變量i 的值為5 時,執行下面的輸出語句。但是,如果在if 語句后面多加了分號,下面的輸出語句將會無條件執行,if 語句就起不到判斷的作用,代碼如下。

img

●在使用if 語句時,如果要將多個語句作為復合語句來執行,例如,程序的真正意圖是如下語句。

img

那么,如果刪去大括號,則代碼如下。

img

在執行程序時,無論flag 是否為true,j++ 都會無條件執行,這顯然與程序的本意是不符的,但程序并不會報告異常,因此這種錯誤很難發現。

4.2.2 if…else 語句

img

如果遇到只能二選一的情況,比如某個公司在發展過程中遇到了 “擴張” 和 “求穩” 的抉擇,示意圖如圖4.7 所示。

img

圖4.7 公司在發展過程中遇到了 “擴張” 和 “求穩” 的抉擇示意圖

C# 中提供了if…else 語句解決類似問題,其語法如下。

img

在使用if…else 語句時,表達式可以是一個單純的布爾類型的變量(或常量),也可以是關系表達式(或邏輯表達式)。如果滿足條件,則執行if 后面的語句塊;否則,執行else 后面的語句塊。這種形式的選擇語句相當于漢語中的 “如果……否則……”,其流程圖如圖4.8 所示。

img

圖4.8 if…else 語句流程圖

學習筆記

if…else 語句可以使用條件運算符進行簡化,如下面這段代碼:

img

可以簡寫成:

img

上段代碼主要實現求絕對值的功能,如果a > 0,就把a 的值賦給變量b;否則,將-a賦給變量b。使用條件運算符的好處是可以使代碼簡潔,并且有一個返回值。

示例2.根據分數劃分優秀等級

使用if…else 語句判斷用戶輸入的分數是不是足夠優秀,如果大于90,則表示優秀;否則,輸出 “希望你繼續努力!”,代碼如下。

img

運行上面代碼,當輸入一個大于90 的數時,如93,效果如圖4.9 所示;當輸入一個小于90 的數時,如87,效果如圖4.10 所示。

img

圖4.9 當輸入93 時的運行結果

img

圖4.10 當輸入87 時的運行結果

學習筆記

在使用if…else 語句時,else 一定不可以單獨使用,它必須和關鍵字if 一起使用。例如,下面的代碼是錯誤的。

img

在程序中使用if…else 語句時,如果出現if 語句多于else 語句的情況,那么將會出現懸垂else 問題:究竟else 語句和哪個if 語句相匹配呢?例如,下面的代碼。

img

如果遇到上面的情況,在沒有特殊處理時,那么else 語句永遠都與最后出現的if 語句相匹配,即上面代碼中的else 語句是與if(y>x) 語句相匹配的。如果要改變else 語句的匹配對象,則可以使用大括號。例如,將上面代碼修改如下。

img

這樣,else 語句將與if(x>1) 語句相匹配。

學習筆記

建議在if 后面使用大括號將要執行的語句括起來,這樣可以避免程序代碼混亂。

4.2.3 if…else if…else 語句

img

大家平時在網上購物需要付款時通常都有多種選擇,如圖4.11 所示。

在圖4.11 中,提供了多種付款方式,這時用戶就需要從多個選項中選擇一個。在開發程序時,如果遇到多選一的情況,則可以使用if…else if…else 語句。該語句是一個多分支選擇語句,通常表現為 “如果滿足某種條件,則進行某種處理;否則,如果滿足另一種條件,則執行另一種處理……”。if…else if…else 語句的語法格式如下。

img
img
img

圖4.11 網上購物時的付款頁面

使用if…else if…else 語句時,表達式部分必須用() 括起來,它可以是一個單純的布爾類型的變量(或常量),也可以是關系表達式(或邏輯表達式)。如果表達式為真,則執行語句;而如果表達式為假,則跳過該語句,進行下一個else if 的判斷;只有在所有表達式都為假的情況下,才會執行else中的語句。if…else if…else語句的流程圖如圖4.12所示。

學習筆記

if 和else if 都需要判斷表達式的真假,而else 則不需要判斷;另外,else if 和else都必須跟if 一起使用,不能單獨使用。

img

圖4.12 if…else if…else 語句的流程圖

示例3.根據用戶輸入的年齡輸出相應的信息提示

使用if…else if…else 多分支語句實現根據用戶輸入的年齡輸出相應的信息提示的功能,代碼如下。

img

學習筆記

第5 行代碼中的int.Parse() 方法用來將用戶輸入的數據強制轉換成int 類型。

運行上面代碼,輸入一個年齡值,如35,按回車鍵即可輸出相應的信息提示,結果如圖4.13 所示。

img

圖4.13 當輸入35 時的運行結果

學習筆記

使用if 語句時,應盡量遵循以下原則。

● 使用bool 變量作為判斷條件,假設bool 變量為falg,較為規范的書寫格式如下。

img

不符合規范的書寫格式如下。

img

● 當使用浮點類型的變量與0 值進行比較時,規范的書寫格式如下。

img

不符合規范的書寫格式如下。

img

● 使用if(1==a) 這樣的書寫格式可以防止錯寫成if(a=1) 這種形式,從而可以避免邏輯上的錯誤。

4.2.4 if 語句的嵌套

img

前面講了3 種形式的if 語句,這3 種形式的語句之間都可以進行互相嵌套。例如,在最簡單的if 語句中嵌套if…else 語句,形式如下。

img
img

學習筆記

if 語句可以有多種嵌套方式,在開發程序時,可以根據自身需要選擇合適的嵌套方式,但一定要注意邏輯關系的正確處理。

示例4.判斷輸入的年份是不是閏年

通過使用嵌套的if 語句實現判斷用戶輸入的年份是不是閏年的功能,代碼如下。

img
img

學習筆記

判斷閏年的方法是 “四年一閏,百年不閏,四百年再閏”。程序使用嵌套的if 語句對這3 個條件進行逐一判斷,第5 行代碼首先判斷年份能否被4 整除(iYear%4==0),如果不能被4 整除,則輸出字符串 “這不是閏年”;如果能被4 整除,則第7 行代碼繼續判斷能否被100 整除(iYear%100==0)。如果不能被100 整除,則輸出字符串 “這是閏年”;如果能被100 整除,則第9 行代碼繼續判斷能否被400 整除(iYear%400==0)。如果能被400 整除,則輸出字符串“這是閏年”;如果不能被400 整除,則輸出字符串“這不是閏年”。

運行上面代碼,當輸入一個閏年年份時,如2000,結果如圖4.14 所示;當輸入一個非閏年年份時,如2017,結果如圖4.15 所示。

img

圖4.14 當輸入年份為2000 時的運行結果

img

圖4.15 當輸入年份為2017 時的運行結果

學習筆記

在使用if 語句嵌套時,注意else 關鍵字要和if 關鍵字成對出現,并且遵守臨近原則,即else 關鍵字總是和離自己最近的if 語句相匹配。

在進行條件判斷時,應該盡量使用復合語句,以免產生二義性,導致運行結果和預想的不一致。

主站蜘蛛池模板: 巍山| 柳州市| 黄平县| 清远市| 高雄市| 焦作市| 松潘县| 堆龙德庆县| 武城县| 崇礼县| 桦甸市| 临颍县| 定安县| 连平县| 双牌县| 延川县| 苗栗县| 新平| 鄂托克前旗| 玉环县| 远安县| 莱西市| 日照市| 巴彦淖尔市| 青河县| 原阳县| 新昌县| 商都县| 麻阳| 南开区| 长阳| 宁国市| 柏乡县| 西华县| 宜丰县| 克山县| 华蓥市| 大冶市| 竹北市| 乡宁县| 五台县|