结构体:
在内存中临时存储数据的方式
1、变量、常量
2、数组,可以存储固定长度统一类型的数据
3、集合
4、结构体
学生信息:姓名,性别,年龄,系别
结构体含义:就是将生活中的一些个体,封装成一个特殊的类型
结构体是:用户自定义数据类型
创建:
创建的位置:main函数之外
struct Student
{
public int Code;
public string Name;
public string Sex;
public int Old;
public DateTime Birthday;
}
定义:声明
Student s = new Student(); //实例化
赋值:
s.Code = 1;
s.Name = "张三";
s.Sex = "男";
s.Old = 18;
s.Birthday = Convert.ToDateTime("1999-1-1");
取值:
s.Code //放在等号左边就是给它赋值,放在右边就是使用它的值
应用:
练习题:
请输入学生个数:n
请输入第1个学生的姓名:
请输入第1个学生的性别:
请输入第1个学生的年龄:
请输入第1个学生的成绩:
...
n
****************************
学生的总成绩为:xxx,平均分为:xxx。
****************************
年龄排名(由大到小):
姓名:xxx,性别:xxx,年龄:xxx,成绩:xxx。
...
n
****************************
成绩排名(由高到低):
姓名:xxx,性别:xxx,年龄:xxx,成绩:xxx。
...
n
--------------------------------------------------------------------------
struct Student//新建类型 { public string Name; public string Sex; public int Old; public decimal score; } static void Main(string[] args) { Console.Write("请输入学生的个数:"); int gs = Convert.ToInt32(Console.ReadLine()); ArrayList arr = new ArrayList();//新的集合 decimal end = 0m; for (int i = 0; i < gs; i++) { Student s = new Student(); while (true)//判断姓名输入是否为空 { Console.Write("请输入第" + (i + 1) + "个学生的姓名:"); s.Name = Console.ReadLine(); if (s.Name == "" || s.Name == " ") { Console.WriteLine("输入有误!"); } else { break; } } while (true)//判断姓名输入是否为空 { Console.Write("请输入第" + (i + 1) + "个学生的性别:"); s.Sex = Console.ReadLine(); if (s.Sex == "男" || s.Sex == "女") { break; } else { Console.WriteLine("输入有误!"); } } while (true) { Console.Write("请输入第" + (i + 1) + "个学生的年龄:"); try { s.Old = Convert.ToInt32(Console.ReadLine()); break; } catch { Console.WriteLine("输入有误!"); Console.Write("请输入第" + (i + 1) + "个学生的年龄:"); } } while (true) { Console.Write("请输入第" + (i + 1) + "个学生的成绩:"); try { s.score = Convert.ToDecimal(Console.ReadLine()); break; } catch { Console.WriteLine("输入有误!"); Console.Write("请输入第" + (i + 1) + "个学生的成绩:"); } } end += s.score; arr.Add(s); } Console.WriteLine("********************************"); Console.WriteLine("总分是:" + end + ",平均分是:" + (end / gs)); Console.WriteLine("********************************"); //按年龄大小排序 for (int i = 0; i < arr.Count; i++) { for (int j = i + 1; j < arr.Count; j++) { Student s = (Student)arr[i]; Student ss = (Student)arr[j]; if (s.Old < ss.Old) { Object zhong = arr[i]; arr[i] = arr[j]; arr[j] = zhong; } } } foreach (Student stu in arr) { Console.WriteLine("学生的姓名是:"+stu.Name+",性别是:"+stu.Sex+",年龄是:"+stu.Old+",成绩是:"+stu.score+"。"); } Console.WriteLine("********************************"); //按成绩大小排序 for (int k = 0; k < arr.Count; k++) { for (int l = k + 1; l < arr.Count; l++) { Student s = (Student)arr[k]; Student ss = (Student)arr[l]; if (s.score < ss.score) { Object zhong = arr[k]; arr[k] = arr[l]; arr[l] = zhong; } } } foreach (Student stu in arr) { Console.WriteLine("学生的姓名是:" + stu.Name + ",性别是:" + stu.Sex + ",年龄是:" + stu.Old + ",成绩是:" + stu.score + "。"); } Console.ReadKey(); }
枚举:
学生:姓名,性别,年龄,成绩,系别
性别:男, 男士, man , 爷们
星期几: 周一,星期一,一
枚举的作用:统一,规范化的开发,个人用处不大,一般是团队开发时常用。
枚举也是一种用户自定义类型;
创建赋值: enum
public enum Sex
{
男,
女
}
取值:
Sex.值
对战游戏(无招式与武器、装备版)
struct warrior { public string name;//名字 public int blood; //血量 public int attack; //攻击 public int defense;//防御 } static void Main(string[] args) { //创建两个战士 warrior zs1 = new warrior(); warrior zs2 = new warrior(); //为战士命名 Console.Write("请输入战士一的昵称:"); zs1.name = Console.ReadLine(); Console.Write("请输入战士二的昵称:"); zs2.name = Console.ReadLine(); Random r = new Random();//游戏必须要用 //随机生成战士的血量 zs1.blood = r.Next(500, 1000); zs2.blood = r.Next(500, 1000); //随机生成战士攻击力,并使其攻击力上下浮动 zs1.attack = r.Next(50, 100); zs2.attack = r.Next(50, 100); //随机生成战士防御力,并使其上下浮动 zs1.defense = r.Next(0, 20); zs2.defense = r.Next(0, 20); Console.WriteLine(zs1.name + ",血量:" + zs1.blood + ",攻击:" + zs1.attack + ",防御:" + zs1.defense); Console.WriteLine(zs2.name + ",血量:" + zs2.blood + ",攻击:" + zs2.attack + ",防御:" + zs2.defense); Console.WriteLine("********************按空格键开始********************"); Console.ReadKey(); while (true) { //判断胜负 if (zs1.blood <= 0) { Console.WriteLine(zs2.name + "胜利了!"); break; } else if (zs2.blood <= 0) { Console.WriteLine(zs1.name + "胜利了!"); break; } else if (zs1.blood <= 0 && zs2.blood <= 0) { Console.WriteLine("同归于尽了!"); break; } Thread.Sleep(1500);//停顿一下在开始 //战士一攻击 int zs1gj = r.Next(zs1.attack - 10, zs1.attack + 30);//战士一的攻击力浮动范围 int zs2fy = r.Next(zs2.defense - 5, zs2.defense + 15);//战士二的防御力浮动范围 int zs1end = zs1gj - zs2fy;//战士一攻击后对战士二造成的伤害值 zs2.blood = zs2.blood - zs1end;//战士二受到攻击后的血余量 Console.WriteLine(zs1.name + " 对 " + zs2.name + " 发动了攻击,造成" + zs1end + "点伤害! " + zs2.name + "的血量还剩" + zs2.blood); Console.WriteLine(); Thread.Sleep(1500); //战士二攻击 if (zs1.blood <= 0) { Console.WriteLine(zs2.name + "胜利了!"); break; } else if (zs2.blood <= 0) { Console.WriteLine(zs1.name + "胜利了!"); break; } else if (zs1.blood <= 0 && zs2.blood <= 0) { Console.WriteLine("同归于尽了!"); break; } int zs2gj = r.Next(zs2.attack - 10, zs2.attack + 30);//战士二的攻击力浮动范围 int zs1fy = r.Next(zs1.defense - 5, zs1.defense + 15);//战士一的防御力浮动范围 int zs2end = zs2gj - zs1fy;//战士二攻击后对战士一造成的伤害值 zs1.blood = zs1.blood - zs2end;//战士一受到攻击后的血余量 Console.WriteLine(zs2.name + " 对 " + zs1.name + " 发动了攻击,造成" + zs2end + "点伤害! " + zs1.name + "的血量还剩" + zs1.blood); Console.WriteLine(); } Console.ReadLine(); }