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(); } } }

原文地址:https://www.cnblogs.com/zyg316/p/5592485.html