第4章 C#程序流程控制(超级详细--这都不会你来找我,肝爆了)


1. 顺序结构

1.1 赋值语句

赋值语句由一个赋值运算符构成,格式为:

变量 = 表达式;
  • 功能:计算赋值号右边的表达式的值,并赋给赋值号左边的变量。
  • 示例int age = 30;
  • 注意:变量必须首先赋值,然后才能引用。赋值号两边的类型必须相同或符合隐式类型转换规则。

1.2 复合赋值语句与连续赋值语句

1.2.1 复合赋值语句

使用+=-=*=/=等运算符构成的赋值语句。首先完成特定的运算,然后再进行赋值运算操作。

  • 示例
    int x = 5; x += 6;
    string s = "abcd"; s += "efjh";
    
1.2.2 连续赋值语句

在一条语句中使用多个赋值运算符进行赋值,可以一次为多个变量赋予相同的值。

  • 示例
    int x, y, z; x = y = z = 6;
    string s1, s2, s3; s1 = s2 = s3 = "efjh";
    

1.3 输入语句

通过计算机的外设把数据送到计算机内存的过程称为输入。C#语言的输入语句常用的有两种形式:

  • Console.Read();
  • Console.ReadLine();
  • 区别ReadLine在输入数据到各变量之后自动换行。

1.4 输出语句

输出是将内存中的数据送到外设的过程。C#语言的输出语句有两种形式:

  • Console.Write(输出项);
  • Console.WriteLine(输出项);
  • 区别Write语句输出后不换行,WriteLine语句按项输出后,自动换行。

1.5 复合语句

复合语句是由若干语句组成的序列,语句之间用分号“;”隔开,并且以{ }括起来,作为一条语句。

1.6 应用实例

1.6.1 【例4-1】计算圆的周长和面积
using System;
namespace P4_1 {
    class Program {
        static void Main(string[] args) {
            const double PI = 3.141;
            double R, L, S;
            Console.Write("请输入圆的半径值:");
            R = double.Parse(Console.ReadLine());
            L = 2 * PI * R;
            S = PI * R * R;
            Console.WriteLine("圆的周长为:{0}", L);
            Console.WriteLine("圆的面积为:{0}", S);
            Console.ReadLine();
        }
    }
}
1.6.2 Parse方法和ToString方法
  • Parse方法:将特定格式的字符串转换为数值。
    • 示例int x = int.Parse("123");
  • ToString方法:将其他数据类型的变量值转换为字符串类型。
    • 示例int x = 123; string s = x.ToString();
1.6.3 【例4-2】实现两数的算术运算:和、差、积、商
using System;
using System.Windows.Forms;

public class SimpleArithmetic : Form
{
    private Label resultLabel;
    private TextBox textBox1;
    private TextBox textBox2;
    private Button addButton;
    private Button subtractButton;
    private Button multiplyButton;
    private Button divideButton;

    public SimpleArithmetic()
    {
        InitializeComponent();
    }

    private void InitializeComponent()
    {
        this.resultLabel = new Label();
        this.textBox1 = new TextBox();
        this.textBox2 = new TextBox();
        this.addButton = new Button();
        this.subtractButton = new Button();
        this.multiplyButton = new Button();
        this.divideButton = new Button();

        // 设置窗体属性
        this.Text = "简单计算器";
        this.Size = new System.Drawing.Size(300, 200);

        // 设置文本框属性
        this.textBox1.Location = new System.Drawing.Point(50, 20);
        this.textBox2.Location = new System.Drawing.Point(50, 50);
        this.textBox1.Size = new System.Drawing.Size(100, 20);
        this.textBox2.Size = new System.Drawing.Size(100, 20);

        // 设置按钮属性
        this.addButton.Location = new System.Drawing.Point(160, 20);
        this.addButton.Size = new System.Drawing.Size(50, 20);
        this.addButton.Text = "加";
        this.addButton.Click += new EventHandler(Add_Click);

        this.subtractButton.Location = new System.Drawing.Point(160, 50);
        this.subtractButton.Size = new System.Drawing.Size(50, 20);
        this.subtractButton.Text = "减";
        this.subtractButton.Click += new EventHandler(Subtract_Click);

        this.multiplyButton.Location = new System.Drawing.Point(160, 80);
        this.multiplyButton.Size = new System.Drawing.Size(50, 20);
        this.multiplyButton.Text = "乘";
        this.multiplyButton.Click += new EventHandler(Multiply_Click);

        this.divideButton.Location = new System.Drawing.Point(160, 110);
        this.divideButton.Size = new System.Drawing.Size(50, 20);
        this.divideButton.Text = "除";
        this.divideButton.Click += new EventHandler(Divide_Click);

        // 设置标签属性
        this.resultLabel.Location = new System.Drawing.Point(50, 140);
        this.resultLabel.Size = new System.Drawing.Size(200, 20);

        // 将控件添加到窗体
        this.Controls.Add(this.textBox1);
        this.Controls.Add(this.textBox2);
        this.Controls.Add(this.addButton);
        this.Controls.Add(this.subtractButton);
        this.Controls.Add(this.multiplyButton);
        this.Controls.Add(this.divideButton);
        this.Controls.Add(this.resultLabel);
    }

    private void Add_Click(object sender, EventArgs e)
    {
        double result = double.Parse(textBox1.Text) + double.Parse(textBox2.Text);
        resultLabel.Text = "结果: " + result.ToString();
    }

    private void Subtract_Click(object sender, EventArgs e)
    {
        double result = double.Parse(textBox1.Text) - double.Parse(textBox2.Text);
        resultLabel.Text = "结果: " + result.ToString();
    }

    private void Multiply_Click(object sender, EventArgs e)
    {
        double result = double.Parse(textBox1.Text) * double.Parse(textBox2.Text);
        resultLabel.Text = "结果: " + result.ToString();
    }

    private void Divide_Click(object sender, EventArgs e)
    {
        try
        {
            double result = double.Parse(textBox1.Text) / double.Parse(textBox2.Text);
            resultLabel.Text = "结果: " + result.ToString();
        }
        catch (DivideByZeroException)
        {
            resultLabel.Text = "错误:除数不能为0";
        }
    }

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new SimpleArithmetic());
    }
}

2. 选择结构

2.1 if 条件语句

2.1.1 单分支if语句

格式:

if (布尔条件表达式) {
    内嵌语句序列1;
}
2.1.2 双分支if语句

格式:

if (布尔条件表达式) {
    内嵌语句序列1;
} else {
    内嵌语句序列2;
}
2.1.3 多分支if语句

格式:

if(表达式1) {
    内嵌语句序列1;
} else if(表达式2) {
    内嵌语句序列2;
} else if(表达式3) {
    ...
} else {
    内嵌语句序列n;
}
2.1.4 【例4-3】商品打折
using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("请输入商品的原价:");
        double originalPrice = Convert.ToDouble(Console.ReadLine());
        double discountPrice = CalculateDiscountPrice(originalPrice);
        Console.WriteLine($"优惠后的价格是:{discountPrice:F2}元");
    }

    static double CalculateDiscountPrice(double originalPrice)
    {
        if (originalPrice <= 1000)
        {
            return originalPrice * 0.9; // 9折优惠
        }
        else
        {
            return originalPrice * 0.8; // 8折优惠
        }
    }
}
2.1.5 【例4-4】学生成绩等级
using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("请输入百分制成绩:");
        int score = Convert.ToInt32(Console.ReadLine());
        string grade = ConvertScoreToGrade(score);
        Console.WriteLine($"对应的五分制成绩是:{grade}");
    }

    static string ConvertScoreToGrade(int score)
    {
        if (score >= 90)
        {
            return "优秀";
        }
        else if (score >= 80)
        {
            return "良";
        }
        else if (score >= 70)
        {
            return "中";
        }
        else if (score >= 60)
        {
            return "及格";
        }
        else
        {
            return "不及格";
        }
    }
}

2.2 switch 语句

格式:

switch(表达式) {
    case 常数表达式:
        语句块
        跳转语句(如breakreturngoto// 其他的case子句
    default:
        语句块
}

2.3 应用实例

2.3.1 【例4-5】判断属相

输入0~11的整数,判断其对应的十二生肖。

using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("请输入0~11之间的整数,以确定对应的十二生肖:");
        int number = Convert.ToInt32(Console.ReadLine());
        string zodiacSign = "";

        switch (number)
        {
            case 0:
                zodiacSign = "猴";
                break;
            case 1:
                zodiacSign = "鸡";
                break;
            case 2:
                zodiacSign = "狗";
                break;
            case 3:
                zodiacSign = "猪";
                break;
            case 4:
                zodiacSign = "鼠";
                break;
            case 5:
                zodiacSign = "牛";
                break;
            case 6:
                zodiacSign = "虎";
                break;
            case 7:
                zodiacSign = "兔";
                break;
            case 8:
                zodiacSign = "龙";
                break;
            case 9:
                zodiacSign = "蛇";
                break;
            case 10:
                zodiacSign = "马";
                break;
            case 11:
                zodiacSign = "羊";
                break;
            default:
                Console.WriteLine("输入的数字不在0~11之间,请重新输入。");
                return;
        }

        Console.WriteLine($"对应的十二生肖是:{zodiacSign}");
    }
}
2.3.2 【例4-6】学生成绩输入程序

要求两个文本框不能为空且成绩应在0~100之间,单选按钮必须有一个被选择。

using System;
using System.Windows.Forms;

public class Form1 : Form
{
    private TextBox textBoxScore1;
    private TextBox textBoxScore2;
    private RadioButton radioButton1;
    private RadioButton radioButton2;
    private Button buttonSubmit;

    public Form1()
    {
        InitializeComponent();
    }

    private void InitializeComponent()
    {
        this.textBoxScore1 = new TextBox();
        this.textBoxScore2 = new TextBox();
        this.radioButton1 = new RadioButton();
        this.radioButton2 = new RadioButton();
        this.buttonSubmit = new Button();

        this.buttonSubmit.Text = "Submit";
        this.buttonSubmit.Click += new EventHandler(SubmitButton_Click);

        this.radioButton1.Text = "Option 1";
        this.radioButton2.Text = "Option 2";

        this.Controls.Add(this.textBoxScore1);
        this.Controls.Add(this.textBoxScore2);
        this.Controls.Add(this.radioButton1);
        this.Controls.Add(this.radioButton2);
        this.Controls.Add(this.buttonSubmit);

        this.Load += new EventHandler(Form1_Load);
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        this.textBoxScore1.Location = new System.Drawing.Point(50, 50);
        this.textBoxScore2.Location = new System.Drawing.Point(50, 100);
        this.radioButton1.Location = new System.Drawing.Point(50, 150);
        this.radioButton2.Location = new System.Drawing.Point(50, 200);
        this.buttonSubmit.Location = new System.Drawing.Point(50, 250);
    }

    private void SubmitButton_Click(object sender, EventArgs e)
    {
        if (string.IsNullOrEmpty(textBoxScore1.Text) || string.IsNullOrEmpty(textBoxScore2.Text))
        {
            MessageBox.Show("两个文本框不能为空。", "验证失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return;
        }

        if (!int.TryParse(textBoxScore1.Text, out int score1) || score1 < 0 || score1 > 100)
        {
            MessageBox.Show("第一个文本框中的成绩应在0到100之间。", "验证失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return;
        }

        if (!int.TryParse(textBoxScore2.Text, out int score2) || score2 < 0 || score2 > 100)
        {
            MessageBox.Show("第二个文本框中的成绩应在0到100之间。", "验证失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return;
        }

        if (!radioButton1.Checked && !radioButton2.Checked)
        {
            MessageBox.Show("必须选择一个单选按钮。", "验证失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return;
        }

        MessageBox.Show("验证成功!", "验证成功", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
}
2.3.3 【例4-7】航空公司票价优惠

某航空公司规定在旅游的旺季7-9月份,如果订票数超过20张,票价优惠15%,20张以下优惠5%;在旅游的淡季1~5月份、10月份、11月份,如果订票数超过20张,票价优惠30%,20张以下优惠20%;其他情况一律优惠10%。试设计程序,根据月份和订票张数决定票价的优惠率

using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("请输入月份(1-12):");
        int month = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("请输入订票张数:");
        int tickets = Convert.ToInt32(Console.ReadLine());
        double discountRate = CalculateDiscountRate(month, tickets);
        Console.WriteLine($"优惠率是:{discountRate * 100:F2}%");
    }

    static double CalculateDiscountRate(int month, int tickets)
    {
        // 旺季:7月到9月
        // 淡季:1月到5月,10月,11月
        // 其他月份:6月,12月
        if (month >= 7 && month <= 9)
        {
            if (tickets > 20)
            {
                return 0.85; // 旺季超过20张,优惠15%
            }
            else
            {
                return 0.95; // 旺季20张以下,优惠5%
            }
        }
        else if (month >= 1 && month <= 5 || month == 10 || month == 11)
        {
            if (tickets > 20)
            {
                return 0.70; // 淡季超过20张,优惠30%
            }
            else
            {
                return 0.80; // 淡季20张以下,优惠20%
            }
        }
        else
        {
            return 0.90; // 其他情况,优惠10%
        }
    }
}

3. 循环结构

3.1 for 循环语句

3.1.1 语法格式
for (表达式1; 表达式2; 表达式3) {
    循环语句序列;
}
3.1.2 【例4-8】使用for语句计算1+2+3+…100。

计算1+2+3+…100的值。

int sum = 0;
for(int k = 1; k <= 100; k = k + 1) {
    sum = sum + k;
}
Console.WriteLine("从1加到100值为" + sum.ToString());

3.2 while、do…while语句

3.2.1 while语句

语法格式:

while (条件表达式) {
    语句序列;
}
3.2.2 do…while语句

语法格式:

do {
    语句序列;
} while (布尔条件表达式);
3.2.3 【例4-9】使用do…while语句实现1+2+3+…100。

使用do…while语句实现1+2+3+…100。

int sum = 0;
int k = 1;
do {
    sum = sum + k;
    k = k + 1;
} while (k <= 100);
Console.WriteLine("从1加到100值为" + sum.ToString());

3.3 循环嵌套

循环嵌套是指在一个循环结构内部再包含另一个循环结构。这种结构在编程中非常常见,尤其是在需要处理多维数据或进行复杂迭代时。下面我将分别解释几种常见的循环嵌套:

3.3.1 for 循环嵌套

for 循环通常用于在已知迭代次数的情况下进行循环。当嵌套时,外层循环每迭代一次,内层循环就会完全执行一次。

for (int i = 0; i < 3; i++) // 外层循环
{
    for (int j = 0; j < 2; j++) // 内层循环
    {
        Console.WriteLine($"外层索引: {i}, 内层索引: {j}");
    }
}

输出:

外层索引: 0, 内层索引: 0
外层索引: 0, 内层索引: 1
外层索引: 1, 内层索引: 0
外层索引: 1, 内层索引: 1
外层索引: 2, 内层索引: 0
外层索引: 2, 内层索引: 1
3.3.2 while 循环嵌套

while 循环在条件为真时持续执行。当嵌套时,同样地,外层循环每迭代一次,内层循环就会完全执行一次。

int i = 0;
while (i < 3)
{
    int j = 0;
    while (j < 2)
    {
        Console.WriteLine($"外层索引: {i}, 内层索引: {j}");
        j++;
    }
    i++;
}
3.3.3 do-while 循环嵌套

do-while 循环至少执行一次,之后每次迭代都会检查条件。嵌套方式与 while 循环类似。

int i = 0;
do
{
    int j = 0;
    do
    {
        Console.WriteLine($"外层索引: {i}, 内层索引: {j}");
        j++;
    } while (j < 2);
    i++;
} while (i < 3);
  • 外层循环:控制整体的迭代次数。
  • 内层循环:在外层循环的每次迭代中都会完全执行一次。

应用场景

  1. 多维数组处理:例如,处理一个二维数组时,通常需要使用两层循环。
  2. 图形打印:例如,打印一个图案,可能需要在行和列上进行迭代。
  3. 算法实现:例如,在搜索算法中,可能需要在多个维度上进行搜索。

循环嵌套可以提高代码的灵活性和复用性,但同时也可能导致代码难以理解和调试。因此,在设计循环嵌套时,需要仔细考虑逻辑和结构。

3.4 应用实例

3.4.1 【例4-10】使用计数器循环语句(for)要求输出大于5的数 。
using System;

class Program
{
    static void Main()
    {
        for (int i = 1; i <= 10; i++)
        {
            if (i <= 5)
            {
                continue; // 如果i小于或等于5,跳过当前循环的剩余部分
            }
            Console.WriteLine(i); // 输出大于5的数
        }
    }
}
3.4.2 【例4-11】计算n!,假设n=10。

计算n!,假设n=10。

int sum = 1;
for (int k = 1; k <= 10; k++) {
    sum = sum * k;
}
Console.WriteLine(sum.ToString());
3.4.3 【例4-12】求300以内的素数
static private Boolean IsSuShu(int x) {
    Boolean Yes = true;
    for (int i = 2; i <= Math.Sqrt(x); i++) {
        if ((x % i) == 0) {
            Yes = false;
        }
    }
    return Yes;
}
for (int i = 2; i < 300; i++) {
    if (IsSuShu(i) == true) {
        Console.Write(i.ToString());
        Console.Write(" ");
    }
}
3.4.4 【例4-13】对折纸的厚度—珠穆朗玛峰

对折纸达到珠穆朗玛峰的高度。

int n = 0;
float h;
Console.Write("请输入纸的厚度:\n");
h = float.Parse(Console.ReadLine());
while (h < 8844430) {
    n = n + 1;
    h = 2 * h;
}
Console.WriteLine(n.ToString());
3.4.5 【例4-14】编程实现九九乘法表。
string s = "";
int sum;
for (int i = 1; i < 10; i = i + 1) {
    s = "";
    for (int k = 1; k <= i; k = k + 1) {
        sum = k * i;
        s = s + k.ToString() + "×" + i.ToString() + "=" + sum.ToString() + ";";
    }
    Console.WriteLine(s);
}

本章小结

C#程序的流程控制是通过顺序结构、选择结构和循环结构以及转移语句实现的。

  • if语句
  • switch语句
  • while语句
  • do-while语句
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浪里个浪的1024

你的鼓励将是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值