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

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# 提供了**breakcontinue、goto和return**等语句来实现这些功能++。

  • 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# 流程控制的全部内容,如果你在学习过程中有任何疑问或心得,欢迎在评论区留言分享

相关推荐
闲猫3 小时前
go orm GORM
开发语言·后端·golang
李白同学5 小时前
【C语言】结构体内存对齐问题
c语言·开发语言
黑子哥呢?6 小时前
安装Bash completion解决tab不能补全问题
开发语言·bash
青龙小码农6 小时前
yum报错:bash: /usr/bin/yum: /usr/bin/python: 坏的解释器:没有那个文件或目录
开发语言·python·bash·liunx
大数据追光猿6 小时前
Python应用算法之贪心算法理解和实践
大数据·开发语言·人工智能·python·深度学习·算法·贪心算法
彳卸风7 小时前
Unable to parse timestamp value: “20250220135445“, expected format is
开发语言
dorabighead7 小时前
JavaScript 高级程序设计 读书笔记(第三章)
开发语言·javascript·ecmascript
风与沙的较量丶8 小时前
Java中的局部变量和成员变量在内存中的位置
java·开发语言
水煮庄周鱼鱼8 小时前
C# 入门简介
开发语言·c#