VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > c#编程 >
  • 流程控制综合应用——用c#学生成绩分级系统

第一部分:C#基础入门
实例3:流程控制综合应用——学生成绩分级系统
实例介绍
本实例通过学生成绩分级系统,综合运用循环、条件判断、输入验证等核心流程控制语法,实现从输入到统计的完整流程。系统vb.net教程C#教程python教程SQL教程access 2010教程
支持批量输入学生成绩、自动分级、统计各等级人数及计算平均分,帮助读者掌握流程控制的组合使用逻辑,理解变量作用域与数据验证的重要性。

需求分析

批量输入:支持输入任意数量的学生姓名与成绩;

成绩验证:确保成绩在0-100之间,无效输入时提示并重新输入;

自动分级:按成绩划分等级(优秀/良好/中等/及格/不及格);

统计分析:计算总分、平均分,统计各等级人数;

结果输出:清晰展示单个学生信息、整体统计结果。

代码实现

  csharp
using System;

 

namespace FlowControlDemo

{

    class StudentGradeSystem

    {

        static void Main(string[] args)

        {

            // 1. 输入学生人数(验证:正整数)

            int studentCount;

            Console.Write("请输入学生人数:");

            while (!int.TryParse(Console.ReadLine(), out studentCount) || studentCount <= 0)

            {

                Console.WriteLine("输入无效!请输入正整数。");

                Console.Write("请输入学生人数:");

            }

 

            // 2. 初始化统计变量

            int totalScore = 0;

            int excellentCount = 0, goodCount = 0, mediumCount = 0, passCount = 0, failCount = 0;

 

            // 3. 循环输入每个学生信息

            for (int i = 0; i < studentCount; i++)

            {

                Console.WriteLine($"
===== 第{i + 1}个学生 =====");

                

                // 输入姓名

                Console.Write("姓名:");

                string name = Console.ReadLine().Trim();

                if (string.IsNullOrWhiteSpace(name)) name = $"匿名学生{i + 1}"; // 处理空姓名

 

                // 输入成绩(验证:0-100的整数)

                int score;

                do

                {

                    Console.Write("成绩(0-100):");

                } while (!int.TryParse(Console.ReadLine(), out score) || score < 0 || score > 100);

 

                // 4. 成绩分级

                string level;

                if (score >= 90) level = "优秀";

                else if (score >= 80) level = "良好";

                else if (score >= 70) level = "中等";

                else if (score >= 60) level = "及格";

                else level = "不及格";

 

                // 5. 更新统计

                totalScore += score;

                switch (level)

                {

                    case "优秀": excellentCount++; break;

                    case "良好": goodCount++; break;

                    case "中等": mediumCount++; break;

                    case "及格": passCount++; break;

                    case "不及格": failCount++; break;

                }

 

                // 输出单个学生结果

                Console.WriteLine($"→ 学生 {name}:成绩{score}分,等级「{level}」");

            }

 

            // 6. 计算平均分(避免整数除法)

            double averageScore = (double)totalScore / studentCount;

 

            // 7. 输出整体统计结果

            Console.WriteLine("
===== 成绩统计结果 =====");

            Console.WriteLine($"总人数:{studentCount}人");

            Console.WriteLine($"总分:{totalScore}分,平均分:{averageScore:F2}分"); // F2保留两位小数

            Console.WriteLine("
等级分布:");

            Console.WriteLine($"优秀:{excellentCount}人 ({(double)excellentCount/studentCount:P2})"); // P2显示百分比

            Console.WriteLine($"良好:{goodCount}人 ({(double)goodCount/studentCount:P2})");

            Console.WriteLine($"中等:{mediumCount}人 ({(double)mediumCount/studentCount:P2})");

            Console.WriteLine($"及格:{passCount}人 ({(double)passCount/studentCount:P2})");

            Console.WriteLine($"不及格:{failCount}人 ({(double)failCount/studentCount:P2})");

 

            // 等待退出

            Console.WriteLine("
按任意键退出...");

            Console.ReadKey();

        }

    }

}

逐行讲解

  1. 学生人数输入与验证

    csharp

int studentCount;

Console.Write("请输入学生人数:");

while (!int.TryParse(Console.ReadLine(), out studentCount) || studentCount <=0)

{

    Console.WriteLine("输入无效!请输入正整数。");

    Console.Write("请输入学生人数:");

}

int.TryParse:尝试将输入字符串转为整数,成功则返回true并赋值给studentCount,避免输入非数字导致崩溃。

while循环:持续验证直到输入正整数(studentCount>0)。

  1. 统计变量初始化

    csharp

int totalScore =0;

int excellentCount=0, goodCount=0, mediumCount=0, passCount=0, failCount=0;

声明并初始化统计变量:总分、各等级人数,初始值均为0,用于后续累加。

  1. 循环输入学生信息

    csharp

for(int i=0; i<studentCount; i++)

{

    // ...输入姓名、成绩、分级、统计...

}

for循环:已知学生人数,循环studentCount次,每次处理一个学生。

  1. 姓名输入与处理

    csharp

Console.Write("姓名:");

string name = Console.ReadLine().Trim();

if(string.IsNullOrWhiteSpace(name)) name = $"匿名学生{i+1}";

Trim():去除姓名前后空格,避免空字符串。

空姓名处理:若用户未输入姓名,自动生成“匿名学生X”。

  1. 成绩输入与验证

    csharp

int score;

do

{

    Console.Write("成绩(0-100):");

} while (!int.TryParse(Console.ReadLine(), out score) || score<0 || score>100);

do-while循环:至少执行一次输入,直到输入0-100的整数。

验证逻辑:非数字(TryParse失败)或超出范围(score<0/score>100)均重新输入。

  1. 成绩分级

    csharp

string level;

if(score>=90) level="优秀";

else if(score>=80) level="良好";

else if(score>=70) level="中等";

else if(score>=60) level="及格";

else level="不及格";

if-else if-else:按成绩范围分级,逻辑清晰,适合连续范围判断。

  1. 统计更新

    csharp

totalScore += score;

switch(level)

{

    case "优秀": excellentCount++; break;

    case "良好": goodCount++; break;

    case "中等": mediumCount++; break;

    case "及格": passCount++; break;

    case "不及格": failCount++; break;

}

总分累加:totalScore += score等价于totalScore = totalScore + score。

switch语句:根据等级更新对应统计变量,break避免穿透到下一个case。

  1. 平均分计算与输出

    csharp

double averageScore = (double)totalScore / studentCount;

Console.WriteLine($"总分:{totalScore}分,平均分:{averageScore:F2}分");

类型转换:将totalScore(int)转为double,避免整数除法(如100/3=33而非33.33)。

格式说明符:F2保留两位小数,P2显示百分比(如0.25→25.00%)。

基础知识拓展

  1. 循环类型选择

循环类型
适用场景
示例

for
已知循环次数
输入固定数量的学生

while
未知次数,可能不执行
输入学生人数直到正确

do-while
未知次数,至少执行一次
成绩验证(必须输入一次)

  1. 条件判断优化

if-else if-else:适合连续范围判断(如成绩分级)。

switch(C#8+范围模式):更简洁的范围判断,替代冗长的if-else:

  csharp
      
level = score switch

{

    >=90 => "优秀",

    >=80 => "良好",

    >=70 => "中等",

    >=60 => "及格",

    _ => "不及格" // 默认情况

};
  1. 变量作用域

局部变量:在循环内声明的变量(如name、score),每次循环重新创建,仅在当前迭代有效。

全局变量(相对循环):循环外声明的变量(如totalScore),作用域覆盖整个循环,用于累加统计。

  1. 输入验证最佳实践

TryParse优先:避免Convert.ToInt32(输入非数字会抛出异常)。

范围验证:确保输入值在合理区间(如成绩0-100)。

友好提示:明确告知用户错误原因(如“请输入正整数”而非“输入错误”)。

扩展思考

文件交互:从CSV文件读取学生成绩,处理后保存到新文件(需引用System.IO)。

排序功能:将学生成绩按从高到低排序,输出排名(需用List存储学生信息)。

中位数计算:统计成绩的中位数(需排序后取中间值)。

多班级支持:输入多个班级的成绩,分别统计每个班级的结果。

类封装:定义Student类(包含Name、Score、Level属性),用List管理学生列表。

图形化界面:将控制台程序改为WPF/WinForms应用,提供更直观的交互(如表格展示成绩)。

总结
本实例通过学生成绩分级系统,综合运用了循环、条件判断、输入验证等流程控制核心语法,同时覆盖了变量作用域、类型转换、格式化输出等基础知识。通过扩展思考,可进一步提升程序的实用性与扩展性,为后续学习面向对象编程打下基础。

本站原创,转载请注明出处:https://www.xin3721.com/ArticlecSharp/c49394.html


相关教程