让用户输入班级人数,再依次输入该班级每个学员的姓名和成绩,按成绩进行排序,按成绩由高到低依次输出学生的姓名和成绩!我已经按题目要求解决,但是其它解法还没有,求解!下面是我的一种解法:
static void Main(string[] args)
{
Console.WriteLine("请输入班级人数:");
int n = Convert.ToInt32(Console.ReadLine());
//定义存储分数的数组
double[] s=new double[n];
//定义存储姓名的数组
string[] name = new string[n];
for (int i = 0; i < n; i++)
{
Console.WriteLine("请输入学员姓名:");
name[i] = Console.ReadLine();
Console.WriteLine("请输入"+name[i]+"的分数:");
s[i] = Convert.ToDouble(Console.ReadLine());
//条件判断分数的合法性
if (s[i] <= 0 || s[i] >= 100)
{
Console.WriteLine("非法的分数!分数应在0到100之间!请重新输入。");
Console.ReadKey();
return;
}
}
//用冒泡排序法通过两层循环同时交换姓名和对应的成绩
for (int i = 0; i <n-1; i++)
{
for (int j = 0; j < n-i-1; j++)
{
//定义交换学员成绩的中间变量
double t;
//定义交换学员姓名的中间变量
string tname;
if (s[j] < s[j+1])
{
//如果条件满足,交换成绩并交换对应的学员姓名
t = s[j];
s[j] = s[j + 1];
s[j + 1] = t;
tname = name[j];
name[j] = name[j + 1];
name[j + 1] = tname;
}
}
}
//按降序输出学员的姓名和对应的成绩
for (int i = 0; i < n ; i++)
{
Console.WriteLine(name[i]+":"+s[i]);
}
Console.ReadKey();
} |