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
关键字通常与 for
、while
、do-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-else
和switch
就像是你人生的多个选择,很多时候选择大于努力(提升认知很关键)
for
和while
、do-while
是我们为了梦想不断迭代努力的过程,只要条件成立(身体允许)就是干!
try-catch
就是你面对人生中各种意外的处理方案,面对意外尽量要有planb,如果没有,那就尽量及早发现问题,这样才可以让生活像程序一样可控。
大家有任何问题都可以加关注后在评论区留言,或者加客服一对一咨询。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明