结构体和枚举类型

一、结构体(struct)

结构类型是用户自己定义的一种类型,它是由其他类型组合而成的,可包含构造函数、常数、字段、方法、属性、索引器、运算符、事件和嵌套类型的值类型。结构在几个重要方面不同于类:结构为值类型而不是引用类型,并且结构不支持继承。

用结构的主要思想是用于创建小型的对象,如Point和FileInfo等等。这可以节省内存,因为没有如类对象所需的那样有额外的引用产生。例如,当声明含有成千上万个对象的数组时,这会引起极大的差异。

结构体是一个变量组,将一组变量放在一起,其实就是一个自定义的集合,里面可以包含各种类型的数据,用法和集合一样。

1、定义

结构体一般定义在Main函数上面,位于Class下面,作为一个类;一般情况Struct定义在Main函数前面,Main函数里面的地方都可以使用,参数前面加上public代表公用变量。

格式:

struct +结构体的名称

{

public int+变量名;

public string+变量名;

public int+变量名;

}

以上就是定义一个结构体的格式,里面包含许多种数据类型,如整形int,字符串string,带小数点decimal等;

如果结构体定义在Main函数中,再能在Main函数中使用,一般看情况来定义在Main函数前面,Main函数里面的所有地方都可以使用,参数前面加上public代表公用变量。

格式:

struct student

{

public int no;

public string name;

public int Csharp;

public int web;

public int database;

public int sum;

}

2、用法

(1)在Main函数外面定义了一个student类型的结构体,在Main主函数中使用:

(2)然后为里面的每个元素赋值,结构体名+点+结构体里面变量名称=值。

(3)赋值之后完成之后进行打印。

Student lch=new student();//这句是在Main函数里定义了一个名为lch的student 类型的结构体。

{

lch.no=1;

lch.name=”李昌辉”;

lch.Cshap=88;

lch.web=90;

lch.database=98;

lch.sum=lch.Cshap+lch.web+lch.database;

}

Console.WriteLine(lch.no,lch.name,lch.Cshap,lch.web,lch.database,lch.sum );

【案例1】定义一个jiegouti类型的结构体,输出类型中的结构体变量,程序运行后显示的结果如下图:

【技术要点】定义一个jiegouti类型的结构体,有3个结构变量,fenshu,name,kecheng,在主函数中定义一个参数接收结构变量,然后输出name,返回一个字符串。

3、结构体类型元素包含结构体类型

//如果想让其他添加出来的类也能够使用此结构体,需要在前面加上public

public  struct student

{

//想让其他的类可以访问到其中的变量需要加上public

public int nianling;

public string name;

public string sex;

//可以结构体中包含另一个结构体

public One qq;

//可以直接定义一个数组,但是没有开辟空间

public string[] shuzu;

}

public struct One

{

public string nb;

public string abc;

}

static void Main(string[] args)

{

#region

//为里面的每个元素赋值:(结构体名+点+结构体里面的变量名称=值)

//使用之前需要先初始化一下

student st = new student();

//初始化出来的变量名可以看做一个类对象

st.name = "张三";

//类对象的名称是不能相同的

st.nianling = 21;

st.sex = "男";

st.name = "王五";

//使用的时候利用变量名点出来其中的变量进行使用

Console.WriteLine(st.name);

//结构体中包含另一个结构体类型,可以直接点出来一以下的变量

st.qq.abc="qsqs";

//使用之前需要先开辟空间

st.shuzu = new string [9];

//数组元素赋值方式

st.shuzu[0] = "赵六";

//可以多次初始化类,注意不同的变量名

student st1 = new student();

st1.name = "李四";

st1.nianling = 22;

st1.sex = "女";

#endregion

}

【案例2】在上面jiegouti类型的结构体元素还可以包含另外一个结构体,再定义一个变量public int[] shuzu,输出新定义的数组变量。运行结果如下图:

【技术要点】定义jiegouti类型的结构体,原有3个结构变量,fenshu,name,kecheng,新增一个变量public int[] shuzu,而这个结构元素还可以包含一个新结构体,在主函数中重新(new 初始化)定义一个参数接收这个新的结构变量,然后输出name,返回一个字符串。

【案例3】在上面jiegouti类型的结构体元素还可以包含另外一个结构体,再定义一个变量public int[] shuzu,输出新定义的数组变量。输出的变量可以多个,用“+”连接即可。

【技术要点】定义jiegouti类型的结构体,原有3个结构变量,fenshu,name,kecheng,新增一个变量public int[] shuzu,而这个结构元素还可以包含一个新结构体,在主函数中重新(new 初始化)定义一个参数接收这个新的结构变量,然后输出name,返回一个字符串。

综合练习:运用结构体,将学号、姓名和分数放入集合,然后取出并打印出来

二、枚举类型

枚举(enum)是值类型的一种特殊形式,它从System.Enum继承而来,并为基础类型的值提供替代名称。枚举类型有名称、基础类型和一组字段。基础类型必须是一个除char 类型外的内置的有符号(或无符号)整数类型(如Byte、Int32或UInt64)。也可以说,枚举类型是一组常量的集合。

1、定义:Enum....{E}

枚举元素的默认基础类型为int。默认情况下,第一个枚举数的值为0,后面每个枚举数的值依次递增1。例如:

//枚举是常量的集合,一般冒号后面不指定数据类型

enum meiju:

{

//枚举里面有默认的索引,也可以指定;如索引3,但在控制台中不起作用;

//用逗号隔开

one=3,

two=6,

three,

//如果等于之前的一个常量,那么就等于这个常量;最后一行的逗号可省略

four=two

}

static void Main(string[] args)

{

Console.WriteLine(meiju.one);

Console.ReadLine();

2、用法

枚举也可以指定数据类型,一般不指定。

在定义枚举类型时,可以选择基类型,但可以使用的基类型仅限于long、int、short和byte。例如:

如: enum meiju:int

【案例1】定义一个枚举类型,输出枚举类型某个常量,程序运行后显示的结果,如下图:

【技术要点】定义一个int枚举类型,内有4个枚举常量,再定义一个方法,该方法有一个参数用来接受一个枚举类型的值,然后返回的是一个int类型的值。

3、注意:数字不能单独放在枚举里面执行,系统会判错,主要是约束字符串;

如:6;

【案例2】定义一个枚举类型,内有6个枚举类型,下图图2是程序运行后的结果。

【技术要点】虽然枚举是一个常量的集合,但不能直接在枚举类型里面放置数字,系统不运行。

综合练习:20人投票,五个候选人,用switch  case

//20人投票    switch  case   枚举

//投票的时候输入1,2,3,4,5

//利用12345来确定是哪一个候选人得票

//计算得票数

//得票最高的胜出

Console.WriteLine("投票选班长!请输入1、2、3、4、5来分别代表张三、李四、王五、赵六、冯七");

int[] shuzu = new int[20];

for (int i = 1; i <= 20; i++)

{

Console.Write("请第" + i + "位同学来进行投票:");

shuzu[i - 1] = int.Parse(Console.ReadLine());

}

Console.WriteLine("投票结束!按下回车开始统计票数!");

Console.ReadLine();

int zhangsan = 0, lisi = 0, wangwu = 0, zhaoliu = 0, fengqi = 0, zuofei = 0;

for (int i = 0; i < 20; i++)

{

switch (shuzu[i])

{

case (int)Houxuanren.one:

zhangsan++;

break;

case (int)Houxuanren.two:

lisi++;

break;

case (int)Houxuanren.three:

wangwu++;

break;

case (int)Houxuanren.four:

zhaoliu++;

break;

case (int)Houxuanren.five:

fengqi++;

break;

default:

zuofei++;

break;

}

}

if (zhangsan > lisi && zhangsan > wangwu && zhangsan > zhaoliu && zhangsan > fengqi)

{

Console.WriteLine("张三胜出!票数为" + zhangsan);

}

else if (lisi > zhangsan && lisi > wangwu && lisi > zhaoliu && lisi > fengqi)

{

Console.WriteLine("李四胜出!票数为" + lisi);

}

else if (wangwu > lisi && wangwu > zhangsan && wangwu > zhaoliu && wangwu > fengqi)

{

Console.WriteLine("王五胜出!票数为" + wangwu);

}

else if (zhaoliu > lisi && zhaoliu > wangwu && zhaoliu > zhangsan && zhaoliu > fengqi)

{

Console.WriteLine("赵六胜出!票数为" + zhaoliu);

}

else if (fengqi > lisi && fengqi > wangwu && fengqi > zhaoliu && fengqi > zhangsan)

{

Console.WriteLine("冯七胜出!票数为" + fengqi);

}

Console.WriteLine("作废的票数为:" + zuofei);

Console.ReadLine();

转载于:https://www.cnblogs.com/H2921306656/p/5636070.html

C#语言基础——结构体和枚举类型相关推荐

  1. SV学习笔记—结构体及枚举类型及字符串

    目录 1.结构体 1.1 压缩结构体 1.2 非压缩结构体 1.3联合结构体 2.枚举类型 3.字符串 1.结构体 Verilog的最大缺陷之一是没有数据结构,SV中可以使用struct语句创建结构, ...

  2. Go语言基础 结构体

    Go语言基础之结构体 Go语言中没有"类"的概念,也不支持"类"的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. ...

  3. 结构体,枚举类型与联合体

    目录 ​编辑 一.结构体的基本使用 1.什么是结构体 2.结构体的一般声明 3.结构体的特殊声明 4.结构体的自引用 5.结构体变量的定义和初始化 二.结构体内存对齐 1.内存对齐规则 3.为什么会存 ...

  4. C语言基础 - 结构体类型字节对齐总结

    一.什么是字节对齐 在计算机中,内存空间是按照字节(1B = 8 bit)划分的,每一个字节都有一个编号,这就是字节的地址.理论上可以从任意起始地址访问任意数据类型的变量,但在实际使用中,访问特定数据 ...

  5. 结构体、枚举类型和联合体

    文章目录 一:结构体的基本使用 1.什么是结构体 2.结构体的声明 (1):一般声明 (2):特殊声明 3.结构体的自引用 4.结构体变量的定义和初始化 二:结构体的内存对齐 1.内存对齐规则 2.练 ...

  6. C语言程序设计 | 结构体,枚举,联合

    目录: 结构体 枚举 联合 结构体 结构是一些值的集合,这些值成为成员变量.结构的每个成员可以是不同类型的变量 结构体的声明 struct s{char a;int b;}s1; 这里的a和b就是结构 ...

  7. c || 结构体 联合体 枚举类型 字符串

    文章目录 结构体struct :类型设计 结构体赋值 结构体类型指针 结构体的内存对齐 基本数据类型字节数 指定对齐值 联合体union 枚举:把需要的取值一一列举 枚举与#define的区别 字符串 ...

  8. C语言基础 结构体排序

    任务描述 本关任务:有n个学生的信息(包括学号,姓名,成绩),要求按照成绩的高低顺序输出学生的信息. 相关知识 参考结构体第1关相关知识 编程要求 要求按照成绩的高低顺序输出学生的信息. 测试说明 平 ...

  9. C++与C语言02 结构体区别

    这里写目录标题 C++与C语言02 结构体区别 11-18 类型上不再需要struct关键字,直接用结构体名即可 C++结构体中允许函数存在 动态内存申请 内存池 string类型 C++与C语言02 ...

最新文章

  1. c语言findnext递归扫描文件,C++用FindFirstFile、FindNext递归遍历硬盘的文件-Go语言中文社区...
  2. Mysql自动备份脚本
  3. 了解单片机及单片机的控制原理和 DX516 的用法,控制一个 LED 灯的亮
  4. iOS 通知中心(NSNotificationCenter)
  5. 用Jenkins自动化搭建测试环境_入门试炼06
  6. 6个案例手把手教你用Python和OpenCV进行图像处理
  7. 借给朋友两万块钱,已经两年,每次要钱都各种借口,我该怎么办?
  8. android监听自身被卸载的方法
  9. java语言诞生的主要贡献者_2020年12月编程语言排行+GitHub 年度报告正式发布,JavaScript 霸榜、TypeScript 爆发!...
  10. php保存上传的音频文件在哪里,php 视频、音频和图片文件上传,该如何解决
  11. pycharm怎么改成中文版?
  12. 世上最全计算机网络面试整理(附答案),不服来战!!
  13. Spring JdbcTemplate 与 事务管理
  14. Vue 插件开发与发布
  15. html控制手机回退键,向日葵手机控制手机全程指导
  16. 《工作五年,决定你一生的财富》读后感
  17. 学生电影网页设计作品 影视主题学生网页制作 简单网页设计作业 静态影视介绍网页模板
  18. 引用腾讯地图时出现”鉴权失败,请传入正确的key“
  19. 微信小程序支持分享到朋友圈了
  20. 肖特基和快恢复二极管区别

热门文章

  1. 【ruoyi若依】flot 图表跑版
  2. JQuery 定期刷新网页,保持登录状态Session
  3. 查看redhat版本信息
  4. SpringMVC获取Request,Response, Session对象
  5. 阿丽塔大脑是机器人哪_阿丽塔——和机器人结合的未来离我们有多远?
  6. mysql 日期_Mysql数据库常见函数(下)——日期时间函数
  7. oracle 5种索引方式,MySQL使用索引的几种方式
  8. sublime4 安装pretty json 并绑定快捷键
  9. 利用图基Tukey method检测数据集中的异常值
  10. CentOS7 minimal 安装