在好例子网,分享、交流、成长!
<<

C# 入门教程(C#语法- 4.流程控制)

流程控制

graph LR
Z[流程控制] -->A[条件语句 if]
Z -->B[选择语句 switch]
Z -->C[循环语句 for]
Z -->D[循环语句 while]
Z -->E[循环语句 do-while]
Z -->F[跳转语句 break]
Z -->G[跳转语句 continue]
Z -->H[跳转语句 goto]
Z -->I[异常处理 try-catch]

好的,以下是每一类流程控制语句的完整可运行代码示例:

条件语句 if

using System;

class Program
{
    static void Main(string[] args)
    {
        int number = 10;

        if (number > 0)
        {
            Console.WriteLine("数字大于零");
        }
        else if (number < 0)
        {
            Console.WriteLine("数字小于零");
        }
        else
        {
            Console.WriteLine("数字等于零");
        }
    }
}

选择语句 switch

在C#中,switch语句用于根据某个表达式的值,在一组可能的情况中执行不同的代码块。其基本语法如下:

switch (expression)
{
    case value1:
        // code block 1
        break;
    case value2:
        // code block 2
        break;
    // ...
    default:
        // code block n
        break;
}
  • expression:要比较值的表达式。
  • case:可能的情况。
  • value1, value2, ...:这些值是与expression进行比较的常量或字面量。
  • code block 1, code block 2, ...:如果expression和value匹配,则会执行与该情况关联的代码块。
  • break:在每个情况的代码块末尾使用break语句来防止代码穿透问题。
  • default:如果没有任何一个case与expression匹配,则会执行default中的代码块。

以下是一个示例,演示如何使用switch语句根据星期几打印不同的信息:

int day = 3;
string dayName;

switch (day)
{
    case 1:
        dayName = "周一";
        break;
    case 2:
        dayName = "周二";
        break;
    case 3:
        dayName = "周三";
        break;
    case 4:
        dayName = "周四";
        break;
    case 5:
        dayName = "周五";
        break;
    case 6:
        dayName = "周六";
        break;
    case 7:
    case 14:
        dayName = "周日";
        break;
    default:
        dayName = "未知";
        break;
}

Console.WriteLine(dayName);

输出结果:

周三

在上述示例中,我们使用一个整型变量day代表星期几。switch语句比较day的值,并根据情况分别将dayName设置为“周一”、“周二”、“周三”等字符串。如果没有任何一个case匹配day的值,则会执行default中的代码块,将dayName设置为“未知”。最后,我们使用Console.WriteLine方法输出dayName。

需要注意的是,在C# 8.0及更高版本中,还可以使用switch语句的新语法形式——switch表达式。switch表达式可以在单个表达式中同时执行多个case分支,并且可以在case中使用模式匹配,这使得switch表达式更加灵活和强大。

using System;

class Program
{
    static void Main(string[] args)
    {
        int day = 2;
        string dayName;
        switch (day)
        {
            case 1:
                dayName = "星期一";
                break;
            case 2:
                dayName = "星期二";
                break;
            case 3:
                dayName = "星期三";
                break;
            // 其他情况
            default:
                dayName = "未匹配的日期";
                break;
        }
        Console.WriteLine(dayName);
    }
}

循环语句 for

在C#中,for循环语句是一种常见的迭代结构,用于重复执行特定的代码块。for循环由三个关键部分组成:初始条件、循环条件和迭代器。

下面是for循环语句的基本语法:

for (初始条件; 循环条件; 迭代器)
{
    // 执行的代码块
}
  • 初始条件:在循环开始之前执行一次的表达式或语句。通常在此处初始化循环变量。
  • 循环条件:每次迭代前都会被检查的表达式。只有当循环条件为true时,才会继续执行循环。
  • 迭代器:在每次迭代结束后执行的表达式或语句。通常在此处更新循环变量的值。

在循环中,可以使用循环变量来控制执行的次数或范围。可以根据需要在循环体内执行任意数量的语句。

以下是一个示例,演示如何使用for循环打印数字1到5:

using System;

class Program
{
    static void Main(string[] args)
    {
	//i++ 等同于 i=i+1;
        for (int i = 1; i <= 5; i++)
        {
            Console.WriteLine(i);
        }
    }
}

在上述示例中,我们使用了一个整型变量i作为循环变量。初始条件为i = 1,循环条件为i <= 5,迭代器为i++(即每次循环结束后,i的值增加1)。循环体内的代码将i打印到控制台。

需要注意的是,循环变量的作用范围仅限于for语句块内部。如果在循环外部需要访问循环变量,可以在循环外声明一个与循环变量同名的变量,并在循环内部更新该变量的值。

循环语句 while

在C#中,while语句用于在给定条件为真时重复执行一段代码块。它的基本语法如下:

while (condition)
{
    // code block
}
  • condition:循环执行的条件。只有在该条件为真(true)时,才会继续执行循环体内的代码块。
  • code block:要重复执行的代码块。

while循环首先在执行循环体之前检查条件。如果条件为真,则执行循环体中的代码块。然后再次检查条件,并根据条件的值决定是否继续执行循环体。这个过程将一直持续下去,直到条件为假时,循环停止。

以下是一个示例,演示如何使用while循环输出数字1到5:

using System;

class Program
{
    static void Main(string[] args)
    {
        int i = 1;
        while (i <= 5)
        {
            Console.WriteLine(i);
            i++;
        }
    }
}

在上述示例中,我们首先声明并初始化一个整型变量i,初始值为1。然后,在while循环中,设置条件为i <= 5。只要条件为真,循环体内的代码块就会执行。在每次循环结束后,我们通过i++递增i的值,以保证循环最终会停止。

需要注意的是,如果条件一开始就为假,那么while循环体中的代码块将不会执行。因此,确保在循环开始之前或循环体内更新条件的值,以避免无限循环。

另外,有时候可能需要使用break语句显式地终止while循环,或使用continue语句跳过当前迭代并进入下一次迭代。这些控制语句可以根据实际需求灵活使用。

循环语句 do-while

在C#中,do-while循环是一种后测试循环,它会先执行循环体中的代码块,然后再对循环条件进行判断。只有当循环条件为真时,才会继续执行下一次循环。其基本语法结构如下:

do
{
    // code block
} while (condition);
  • code block:需要重复执行的代码块。
  • condition:循环条件。只有当该条件为真时,循环会继续执行;否则, 循环会终止。

相较于while循环,在do-while循环中,循环体的代码至少会被执行一次,因为循环条件的判断是在循环体执行完毕后进行的。

以下是一个使用do-while循环输出数字1到5的示例:

using System;

class Program
{
    static void Main(string[] args)
    {
        int i = 1;
        do
        {
            Console.WriteLine(i);
            i++;
        } while (i <= 5);
    }
}

在上述示例中,我们首先声明并初始化一个整型变量i,初始值为1。然后,通过do关键字来开始循环,循环体内的代码块会被执行。在每次循环结束后,通过i++递增i的值。接着,在while关键字后面指定循环条件i <= 5。只有当循环条件为真时,循环会继续执行;否则,循环终止。

需要注意的是,即使循环条件第一次判断为假,do-while循环仍然会执行一次循环体内的代码块。这种特性使得do-while循环在需要至少执行一次的情况下非常有用。

跳转语句 break

using System;

class Program
{
    static void Main(string[] args)
    {
        for (int i = 0; i < 10; i++)
        {
            if (i == 5)
            {
                break; // 在i等于5时终止循环
            }
            Console.WriteLine(i);
        }
    }
}

跳转语句 continue

在 C# 中,continue 是一个控制流程的关键字,它用于跳过当前循环迭代中剩余的代码,并开始下一次循环迭代。主要用于在循环内部的某个条件满足时,提前结束当前迭代,直接开始下一次迭代。

continue 关键字通常与 forwhiledo-while 等循环语句配合使用。当 continue 被执行时,程序会立即跳转到循环体的顶部,开始下一轮循环。

以下是一个使用 continue 的示例,用于输出 1 到 10 之间的奇数:

using System;

class Program
{
    static void Main(string[] args)
    {
        for (int i = 0; i < 10; i++)
        {
            if (i % 2 == 0)
            {
                continue; // 在i为偶数时跳过当前迭代,进入下一次迭代
            }
            Console.WriteLine(i);
        }
    }
}

在上述示例中,使用 for 循环遍历变量 i 的值从 1 到 10。在循环体内,首先通过 if 语句判断当前的 i 是否是偶数,如果是偶数,则执行 continue 语句。当 i 是奇数时,continue 跳过剩余代码,直接开始下一次循环迭代。因此,只有奇数会被输出到控制台。

需要注意的是,continue 关键字只会影响当前循环的迭代,不会导致整个循环提前终止。它通常被用于某些条件下需要跳过特定处理步骤的场景,以提高程序的效率和简化逻辑。

跳转语句 goto

在 C# 中,goto 是一个控制流的关键字,它用于无条件地将程序的执行转移到指定的标签处。goto 语句可以用于跳转到同一方法或代码块中的其他位置,但是过度使用 goto 可能会导致代码结构混乱,使程序难以理解和维护。因此,在大多数情况下,应尽量避免使用 goto

以下是一个使用 goto 的示例:

using System;

class Program
{
    static void Main(string[] args)
    {
        int i = 0;
    start:
        Console.WriteLine(i);
        i++;
        if (i < 5)
        {
            goto start; // 跳转到标签start处继续执行循环
        }
    }
}

异常处理 try-catch

在 C# 中,try-catch 是一种用于异常处理的结构化语句。它允许我们编写代码来捕获和处理可能发生的异常,以防止程序崩溃并提供适当的错误处理机制。

try-catch 语句由两个主要部分组成:try 块和一个或多个 catch 块。

try 块用于包含可能会引发异常的代码。当在 try 块中的代码执行时,如果发生了异常,那么程序的控制流将立即转移到与异常类型匹配的 catch 块,并执行相应的异常处理代码。

以下是一个简单的 try-catch 示例:

try
{
    // 可能会引发异常的代码
}
catch (ExceptionType1 ex)
{
    // 处理 ExceptionType1 类型的异常
}
catch (ExceptionType2 ex)
{
    // 处理 ExceptionType2 类型的异常
}
finally
{
    // 无论是否发生异常,都会执行的代码(可选)
}

在上述示例中,try 块中包含可能引发异常的代码。如果在该块中的代码执行过程中抛出了特定类型的异常(例如 ExceptionType1),程序将跳转到第一个匹配的 catch 块,对该异常进行处理。如果没有匹配的 catch 块,或者发生了与 catch 块不匹配的异常类型,那么异常将被传递给调用该代码块的上层 try-catch 或调用堆栈的其他部分。

catch 块用于处理特定类型的异常。我们可以在 catch 块中编写适当的代码来处理和恢复异常状态,或者根据需要记录日志、显示错误消息等。

finally 块(可选)用于包含一些无论是否发生异常都会执行的代码。例如,在关闭文件、释放资源等情况下,finally 块中的代码将始终执行。

需要注意的是,finally 块不是必需的,但它提供了一个机会来确保某些操作的执行,无论是否发生异常。

try-catch 语句使我们能够捕获和处理异常,从而提高程序的稳定性和健壮性。然而,过度使用 try-catch 可能会降低代码的性能,因此应该仅在必要时使用,而不是作为常规的错误处理机制。

using System;

class Program
{
    static void Main(string[] args)
    {
        try
        {
            int zero = 0;
            int result = 10 / zero; // 将抛出除以零的异常
        }
        catch (DivideByZeroException ex)
        {
            Console.WriteLine("Error: " + ex.Message);
        }
        finally
        {
            Console.WriteLine("这段无论如何都会输出");
        }
    }
}

小结

C#的控制语句就讲到这里,这些语句放到生活中,可以这么理解:

if-elseswitch就像是你人生的多个选择,很多时候选择大于努力(提升认知很关键)

forwhiledo-while是我们为了梦想不断迭代努力的过程,只要条件成立(身体允许)就是干!

try-catch就是你面对人生中各种意外的处理方案,面对意外尽量要有planb,如果没有,那就尽量及早发现问题,这样才可以让生活像程序一样可控。

大家有任何问题都可以加关注后在评论区留言,或者加客服一对一咨询。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

报警