- Visual C#.NET程序設(shè)計
- 黃昆主編
- 1437字
- 2018-12-27 11:29:22
第4章 控制語句
控制語句用于控制程序的流程,以實現(xiàn)程序的各種結(jié)構(gòu)方式。一個應(yīng)用程序通常包含了復(fù)雜的邏輯,要實現(xiàn)這些邏輯,必須進行程序的流程控制。程序的結(jié)構(gòu)通常包含順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)三大基本結(jié)構(gòu)。順序結(jié)構(gòu)是程序設(shè)計中最簡單的結(jié)構(gòu),程序在這種結(jié)構(gòu)下由上到下依次執(zhí)行。分支結(jié)構(gòu)是指程序中出現(xiàn)多個不同的處理情況,需要根據(jù)不同條件采取不同的處理方式。循環(huán)結(jié)構(gòu)是指在程序設(shè)計過程中出現(xiàn)了需要按照某種規(guī)律反復(fù)執(zhí)行的邏輯。
它們由特定的語句定義符組成。C語言有9種控制語句。可分成以下3類。
(1)條件判斷語句:if語句、switch語句。
(2)循環(huán)執(zhí)行語句:dowhile語句、while語句、for語句。
(3)其他語句:break語句、goto語句(此語句盡量少用,因為它不利結(jié)構(gòu)化程序設(shè)計,濫用它會使程序流程無規(guī)律、可讀性差)、continue語句、return語句。
控制語句在程序設(shè)計中具有至關(guān)重要的作用,在代碼中它們的使用頻率也非常高,因此需要將這些語句練習(xí)得非常熟練。接下來將就這些語句進行詳細(xì)的介紹。
4.1 分支語句
順序結(jié)構(gòu)的程序雖然能解決計算、輸出等問題,但不能做判斷再選擇。對于要先做判斷再執(zhí)行的問題就要使用分支結(jié)構(gòu)。分支結(jié)構(gòu)主要用于實現(xiàn)流程的改變,根據(jù)判斷條件的真假來選擇執(zhí)行不同的分支。
分支結(jié)構(gòu)的執(zhí)行是依據(jù)一定的條件選擇執(zhí)行路徑,而不是嚴(yán)格按照語句出現(xiàn)的物理順序執(zhí)行的。分支結(jié)構(gòu)的程序設(shè)計方法的關(guān)鍵在于構(gòu)造合適的分支條件和分析程序流程,根據(jù)不同的程序流程選擇適當(dāng)?shù)姆种дZ句。
分支結(jié)構(gòu)適合于帶有邏輯或關(guān)系比較等條件判斷的計算。因此,當(dāng)程序中面對兩個或兩個以上的選擇時,可以利用分支語句根據(jù)條件判斷具體選擇將要執(zhí)行的一組語句。在C#語言中,if語句和switch語句都可以提供這樣的功能。
4.1.1 if…else…語句
if語句是最為常用的選擇語句,它根據(jù)布爾表達(dá)式的真假值來判斷是否執(zhí)行后面跟的嵌套語句。其形式為:
if(布爾表達(dá)式) 布爾表達(dá)式為真時執(zhí)行的語句序列
或
if(布爾表達(dá)式1) 布爾表達(dá)式1為真時執(zhí)行的語句序列 else 布爾表達(dá)式1為假時執(zhí)行的語句序列
當(dāng)布爾表達(dá)式值為真時,那么執(zhí)行if后面的內(nèi)嵌語句,為假則程序繼續(xù)往下執(zhí)行。如果有else語句,則執(zhí)行else后面的內(nèi)嵌語句,否則繼續(xù)執(zhí)行下一條語句。else分支與最近的if語句構(gòu)成一個if else對。if語句并不一定必須有else分支。其流程如圖4-1所示。

圖4-1 if else語句結(jié)構(gòu)
總的來說,if語句按照下面的方式來執(zhí)行。
(1)求布爾表達(dá)式的值。
(2)如果布爾表達(dá)式的值為真,程序?qū)⑻D(zhuǎn)到分語句的第一個嵌套語句執(zhí)行。當(dāng)程序執(zhí)行到此嵌套語句的結(jié)尾時,程序控制將轉(zhuǎn)移到if語句的結(jié)尾。
(3)如果布爾表達(dá)式的值為假,而且分語句中有else分支,則程序跳轉(zhuǎn)到分語句的第二個嵌套語句執(zhí)行。當(dāng)程序執(zhí)行到嵌套語句的結(jié)尾時,程序控制將轉(zhuǎn)移到if語句的結(jié)尾。
(4)如果布爾表達(dá)式的值為假,而且分語句中沒有else分支,則程序控制將轉(zhuǎn)移到if語句的結(jié)尾。
【例4-1】 判斷輸入的數(shù)是否大于3。
新建控制臺程序“ex_if”,輸入代碼如下:
static void Main(string[] args) {inta; a=Convert.ToInt32(Console.ReadLine()); if(a>3){ Console.WriteLine("您輸入的數(shù)大于或等于3.");} else{ Console.WriteLine("您輸入的數(shù)小于3.");} Console.ReadLine(); }
運行效果如圖4-2所示。

圖4-2 運行效果
還有一種if…else if語句,其形式為:
if( 布爾表達(dá)式1) { 布爾表達(dá)式1為真時執(zhí)行的語句序列 } else if( 布爾表達(dá)式2) { 布爾表達(dá)式2為真時執(zhí)行的語句序列 } else if( 布爾表達(dá)式3) { 布爾表達(dá)式3為真時執(zhí)行的語句序列 } …… else { 所有條件均為假時執(zhí)行的語句序列 }
下面給出if…else if語句的示例。
【例4-2】 判斷輸入數(shù)的性質(zhì)。
新建控制臺程序“ex_if_elseif”,輸入代碼如下:
static void Main(string[] args) { int a; a= Convert.ToInt32(Console.ReadLine()); if (a<0) { Console.WriteLine("您輸入的數(shù)是負(fù)數(shù)."); } else if(a==0) { Console.WriteLine("您輸入的數(shù)是0."); } else { Console.WriteLine("您輸入的數(shù)是正數(shù)."); } Console.ReadLine(); }
運行效果如圖4-3所示。

圖4-3 運行效果
4.1.2 switch語句
switch語句包括關(guān)鍵字switch和其后的括號表達(dá)式(我們稱之為switch控制表達(dá)式),以及switch塊組成。switch塊包括含零個或多個由括號包圍的switch分支。每個switch分支又由一個或多個switch標(biāo)號和跟在它們后面的語句列表組成。switch語句可根據(jù)一個控制表達(dá)式的值選擇相應(yīng)的內(nèi)嵌語句分支來執(zhí)行。具體定義方式如下。
switch語句常用形式為:
switch (表達(dá)式) { case常量表達(dá)式1: 語句序列1 case常量表達(dá)式2: 語句序列2 …… //每一個switch語句最多只能有一個default標(biāo)號分支 [default: 語句序列] }
具體來說,switch語句是按照如下方式執(zhí)行的。
(1)首先計算出switch表達(dá)式的值并轉(zhuǎn)換到控制類型。
(2)如果switch表達(dá)式的值等于某一個switch分支的常量表達(dá)式的值,那么程序控制跳轉(zhuǎn)到這個case標(biāo)號后的語句列表中。
(3)如果switch表達(dá)式的值無法與switch語句中任何一個case常量表達(dá)式的值匹配且switch語句中有default分支,則程序控制會跳轉(zhuǎn)到default標(biāo)號后的語句列表中。
(4)如果switch表達(dá)式的值無法與switch語句中任何一個case常量表達(dá)式的值匹配且switch語句中沒有default分支,則程序控制會跳轉(zhuǎn)到switch語句的結(jié)尾。
下面來看一個switch語句的實例。
【例4-3】 判斷成績的等級。
新建一個控制臺程序“ex_switch”,輸入以下代碼:
using System; namespace SwitchExample { public class Program { public static void Main() { Console.Write("請輸入成績:"); //從鍵盤接收一行字符 string str = Console.ReadLine(); //轉(zhuǎn)換為整型 int i = Int32.Parse(str.Trim()); if (i > 100 || i < 0) { Console.WriteLine("成績不在0-100范圍內(nèi)"); } else { switch (i / 10) { case 10: Console.Write("滿分,"); goto case 9; case 9: Console.WriteLine("優(yōu)秀"); break; case 8: case 7: Console.WriteLine("良好"); break; case 6: Console.WriteLine("及格"); break; default: Console.WriteLine("不及格"); break; } } Console.ReadLine(); } } }
運行效果如圖4-4所示。

圖4-4 運行效果
使用switch語句需要注意以下問題。
(1)switch語句的控制類型由switch表達(dá)式?jīng)Q定。如果switch表達(dá)式的類型是sbyte、byte、short、ushort、int、uint、long、ulong、char、string或枚舉型,那么這就是switch語句的控制類型。否則,必須有一個用戶自定義隱式轉(zhuǎn)換語句,把switch表達(dá)式的類型轉(zhuǎn)換為sbyte、byte、short、ushort、int、uint、long、ulong、char、string控制類型中的一種。如果沒有這樣的一條轉(zhuǎn)換語句或有多條這樣的轉(zhuǎn)換語句存在,將產(chǎn)生編譯錯誤。
(2)在C和C++語言中,允許switch語句中的case標(biāo)簽后不出現(xiàn)break語句,但C#不允許這樣,它要求每個標(biāo)簽項后必須使用break語句或者goto語句,它不允許從一個case中自動遍歷到其他case,否則編譯時會報錯。
(3)C#中的switch語句可以把字符串當(dāng)成常量表達(dá)式類使用,所以其switch語句的控制類型可以是string類型。
(4)對于switch語句中的字符串,它是區(qū)分大小寫的。只有switch表達(dá)式的值與case分支常數(shù)的值完全匹配,此case標(biāo)號后的語句才會被執(zhí)行。
- Mastering NetBeans
- Hands-On Data Structures and Algorithms with JavaScript
- 碼上行動:零基礎(chǔ)學(xué)會Python編程(ChatGPT版)
- 新手學(xué)Visual C# 2008程序設(shè)計
- Python 3網(wǎng)絡(luò)爬蟲實戰(zhàn)
- MATLAB定量決策五大類問題
- Amazon S3 Cookbook
- Web程序設(shè)計(第二版)
- PLC編程與調(diào)試技術(shù)(松下系列)
- Hands-On GUI Programming with C++ and Qt5
- SQL Server 2008 R2數(shù)據(jù)庫技術(shù)及應(yīng)用(第3版)
- Java高并發(fā)編程詳解:深入理解并發(fā)核心庫
- LabVIEW數(shù)據(jù)采集
- MongoDB Administrator’s Guide
- 城市信息模型平臺頂層設(shè)計與實踐