C#初级教程(4)——流程控制:从基础到实践

devtools/2025/2/25 3:01:01/

1.为什么需要流程控制

        有时候,需要根据程序运行时的具体环境,有选择地执行不同代码段;而有时候,则需要反复执行同一段代码。这时候,流程控制中的分支和循环就发挥了关键作用。分支能让代码根据条件判断结果来决定执行路径,循环则负责重复执行特定代码,提高代码的复用性和效率


2.布尔运算符:条件判断的基石

        在进行条件判断时,布尔运算符是不可或缺的工具。C# 提供了丰富的布尔运算符,包括比较运算符(如==!=<><=>=)、逻辑运算符!&|^&&||)以及布尔赋值运算符&=|=^= 。这些运算符用于比较值、组合条件以及对布尔值进行操作,帮助我们构建复杂的条件表达式。例如:

int num1 = 10;
int num2 = 20;
bool result1 = num1 < num2; // true
bool result2 = num1 != num2 && num1 > 5; // true

        需要注意的是,逻辑与(&&)和逻辑或(||)存在短路特性&&运算符在第一个操作数为false时,不会计算第二个操作数;||运算符在第一个操作数为true时,不会计算第二个操作数。这一特性在优化代码性能和避免不必要的计算时非常有用。


3.分支结构:灵活决策的实现

(1)if 语句

if语句是最基本的分支结构,它根据条件表达式的结果来决定是否执行特定代码块。语法如下:

if (condition)
{// 当condition为true时执行的代码
}

例如,判断一个数是否为正数:

int number = 15;
if (number > 0)
{Console.WriteLine($"{number}是正数");
}

(2)if - else 语句

if - else语句在if的基础上增加了条件不满足时的执行路径

if (condition)
{// 当condition为true时执行的代码
}
else
{// 当condition为false时执行的代码
}

比如,判断一个数的奇偶性:

int num = 7;
if (num % 2 == 0)
{Console.WriteLine($"{num}是偶数");
}
else
{Console.WriteLine($"{num}是奇数");
}

(3)if - else if - else 语句

这种结构允许根据多个条件进行多分支判断

if (condition1)
{// 当condition1为true时执行的代码
}
else if (condition2)
{// 当condition1为false且condition2为true时执行的代码
}
else
{// 当所有条件都为false时执行的代码
}

以成绩等级评定为例:

int score = 75;
if (score >= 90)
{Console.WriteLine("成绩等级为优");
}
else if (score >= 80)
{Console.WriteLine("成绩等级为良");
}
else if (score >= 60)
{Console.WriteLine("成绩等级为中");
}
else
{Console.WriteLine("成绩等级为差");
}

(4)三元运算符

三元运算符(? :是一种简洁的条件表达式,它可以根据条件返回两个值中的一个。

result = condition? valueIfTrue : valueIfFalse;

例如,判断一个数是否大于 10 并返回相应的字符串:

int num = 12;
string result = num > 10? "大于10" : "小于等于10";
Console.WriteLine(result);

(5)switch 语句

switch语句用于将一个变量或表达式与多个常量值进行比较,并根据匹配结果执行相应的代码块。

switch (expression)
{case value1:// 当expression等于value1时执行的代码break;case value2:// 当expression等于value2时执行的代码break;default:// 当expression与所有case值都不匹配时执行的代码break;
}

假设我们有一个表示季节的整数变量,用switch语句输出对应的季节名称:

int season = 2;
switch (season)
{case 1:Console.WriteLine("春季");break;case 2:Console.WriteLine("夏季");break;case 3:Console.WriteLine("秋季");break;case 4:Console.WriteLine("冬季");break;default:Console.WriteLine("无效的季节值");break;
}

switch语句还有一些特殊用法,比如与goto结合,以及合并多个case来处理相同的逻辑

switch (number)
{case 1:Console.WriteLine("数字是1");goto case 2;case 2:Console.WriteLine("数字是2或者从1跳转过来");break;case 3:case 4:Console.WriteLine("数字是3或4");break;
}

4.循环结构:重复执行的利器

(1)for 循环

for循环适用于已知循环次数的场景,它的语法结构包含初始化循环条件每次循环后的操作

for (initialization; condition; operation)
{// 循环体代码
}

例如,输出 1 到 10 的整数:

for (int i = 1; i <= 10; i++)
{Console.WriteLine(i);
}

(2)while 循环

while循环在条件表达式为true时,持续执行循环体代码

while (condition)
{// 循环体代码
}

比如,计算 1 到 100 的累加和:

int sum = 0;
int num = 1;
while (num <= 100)
{sum += num;num++;
}
Console.WriteLine($"1到100的累加和为:{sum}");

(3)do - while 循环

do - while循环与while循环类似,但它会先执行一次循环体,再判断条件

do
{// 循环体代码
} while (condition);

do - while循环实现输入验证,确保用户输入的是正数:

int input;
do
{Console.Write("请输入一个正数:");input = int.Parse(Console.ReadLine());
} while (input <= 0);

(4)循环中断语句

在循环过程中,我们常常需要根据特定条件提前终止循环或跳过某次循环。C# 提供了breakcontinuegotoreturn等语句来实现这些功能

  • break语句用于立即终止当前循环,跳出循环体。例如,在遍历数组时,找到目标元素后停止遍历:
int[] numbers = { 1, 3, 5, 7, 9 };
int target = 5;
for (int i = 0; i < numbers.Length; i++)
{if (numbers[i] == target){Console.WriteLine($"找到目标元素,索引为:{i}");break;}
}

  • continue语句跳过当前循环的剩余部分,直接开始下一次循环。比如,只输出 1 到 10 中的偶数:
for (int i = 1; i <= 10; i++)
{if (i % 2 != 0){continue;}Console.WriteLine(i);
}

  • goto语句可以跳转到指定的标签位置,但过度使用会使代码结构混乱,应谨慎使用。例如:
int count = 0;
start:
if (count < 5)
{Console.WriteLine(count);count++;goto start;
}

   return语句用于跳出当前函数,同时也会终止包含它的循环。在方法中,根据特定条件提前返回结果:

int CalculateSum(int[] numbers)
{int sum = 0;foreach (int num in numbers){if (num < 0){return -1; // 遇到负数提前返回}sum += num;}return sum;
}

5.练习

(1). 输入 5 个整数,求出其中的最大值和最小值并显示

using System;class Program
{static void Main(){int max = int.MinValue;int min = int.MaxValue;Console.WriteLine("请输入 5 个整数:");for (int i = 0; i < 5; i++){Console.Write($"请输入第 {i + 1} 个整数:");int num = int.Parse(Console.ReadLine());if (num > max){max = num;}if (num < min){min = num;}}Console.WriteLine($"最大值是:{max}");Console.WriteLine($"最小值是:{min}");}
}

(2). 让用户输入三个整数,前两个是操作数,第三个是 0 - 4 之间的数,0 代表加法,1 代表减法,2 代表乘法,3 代表除法,4 代表取模运算,计算结果

using System;class Program
{static void Main(){Console.Write("请输入第一个整数:");int num1 = int.Parse(Console.ReadLine());Console.Write("请输入第二个整数:");int num2 = int.Parse(Console.ReadLine());Console.Write("请输入 0 - 4 之间的一个数(0:加法,1:减法,2:乘法,3:除法,4:取模):");int operation = int.Parse(Console.ReadLine());double result = 0;switch (operation){case 0:result = num1 + num2;break;case 1:result = num1 - num2;break;case 2:result = num1 * num2;break;case 3:if (num2 != 0){result = (double)num1 / num2;}else{Console.WriteLine("除数不能为 0");return;}break;case 4:if (num2 != 0){result = num1 % num2;}else{Console.WriteLine("除数不能为 0");return;}break;default:Console.WriteLine("输入的操作数无效");return;}Console.WriteLine($"计算结果是:{result}");}
}

(3). 求出 1 - 1500 之间的所有能被 9 整除的数,并计算和输出每 6 个的和

using System;class Program
{static void Main(){int count = 0;int sum = 0;for (int i = 1; i <= 1500; i++){if (i % 9 == 0){sum += i;count++;if (count % 6 == 0){Console.WriteLine($"每 6 个能被 9 整除的数的和是:{sum}");sum = 0;}}}}
}

(4). 编写一个控制台程序,分别输出 1 - 150 之间的平方、立方

using System;class Program
{static void Main(){for (int i = 1; i <= 150; i++){int square = i * i;int cube = i * i * i;Console.WriteLine($"数字 {i} 的平方是:{square},立方是:{cube}");}}
}

(5). 青蛙繁殖问题。设有一对新生的青蛙,从第四个月开始它们每个月都生一对青蛙,新生的青蛙从第四个月开始又每个月生一对青蛙。按此规律,并假定青蛙没有死亡,25 个月后共有多少对青蛙?

using System;class Program
{static void Main(){int month = 25;int first = 1;int second = 1;int third = 1;int current = 0;for (int i = 4; i <= month; i++){current = first + third;first = second;second = third;third = current;}Console.WriteLine($"25 个月后共有 {current} 对青蛙");}
}

(6). 编程输出 1 - 150 中能被 4 整除但不能被 7 整除的数,并统计有多少个这样的数

using System;class Program
{static void Main(){int count = 0;for (int i = 1; i <= 150; i++){if (i % 4 == 0 && i % 7 != 0){Console.WriteLine(i);count++;}}Console.WriteLine($"共有 {count} 个这样的数");}
}

(7). 编程输出 1500 以内的所有素数

using System;class Program
{static void Main(){for (int num = 2; num <= 1500; num++){bool isPrime = true;for (int i = 2; i < num; i++){if (num % i == 0){isPrime = false;break;}}if (isPrime){Console.WriteLine(num);}}}
}

(8). 编程输出十一乘法表

using System;class Program
{static void Main(){for (int i = 1; i <= 11; i++){for (int j = 1; j <= i; j++){Console.Write($"{j} x {i} = {i * j}\t");}Console.WriteLine();}}
}

(9). 编写一个掷骰子 150 次的程序,并打印出各种点数的出现次数

using System;class Program
{static void Main(){int count1 = 0;int count2 = 0;int count3 = 0;int count4 = 0;int count5 = 0;int count6 = 0;Random random = new Random();for (int i = 0; i < 150; i++){int dice = random.Next(1, 7);switch (dice){case 1:count1++;break;case 2:count2++;break;case 3:count3++;break;case 4:count4++;break;case 5:count5++;break;case 6:count6++;break;}}Console.WriteLine($"点数 1 出现的次数:{count1}");Console.WriteLine($"点数 2 出现的次数:{count2}");Console.WriteLine($"点数 3 出现的次数:{count3}");Console.WriteLine($"点数 4 出现的次数:{count4}");Console.WriteLine($"点数 5 出现的次数:{count5}");Console.WriteLine($"点数 6 出现的次数:{count6}");}
}

(10). 一个控制台应用程序,输出 1 - 7 的平方值,分别用 for、while、do - while 语句实现

using System;class Program
{static void Main(){// for 语句实现Console.WriteLine("使用 for 语句:");for (int i = 1; i <= 7; i++){Console.WriteLine($"数字 {i} 的平方是:{i * i}");}// while 语句实现Console.WriteLine("使用 while 语句:");int j = 1;while (j <= 7){Console.WriteLine($"数字 {j} 的平方是:{j * j}");j++;}// do - while 语句实现Console.WriteLine("使用 do - while 语句:");int k = 1;do{Console.WriteLine($"数字 {k} 的平方是:{k * k}");k++;} while (k <= 7);}
}

(11). 一个控制台应用程序,要求用户输入 7 个大写字母,如果用户输入的信息不满足要求,提示帮助信息并要求重新输入

using System;class Program
{static void Main(){bool validInput = false;while (!validInput){Console.WriteLine("请输入 7 个大写字母:");string input = Console.ReadLine();if (input.Length == 7){validInput = true;for (int i = 0; i < 7; i++){if (!char.IsUpper(input[i])){validInput = false;break;}}}if (!validInput){Console.WriteLine("输入无效,请输入 7 个大写字母。");}}Console.WriteLine("输入有效。");}
}

(12). 一个控制台应用程序,要求完成下列功能

  1. 接收一个整数 n。
  2. 如果接收的值 n 为正数,输出 1 - n 间的全部整数。
  3. 如果接收的值 n 为负值,用 break 退出循环(这里假设用循环接收输入)。
  4. 如果 n 为 0 的话,继续接收下一个整数。
using System;class Program
{static void Main(){while (true){Console.Write("请输入一个整数:");int n = int.Parse(Console.ReadLine());if (n > 0){for (int i = 1; i <= n; i++){Console.WriteLine(i);}}else if (n < 0){break;}}}
}

(13). 一个控制台应用程序,求 2000 之内的所有 “完数”

using System;class Program
{static void Main(){for (int num = 2; num <= 2000; num++){int sum = 0;for (int i = 1; i < num; i++){if (num % i == 0){sum += i;}}if (sum == num){Console.WriteLine(num);}}}
}

6.总结

        通过本文对 C# 流程控制的详细讲解,相信大家对分支和循环结构有了更深入的理解。从基本的条件判断到复杂的多分支决策,再到灵活的循环控制,这些知识是编写高效、健壮 C# 程序的基础。希望大家在实际编程中不断练习和运用,逐渐掌握流程控制的技巧,提升自己的编程能力。以上就是本期关于 C# 流程控制的全部内容,如果你在学习过程中有任何疑问或心得,欢迎在评论区留言分享


http://www.ppmy.cn/devtools/161479.html

相关文章

Java List 自定义对象排序 Java 8 及以上版本使用 Stream API

从 Java 8 开始&#xff0c;你可以使用 Stream API 对 List 进行排序&#xff0c;这种方式更加简洁和灵活。 以下是一个示例代码&#xff1a; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors;// 自定…

基于Java的实时数据流处理框架设计与实现

基于Java的实时数据流处理框架设计与实现 在大数据时代&#xff0c;实时数据流处理成为了数据分析与处理的重要组成部分。尤其是在需要快速响应的场景中&#xff0c;数据流处理显得尤为关键。本文将详细介绍如何设计与实现一个基于Java的实时数据流处理框架&#xff0c;并通过…

网络可靠性要求

目录 一、背景介绍 二、环路引发的危害 1、广播风暴 2、MAC 地址表震荡 三、STP生成树 1、STP的作用 2、STP工作过程 3、根桥选举 4、根端口选举 5、指定端口选举 6、BPDU报文分析 7、计时器 8、端口状态转化 总结 一、背景介绍 为了提高网络可靠性&#xff0c;交换网络…

设计模式之装饰器设计模式/包装设计模式

装饰器设计模式&#xff08;Decorator Pattern&#xff09; 也叫包装设计模式&#xff0c;属于结构型模式&#xff0c;它是作为现有的类的一个包装&#xff0c;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其结构 给对象增加功能&#xff0c;一般两种方式&#…

解决DeepSeek服务器繁忙问题的实用指南

目录 简述 1. 关于服务器繁忙 1.1 服务器负载与资源限制 1.2 会话管理与连接机制 1.3 客户端配置与网络问题 2. 关于DeepSeek服务的备用选项 2.1 纳米AI搜索 2.2 硅基流动 2.3 秘塔AI搜索 2.4 字节跳动火山引擎 2.5 百度云千帆 2.6 英伟达NIM 2.7 Groq 2.8 Firew…

mybatis从接口直接跳到xml的插件

在使用 MyBatis(包括 MyBatis-Plus)时,如果你希望从接口方法直接跳转到对应的 XML 映射文件中的 SQL 语句定义,可以借助一些开发工具或插件来实现这一功能。以下是几种常见的方法和插件推荐: 方法一:使用 IDE 内置功能 IntelliJ IDEA IntelliJ IDEA 提供了对 MyBatis …

计算机视觉算法

计算机视觉算法简介 计算机视觉(Computer Vision)作为人工智能的一个重要分支,致力于让计算机能够“看”并理解图像或视频中的内容。其应用领域广泛,从自动驾驶汽车、医疗影像分析到增强现实和安全监控等。随着深度学习技术的发展,计算机视觉已经取得了显著的进展,尤其是…

【AI】VS Code中使用GitHub Copilot

在VS Code中使用GitHub Copilot可以显著提升开发效率和代码质量&#xff0c;以下是其主要优势&#xff1a; 1. 代码自动补全 智能建议&#xff1a;Copilot能根据上下文提供代码补全建议&#xff0c;减少手动输入。 多语言支持&#xff1a;支持多种编程语言&#xff0c;适用于不…