零基础C#学习笔记
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

4.4 while 和do…while 循环

学习和使用C# 的目的是使用它编写出能够解决现实生活问题的程序。生活中存在很多重复性的工作,有时甚至不知道这种工作需要重复的次数,那么如何用简单的C# 语句解决这种复杂的、带有重复性的问题呢? C# 提供了循环控制语句来解决这类问题。C# 中的循环控制语句主要有while、do…while 和for,本节将首先对while 和do…while 循环的使用进行讲解。

4.4.1 while 循环

img

while 循环用来实现 “当型” 循环结构,它的语法格式如下。

img

表达式一般是一个关系表达式或一个逻辑表达式,表达式的值应该是一个逻辑值真或假(true 和false)。当表达式的值为真时,开始循环执行语句;而当表达式的值为假时,退出循环,执行循环外的下一条语句。循环每次都是执行完语句后回到表达式处重新开始判断,重新计算表达式的值。

while 循环流程图如图4.20 所示。

img

图4.20 while 循环流程图

示例6.数学家高斯的故事

许多年前,在德国的一所乡村小学里,有一个很懒的老师,他总是要求学生们不停地做整数加法计算,因为在学生们将一长串整数求和的过程中,他可以在旁边名正言顺地偷懒。有一天,他又用同样的方法布置了一道从1 加到100 的求和题目。正当他打算偷懒时,有一个学生说自己算出了答案。老师自然是不信的,不看答案就让学生再去算,可是学生还是站在老师面前不动。老师被激怒了,认为这个学生是在挑衅自己的威严,他不相信一个小学生能在几秒钟内就将从1 加到100 的求和题目计算出结果。于是抢过学生的答案,正打算教训学生时,突然发现学生写的答案是5050。老师愣住了,原来这个学生不是用一个数一个数地加起来的方式计算的,而是将100 个数分成1+100=101、2+99=101(一直到50+51=101)等50 对,然后使用101×50=5050 计算得出的。这个聪明的学生就是德国著名的数学家高斯。本示例将使用while 循环编写程序,通过程序实现从1 到100 的累加,代码如下。

img

学习笔记

题目要求计算1 到100 之间数字的累加结果,那么需要先定义一个变量iNum 作为循环条件的判定,iNum 的初始值是1,循环条件是iNum 必须小于或等于100。也就是只有在iNum 小于或等于100 时才进行累加操作,若iNum 大于100,则循环终止。

每次循环只能计算其中一次相加的结果,想要计算100 个数字的累加值,需要定义一个变量iSum 来暂存每次累加的结果,并作为下一次累加操作的基数。

iNum的初始值是1,要计算1到100之间数字的累加结果,需要iNum每次进入循环,进行累加后,iNum 的值增加1,为下一次进入循环进行累加做准备,也同时作为循环结束的判断条件。

当iNum 大于100 时,循环结束,执行后面的输出语句。

上面代码的运行结果如下。

img

学习笔记

如果将示例6 代码中while 语句后面的大括号去掉,即将代码修改如下:

img
img

那么重新编译并运行代码不会出现任何结果。分析造成这种情况的原因是:当while 语句循环体中的语句大于一条时,需要把循环体放在大括号中,如果while 语句后面没有大括号,则while 循环只会循环while 语句后的第一条语句。对于上面的代码,则没有对循环变量iNum 增加的过程,于是每次进入循环时,iNum 的值都是1,形成死循环,永远不会执行后面的其他语句。

学习笔记

● 循环体如果是多条语句,则需要用大括号括起来,如果不用大括号,则循环体只包含while 语句后的第一条语句。

● 循环体内或表达式中必须有使循环结束的条件。例如,上述程序中的循环条件是iNum <= 100,iNum 的初始值为1,循环体中就用iNum++ 来使得iNum 趋向于100,以使循环结束。

4.4.2 do…while 循环

img

在有些情况下无论循环条件是否成立,循环体的内容都要被执行一次,这时可以使用do…while 循环。do…while 循环的特点是先执行循环体,再判断循环条件,其语法格式如下。

img

do 为关键字,必须与while 配对使用。do 与while 之间的语句称为循环体,该语句是用大括号括起来的复合语句。do…while 语句中的表达式与while 语句中的相同,也为关系表达式或逻辑表达式,但特别值得注意的是,do…while 语句后一定要有分号 “;”。do…while 循环流程图如图4.21 所示。

img

图4.21 do…while 循环流程图

从图4.21 中可以看出,当程序运行到do…while 时,先执行一次循环体的内容,然后判断循环条件。当循环条件为真时,重新返回执行循环体的内容,如此反复,直到循环条件为假,循环结束,程序执行do…while 循环后面的语句。

示例7.使用do…while 循环挑战数学家高斯

使用do…while 循环编写程序,实现从1 到100 的累加,代码如下。

img

学习笔记

在上面代码中将判断条件iNum <= 100 放到了循环体后面,这样,无论iNum 是否满足条件,都将至少执行一次循环体。

学习笔记

本示例代码的运行结果与示例6 代码的运行结果一样。

4.4.3 while 语句和do…while 语句的区别

img

while 语句和do…while 语句都用来控制代码的循环,但while 语句适用于先进行条件判断,再执行循环结构的场合;而do…while 语句则适用于先执行循环结构,再进行条件判断的场合。具体来说,在使用while 语句时,如果条件不成立,则循环结构一次都不会执行;而在使用do…while 语句时,即使条件不成立,程序也至少会执行一次循环结构。