一、练习题:使用结构体输入学员信息,学号 姓名 分数
排序之后按分数从高到低输出
class Program
{
//用户自定义,我们自己定义这种数据类型
public struct student
{
public int Code;//成员变量
public string Name;//成员
public double Degree;//成员
}
//主函数,一个程序有且只有一个
static void Main(string[] args)
{
#region==结构体变量定义==
//student s = new student();//根据student类型,定义了一个结构体变量
//s.Code = 1;
//s.Name = "张三";
//s.Degree = 87;
#endregion
//1.输入学生信息
Console.Write("请输入学生的人数:");
int renshu = int.Parse(Console.ReadLine());
student[] shuzu = new student[renshu];//根据人数定义数组容器
for (int i = 0; i < renshu; i++)//根据人数去循环输入学生信息
{
student s = new student();
Console.Write("请输入第{0}个学生的学号:", i + 1);//索引为零时,是第一个,显示要加一
shuzu[i].Code = int.Parse(Console.ReadLine());//把信息存进数组,再转换
Console.Write("请输入第{0}个学生的姓名:", i + 1);
shuzu[i].Name = Console.ReadLine();
Console.Write("请输入第{0}个学生的分数:", i + 1);
shuzu[i].Degree = double.Parse(Console.ReadLine());
}
//2.排序
for (int i = 0; i < renshu-1; i++)
{
for (int j = i + 1; j < renshu; j++)
{
if (shuzu[i].Degree < shuzu[j].Degree)
{//等量代换
student zhong= new student();
zhong = shuzu[i];
shuzu[i] = shuzu[j];
shuzu[j]=zhong;
}
}
}
//3.输出
Console.WriteLine("***********成绩如下***********");
Console.WriteLine(" 学号 姓名 分数");
foreach (student s in shuzu)
{
Console.Write(" ");
Console.Write(s.Code);
Console.Write(" ");
Console.Write(s.Name);
Console.Write(" ");
Console.Write(s.Degree);
Console.Write("\n");
}
Console.ReadLine();
运行结果如下:
方法2:冒泡排序写成带返回值的函数,代码如下:
public struct student//结构体前面要加上public,可以供外界访问
{
public int Code;//成员变量
public string Name;//成员
public double Degree;//成员
}
public student[] paixu(student[] shuzu)
{
for (int i = 0; i < shuzu.Length - 1; i++)
{
for (int j = i + 1; i < shuzu.Length; j++)
{
if (shuzu[i].Degree < shuzu[j].Degree)
{
student zhong = new student();
zhong = shuzu[i];
shuzu[i] = shuzu[j];
shuzu[j] = zhong;
}
}
}
return shuzu;
}
//2.排序
shuzu = new Program().paixu(shuzu);
这里的program也可以换成其他的类名。
方法3:新建一个类,用类的方法
新建一个Student类:
在main函数下输入(因为使用类,每次要对数组里的值初始化才能使用,在这改为使用ArrayList集合,使用时要把集合里的参数强制转换成Student类型):
//1.输入学生信息
Console.Write("请输入学生的人数:");
int renshu = int.Parse(Console.ReadLine());
ArrayList shuzu = new ArrayList();
for (int i = 0; i < renshu; i++)//根据人数去循环输入学生信息
{
Student s = new Student();//这里的student改成新建的Student 类
Console.Write("请输入第{0}个学生的学号:", i + 1);//索引为零时,是第一个,显示要加一
s.Code = int.Parse(Console.ReadLine());//把信息存进数组,再转换
Console.Write("请输入第{0}个学生的姓名:", i + 1);
s.Name = Console.ReadLine();
Console.Write("请输入第{0}个学生的分数:", i + 1);
s.Degree = double.Parse(Console.ReadLine());
shuzu.Add(s);
}
//2.排序
shuzu = new Program().paixu(shuzu);
//3.输出
Console.WriteLine("***********成绩如下***********");
Console.WriteLine(" 学号 姓名 分数");
foreach (Student s in shuzu)//队列集合,执行一遍定义结构体变量的数组
{
Console.Write(" ");
Console.Write(s.Code);
Console.Write(" ");
Console.Write(s.Name);
Console.Write(" ");
Console.Write(s.Degree);
Console.Write("\n");
}
Console.ReadLine();
}
public ArrayList paixu(ArrayList shuzu)//这里的student改成新建的Student 类
{
for (int i = 0; i < shuzu.Count - 1; i++)
{
for (int j = i + 1; i < shuzu.Count; j++)
{
if (((Student)shuzu[i]).Degree < ((Student)shuzu[j]).Degree)
{
Student zhong = new Student();//这里的student改成新建的Student 类
zhong = (Student)shuzu[i];
shuzu[i] = shuzu[j];//object
shuzu[j] = zhong;
}
}
}
return shuzu;
}
}
}