![C# 从入门到项目实践(超值版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/707/27111707/b_27111707.jpg)
5.3 循环语句
一般情况下,语句是顺序执行的,函数中的第一条语句先执行,接着是第二条语句,以此类推。在C#中提供了允许重复执行同一代码块的循环语句,有while语句、do…while语句、for语句和foreach语句。
5.3.1 while循环语句
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P105_15477.jpg?sign=1738807602-QmeAYCYSm48hujLwsVDFX4NUMM7pGD0S-0-1543284cc531634c944b7fb59ec6dbf0)
只要给定的条件为真,C#中的while循环语句会重复执行一条目标语句。
while循环语句的语法格式如下:
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T105_66827.jpg?sign=1738807602-pdr5nknSKlBCQv8CZbQR1OyFMLH6iVwx-0-97257c0b1e7b7b296d0e5e01ddcdc827)
while循环是先判断表达式的值,然后再执行语句或语句块,直到表达式的值为false。如果循环刚开始表达式的值就为false,那么语句或语句块就不会被执行。
【例5-8】编写程序,使用while语句,循环输出一组数据。
(1)在Visual Studio 2017中,新建名称为“Project8”的文件。
(2)在代码编辑区域输入以下代码。
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T105_66828.jpg?sign=1738807602-O0utOfIv2G1w2MbM22ZePXjK3ugNxqRD-0-2a0f6ef01d2f78c87be8c8be8bf83135)
【程序分析】本例演示了while语句的使用。在代码中,首先定义一个int类型的变量x,并赋值为3;然后通过while语句进行判断,如果变量x小于13,则依次循环输出x的值。当条件被测试且结果为false时,就会跳过循环主体,直接执行紧接着while循环的下一条语句。本例的流程如图5-13所示。
在Visual Studio 2017中的运行结果如图5-14所示。
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P106_15482.jpg?sign=1738807602-JQ1fNIarctTP77hvpfdLBP3MDbWgTynk-0-8bb68729a28a69a35340ae88fb0476b4)
图5-13 while语句的流程图
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P106_15485.jpg?sign=1738807602-2brPaR63BzK8rF3TSlxkcIVxRWjoKJoC-0-706b2988e9324bb89c55d234c2dcd645)
图5-14 while语句
使用while语句时要注意以下几点。
(1)while语句中的表达式一般是关系表达式或逻辑表达式,只要表达式的值为真(非0)即可继续循环。
(2)循环体包含一条以上语句时,应用“{}”括起来,以复合语句的形式出现;否则,它只认为while后面的第1条语句是循环体。
(3)循环前,必须给循环控制变量赋初值,如上例中的(int x=3;)。
(4)循环体中,必须有改变循环控制变量值的语句,如上例中的(x++;),否则循环永远不结束,形成所谓的死循环。
5.3.2 do…while循环语句
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P106_15578.jpg?sign=1738807602-17B9lygNmaNrljTmFxDBmvcbErkunNaO-0-d7916b59040f7678cb1deb8f38ecff7d)
do…while循环与while循环类似,但是do…while循环会确保至少执行一次循环。其语法格式如下:
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T106_66830.jpg?sign=1738807602-IEAnasBtI0YCxC08ScDJmEn26YFgHuPR-0-794ee3f8d5c44e46db11e12463c60c1d)
do…while循环是先执行语句或语句块,然后再判断表达式的值,如果表达式的值为true,则继续执行循环,直到表达式的值为false。
注意:do…while循环刚执行的时候不管表达式的值为true或者是false它都要先执行一次语句或语句块,然后再来判断表达式的值。也就是说,如果一开始表达式的值为false,它也会执行一次循环。另外,while语句后面必须使用分号(;)。
【例5-9】编写程序,使用do…while语句,循环输出一组数据。
(1)在Visual Studio 2017中,新建名称为“Project9”的文件。
(2)在代码编辑区域输入以下代码。
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T106_66831.jpg?sign=1738807602-cVDcdeKD2HIt3MHYLk0Qcp6F9vEkV3A5-0-cc4d085a884325c4f1db633f5c00b2cd)
【程序分析】本例演示了do…while语句的使用。在代码中,首先定义一个整型变量x,并赋值为6;然后执行循环体,并对变量x进行判断,查看是否小于16。如果条件为真,控制流会跳转回上面的do,然后重新执行循环体。这个过程会不断重复,直到给定条件变为假为止。本例的流程如图5-15所示。
在Visual Studio 2017中的运行结果如图5-16所示。
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P107_15630.jpg?sign=1738807602-fSsTyyvGFS1QLgLLOCZ9gnjyBKaudxNy-0-f6fd203167d4f1b4328f77b570a99c12)
图5-15 do…while流程图
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P107_15633.jpg?sign=1738807602-vKXgbk4pFi63LLxah2TYoQhB0E7PGOv1-0-3ce260b888f1b5bd4d2ec6c2559c5d49)
图5-16 do…while语句
使用do…while语句应注意以下几点。
(1)do…while语句是先执行“循环体语句”,后判断循环终止条件,与while语句不同。二者的区别在于:当while后面的表达式开始的值为0(假)时,while语句的循环体一次也不执行,而do…while语句的循环体至少要执行一次。
(2)在书写格式上,循环体部分要用“{}”括起来,即使只有一条语句也如此;do…while语句最后以分号结束。
(3)通常情况下,do…while语句是从后面控制表达式退出循环。但它也可以构成无限循环,此时要利用break语句或return语句直接从循环体内跳出循环。
5.3.3 for循环语句
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P107_15664.jpg?sign=1738807602-uIcuP0fGkeAjQeHiMbMOKbI3j4UDcqT1-0-72c6499834e416cbf52b06ed6d8efaed)
一个for循环是一个允许用户编写执行特定次数的循环控制结构。在C#中,for循环的语法如下:
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T107_66834.jpg?sign=1738807602-aqA7pQvFpbQSIKMmg1VYu2G9hLA7suRz-0-354eb532edd1adcc8512651656f0fbfa)
初始化表达式:可以在该位置定义一个变量并为其赋一个初始值,也可以使用for循环前面定义的变量,但是使用for循环前面定义的变量必须在该位置为其重新赋一个初始值。
注意:在该位置定义一个变量并为其赋一个起始值,这种用法定义的变量的作用域仅在for循环语句中,也就是说,for循环语句后面的代码不能使用该变量;但是用for循环前面定义的变量这种用法定义的变量,在for循环语句后面的代码也能被使用。
条件表达式:如果条件表达式为真,则执行循环主体;如果为假,则不执行循环主体,且控制流会跳转到紧接着for循环的下一条语句。
迭代表达式:执行完语句或语句块后就执行迭代表达式,然后再执行条件表达式判断循环是否继续。
【例5-10】编写程序,使用for循环输出一组数据。
(1)在Visual Studio 2017中,新建名称为“Project10”的文件。
(2)在代码编辑区域输入以下代码。
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T108_66838.jpg?sign=1738807602-DGt6jUSzPBb1T0zDgxjVf7qf20gK1uar-0-aeebcc7b99850e4faa84f4ceaf35e74c)
【程序分析】本例演示了for语句的使用。在for循环的括号中,表达式“int x=10;”用于初始化变量x;表达式“x<20;”用于设置循环次数,不能超过20次;在执行完for循环主体后,控制流会跳转到语句“x++;”,该语句用于更新变量x。该语句可以留空,只要在条件后有一个分号出现即可。本例的流程如图5-17所示。
在Visual Studio 2017中的运行结果如图5-18所示。
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P108_15760.jpg?sign=1738807602-35VznjHrQncCjCDaDXKE6vzSUbMxGwYY-0-bb03918eaa7f1812d0a7b7e9d4a6befb)
图5-17 for语句流程图
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P108_15763.jpg?sign=1738807602-HmdeIXkenueSxdVr9icL2y8pCwBc6TCd-0-56461490322716756c113d9be3b2bcf1)
图5-18 for语句
for循环语句中的3个表达式都是可以省略的,但“;”不能省略。
(1)省略<初始化表达式>,此时应在for语句之前给该变量赋初值。
例如:
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T108_66839.jpg?sign=1738807602-5veW923QELmDClx5v2SyTNPd6Va91DTJ-0-d6eba8c076750ede3e61ab26917fa2c9)
(2)省略<条件表达式>,表示不判断循环条件,循环无终止地进行下去,也可以认为<条件表达式>始终为真。
例如:
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T108_66840.jpg?sign=1738807602-GxKnlBxSr8t6lJdcCjMc8ig63lMCJwoV-0-1abcae4a2d1ec085082e466b63f9bb78)
该语句将无休止地执行循环体,一直输出变量x的值,成为死循环。为了终止循环,就要在循环体中加入break语句和return语句等。
(3)省略<迭代表达式>,此时应在循环体内部实现循环变量的增量,以保证循环能够正常结束。
例如:
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T109_66843.jpg?sign=1738807602-zb1A62uTHUzQg15bafRgON8AbCPyAf60-0-94f2a4b9955ad305b1f838fa5c79be1c)
相当于把<迭代表达式>写在了循环体内部,作为循环体的一部分。
(4)省略<初始化表达式>和<条件表达式>,此时只给出了循环条件。
例如:
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T109_66844.jpg?sign=1738807602-JYAYx6uoS2SUQG2UeeZuicjVNQVbPrzs-0-8229b379c9755c710c7f66d0fdda3445)
相当于把<初始化表达式>放在了循环的外面,<条件表达式>作为循环体的一部分。这种情况与前面介绍的while语句完全相同。
例如:
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T109_66845.jpg?sign=1738807602-MkmN30W7YvKAyrA0PL7KgNvqE8oWxSJo-0-d1db3cb079bf26670f22fa6ff05d634b)
(5)3个表达式都省略,既不设初值,也不判断条件,循环变量不增值,无终止地执行循环体。
例如:
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T109_66846.jpg?sign=1738807602-mJ0DZ8rioVQ4lX3JIrC5aH20lD7ne3kW-0-6b5f8138e5555053ff0d781d9e9b9351)
注意:表达式可以省略,但中间的两个分号不能省略。
5.3.4 foreach循环语句
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P109_15983.jpg?sign=1738807602-kZp6u9AxY3Kos7MBQhTqOh8zD0M37bP8-0-c8140f0b06086fee0aeb846ddbab0cea)
foreach循环用于列举出集合中所有的元素,foreach语句中的表达式由关键字in隔开的两个项组成。in右边的项是集合名,in左边的项是变量名,用来存放该集合中的每个元素。
foreach循环语句的语法格式如下:
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T109_66847.jpg?sign=1738807602-imzHW1pogjuCzx0Pao6ti78K7TyzC4FS-0-f369da788f50d5fd7ada1e4d44201cef)
foreach语句括号中的类型和标识符用来声明该语句的循环变量,标识符即循环变量的名称。循环变量相当于一个只读的局部变量。在每一次循环时,都会从集合中取出一个新的元素值,放到只读变量中去,如果括号中的整个表达式返回值为true,foreach块中的语句就能够执行。一旦集合中的元素都已经被访问到,整个表达式的值为false,控制流程就转入到foreach块后面的执行语句。
注意:循环变量的类型必须与集合的类型相同。集合内元素的个数决定循环内程序段重复执行的次数。
【例5-11】编写程序,通过foreach循环找出字符数组中0和1的个数并输出。
(1)在Visual Studio 2017中,新建名称为“Project11”的文件。
(2)在代码编辑区域输入以下代码。
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T110_66851.jpg?sign=1738807602-KnrBqoUxu0yoNJEkrEJqYxqLzN5AJGgw-0-b3acba8f537d0c5d12b3ebe9f51e677b)
【程序分析】本例演示了foreach语句的使用。在代码中,首先初始化了两个变量x和y,分别用来表示0和1的个数;之后声明一个字符类型的数组,用foreach循环判断字符格式,如果遍历到0,则将x的值加1,否则就将b的值加1;最后输出x和y的值。
在Visual Studio 2017中的运行结果如图5-19所示。
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P110_16190.jpg?sign=1738807602-IUmex1aj8QxPVN9stQKNSCBBaMCHoJU7-0-8ff8eb73c7be2316e6bda5cec8fdba4b)
图5-19 foreach语句