




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第章 C#数组、结构和枚举,声明一个变量可以存储一个值,当遇到要存储多个相同类型的值的时候,变量就显得无能为力,数组正是在这种存储需求下设计的一种数据结构;常量可用来存储一个固定值,但是要存储多个固定值的时候,常量也失效了,这时候就要借助于枚举来实现;而结构是用来表示更加复杂的值类型,在结构里,用户可以声明不同数据类型的变量作为一个整体。学完本章后,读者将了解数组、结构和枚举的用法。本章主要涉及到的知识点有: 数组:理解数组的概念,并创建数组。 使用数组:包括定位、遍历、查找、排序等典型操作。 结构:在需要考虑运行效率、且几乎不做运算的数据应该作为结构定义。了解结构的用法。 枚举:用于声明一组命名的常数。理解枚举的好处,并使用枚举。,5.1 C#中的数组,在日常生活中,人们用容器来存储物品,为了方便查找,总是将众多的物品分门别类地存储在不同的容器中。在计算机程序中,同样会遇到处理大量具有相同类型的数据的时候,C#语言提供了“数组”这一数据结构,用于处理这样的数据。,5.1.1 声明和初始化一维数组,【本节示例参考:源代码chapter55.1.1ArrayExample】 数组类似于生活中的容器,可以将一组数据类型相同的数据按照一定的顺序存储起来,存储在数组中的数据又叫元素,可以通过“索引”,或叫“下标”的整数来区分数组中的元素。C#支持一维数组、多维数组(矩形数组)和数组的数组(交错数组)。下面通过一个例子来学习一维数组。 暑期到了,音像店的老板Landy整理了一个CD架位置,并买了5张碟片放在上面出租,分别是功夫熊猫、不可思议绿巨人、赤壁、木乃伊3、牛仔裤的夏天2,有客人来租碟的时候,就从相应的位置找到这张碟。如果把这个CD架理解为一个“数组”,它顺序存放的“元素”就是碟片。在程序中,可以用以下的语句声明一个数组: string movies; 声明以后,需要让计算机内存分配指定大小的空间,这叫初始化数组,如下所示: movies = new string5;,5.1.2 声明和初始化其他类型的数组,通过一维数组的方式,解决了Landy保存部分碟片的问题。但是Landy的烦恼是,随着碟片不断增多,查找碟片越来越难,如果能给每张碟片一个编号,编号表示碟片存放的位置在第几排第几列,这样会方便很多,每一张碟片的编号及其存储位置如图5.1所示。,5.1.3 支持数组语言实现的基类:System.Array,【本节示例参考:源代码chapter55.1.3ArrayClass】 C#中的数组是由System.Array类派生而来的引用对象,它提供一些公共的属性和方法,对数组的操作提供了很大帮助。其常用的属性和方法如表5.1所示(更多的属性和方法请参考MSDN)。常用方法的使用会在以下章节中介绍。,5.1.4 访问数组元素,【本节示例参考:源代码chapter55.1.4VisitExample】 Landy的新碟到了以后,生意好了很多,每天都有很多人去租碟。通过每张碟的编号,从CD架上找到碟片。这就好比从数组中去访问每个元素一样。访问元素的方式很多,最直接的就是通过数组的下标。假如所有碟片都放在一排陈列架上,就要用一维数组,例如: 定义一维数组: string movies = new string “功夫熊猫”,”不可思议绿巨人”,”赤壁”,”木乃伊3”,”牛仔裤的夏天2” 获取第一个元素:movies0 =“功夫熊猫”。获取最后一个元素:movies4 = “牛仔裤的夏天2”。假如碟片分别放在多排CD架上每排可以放多张碟,则要用二级数组,定义二维数组: string , movies = new string , “功夫熊猫”,”不可思议绿巨人”,”赤壁”,”木乃伊3” 这样创建的数组,表示CD在架上是这样摆放的,如图5.2所示。获取第一个元素:movies0,0 = “功夫熊猫”。获取最后一个元素:movies1,1 = “木乃伊3”。,5.1.5 使用foreach语句遍历数组,【本节示例参考:源代码chapter55.1.5ForeachExample】 遍历是指全部访问数组中的元素一次且仅一次,可以在遍历的过程中完成查找等许多操作,需要注意一点:foreach循环对数组内容进行只读访问,所以不能改变任何元素的值。 foreach语句格式如下: foreach (data_typt item_name in arr_name) /遍历每一个元素 注意:无论是几维的数组,foreach语句都会从最深层的原子元素开始,遍历一次且仅一次,因此,不需要嵌套foreach循环。,5.1.6 查找数组元素,【本节示例参考:源代码chapter55.1.6SearchExample】 数组的元素是有序的,每一个元素对应一个唯一下标,在程序设计中,经常需要查找某个元素是否存在,以及该元素所在的位置等操作。可以通过遍历整个数组的方式来查找,也可以通过System.Array提供的BinarySearch方法完成这些操作。 有个客户需要租赤壁,Landy需要在CD架中找到片名叫赤壁的碟片,下面的例子演示了查找元素赤壁所在的位置的两种方法:,5.1.7 对数组进行排序,【本节示例参考:源代码chapter55.1.7SortExample】 生活中会经常遇到一些排序问题,比如把一个班的考试成绩排序,足球比赛积分排序等。那么怎样用计算机程序来完成排序工作呢?这个问题前人早就有深刻的研究,总结出了很多高效率的排序算法,下面就来看看怎样用C#语言实现经典的冒泡排序。在编写程序之前,先来了解一下冒泡排序算法原理。假设现有5个数:3,5,2,4,1,要将它们从小到大排序。冒泡排序的过程如图5.3所示。,5.2 用C#中的结构来实现音像记录表,C#是面向对象的语言,结构可视为轻量级的类,是创建用于存储少量数据的数据类型的理想选择,不能表示以后可能要通过继承进行扩展的类型。本章将通过讲解实现完善碟片编号的功能来向读者展示结构的用法。,5.2.1 音像信息记录表程序实例,【本节示例参考:源代码chapter55.2.1StructTest】 通过数组一节,Landy完成了碟片的存储和给碟片编号的任务。现在Landy希望把所有的碟片记录在电子表格中,以方便查找。对电子表格的设计通常采用图5.4的形式。,5.2.2 理解值类型的结构,实践了上一节的例子以后,再来了解结构的概念,相信大家已经茅塞顿开了。定义结构的语法非常简单,以关键字struct打头,格式如下: struct 结构名 属性,方法等 结构是用户定义的值类型。与类相似,结构可以包含构造函数、常数、字段、方法、属性、索引器、运算符和嵌套类型(如上一节的例子,分别定义了no、name、isRent三个字段和一个Status方法)。在结构的声明中,属性是无法初始化的,除非声明为const或static,例如: public struct CDList public const float PI = 3.14f; public static string category=“动画片“; ,.3 用C#枚举给音像分类,问题总是伴随着项目的不断壮大而产生,这是软件不断升级的一个原因,为了在升级过程中不造成更大的困扰,程序员需要在开始软件设计的时候,充分地预感未来可能会发生的事情,并想办法及早地规避问题的发生。 音像店碟片的不断增加,在成百上千的记录表中要找到一条信息,也是相当费时的,Landy需要对记录表进行优化。他需要对碟片按照下面方式分类:文艺片,战争片,喜剧片,爱情片,科幻片按照这种方式给碟片分类,会更方便管理,对于大数据量的碟片管理会带来帮助。,5.3.1 用枚举来给音像归类实例,【本节示例参考:源代码chapter55.3.1EnumTest】 继续重构音像记录表,把每一条记录加上一个类别属性,当有用户要租喜剧片的时候,就只需要把类别是喜剧片的分出来,在里面找到用户所需要的碟片,如图5.7所示。,5.3.2 通过实例理解枚举的作用,【本节示例参考:源代码C8Example_TraverseArray】 程序中的任何一个概念,都是为了解决某类问题而来,枚举亦是如此。枚举可以理解为一组常数的集合,它很好地限定了这组常数的范围,供程序在任何需要的地方引用。枚举的定义以关键字enum来标示,语法如下: enum 枚举名 枚举成员 或者: 访问修辞符 enum 枚举名:基础类型 枚举成员 ,5.4 小结,学完本章后,读者将了解以下内容。 (1)数组、结构和枚举都是C#中常用的数据类型结构。 (2)数组能够存储具有相同数据类型的一组值,数组可以分为一维数组、多维数组和交错数组。 (3)可以使用foreach语句遍历数组,使用System.Array类提供的方法操作数组。 (4)结构用关键字struct声明,结构跟类相似,可以包含构造函数、常数、字段、方法、属性、索引器、运算符和嵌套类型。 (5)要求访问快、且几乎不做运算的那些数据应该作为结构,而需要做很多运算的那些数据应该作为类来处理。 (6)枚举用关键字enum声明,枚举是用于存储一组常数的集合,他很好的限定了这组常数的范围,供程序在任何需要的地方引用。,本章习题,一、选择题 1在面的说法,有误的是 ( ) string movies = new string “周一“,“周二“,“周三“,“周四“,“周五“ A数组下标从0开始 B其中movies3= “周四“ Cmovies.Length =5 Dmovies.Rank = 2 2在C#中,下列哪些语句可以创建一个具有3 个初始值为“的元素的字符串数组?( ) Astring StrList3(“); Bstring3 StrList = “,“,“; Cstring StrList = “
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 消防安全检查员培训课件
- 医疗器械经理工作汇报
- 东北师范大学民俗馆讲解
- 新旧技术合作协议更替原协议作废确认书
- 节假日租车合同终止及车辆返还标准范本
- 私立幼儿园教师儿童社会实践活动指导聘用合同
- 离婚协议书中双方共同财产分割方案示范
- 离异父母子女抚养费增加及支付条件变更协议
- 离婚子女抚养费支付及探望权调整补充协议
- 夫妻关系修复后再破裂协议书范本
- 2024教科版一年级科学上册全册教案设计
- 2025年体育组织行业研究报告及未来行业发展趋势预测
- 2024年永州市工会社会工作者招聘笔试真题
- 推进文旅医养融合发展的策略及实施路径
- 弹跳的小球教学课件
- 2025年山东快递工程专业职称考试(快递设施设备知识·技术员、助理工程师)历年参考题库含答案详解(5卷)
- 反洗钱身份识别培训课件
- 2025年北京市人文知识竞赛真题
- 山东省烟台市2024-2025学年高一下学期期末学业水平诊断生物试卷(含答案)
- 妊娠与产后甲状腺疾病诊断指南
- 《3-6岁儿童学习与发展指南》健康领域知识测评题库(含答案)
评论
0/150
提交评论