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

2.1.2 循環(huán)語句

循環(huán)語句可以實現(xiàn)一個程序模塊的重復執(zhí)行,它對于簡化程序、更好地組織算法有著重要的意義。C#提供了四種循環(huán)語句,分別適用于不同的情形:while語句、do-while語句、for語句、foreach語句。

2.1.2.1 while語句

while語句有條件地將內嵌語句執(zhí)行0遍或若干遍,語句的格式為

它的執(zhí)行順序是:

1)計算布爾表達式boolean-expression的值。

2)當布爾表達式的值為真時,執(zhí)行內嵌語句embedded-statement一遍,程序轉至第1)步。

3)當布爾表達式的值為假時,while循環(huán)結束。

下面來看一個簡單的例子,該例在數(shù)組中查找一個指定的值,如找到就返回數(shù)組下標,否則返回并報告。

程序清單 2-3:

while語句中允許使用break語句結束循環(huán),執(zhí)行后續(xù)語句;也可以用continue語句來停止內嵌語句的執(zhí)行,繼續(xù)進行while循環(huán)。

我們使用下面的程序片段來計算一個整數(shù)x的階乘值:

2.1.2.2 do-while語句

do-while語句與while語句不同的是:它將內嵌語句執(zhí)行至少一遍。語句的格式為

它按如下順序執(zhí)行:

1)執(zhí)行內嵌語句embedded-statement一遍。

2)計算布爾表達式boolean-expression的值,為true則回到第1)步,為false則終止do循環(huán)。在do-while循環(huán)語句同樣允許用break語句和continue語句實現(xiàn)與while語句中相同的功能。

我們看一下如何使用do-while循環(huán)來實現(xiàn)求整數(shù)的階乘:

2.1.2.3 for語句

for語句是C#中使用頻率最高的循環(huán)語句,在事先知道循環(huán)次數(shù)的情況下使用for語句是比較方便的。for語句的格式為

其中,initializer、condition、iterator這三項都是可選項:initializer為循環(huán)控制變量做初始化,循環(huán)控制變量可以有一個或多個(用逗號隔開);condition為循環(huán)控制條件,也可以有一個或多個語句;iterator按規(guī)律改變循環(huán)控制變量的值。應注意初始化循環(huán)控制條件和循環(huán)控制都是可選的。如果忽略了條件,就會產(chǎn)生死循環(huán),要用跳轉語句break或goto才能退出。

for語句執(zhí)行順序如下:

1)按書寫順序將initializer部分(如果有的話)執(zhí)行一遍,為循環(huán)控制變量賦初值。

2)測試condition(如果有的話)中的條件是否滿足。

3)若沒有condition項或條件滿足,則執(zhí)行內嵌語句一遍,按iterator改變循環(huán)控制變量的值回到第2)步執(zhí)行。

4)若條件不滿足則for循環(huán)終止。

下面的例子非常簡單,打印數(shù)字1到9,但它卻清楚地顯示出了for語句是怎樣工作的:

for語句可以嵌套使用,幫助我們完成大量重復性、規(guī)律性的工作。

下面的例子用于打印楊輝三角形:

程序清單 2-4:

運行程序的結果為

還以求整數(shù)的階乘為例,代碼可以這樣寫:

同樣可以用break和continue語句來和循環(huán)判斷符合語句中的邏輯表達式配合使用達到控制循環(huán)的目的。仍然以打印數(shù)字為例,如果要求打印除7以外的0到9之間的數(shù)字,只要在for循環(huán)執(zhí)行到7時,跳過打印語句就可以了。

2.1.2.4 foreach語句

foreach語句是在C#中新引入的,C和C++中沒有這個語句,而Visual Basic的程序員應該對它不會陌生,它表示收集一個集合中的各元素,并針對各個元素執(zhí)行內嵌語句。語句的格式為

其中,類型(type)和標識符(identifier)用來聲明循環(huán)變量表達式(expression)對應集合,每執(zhí)行一次內嵌語句,循環(huán)變量就依次取集合中的一個元素,代入其中。在這里,循環(huán)變量是一個只讀型局部變量,如果試圖改變它的值或將它作為一個ref或out類型的參數(shù)傳遞,都將引發(fā)編譯時錯誤。

foreach語句中的expression必須是集合類型,如果該集合的元素類型與循環(huán)變量類型不一致,則必須將集合中的元素類型顯式轉換為循環(huán)變量元素類型。

集合表示一組相同或相似的數(shù)據(jù)項總的描述。那么在C#中究竟什么樣的類型算是集合類型呢?我們從語法上給出集合類型的定義:

1)該類型必須支持一個形為GetEnumerator的公有的非靜態(tài)方法,該方法的返回類型為結構類或接口。

2)形為GetEnumerator的方法,返回的結構類或接口應當包含一個公有的非靜態(tài)的方法MoveNext,該方法的返回類型為布爾型。

3)形為GetEnumerator的方法,返回的結構類或接口應當包含一個公有的非靜態(tài)的屬性Current,該屬性可以讀出。

如果一個類型同時滿足以上三個條件,該類型稱為集合類型,Current屬性的類型叫作該集合類型的元素類型。

我們姑且不論集合類型的具體形式,只從foreach語句的使用角度舉一個例子。假設Prime是一個滿足條件的集合類型,它的元素類型為1000以內的質數(shù),MyInt是我們自定義的一個類型,其范圍為200到300之間的整數(shù)。下面這段程序用于在屏幕上顯示出從200到300之間的所有質數(shù):

程序清單 2-5:

順便說一句,數(shù)組類型是支持foreach語句的。對于一維數(shù)組執(zhí)行順序是從下標為0的元素開始,一直到數(shù)組的最后一個元素。對于多維數(shù)組元素,下標的遞增是從最右邊那一維開始的,依此類推。同樣break和continue可以出現(xiàn)在foreach語句中,功能不變。

主站蜘蛛池模板: 香格里拉县| 英超| 万安县| 棋牌| 溧水县| 徐汇区| 新兴县| 交城县| 岢岚县| 长顺县| 且末县| 洛隆县| 富锦市| 光山县| 抚松县| 隆化县| 蒙自县| 新郑市| 沽源县| 永兴县| 呼玛县| 麟游县| 濮阳市| 忻城县| 喀喇| 柳江县| 图片| 彰武县| 锡林浩特市| 高陵县| 抚州市| 特克斯县| 大兴区| 二手房| 新密市| 大同市| 陆丰市| 高淳县| 武隆县| 正阳县| 三门峡市|