c# 结构体 集合 复习
添加5个学生的信息到集合中,
每个学生都有:学号,姓名,成绩,3个内容,
添加完毕后将学生的分数从高到低排列并打印出来,使用结构体
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Collections; namespace ConsoleApplication1 { class Program { struct xuesheng //创建一个名为学生的结构体,结构体固定格式前面struct 后面加名字 { public int code;//设置一个整数类型的变量,名为code public string name;//设置一个字符串类型的变量,名为name public double fenshu;//设置一个小数类型的变量, public int m;//设置一个整数类型变量,此变量用于接收学生一次循环第几个学生 } static void Main(string[] args) {
//1.打印接收学生信息,放在集合中
ArrayList bb = new ArrayList();//实例化一下 for (int i = 1; i < 6; i++) //此处循环打印接收5个学生信息 { xuesheng xs = new xuesheng();//实例化,以便量xs Console.Write("请输入第"+i+"个学生姓名:"); xs.name = Console.ReadLine();//用变量xs直接点出结构体中的属性并接收输入的信息 Console.Write("请输入第1个学生学号:"); xs.code = int.Parse(Console.ReadLine()); Console.Write("请输入第1个学生分数:"); xs.fenshu = double.Parse(Console.ReadLine()); xs.m = i;//每循环一次接收第几个学生到变量m中 bb.Add(xs);//把每次循环的学生信息打包放进集合bb中,xs共接收三个属性值 Console.WriteLine("================================"); } Console.WriteLine("----------------------学生数据展示----------------------"); //2.进行排序 for (int i = 0; i < bb.Count-1; i++) //冒泡排序,嵌套循环,外循环是集合的第一个元素,也就是0号索引 { for (int j = i+1; j < bb.Count; j++) //内循环是集合第二个元素,也就是1号索引 { xuesheng a= (xuesheng)bb[i];//因为集合中接收到的是三个属性打包的元素,需要强制转换一下到一个变量中 xuesheng b= (xuesheng)bb[j];// if(a.fenshu<b.fenshu)//用变量中接收到的直接点出结构体中的属性所填写的值进行比较,此处用分数排序,点出分数 { //因为是从大到小排序,需要前面的比后面小时,用冒泡排序把后面一个拿过来 object zhong = bb[i];//冒泡排序,先定义一个中间变量,把第一个元素值放进去,为避免数值类型冲突,直接用一个大范围的数值类型object来定义 bb[i] = bb[j];//外部条件是前面数小于后面数时执行排序,把后面索引的元素放进前面去 bb[j] = zhong;//再把刚刚放进中间变量的元素值放到下一个元素中,实行了前后调换 } } }
//3.打印集合 foreach (object n in bb) //遍历集合,打印集合的一种方式,定义一个变量n ,把集合bb接收在其中 { xuesheng s = (xuesheng)n;//把n强制转换一下在变量s中 Console.WriteLine("第"+s.m+"个学生的学号:"+s.code+",姓名:"+s.name+",成绩:"+s.fenshu+"。"); }//s就可以直接点出集合中排好序的每个打包元素里面的属性 Console.ReadLine(); } } }