3.4 流程控制

  • 3.4.1 流程控制概述
    流程就是执行程序的顺序。
    分支:程序根据不同的条件执行不同的代码块。
    循环:程序根据一定的条件不断执行代码块,一直到不满足条件为止。

    C#中选择(分支)语句有:
    if ... else ...
    switch ... case ...


    迭代(循环)语句有:
    while
    do
    for
    foreach

  • 3.4.2 选择语句
    if ... else 常用于对多种可能的条件进行判断。
    Console.Write("请输入您的年龄: ");
    int iAge = int.Parse(Console.ReadLine());
    string s = "";
    if (iAge > 0 && iAge < 6)
        s 
    = "婴儿";
    else if (iAge >= 6 && iAge < 14)
        s 
    = "少年";
    else if (iAge >= 14 && iAge < 35)
        s 
    = "青年";
    else if (iAge >= 35 && iAge < 60)
        s 
    = "中年";
    else if (iAge >= 60)
        s 
    = "老年";
    else
        
    return;
    Console.WriteLine(
    string.Format("您属于{0}",s));

    switch ... case ... 常用于根据某个开关变量进行选择。
    Console.WriteLine("请选择一个操作:");
    Console.WriteLine(
    "1.操作");
    Console.WriteLine(
    "2.操作");
    Console.WriteLine(
    "3.操作");
    Console.Write(
    "请输入操作代号(1-3):");
    int i = int.Parse(Console.ReadLine());
    switch (i)
    {
        
    case 1:
            Console.WriteLine(
    "操作1开始");
            Console.WriteLine(
    "操作1结束");
            
    break;
        
    case 2:
            Console.WriteLine(
    "操作2开始");
            Console.WriteLine(
    "操作2结束");
            
    break;
        
    case 3:
            Console.WriteLine(
    "操作3开始");
            Console.WriteLine(
    "操作3结束");
            
    break;
        
    default:
            Console.WriteLine(
    "操作代号错误");
             
    break;
    }

    注意以下几点。
    除非case中没有任何语句,否则需要在最后写上break;除非case为空,否则程序不能从一个case贯穿到另一个ccase。
    如果没有任何case匹配将进入default语句块。
    case只能匹配一个值,不能进行逻辑操作,如果要进行逻辑操作请使用 if...else...

    上述代码还可以改为使用if ... else ...形式。
    Console.WriteLine("请选择一个操作:");
    Console.WriteLine(
    "1.操作");
    Console.WriteLine(
    "2.操作");
    Console.WriteLine(
    "3.操作");
    Console.Write(
    "请输入操作代号(1-3):");
    int i = int.Parse(Console.ReadLine());
    if (i == 1)
    {
        Console.WriteLine(
    "操作1开始");
        Console.WriteLine(
    "操作1结束");
    }

    else if (i == 2)
    {
        Console.WriteLine(
    "操作2开始");
        Console.WriteLine(
    "操作2结束");
    }

    else if (i == 3)
    {
        Console.WriteLine(
    "操作3开始");
        Console.WriteLine(
    "操作3结束");
    }

    else
        Console.WriteLine(
    "操作代号错误");

    在这里需要注意,如果一个代码块中有一条以上的语句请使用{}来包括代码。如果语句只有一条,你可以省略{}(上例中else的情况)。
  • 3.4.3 迭句语句
    while常用于根据某个条件进行循环操作。如果条件为true则不断循环一直到条件为false为止。
    int i = 1;
    while (i < 6)
    {
        Console.WriteLine(i);
        i
    ++;
    }

    这段代码输出了1~5。注意,在每次循环语句代码块中需要修改条件,否则循环一直进行下去。不过,你可以不使用额外的语句修改条件变量,上述代码等价于下面的代码。
    int i = 1;
    while (i++ < 6)
    {
       Console.WriteLine(i
    -1);
    }

    循环语句体现了计算机的强大性能,使用循环语句能让计算机进行大量计算操作。比如一个简单的累加操作。
    int iResult = 0;
    Console.Write(
    "1+2+3+…n, n= ");
    int n = int.Parse(Console.ReadLine());
    int i = 1;
    while (i <= n)
    {
        iResult 
    += i;
        i
    ++;
    }

    Console.WriteLine(
    "累加结果为{0}", iResult);

    do...while...语句和while差不多。区别在于while是先判断条件后执行代码块,do...while是先执行代码块后判断条件,因此do...while语句至少会执行一次代码块。
    int i = 1;
    do
    {
        Console.WriteLine(i);
        i
    ++;
    }

    while (i < 6);

    和使用while语句一样输出1~5,如果你把代码改为:
    int i = 1;
    do
    {
        Console.WriteLine(i);
        i
    ++;
    }

    while (i < 1);

    虽然不满足条件,但是仍然执行一次代码块,如果改为while的话就一次也不会执行(因为它是先进行判断的)。

    for 语句常用于遍历操作。所谓遍历,就是循环访问某个多值类型中的所有成员。比如输出一个数组中所有元素。当然for也可以用于进行进行N次操作,使用for,条件变量会自动根据我们设定的步进进行变化。
    for (int i = 1; i <= 5; i++)
        Console.WriteLine(i);

    上述代码等价于:
    int i = 1;
    while (i <= 5)
    {
        Console.WriteLine(i);
        i
    ++;
    }

    for()语句中需要按次序填写如下语句。
    ·声明变量语句。
    ·判断条件语句。
    ·步进语句。
    for (int i = 1; i<=5; i++) 就表示使用i作为步进变量,i<=5 的时候进行循环,每次 i+1。在这里要说明几点。
    ·步进变量放在for内声明,不要使用for外面的变量作为步进变量。
    int i = 1;
    for (; i <= 5; i++)
        Console.WriteLine(i);

    虽然这段代码是可行的,但是不推荐这样写。步进变量在for使用以后就不再有利用价值了。在for中声明的变量仅仅在for内有效。

    前面说过,for经常用于遍历某个多值类型(比如数组)
    string[] StringArray = "小朱""小杨""小张" };
    for (int i = 0; i < StringArray.Length; i++)
        Console.WriteLine(StringArray[i]);

    在3.2.3中我们还介绍了一种多值类型枚举。使用for遍历枚举的作操也很常见。
    class Program
    {
        
    enum Direction
        
    {
            North,
            south,
            East,
            West
        }

        
    static void Main(string[] args)
        
    {
            
    string[] arr = Enum.GetNames(typeof(Direction));
            
    for (int i = 0; i < arr.Length; i++)
                Console.WriteLine(arr[i]);
       }

    }

    ·最后要说的迭代语句是foreach。foreach和for使用方法不同,只需要指明需要从哪个变量中遍历哪个类型的元素。
    string[] StringArray = "小朱""小杨""小张" };
    foreach (string s in StringArray)
        Console.WriteLine(s);
    int [] list = {1,2,3,4};
    foreach (int i in list)
        Console.WriteLine(i);

    注意foreach的使用方法:foreach(元素类型代表元素的变量in需要遍历的变量)。
    for 和 foreach的本质区别在于,我们能在for的代码块中更改元素的值,而foreach不能(foreach为只读遍历)。
    int[] list = 1234 };
    for (int i = 0; i < list.Length; i++)
        list[i] 
    *= 10;
    foreach (int i in list)
         Console.WriteLine(i);

    程序输出10、20、30、40
posted @ 2008-07-20 20:56  Jack.Net  阅读(226)  评论(0编辑  收藏  举报