购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.2 循环语句

当程序要反复执行某一操作时,就必须使用循环结构,比如遍历二叉树、输出数组元素等。C#中的循环语句主要包括while语句、do…while语句、for语句和foreach语句,本节将对这几种循环语句分别进行介绍。

4.2.1 使用while语句循环执行语句

while语句用于根据它的条件值执行零次或多次while语句块,当每次while语句块中的代码执行完毕时,将重新查看是否符合条件值,若符合则再次执行相同的程序代码,否则跳出while语句,执行其他程序代码。while语句的基本格式如下:

while语句的执行顺序如下:

(1)计算布尔表达式的值。

(2)如果布尔表达式的值为true,程序执行语句块,执行完毕重新计算布尔表达式的值是否为true。

(3)如果布尔表达式的值为false,则控制将转移到while语句的结尾。

学习手册 注意

while语句在一开始就判断布尔表达式是否为true,只有为true才能执行循环体。

while语句的执行流程如图4.11所示。

图4.11 while语句执行流程

while语句在现实生活中就相当于公园中的木马,当按下“启动”按钮时(也就是布尔表达式设置为true),木马将不停地转动,如果按下“停止”按钮(也就是布尔表达式设置为false),木马将停止转动。

【例4.8】 创建一一个控制台应用程序,使用while语句实现一一个简单的人机交互功能,运行程序,当按照提示随意输入一一个姓名时,系统将输出欢迎信息。当在程序提示输入姓名时,输入空格按回车键,系统将提示退出信息。代码如下:

程序运行结果如图4.12所示。

图4.12 使用while语句实现人机交互

另外在while语句的嵌入语句块中,break语句可用于将控制转到while语句的结束点,而continue语句可用于将控制直接转到下一次循环。

【例4.9】 创建一一个控制台应用程序,声明两个int类型的变量s和num,分别初始化为0和80。然后通过while语句循环输出,当s大于40时,使用break语句终止循环。当s是偶数时,使用continue语句将程序转到下一一次循环。从而实现了输出40以内的所有奇数,代码如下:

程序的运行结果为“1~39的所有奇数”。

4.2.2 使用do…while语句至少执行一次循环

do…while语句与while语句相似,但它的判断条件在循环后。do…while语句会先执行一次循环体,它的语法格式如下:

学习手册 注意

while( 布尔表达式)之后必须加分号(;)。

do…while语句的执行顺序如下:

(1)程序首先执行语句块。

(2)当程序到达语句块的结束点时,计算布尔表达式的值,如果布尔表达式的值是true,程序转到do…while语句的开头;否则,结束循环。

图4.13 do…while语句执行流程

do…while语句的执行流程如图4.13所示。

【例4.10】 创建一一个控制台应用程序,声明一一个bool类型的变量term,并初始化为false。再声明一一个int类型的数组,并初始化数组。然后调用do…while语句,通过for语句循环输出数组中的值,for语句会在4.2.3节中讲解。代码如下:

程序运行结果如图4.14所示。

图4.14 使用do…while语句

从代码中不难看出,bool类型变量term被初始化为false。但是do…while语句依然执行了一次for循环,将数组中的值输出。由此可以说明,do…while语句至少要执行代码一次,无论最后的条件是true还是false。

4.2.3 使用for语句实现代码循环

for语句用于计算一个初始化序列,然后当某个条件为真时,重复执行嵌套语句并计算一个迭代表达式序列。如果为假,则终止循环,退出for循环。for语句的基本形式如下:

for(【初始化表达式】;【条件表达式】;【迭代表达式】)

{

【语句块】

}

初始化表达式由一个局部变量声明或者由一个逗号分隔的表达式列表组成。用初始化表达式声明的局部变量的作用域从变量的声明开始,一直到嵌入语句的结尾。条件表达式必须是一个布尔表达式。迭代表达式必须包含一个用逗号分隔的表达式列表。

for语句的执行原理就好像是复印机复印纸张一样,可以在复印机上设置要复印的张数,也就是设置循环条件,然后开始复印,当复印的张数等于设置的张数时,也就是循环条件为假时,将停止复印。

for语句执行的顺序如下:

(1)如果有初始化表达式,则按变量初始值设定项或语句表达式的书写顺序指定它们,此步骤只执行一次。

(2)如果存在条件表达式,则计算它。

(3)如果不存在条件表达式,则程序将转移到嵌入语句。如果程序到达了嵌入语句的结束点,按顺序计算for迭代表达式,然后从上一个步骤中for条件的计算开始,执行另一次迭代。

for循环是循环语句中最常用的一种,for循环体现了一种规定次数、逐次反复的功能,但是由于代码编写方式不同,也可以实现其他循环的功能。

学习手册 注意

for语句的3个参数都是可选的,理论上并不一定完全具备。但是如果不设置循环条件,程序就会产生死循环,此时需要通过跳转语句才能退出。

for语句的执行流程如图4.15所示。

图4.15 for语句执行流程

【例4.11】 创建一一个控制台应用程序,使用for语句遍历字符串数组,并将数组中的每一一项进行输出,代码如下:

程序运行结果如图4.16所示。

图4.16 使用for语句

除了上面所述的使用方法外,for语句可以进行嵌套,也就是在一个for循环体中包含另一个for循环,这样可以帮助程序员完成大量重复性、规律性的工作。

【例4.12】 创建一一个控制台应用程序,使用嵌套for语句实现1!+2!+…+10!的和,代码如下:

程序运行结果如图4.17所示。

图4.17 使用嵌套for语句实现阶乘算法

编程信条:程序中尽量不要使用太多嵌套for语句

由于嵌套for语句将消耗很大的资源,所以在实际开发项目时,能不使用嵌套for语句尽量不要使用。

4.2.4 使用foreach语句遍历集合

foreach语句用于枚举一个集合的元素,并对该集合中的每个元素执行一次嵌入语句。但是,foreach语句不应用于更改集合内容,以避免产生不可预知的错误。其基本格式如下:

学习手册 说明

迭代变量名也称做循环变量名,用来表示集合中本次循环的那个元素。

其中,类型和迭代变量名用于声明迭代变量,迭代变量相当于一个范围覆盖整个语句块的局部变量。在foreach语句执行期间,迭代变量表示当前正在为其执行迭代的集合元素。

集合类型表达式必须有一个从该集合的元素类型到迭代变量类型的显示转换,如果集合类型表达式的值为null,则会出现异常。

学习手册 注意

变量的类型一定要与集合类型相同,例如,如果想遍历一个字符串数组中的每一项,那么此处变量的类型就应该是string类型,以此类推。

【例4.13】 在例4.12中使用for语句循环字符串数组,也可以使用foreach语句来遍历字符串数组中的每个元素,并进行输出,代码如下:

程序运行结果见图4.16。 qtIiXzRtF6uec1UTVch5HdxWtLr6/4dF8/0soZCzIwfRROVWuE1igT1nS+Pxt6k3

点击中间区域
呼出菜单
上一章
目录
下一章
×