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

2.1.2 循環語句

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

2.1.2.1 while語句

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

它的執行順序是:

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

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

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

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

程序清單 2-3:

while語句中允許使用break語句結束循環,執行后續語句;也可以用continue語句來停止內嵌語句的執行,繼續進行while循環。

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

2.1.2.2 do-while語句

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

它按如下順序執行:

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

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

我們看一下如何使用do-while循環來實現求整數的階乘:

2.1.2.3 for語句

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

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

for語句執行順序如下:

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

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

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

4)若條件不滿足則for循環終止。

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

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

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

程序清單 2-4:

運行程序的結果為

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

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

2.1.2.4 foreach語句

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

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

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

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

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

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

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

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

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

程序清單 2-5:

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

主站蜘蛛池模板: 湘潭县| 仲巴县| 巨野县| 郧西县| 南川市| 阿拉善左旗| 大足县| 义乌市| 怀仁县| 黄浦区| 堆龙德庆县| 随州市| 巫山县| 基隆市| 青浦区| 南漳县| 佛冈县| 新巴尔虎右旗| 习水县| 枣庄市| 南汇区| 虞城县| 温州市| 定襄县| 禄劝| 庆阳市| 潮安县| 绵竹市| 浦江县| 克东县| 高雄市| 神木县| 芦山县| 永和县| 肇源县| 交口县| 定西市| 新乐市| 扎赉特旗| 安塞县| 布拖县|