C#程序设计自学经典
上QQ阅读APP看书,第一时间看更新

3.2 迭代语句的应用

迭代语句又称为循环语句,使用迭代语句可以让程序多次执行相同的代码或代码块,这些代码或代码块称为循环体。对于任何一个循环体来说,都应该提供一个跳出循环的条件,不同的循环语句提供不同的条件。在C#中,常用的迭代语句有for语句、while语句、do…while语句和foreach语句。下面就详细介绍这几种迭代语句的用法。

3.2.1 for循环语句

for循环可以执行指定的次数,并维护自己的计数器。其语法格式如下:

    for(表达式1;表达式2;表达式3)
    {
        代码块
    }

其中,表达式1由一个局部变量声明或由一个逗号分隔的多个表达式组成。其变量的作用域范围为从声明开始,直到代码块的结尾。

表达式2规定必须是一个布尔表达式。

表达式3必须包含一个用逗号分隔的表达式列表。

for循环语句的执行过程如图3-5所示。

图3-5 for循环语句的执行过程

从图3-5中不难看出for循环的执行顺序如下。

(1)如果存在表达式1,则先执行表达式1。

(2)如果存在表达式2,则计算表达式2;如果不存在表达式2,则程序转移到代码块执行,若执行到了代码块的结束点,则按顺序计算表达式3,然后从上一步骤中表达式2的计算开始,执行下一次的循环。

下面通过一个具体例子来详细讲解下for循环。

例3-1:使用for循环输出0~9(ConsoleForLoop)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleForLoop
    {
        class Program
        {
            static void Main(string[] args)
            {
                for (int i = 0; i < 10; i++)
                {
                    Console.WriteLine(i);
                }
                Console.ReadLine();
            }
        }
    }

运行结果如图3-6所示。

图3-6 使用for循环输出0~9

在此例中,先初始化i为0,然后判断i的值是否小于10,若小于则输出i的值并换行,接着i自增1,然后开始下一次判断i的值是否小于10,若小于则输出i的值并换行,接着i自增1,重复以上步骤,直到i的值为10时,再判断i的值是否小于10,此时循环条件不成立,循环结束。

3.2.2 while循环语句

while语句执行一个语句或语句块,直到指定的表达式计算为false。

while循环的语法格式如下:

    while (条件表达式)
    {
        代码块
    }

while循环语句的执行过程如图3-7所示。

图3-7 while循环语句的执行过程

下面通过一个具体例子来详细讲解下while循环。

例3-2:使用while循环输出0~9(ConsoleWhileLoop)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleWhileLoop
    {
        class Program
        {
            static void Main(string[] args)
            {
                int i = 0;
                while (i < 10)
                {
                    Console.WriteLine(i);
                    i++;
                }
                Console.ReadLine();
            }
        }
    }

运行结果如图3-8所示。

图3-8 使用while循环输出0~9

在此例中,先初始化i为0,然后判断while的条件表达式i<10是否成立,若成立则输出i的值并换行,接着i自增1,然后开始下一次的判断,判断while的条件表达式i<10是否成立,直到i<10不成立,循环终止。

3.2.3 do…while循环语句

do…while语句与while类似,do…while语句是先执行循环体内的语句,再判断循环条件表达式是否成立,所以至少会执行一次循环体内的语句。

do…while循环的语法格式如下:

    do
    {
        代码块
    }
    while (条件表达式);

do…while循环语句的执行过程如图3-9所示。

图3-9 do…while循环语句的执行过程

下面通过一个具体例子来详细讲解下do…while循环。

例3-3:使用do…while循环输出0~9(ConsoleDoWhileLoop)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleDoWhileLoop
    {
        class Program
        {
            static void Main(string[] args)
            {
                int i = 0;
                do
                {
                    Console.WriteLine(i++);
                }
                while (i < 10);
                Console.ReadLine();
            }
        }
    }

运行结果如图3-10所示。

图3-10 使用do…while循环输出0~9

在此例中,先初始化i为0,然后执行循环体内的语句输出i的值并换行,接着i自增1,之后判断条件表达式i<10是否成立,若成立则继续下一次循环输出i的值并换行,接着i自增1,然后开始下一次的判断,判断条件表达式i<10是否成立,直到i<10不成立,循环终止。

3.2.4 foreach循环语句

foreach循环语句用于枚举一个集合的元素,并对该集合中的每个元素执行一次循环体中的语句。

foreach循环语句的语法格式如下:

    foreach(类型 循环变量名 in 集合或数组)
    {
        代码块
    } 

其中,类型和循环变量名用于声明循环变量,循环变量在整个代码块内有效。在循环过程中,循环变量表示当前正在执行循环的集合元素或数组元素。

foreach循环语句的执行过程如图3-11所示。

图3-11 foreach循环语句的执行过程

下面通过一个具体例子来详细讲解下foreach循环语句。

例3-4:使用foreach循环语句输出数组中的元素(ConsoleForEachLoop)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleForEachLoop
    {
        class Program
        {
            static void Main(string[] args)
            {
                string[] strs = new string[] { "I", "am", "a", "programmer,", "I", 
                "speak", "for", "himself." };
                foreach (string s in strs)
                {
                    Console.Write(s + " ");
                }
                Console.ReadLine();
            }
        }
    }

运行结果如图3-12所示。

图3-12 使用foreach循环语句输出数组中的元素

3.2.5 for、foreach、while和do…while的区别

(1)for循环语句一般用在对于循环次数已知的情况下,而while语句和do…while语句则一般用在对于循环次数不确定的情况下。for循环必须使用整型变量作为循环的计数器,通过条件表达式限定计数器变量值来控制循环。

(2)用while语句和do…while语句时,对循环变量的初始化操作应该放在while语句和do…while语句之前,而for语句则可以在初始化语句中完成。

(3)while语句和do…while语句实现的功能相同,唯一的区别就是do…while语句先执行后判断,无论表达式的值是否为true,都将执行一次循环;而while语句则是首先判断表达式的值是否为true,如果为true则执行循环语句;否则将不执行循环语句。

(4)while语句和do…while语句,只在while后面指定循环条件,但是需要在循环体中包括使循环趋于结束的语句,而for语句则可以在迭代语句中包含使循环趋于结束的语句。

(5)foreach语句只能对数据进行读操作,在其作用域内不能对进行遍历的值做修改,其遍历顺序只能递增。自动遍历给定集合的所有值。

3.2.6 双重循环

所谓双重循环就是循环中再嵌套循环进去。下面通过一个小例子简单介绍下双重循环的应用。

例3-5:使用双重for循环语句输出如下样式的图案(ConsoleDoubleForLoop)

*

***

*****

*******

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleDoubleForLoop
    {
        class Program
        {
            static void Main(string[] args)
            {
                for (int i = 1; i <= 4; i++)
                {
                    for (int j = 1; j <= (i * 2) - 1; j++)
                    {
                        Console.Write('*');
                    }
                    Console.WriteLine();
                }
                Console.ReadLine();
            }
        }
    }

运行结果如图3-13所示。

图3-13 使用双重for循环语句输出指定样式的图案