- C#從入門到精通(微視頻精編版)
- 明日科技
- 3974字
- 2020-03-06 11:53:27
第6章 循環控制語句
(
視頻講解:57分鐘)
當程序要反復執行某一操作時,就必須使用循環結構,比如遍歷二叉樹、輸出數組元素等。本章將對程序設計的另外一種結構—循環結構進行詳細講解。
通過學習本章,讀者主要掌握以下內容:
while語句的使用
do…while語句的使用
while語句與do…while語句的區別
for語句的使用
循環語句的嵌套使用
跳轉語句的使用
6.1 while和do…while循環

視頻講解
學習和使用C#語言的目的是使用它編寫出能夠解決現實生活中問題的程序。生活中存在著很多重復性的工作,有時甚至不知道這種工作需要重復的次數,那么如何用簡單的C#語句解決這種復雜的、帶有重復性的問題呢?C#中提供了循環控制語句來解決這類問題。C#中的循環語句主要有while,do…while和for,本節將首先對while和do…while循環的使用進行講解。
6.1.1 while循環
while語句用來實現“當型”循環結構,它的語法格式如下:


圖6.1 while循環流程圖
表達式一般是一個關系表達式或一個邏輯表達式,其表達式的值應該是一個邏輯值真或假(true和false),當表達式的值為真時,開始循環執行語句;而當表達式的值為假時,退出循環,執行循環外的下一條語句。循環每次都是執行完語句后回到表達式處重新開始判斷,重新計算表達式的值。
while循環的流程圖如圖6.1所示。
【例6.01】200多年以前,在德國的一所鄉村小學里,有一個很懶的老師,他總是要求學生們不停地做整數加法計算,在學生們將一長串整數求和的過程中,他就可以在旁邊名正言順地偷懶了。有一天,他又用同樣的方法布置了一道從1加到100的求和問題。正當他打算偷懶時,就有一個學生說自己算出了答案。老師自然是不信的,不看答案就讓學生再去算,可是學生還是站在老師面前不動。老師被激怒了,認為這個學生是在挑釁自己的威嚴,他是不會相信一個小學生能在幾秒鐘內就將從1到100這100個數的求和問題計算出結果。于是搶過學生的答案,正打算教訓學生時,突然發現學生寫的答案是5050。老師愣住了,原來這個學生不是一個數一個數的加起來的,而是將100個數分成1+100=101、2+99=101一直到50+51=101等50對,然后使用101*50=5050計算得出的,這個聰明的學生就是德國著名的數學家高斯。本實例將使用while循環挑戰高斯,通過程序實現1到100的累加,代碼如下:(實例位置:資源包\源碼\06\6.01)

程序運行結果如下:

注意
(1)循環體如果是多條語句,需要用大括號括起來,如果不用大括號,則循環體只包含while語句后的第一條語句。
(2)循環體內或表達式中必須有使循環結束的條件,例如,例6.01中的循環條件是iNum <=100,iNum的初始值為1,循環體中就用iNum++來使得iNum趨向于100,使循環結束。
6.1.2 do…while循環
有些情況下無論循環條件是否成立,循環體的內容都要被執行一次,這時可以使用do…while循環。do…while循環的特點是先執行循環體,再判斷循環條件,其語法格式如下:


圖6.2 do…while循環流程圖
do為關鍵字,必須與while配對使用。do與while之間的語句稱為循環體,該語句是用大括號{}括起來的復合語句。循環語句中的表達式與while語句中的相同,也為關系表達式或邏輯表達式,但特別值得注意的是:do…while語句后一定要有分號“;”。do…while循環的流程圖如圖6.2所示。
從圖6.2中可以看出,當程序運行到do…while時,先執行一次循環體的內容,然后判斷循環條件,當循環條件為“真”的時候,重新返回執行循環體的內容,如此反復,直到循環條件為“假”,循環結束,程序執行do…while循環后面的語句。
【例6.02】使用do…while循環編寫程序實現1到100的累加,代碼如下:(實例位置:資源包\源碼\06\6.02)

說明
程序運行結果與例6.01的運行結果一樣。
6.1.3 while和do…while語句的區別
while語句和do…while語句都用來控制代碼的循環,但while語句適用于先條件判斷,再執行循環結構的場合;而do…while語句則適合于先執行循環結構,再進行條件判斷的場合。具體來說,使用while語句時,如果條件不成立,則循環結構一次都不會執行,而如果使用do…while語句時,即使條件不成立,程序也至少會執行一次循環結構。
練一練
請分析下邊兩段代碼分別執行幾次循環?

6.2 for循環

視頻講解
for循環是C#中最常用、最靈活的一種循環結構,for循環既能夠用于循環次數已知的情況,又能夠用于循環次數未知的情況,本節將對for循環的使用進行詳細講解。
6.2.1 for循環的一般形式
for循環的常用語法格式如下:

for循環的執行過程如下:
(1)求解表達式1;
(2)求解表達式2,若表達式2的值為“真”,則執行循環體內的語句組,然后執行下面第(3)步,若值為“假”,轉到下面第(5)步;
(3)求解表達式3;
(4)轉回到第(2)步執行;
(5)循環結束,執行for循環接下來的語句。
for循環的流程圖如圖6.3所示。
for循環最常用的格式如下:

圖6.3 for循環流程圖

【例6.03】使用for循環編寫程序實現1到100的累加,代碼如下:(實例位置:資源包\源碼\06\6.03)

說明
程序運行結果與例6.01的運行結果一樣。
多學兩招
可以把for循環改成while循環,代碼如下:

6.2.2 for循環的變體
for循環在具體使用時,有很多種變體形式,比如,可以省略“表達式1”、省略“表達式2”、省略“表達式3”或者3個表達式都省略,下面分別對for的常用變體形式進行講解。
1. 省略“表達式1”的情況
for循環語句的一般格式中的“表達式1”可以省略,在for循環中“表達式1”一般是用于為循環變量賦初值,若省略了“表達式1”,則需要在for循環的前面為循環條件賦初值,例如:

此時,需要在for循環之前,為iNum這個循環變量賦初值。程序執行時,跳過“表達式1”這一步,其他過程不變。
常見錯誤
把上面for循環語句改成for(iNum <= 100; iNum ++),進行編譯,會出現如圖6.4所示的錯誤提示。

圖6.4 使用for循環語句中缺少分號錯誤
出錯是因為省略“表達式1”,但是其后面的分號不能省略。
2. 省略“表達式2”的情況
使用for循環時,“表達式2”也可以省略,如果省略了“表達式2”,則循環沒有終止條件,會無限地循環下去,針對這種使用方法,一般會配合后面將會學到的break語句等來結束循環。
省略“表達式2”情況的舉例:

這種情況的for循環相當于以下while語句:

3. 省略“表達式3”的情況
使用for循環時,“表達式3”也可以省略,但此時程序設計者應另外設法保證循環變量的改變。例如,下面的代碼在循環體中對循環變量的值進行了改變:

此時,在for循環的循環體內,對iNum這個循環變量的值進行了改變,這樣才能使程序隨著循環的進行逐漸趨近并滿足程序終止條件。程序執行時,跳過“表達式3”這一步,其他過程不變。
4. 3個表達式都省略的情況
for循環語句中的3個表達式都可以省略,這種情況既沒有對循環變量賦初值的操作,又沒有循環條件,也沒有改變循環變量的操作,這種情況下,同省略“表達式2”的情況類似,都需要配合使用break語句來結束循環,否則,會造成死循環。
例如,下面的代碼就將會成為死循環,因為沒有能夠跳出循環的條件判斷語句:

6.2.3 for循環中逗號的應用
在for循環語句中,“表達式1”和“表達式3”處都可以使用逗號表達式,即包含一個以上的表達式,中間用逗號間隔。例如,在“表達式1”處為變量iNum和iSum同時賦初值:

6.3 循環的嵌套

視頻講解
在一個循環里可以又包含另一個循環,組成循環的嵌套,而里層循環還可以繼續進行循環嵌套,構成多層循環結構。
3種循環(while循環、do…while循環和for循環)之間都可以相互嵌套。例如,下面的6種嵌套都是合法的嵌套形式:
while循環中嵌套while循環

do…while循環中嵌套do…while循環

for循環中嵌套for循環

while循環中嵌套do…while循環

while循環中嵌套for循環

for循環中嵌套while循環

【例6.04】使用嵌套的for循環打印九九乘法表,代碼如下:(實例位置:資源包\源碼\06\6.04)

說明
本實例的代碼使用了雙層for循環,第一個循環可以看成是對乘法表的行數的控制,同時也是每一個乘法公式的第二個因子;因為輸出的九九乘法表是等腰直角三角形排列的,第二個循環控制乘法表的列數,列數的最大值應該等于行數,因此第二個循環的條件應該是在第一個循環的基礎上建立的。
程序運行效果如圖6.5所示。

圖6.5 使用循環嵌套打印九九乘法表
6.4 跳轉語句

視頻講解
C#語言中的跳轉語句主要包括break語句和continue語句,跳轉語句可以用于提前結束循環,本節將分別對它們進行詳細講解。
6.4.1 break語句
第5章中已經介紹過使用break語句可以使流程跳出switch多分支結構,實際上,break語句還可以用來跳出循環體,執行循環體之外的語句。break語句通常應用在switch,while,do…while或for語句中,當多個switch,while,do…while或for語句互相嵌套時,break語句只應用于最里層的語句。break語句的語法格式如下:

說明
break一般會結合if語句進行搭配使用,表示在某種條件下,循環結束。
【例6.05】修改例6.01,在iNum的值為50時,退出循環,代碼如下:(實例位置:資源包\源碼\06\6.05)

程序運行結果如下:

6.4.2 continue語句
continue語句的作用是結束本次循環,它通常應用于while,do…while或for語句中,用來忽略循環語句內位于它后面的代碼而直接開始一次的循環。當多個while,do…while或for語句互相嵌套時,continue語句只能使直接包含它的循環開始一次新的循環。continue的語法格式如下:

說明
continue一般會結合if語句進行搭配使用,表示在某種條件下不執行后面的語句,直接開始下一次的循環。
【例6.06】通過在for循環中使用continue語句實現1到100之間的偶數的和,代碼如下:(實例位置:資源包\源碼\06\6.06)

程序運行結果如下:

6.5 小結
本章對流程控制語句中的循環結構控制語句進行了詳細講解,學習本章時,讀者應該重點掌握while語句、do…while語句和for語句,同時應該對循環結構中常用的跳轉語句有所了解。通過對本章的學習,讀者應該能夠熟練掌握循環結構控制語句的使用方法,并能在實際應用中使用。
6.6 實戰
6.6.1 實戰一:猜數字游戲
使用C#開發一個猜數字的小游戲,隨機生成一個1~200的數字作為基準數,玩家每次通過鍵盤輸入一個數字,如果輸入的數字和基準數相同,則成功過關,否則重新輸入。如果玩家輸入–1,表示退出游戲,運行結果如圖6.6所示。(實例位置:資源包\源碼\06\實戰\01)

圖6.6 猜數字游戲
6.6.2 實戰二:輸出金字塔形狀
使用循環嵌套輸出金字塔形狀,具體實現時,需要考慮的問題有3點:首先要控制三角形輸出的行數,其次控制三角形的空白位置,最后將三角形進行顯示,運行效果如圖6.7所示。(實例位置:資源包\源碼\06\實戰\02)

圖6.7 使用循環嵌套輸出金字塔形狀
- 少兒人工智能趣味入門:Scratch 3.0動畫與游戲編程
- Learning Python Web Penetration Testing
- Java性能權威指南(第2版)
- Mastering RStudio:Develop,Communicate,and Collaborate with R
- MongoDB權威指南(第3版)
- 精通MATLAB(第3版)
- 全棧自動化測試實戰:基于TestNG、HttpClient、Selenium和Appium
- Learning Laravel's Eloquent
- Microsoft Azure Storage Essentials
- Web前端應用開發技術
- Raspberry Pi Robotic Projects(Third Edition)
- 創意UI Photoshop玩轉移動UI設計
- 零基礎看圖學ScratchJr:少兒趣味編程(全彩大字版)
- Android移動應用項目化教程
- Offer來了:Java面試核心知識點精講(框架篇)