结构体、枚举类型及其练习题,最后的对战游戏(基础版)

结构体:
在内存中临时存储数据的方式
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();
        }

时间: 2024-10-14 12:40:26

结构体、枚举类型及其练习题,最后的对战游戏(基础版)的相关文章

C# 结构体 枚举类型

结构体主要用于创建小型对象,例如   对象:学生  他包含:学号 姓名  性别  生日 班级   成绩等多个再小的对象 当我们有成千上万个对象组合起来   容易会自己造成混乱 而且占一定的内存 结构体就是把一个对象分支多个对象  组合起来进行计算 运行  并且不会重复运用同一个程序  把内存节省 定义: 它一般定义在Main函数外面,类Class program里面 格式: struct+结构体名称 { public   int 变量名; public   string   变量名; publi

结构体 枚举类型

结构体 class Program { struct student { public int num; public string name; public string sex; public one oone; public int[] qq; } struct one { public string aa; public int bb; } static void Main(string[] args) { ////struct ////初始化结构体 //student stu = ne

C#基础 结构体 枚举类型

结构体:就是一个自定义的集合,里面可以放各种类型的元素,用法大体跟集合一样. 一.定义的例子: struct student { public int nianling; public int fenshu; public string name; public string sex; public int sum; } 以上的语句就是定义一个名称为student的结构体,其中包含int类型的年龄.分数.总和,和string类型的姓名.性别. 二.用法: 在main主函数外面定义了一个名称为st

结构体枚举类型

结构体 结构体类型是用户自己定义的一种类型,它是由其他类型组合而成的,可包含构造函数.常数.字段.方法.属性.索引器.运算符.事件和嵌套类型的值类型.结构在几个重要方面不同于类:结构为值类型而不是引用类型,并且结构不支持继承. 用结构的主要思想是创建小型的对象,如Point和FileInfo等等.这可以节省内存,因为没有如类对象所需的那样有额外的引用产生.例如,当声明汉语成千上万个对象的数组时,这会引起极大的差异. 结构体是一个变量组,将一组变量放在一起,其实就是一个自定义的集合,里面可以包含各

OC基础--结构体 枚举做类成员属性

结构体  枚举作类的成员属性: 定义一个学生类 性别 -- 枚举 生日 入学日期  毕业日期  --  结构体 代码示例: 声明文件 Student.h: #import <Foundation/Foundation.h> typedef struct { int year; int month; int day; } Date; typedef enum { kGenderGirl = 0, kGenderBoy = 1, kGenderChunGe = 2 } Gender; @inter

关于C/C++结构体参数类型定义冲突

1.对于纯C程序调用纯C编译的动态库: 可直接在纯C程序包含的头文件中修改结构体参数类型名称.编译器不会有任何警告或者错误,并且可正常调用. 2.对于C++程序调用C++编译的动态库: 必须C++程序和C++动态库都使用extern "C"包含,方可以任意修改结构体参数类型名称.编译器不会有任何警告或者错误,并且可正常调用. 总结:只有当使用C语言方式编译相互调用时,可以任意修改结构体参数类型名称.

C++ 共用体 枚举类型 所有

一.共用体类型 1.共用体的概念. 有时候需要将几种不同类型的变量存放到同一段内存单元中.例如有三个变量,他们的字节数不同,但是都从同一个地址开始存放.也就是用了覆盖技术,几个变量互相覆盖.这种使几个不同变量共占同一个内存的结构,称为共用体类型结构. 其一般形式: union 共用体类型名 { 成员列表 }; 定义共用体变量的一般形式: 共用体类型名    共用体变量名; 例如: union  data { int a; char ch; double  d; } 注意:结构体变量所占内存长度是

9.3 结构体 枚举 typedef

对结构体内存清零: #include <stdio.h> #include <string.h> struct STU { int id; char sex; }; int main() { struct STU s1; memset(&s1 , 0 , sizeof(s1)); } 结构体内存对齐: 以结构体最长的类型对齐 #include <stdio.h> #include <string.h> struct STU { char sex; i

C 碎片八 结构体&amp;枚举&amp;联合

一.结构体 1, 结构体定义 结构体类型的定义:任意数据类型变量的集合,用于描述一个具体的事物的信息.在C语言中描述一件事物一般都是用结构体 声明结构体类型的格式: struct  结构体名 {成员列表}: 一般形式: //结构体定义一般形式 struct 结构体名 { 成员变量1; //成员变量后面是';' 成员变量2; .... }; //这里最后加';' 不能省略 例: struct Student { char name[30]; int age; double score; }; 说明