C#结构体的使用
结构体:相当于是我们自己定义的一种复杂的类型。
常见简单类型:int... double float bool char string 常见复杂类型:DateTime 数组类型 生活中大部份的对象都是复合型的对象。 如何定义结构体类型?
一般来说结构体的定义要放在class的外面或class的里面,尽量不放在Main的里面。
struct 自定义类型名
{
public 变量类型 变量名;
......;
......;
......; }
例如:
struct YuanGong //自定义的数据类型。用来描述员工的信息。
{
public string NO;
public string Name;
public int Age;
public string Nation;
public bool Sex;
} 如何用自定义的类型来定义变量?
自定义类型名 变量 = new 自定义类型名(); 如何使用自定义类型的变量?
变量.子变量 = "xxxx";
Console.WriteLine(变量名.子变量);
例如:
//定义自定义类型的变量
YuanGong zhangsan = new YuanGong();
//给变量赋值
zhangsan.NO = "Y001";
zhangsan.Name = "张三";
zhangsan.Age = ;
zhangsan.Sex = true;
zhangsan.Nation = "汉族";
//对变量取值
Console.WriteLine(zhangsan.NO+"\t"+zhangsan.Name+"\t"+zhangsan.Age);
Console.WriteLine(zhangsan.Nation+"\t"+(zhangsan.Sex?"男":"女")); 例题1.描述员工信息 struct YuanGong //自定义的数据类型。用来描述员工的信息。
{
public string NO;
public string Name;
public int Age;
public string Nation;
public bool Sex;
public LianXiFangShi LianXi;
}
struct LianXiFangShi
{
public string QQ;
public string WeiXin;
public string Email;
public string Telephone;
public string Address;
public string ZipCode;
}
class Program
{
static void Main(string[] args)
{
YuanGong zhangsan = new YuanGong();
zhangsan.NO = "Y001";
zhangsan.Name = "张三";
zhangsan.Age = ;
zhangsan.Sex = true;
zhangsan.Nation = "汉族";
zhangsan.LianXi.QQ = "";
//zhangsan.LianXi.WeiXin = "张三三";
//zhangsan.LianXi.Email = "zhangsan@tom.com";
zhangsan.LianXi.Address = "张店区张家胡同";
zhangsan.LianXi.ZipCode = "";
zhangsan.LianXi.Telephone = ""; YuanGong lisi = new YuanGong();
lisi.NO = "Y002";
lisi.Name = "李四";
lisi.Age = ;
lisi.Sex =false;
lisi.Nation = "回族"; Console.WriteLine("**********张三的个人信息***********");
Console.WriteLine(zhangsan.NO+"\t"+zhangsan.Name+"\t"+zhangsan.Age);
Console.WriteLine(zhangsan.Nation+"\t"+(zhangsan.Sex?"男":"女"));
Console.WriteLine("联系方式:");
Console.WriteLine(
"QQ:"+(zhangsan.LianXi.QQ==null?"无":zhangsan.LianXi.QQ)+"\t"//若没输入qq,打印“无”
+"微信:"+(zhangsan.LianXi.WeiXin == null?"无":zhangsan.LianXi.WeiXin)+"\t"
+"手机:"+(zhangsan.LianXi.Telephone==null?"无":zhangsan.LianXi.Telephone)+"\t"
+"邮箱:"+(zhangsan.LianXi.Email==null?"无":zhangsan.LianXi.Email)+"\t"
+"地址:"+zhangsan.LianXi.Address+"\t"+zhangsan.LianXi.ZipCode); } 例题、两人对战游戏 struct Ren
{
public string Name;
public int Blood;
public int Attack;
public int Defend;
public int Quick; }
struct WuGong
{
public string Name;
public int Attack;
}
static void Main(string[] args)
{
WuGong[] wg = new WuGong[];
wg[].Name = "辟邪剑法";
wg[].Attack = ;
wg[].Name = "降龙十八掌";
wg[].Attack = ;
wg[].Name = "暗然消魂掌";
wg[].Attack = ; Ren r1 = new Ren();
Ren r2 = new Ren();
//初化两个战斗人员的属性。
Console.Write("请输入第一个战士姓名:");
r1.Name = Console.ReadLine();
Console.Write("请输入第二个战士姓名:");
r2.Name = Console.ReadLine();
//生成血量
Random rand = new Random();
r1.Blood = rand.Next() + ;
r2.Blood = rand.Next() + ;
//生成攻防
r1.Attack = rand.Next() + ;
r2.Attack = rand.Next() + ;
r1.Defend = rand.Next() + ;
r2.Defend = rand.Next() + ;
//生成身法
r1.Quick = rand.Next();
r2.Quick = rand.Next(); Console.WriteLine("姓名:" + r1.Name + "\t生命力:" + r1.Blood+"\t攻击力:"+r1.Attack+"\t防御力:"+r1.Defend+"\t敏捷度:"+r1.Quick);
Console.WriteLine("VS");
Console.WriteLine("姓名:" + r2.Name + "\t生命力:" + r2.Blood + "\t攻击力:" + r2.Attack + "\t防御力:" + r2.Defend + "\t敏捷度:" + r2.Quick);
Console.WriteLine("按任意键开始...");
Console.ReadKey();
while(true)
{
//跳出循环。
if(r1.Blood <= && r2.Blood<=)
{
Console.WriteLine(r1.Name+"与"+r2.Name+"同归于尽了!");
break;
}
if(r1.Blood<=)
{
Console.WriteLine(r2.Name+"把"+r1.Name+"KO了~!");
break;
}
if (r2.Blood <= )
{
Console.WriteLine(r1.Name + "把" + r2.Name + "KO了~!");
break;
} //对战 //大招
int dz1 = rand.Next(); //r2的大招 if (dz1 >= ) //大招
{
WuGong w1 = wg[rand.Next()]; int b1 = rand.Next(); //r1失掉的血
int gj1 = rand.Next() - ; //为了浮动r1的攻击
int fy1 = rand.Next() - ;//为了浮动r2的防御
b1 = (b1 + (r2.Attack + gj1+w1.Attack) - (r1.Defend + fy1)) < ? : (b1 + (r2.Attack + gj1+w1.Attack) - (r1.Defend + fy1));
r1.Blood -= b1;
if (r1.Blood < )
{
r1.Blood = ;
} //稍待一下。
System.Threading.Thread.Sleep(); Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(r2.Name + "使用大招"+w1.Name+"发起攻击," + r1.Name + "失掉生命力" + b1 + "点!");
Console.ResetColor();
Console.WriteLine(); }
else //平常招式
{
int sf1 = rand.Next();
if (r1.Quick - sf1 >= )
{
Console.WriteLine(r1.Name + "躲过了" + r2.Name + "攻击");
}
else
{
int b1 = rand.Next(); //r1失掉的血
int gj1 = rand.Next() - ; //为了浮动r1的攻击
int fy1 = rand.Next() - ;//为了浮动r2的防御
b1 = (b1 + (r2.Attack + gj1) - (r1.Defend + fy1)) < ? : (b1 + (r2.Attack + gj1) - (r1.Defend + fy1));
r1.Blood -= b1;
if (r1.Blood < )
{
r1.Blood = ;
} //稍待一下。
System.Threading.Thread.Sleep(); Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(r2.Name + "发起攻击," + r1.Name + "失掉生命力" + b1 + "点!");
Console.ResetColor();
Console.WriteLine();
}
}
//稍待一下。
System.Threading.Thread.Sleep(); int dz2 = rand.Next(); //r2的大招 if (dz2 >= ) //大招
{
WuGong w1 = wg[rand.Next()]; int b2 = rand.Next(); //r1失掉的血
int gj1 = rand.Next() - ; //为了浮动r1的攻击
int fy1 = rand.Next() - ;//为了浮动r2的防御
b2 = (b2 + (r1.Attack + gj1 + w1.Attack) - (r2.Defend + fy1)) < ? : (b2 + (r1.Attack + gj1 + w1.Attack) - (r2.Defend + fy1));
r2.Blood -= b2;
if (r2.Blood < )
{
r2.Blood = ;
} //稍待一下。
System.Threading.Thread.Sleep(); Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(r1.Name + "使用大招" + w1.Name + "发起攻击," + r2.Name + "失掉生命力" + b2 + "点!");
Console.ResetColor();
Console.WriteLine(); }
else
{ int sf2 = rand.Next();
if (r2.Quick - sf2 >= )
{
Console.WriteLine(r2.Name + "躲过了" + r1.Name + "攻击");
}
else
{
int b2 = rand.Next();//r2失掉的血
int gj2 = rand.Next() - ; //为了浮动r1的攻击
int fy2 = rand.Next() - ;//为了浮动r2的防御
b2 = (b2 + (r1.Attack + gj2) - (r2.Defend + fy2)) < ? : (b2 + (r1.Attack + gj2) - (r2.Defend + fy2));
r2.Blood -= b2;
if (r2.Blood < )
{
r2.Blood = ;
} Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine(r1.Name + "发起攻击," + r2.Name + "失掉生命力" + b2 + "点!");
Console.ResetColor();
Console.WriteLine();
}
}
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write("姓名:" + r1.Name + "生命力:" + r1.Blood + "\t");
Console.Write("姓名:" + r2.Name + "生命力:" + r2.Blood);
Console.ResetColor();
Console.WriteLine();
Console.WriteLine(); } } 练习1.输入学生成绩信息 struct Student
{
public string Name;
public int No;
public double ToltallGrd;
public double Chinese;
public double math;//快速移至下行尾
}
//输入学生成绩信息并排序
static void Main(string[] args)
{
Student[] a = new Student[];
//输入成绩
GetGrade(a);
//根据总分排序
Order(a);
//输出学生成绩信息
Output(a); } private static void Output(Student[] a)
{
for (int i = ; i < a.Length; i++)
{
Console.WriteLine("姓名:{0}\t学号:{1}\t名次:\t{2}总分:{3}\t语文:{4}\t数学:{5}",
a[i].Name, a[i].No, i + , a[i].ToltallGrd, a[i].Chinese, a[i].math);
}
} private static void Order(Student[] a)
{
for (int i = ; i <= a.Length - ; i++)
{
for (int j = ; j <= a.Length - i; j++)
{
if (a[j].ToltallGrd > a[j - ].ToltallGrd)
{
Student tem = a[j];
a[j] = a[j - ];
a[j - ] = tem;
}
}
}
} private static void GetGrade(Student[] a)
{
for (int i = ; i < a.Length; i++)
{ Console.WriteLine("请输入第" + (i + ) + "名学生姓名:");
a[i].Name = Console.ReadLine();
a[i].No = i + ;
Console.Write("语文:");
a[i].Chinese = Convert.ToDouble(Console.ReadLine());
Console.Write("数学:");
a[i].math = Convert.ToDouble(Console.ReadLine());
a[i].ToltallGrd = a[i].Chinese + a[i].math; }
} 练习2.米罗vs沙加 struct Roal
{
public int blood;
public int def;
public int mov1;
public int mov2; }
class 对战游戏
{
static void Main(string[] args)
{
Roal cast1, cast2;
//角色1的属性
cast1.blood = ;
cast1.def = ;
cast1.mov1 = ;
cast1.mov2 = ;
//角色2的属性
cast2.blood = ;
cast2.def = ;
cast2.mov1 = ;
cast2.mov2 = ; //颜色设置
Console.ForegroundColor = ConsoleColor.Blue;
Console.BackgroundColor = ConsoleColor.White;
Console.Clear(); //输入操作
//角色1攻击
while(cast1.blood >&&cast2.blood >)
{
Console.WriteLine("请米罗发招:a-天蝎意念波 s-猩红毒针");
string m = Console.ReadLine();
Random n1 = new Random();
if (m == "a")
{
int s = n1.Next();//角色2的防御值
int s2 = cast1.mov1 - s;//攻击效果
cast2.blood -= s2;//角色2血量减少
}
else if (m == "s")
{
int s = n1.Next();//角色2的防御值
int s2 = cast1.mov2 - s;//攻击效果
cast2.blood -= s2;//角色2血量减少 }
//角色2攻击
Console.WriteLine("请沙加发招:k-天舞宝轮 l-六道轮回");
string h= Console.ReadLine();
Random i = new Random();
if (h == "k")
{
int s = i.Next();//角色1的防御值
int s2 = cast1.mov1 - s;//攻击效果
cast1.blood -= s2;//角色1血量减少
}
else if (h == "l")
{
int s = n1.Next();//角色1的防御值
int s2 = cast1.mov2 - s;//攻击效果
cast1.blood -= s2;//角色1血量减少
}
else
{
Console.WriteLine("发招失败");
}
Console.Clear();
cast1.blood = cast1.blood < ? : cast1.blood ;//控制血量不要小于零
cast2.blood = cast2.blood < ? : cast2.blood;//控制血量不要小于零
Console.WriteLine ("米罗血量:{0}",cast1.blood );
Console.WriteLine("沙加血量:{0}",cast2.blood);
} //输出对殴结果
if (cast1.blood == && cast2.blood == )
{
Console.WriteLine("同归于尽");
}
else if (cast1.blood ==)
{
Console.WriteLine("沙加打败米罗");
}
else
{
Console.WriteLine("米罗打败沙加,成为最强黄金圣斗士");
} }

C#结构体的使用的更多相关文章

  1. Go结构体实现类似成员函数机制

    Go语言结构体成员能否是函数,从而实现类似类的成员函数的机制呢?答案是肯定的. package main import "fmt" type stru struct { testf ...

  2. C#基础回顾(二)—页面值传递、重载与重写、类与结构体、装箱与拆箱

    一.前言 -孤独的路上有梦想作伴,乘风破浪- 二.页面值传递 (1)C#各页面之间可以进行数据的交换和传递,页面之间可根据获取的数据,进行各自的操作(跳转.计算等操作).为了实现多种方式的数据传递,C ...

  3. go语言结构体

    定义: 是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体. 成员: 每个值称为结构体的成员. 示例: 用结构体的经典案例处理公司的员工信息,每个员工信息包含一个唯一的员工编号.员工的名字. ...

  4. C语言中的结构体

    用户自己建立自己的结构体类型 1.  定义和使用结构体变量 (1).结构体的定义 C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体. (2).声明一个结构体类型的一般形式为: ...

  5. C++_系列自学课程_第_12_课_结构体

    #include <iostream> #include <string> using namespace std; struct CDAccount { double bal ...

  6. java socket传送一个结构体给用C++编写的服务器解析的问题

    另一端是Java写客户端程序,两者之间需要通信.c++/c接收和发送的都是结构体,而Java是直接发送的字节流或者byte 数组.解决方法:c++/c socket 在发送结构体的时候其实发送的也是字 ...

  7. swift学习笔记3——类、结构体、枚举

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  8. HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  9. C语言结构体对齐

    1.结构体变量中的元素如何访问? (1)数组中元素的访问方式:表面上有2种方式(数组下标方式和指针方式):实质上都是指针方式访问.(2)结构体变量中的元素访问方式:只有一种,用.或者->的方式来 ...

  10. C与指针(结构体指针,函数指针,数组指针,指针数组)定义与使用

    类型 普通指针 指针数组(非指针类型) 数组指针 结构体指针 函数指针 二重指针 定义方式 int *p; int *p[5]; int (*p)[5]; int a[3][5]; struct{.. ...

随机推荐

  1. No module named cv2 报错处理

    运行python脚本出现“No module named cv2 ”,这时我们安装下opencv-python依赖即可 python3 -m pip install opencv-python

  2. csv文件——简单读操作01

    转载:https://www.py.cn/spider/advanced/14381.html import csv with open('C:\\Users\\del\\Desktop\\123.c ...

  3. ElasticSearch的9200和9300端口的区别

    9200用于外部通讯,基于http协议,程序与es的通信使用9200端口. 9300jar之间就是通过tcp协议通信,遵循tcp协议,es集群中的节点之间也通过9300端口进行通信.

  4. Dijkstra与Floyd算法

    1. Dijkstra算法 1.1 定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点 ...

  5. [Python]h5py/__init__.py:36:

    个人博客地址:https://www.bearoom.xyz/2019/08/24/python-devolop-env-hdf5-problem/ 安装tensorflow之后,在导入tensorf ...

  6. Linux 下载安装

    安装教程:https://www.runoob.com/linux/linux-install.html Linux图形界面与命令行界面切换https://blog.csdn.net/ab522628 ...

  7. Power BI 企业邮箱账户注册

    Power BI 是免费的.但是一些功能需要企业账户才可以实现. 比如在线服务,移动端的服务,图标的市场,都需要注册账户实现. 1. 临时企业邮箱 百度,或谷歌一个临时邮箱.这些邮箱大多都是有使用期限 ...

  8. GCC与gcc,g++区别

    看的Linux公社的一篇文章,觉得不错,内容复制过来了. 其实在这之前,我一直以为gcc和g++是一个东西,只是有两个不同的名字而已,今天在linux下编译一个c代码时出现了错误才找了一下gcc和g+ ...

  9. pip换源源

    介绍 """ 1.采用国内源,加速下载模块的速度 2.常用pip源: -- 豆瓣:https://pypi.douban.com/simple -- 阿里:https:/ ...

  10. 巧用函数,使Sql中in的用法更多变

    在Sql中我们经常会用到in 普遍的写法为 where xx in ('1','2','3') 通过函数写法为: IF EXISTS ( SELECT * FROM sys.objects WHERE ...