C# 一分钟浅谈:循环结构 for 和 while 的应用

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
性能测试 PTS,5000VUM额度
简介: 【9月更文挑战第1天】循环结构是编程中的基础概念,C# 中常用的 `for` 和 `while` 循环允许重复执行代码直至满足特定条件。`for` 循环基于计数,适用于已知循环次数的情况;`while` 循环基于条件,适用于未知循环次数的情况;`do-while` 循环则至少执行一次循环体。本文详细介绍了这些循环的语法和示例,并探讨了常见问题及其解决方法,如循环条件和更新表达式的错误设置。通过综合应用示例(如计算阶乘和斐波那契数列),帮助读者更好地理解和掌握循环结构的使用方法。正确使用循环可以提高程序的效率和可读性。

引言

循环结构是编程中非常基础且重要的概念之一。在 C# 中,for 循环和 while 循环是最常用的两种循环结构。它们允许程序重复执行某段代码,直到满足特定条件为止。本文将详细介绍这两种循环结构的使用方法,并探讨一些常见的问题及其解决方法。
image.png

for 循环

for 循环是一种基于计数的循环结构,适用于已知循环次数的情况。

基本语法

for (初始化表达式; 循环条件; 更新表达式) {
   
    // 循环体
}

示例代码

假设我们需要打印从 1 到 10 的数字:

using System;

class Program
{
   
    static void Main()
    {
   
        for (int i = 1; i <= 10; i++) {
   
            Console.WriteLine(i);
        }
    }
}

在这个例子中,i 从 1 开始,每次循环增加 1,直到 i 大于 10 时停止循环。

常见问题及解决方法

问题 1: 循环条件错误

在编写 for 循环时,循环条件设置错误会导致循环无法正常终止。

解决方法
  1. 仔细检查循环条件:确保循环条件正确设置。
  2. 使用断言进行验证:在关键位置使用断言来验证循环条件是否符合预期。

示例代码

假设我们需要打印从 1 到 10 的数字,但循环条件设置错误:

using System;

class Program
{
   
    static void Main()
    {
   
        for (int i = 1; i < 10; i++) {
     // 循环条件错误
            Console.WriteLine(i);
        }
    }
}

在这个例子中,循环条件设置为 i < 10,导致不会打印数字 10。修正后的代码如下:

using System;

class Program
{
   
    static void Main()
    {
   
        for (int i = 1; i <= 10; i++) {
   
            Console.WriteLine(i);
        }
    }
}

问题 2: 更新表达式错误

for 循环中,更新表达式设置错误会导致循环无法正常终止。

解决方法
  1. 确保更新表达式正确:确保每次循环后更新表达式正确执行。
  2. 使用断言进行验证:在关键位置使用断言来验证更新表达式是否符合预期。

示例代码

假设我们需要打印从 1 到 10 的数字,但更新表达式设置错误:

using System;

class Program
{
   
    static void Main()
    {
   
        for (int i = 1; i <= 10; i--) {
     // 更新表达式错误
            Console.WriteLine(i);
        }
    }
}

在这个例子中,更新表达式设置为 i--,导致循环永远不会终止。修正后的代码如下:

using System;

class Program
{
   
    static void Main()
    {
   
        for (int i = 1; i <= 10; i++) {
   
            Console.WriteLine(i);
        }
    }
}

while 循环

while 循环是一种基于条件的循环结构,适用于未知循环次数的情况。

基本语法

while (循环条件) {
   
    // 循环体
}

示例代码

假设我们需要打印从 1 到 10 的数字:

using System;

class Program
{
   
    static void Main()
    {
   
        int i = 1;
        while (i <= 10) {
   
            Console.WriteLine(i);
            i++;
        }
    }
}

在这个例子中,i 从 1 开始,每次循环增加 1,直到 i 大于 10 时停止循环。

常见问题及解决方法

问题 1: 循环条件错误

在编写 while 循环时,循环条件设置错误会导致循环无法正常终止。

解决方法
  1. 仔细检查循环条件:确保循环条件正确设置。
  2. 使用断言进行验证:在关键位置使用断言来验证循环条件是否符合预期。

示例代码

假设我们需要打印从 1 到 10 的数字,但循环条件设置错误:

using System;

class Program
{
   
    static void Main()
    {
   
        int i = 1;
        while (i < 10) {
     // 循环条件错误
            Console.WriteLine(i);
            i++;
        }
    }
}

在这个例子中,循环条件设置为 i < 10,导致不会打印数字 10。修正后的代码如下:

using System;

class Program
{
   
    static void Main()
    {
   
        int i = 1;
        while (i <= 10) {
   
            Console.WriteLine(i);
            i++;
        }
    }
}

问题 2: 更新表达式错误

while 循环中,更新表达式设置错误会导致循环无法正常终止。

解决方法
  1. 确保更新表达式正确:确保每次循环后更新表达式正确执行。
  2. 使用断言进行验证:在关键位置使用断言来验证更新表达式是否符合预期。

示例代码

假设我们需要打印从 1 到 10 的数字,但更新表达式设置错误:

using System;

class Program
{
   
    static void Main()
    {
   
        int i = 1;
        while (i <= 10) {
   
            Console.WriteLine(i);
            i--;  // 更新表达式错误
        }
    }
}

在这个例子中,更新表达式设置为 i--,导致循环永远不会终止。修正后的代码如下:

using System;

class Program
{
   
    static void Main()
    {
   
        int i = 1;
        while (i <= 10) {
   
            Console.WriteLine(i);
            i++;
        }
    }
}

do-while 循环

do-while 循环也是一种基于条件的循环结构,但它的特点是先执行循环体至少一次,然后再判断条件。

基本语法

do {
   
    // 循环体
} while (循环条件);

示例代码

假设我们需要打印从 1 到 10 的数字:

using System;

class Program
{
   
    static void Main()
    {
   
        int i = 1;
        do {
   
            Console.WriteLine(i);
            i++;
        } while (i <= 10);
    }
}

在这个例子中,i 从 1 开始,每次循环增加 1,直到 i 大于 10 时停止循环。

常见问题及解决方法

问题 1: 循环条件错误

在编写 do-while 循环时,循环条件设置错误会导致循环无法正常终止。

解决方法
  1. 仔细检查循环条件:确保循环条件正确设置。
  2. 使用断言进行验证:在关键位置使用断言来验证循环条件是否符合预期。

示例代码

假设我们需要打印从 1 到 10 的数字,但循环条件设置错误:

using System;

class Program
{
   
    static void Main()
    {
   
        int i = 1;
        do {
   
            Console.WriteLine(i);
            i++;
        } while (i < 10);  // 循环条件错误
    }
}

在这个例子中,循环条件设置为 i < 10,导致不会打印数字 10。修正后的代码如下:

using System;

class Program
{
   
    static void Main()
    {
   
        int i = 1;
        do {
   
            Console.WriteLine(i);
            i++;
        } while (i <= 10);
    }
}

问题 2: 更新表达式错误

do-while 循环中,更新表达式设置错误会导致循环无法正常终止。

解决方法
  1. 确保更新表达式正确:确保每次循环后更新表达式正确执行。
  2. 使用断言进行验证:在关键位置使用断言来验证更新表达式是否符合预期。

示例代码

假设我们需要打印从 1 到 10 的数字,但更新表达式设置错误:

using System;

class Program
{
   
    static void Main()
    {
   
        int i = 1;
        do {
   
            Console.WriteLine(i);
            i--;  // 更新表达式错误
        } while (i <= 10);
    }
}

在这个例子中,更新表达式设置为 i--,导致循环永远不会终止。修正后的代码如下:

using System;

class Program
{
    static void Main() {
    int i = 1; do {
    Console.WriteLine(i); i++; } while (i <= 10); } }

在这个例子中,更新表达式设置为 i++,确保循环能够正常终止。

综合应用示例

示例 1: 计算阶乘

假设我们需要计算一个数的阶乘。

使用 for 循环

using System;

class Program
{
   
    static long FactorialFor(int n)
    {
   
        long result = 1;
        for (int i = 1; i <= n; i++) {
   
            result *= i;
        }
        return result;
    }

    static void Main()
    {
   
        int n = 5;
        long factorial = FactorialFor(n);
        Console.WriteLine($"Factorial of {n}: {factorial}");
    }
}

使用 while 循环

using System;

class Program
{
   
    static long FactorialWhile(int n)
    {
   
        long result = 1;
        int i = 1;
        while (i <= n) {
   
            result *= i;
            i++;
        }
        return result;
    }

    static void Main()
    {
   
        int n = 5;
        long factorial = FactorialWhile(n);
        Console.WriteLine($"Factorial of {n}: {factorial}");
    }
}

示例 2: 求解斐波那契数列

假设我们需要求解斐波那契数列的前 N 项。

使用 for 循环

using System;

class Program
{
   
    static void FibonacciFor(int n)
    {
   
        int a = 0, b = 1;
        Console.Write(a + " " + b + " ");
        for (int i = 2; i < n; i++) {
   
            int next = a + b;
            Console.Write(next + " ");
            a = b;
            b = next;
        }
    }

    static void Main()
    {
   
        int n = 10;
        FibonacciFor(n);
    }
}

使用 while 循环

using System;

class Program
{
   
    static void FibonacciWhile(int n)
    {
   
        int a = 0, b = 1;
        Console.Write(a + " " + b + " ");
        int i = 2;
        while (i < n) {
   
            int next = a + b;
            Console.Write(next + " ");
            a = b;
            b = next;
            i++;
        }
    }

    static void Main()
    {
   
        int n = 10;
        FibonacciWhile(n);
    }
}

总结

通过本文的介绍,你已经掌握了 C# 中 for 循环和 while 循环的基本使用方法,并了解了一些常见的问题及其解决方法。正确地使用循环结构可以使程序逻辑更加清晰和高效。在实际编程中,要注意循环条件的正确性、更新表达式的合理性以及代码的可读性和可维护性。

  • for 循环:适用于已知循环次数的情况,如遍历数组或固定次数的循环。
  • while 循环:适用于未知循环次数的情况,如条件判断或无限循环。
  • do-while 循环:适用于至少执行一次循环体的情况。

继续深入学习 C# 的其他知识点,你将能够更加熟练地使用这门语言进行开发。

目录
相关文章
|
1月前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
31 3
|
29天前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
41 1
|
28天前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
13 0
|
6月前
|
C#
C#||应用框体设计计算器
C#||应用框体设计计算器
|
3月前
|
设计模式 开发框架 前端开发
MVC 模式在 C# 中的应用
MVC(Model-View-Controller)模式是广泛应用于Web应用程序开发的设计模式,将应用分为模型(存储数据及逻辑)、视图(展示数据给用户)和控制器(处理用户输入并控制模型与视图交互)三部分,有助于管理复杂应用并提高代码可读性和维护性。在C#中,ASP.NET MVC框架常用于构建基于MVC模式的Web应用,通过定义模型、控制器和视图,实现结构清晰且易维护的应用程序。
55 2
|
3月前
|
编译器 C# Android开发
Uno Platform 是一个用于构建跨平台应用程序的强大框架,它允许开发者使用 C# 和 XAML 来创建适用于多个平台的应用
Uno Platform 是一个用于构建跨平台应用程序的强大框架,它允许开发者使用 C# 和 XAML 来创建适用于多个平台的应用
286 8
|
2月前
|
消息中间件 网络协议 安全
C# 一分钟浅谈:WebSocket 协议应用
【10月更文挑战第6天】在过去的一年中,我参与了一个基于 WebSocket 的实时通信系统项目,该项目不仅提升了工作效率,还改善了用户体验。本文将分享在 C# 中应用 WebSocket 协议的经验和心得,包括基础概念、C# 实现示例、常见问题及解决方案等内容,希望能为广大开发者提供参考。
119 0
|
2月前
|
Web App开发 网络协议 API
基于C#编写一个远程桌面应用
基于C#编写一个远程桌面应用
52 0
|
3月前
|
存储 C# 开发者
枚举与结构体的应用:C#中的数据组织艺术
在C#编程中,枚举(`enum`)和结构体(`struct`)是非常重要的数据类型。枚举用于定义命名常量集合,提高代码可读性;结构体则封装相关数据字段,适合小型数据集。本文从基本概念入手,探讨它们的使用技巧、常见问题及解决方案,帮助开发者更好地利用这些特性构建健壮的应用程序。
46 8
|
2月前
|
Java 程序员 C#
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
13 0