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

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
可观测链路 OpenTelemetry 版,每月50GB免费额度
性能测试 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# 的其他知识点,你将能够更加熟练地使用这门语言进行开发。

目录
相关文章
|
2天前
|
存储 C# 开发者
枚举与结构体的应用:C#中的数据组织艺术
在C#编程中,枚举(`enum`)和结构体(`struct`)是非常重要的数据类型。枚举用于定义命名常量集合,提高代码可读性;结构体则封装相关数据字段,适合小型数据集。本文从基本概念入手,探讨它们的使用技巧、常见问题及解决方案,帮助开发者更好地利用这些特性构建健壮的应用程序。
17 8
|
3月前
|
C#
C#||应用框体设计计算器
C#||应用框体设计计算器
|
30天前
|
开发框架 .NET 编译器
总结一下 C# 如何自定义特性 Attribute 并进行应用
总结一下 C# 如何自定义特性 Attribute 并进行应用
|
14天前
|
开发者 C# Android开发
Xamarin 与 .NET:解锁现代化移动应用开发的超级武器——深入探讨C#与.NET框架如何赋能跨平台应用,实现高效编码与卓越性能
【8月更文挑战第31天】Xamarin 与 .NET 的结合为开发者提供了强大的平台,用于构建现代化移动应用。通过 C# 和 .NET 框架,Xamarin 可以实现一次编写、多平台运行,覆盖 iOS、Android 和 Windows。这种方式不仅节省了开发时间和成本,还保证了应用的一致性和高质量。Xamarin 是一个开源框架,专为跨平台移动应用开发设计,允许使用 C# 语言和 .NET 核心库构建原生应用,并访问各平台特定功能。微软维护的 Xamarin 是 Visual Studio 生态系统的一部分,极大地提高了开发效率。
41 0
|
14天前
|
数据安全/隐私保护 C# UED
利用 Xamarin 开展企业级移动应用开发:从用户登录到客户管理,全面演示C#与Xamarin.Forms构建跨平台CRM应用的实战技巧与代码示例
【8月更文挑战第31天】利用 Xamarin 进行企业级移动应用开发能显著提升效率并确保高质量和高性能。Xamarin 的跨平台特性使得开发者可以通过单一的 C# 代码库构建 iOS、Android 和 Windows 应用,帮助企业快速推出产品并保持一致的用户体验。本文通过一个简单的 CRM 示例应用演示 Xamarin 的使用方法,并提供了具体的代码示例。该应用包括用户登录、客户列表显示和添加新客户等功能。此外,还介绍了如何增强应用的安全性、数据持久化、性能优化及可扩展性,从而构建出功能全面且体验良好的移动应用。
22 0
|
14天前
|
开发者 C# C++
揭秘:如何轻松驾驭Uno Platform,用C#和XAML打造跨平台神器——一步步打造你的高性能WebAssembly应用!
【8月更文挑战第31天】Uno Platform 是一个跨平台应用程序框架,支持使用 C# 和 XAML 创建多平台应用,包括 Web。通过编译为 WebAssembly,Uno Platform 可实现在 Web 上运行高性能、接近原生体验的应用。本文介绍如何构建高效的 WebAssembly 应用:首先确保安装最新版本的 Visual Studio 或 VS Code 并配置 Uno Platform 开发环境;接着创建新的 Uno Platform 项目;然后通过安装工具链并使用 Uno WebAssembly CLI 编译应用;最后添加示例代码并测试应用。
33 0
|
3月前
|
开发框架 前端开发 .NET
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
集成于VS 2019,EXT.NET前端和ASP.NET后端,搭配MSSQL 2018数据库。系统覆盖样品管理、数据分析、报表和项目管理等实验室全流程。应用广泛,包括生产质检(如石化、制药)、环保监测、试验研究等领域。随着技术发展,现代LIMS还融合了临床、电子实验室笔记本和SaaS等功能,以满足复杂多样的实验室管理需求。
63 3
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
|
4月前
|
存储 运维 BI
基于C#-VC-MSSQL开发的全套PACS系统源码 3D PACS系统源码:可实现医学影像获取、存档、观片、处理、打印多项应用
PACS的功能价值在于通过连接不同的影像设备,存储与管理图像,图像的调用与后处理,实现资源共享,降低成本,达到提高工作效率、提升医疗水平的目地;
54 1
基于C#-VC-MSSQL开发的全套PACS系统源码  3D PACS系统源码:可实现医学影像获取、存档、观片、处理、打印多项应用
|
4月前
|
存储 监控 C#
在上网行为管理软件中实现C#的跨平台应用
本文介绍了使用C#实现跨平台上网行为管理应用的方法。首先,通过.NET Core SDK创建多操作系统兼容的开发环境。接着,利用HttpClient捕获和记录HTTP请求,示例代码展示了如何捕获请求URL。然后,使用SQLite存储网络行为数据,并提供了创建数据库和插入数据的代码。此外,还讨论了如何跨平台编译应用程序以及如何自动将数据提交到远程服务器。通过这些步骤,可以构建一个能在不同操作系统上运行的上网行为管理系统。
149 3
|
4月前
|
存储 数据采集 API
C# GetField 方法应用实例
C# GetField 方法应用实例