版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第5章数组和集合,5.1 一维数组 5.2 二维数组 5.3 Array类 5.4 交错数组 5.5 ArrayList类 5.6 List类,5.1 一维数组,5.1.1 一维数组的定义 定义一维数组的语法格式如下: 数组类型 数组名; 例如,以下定义了3个一维数组,即整型数组a、双精度数组b和字符串数组c。 int a; double b; string c; 在定义数组后,必须对其进行初始化才能使用。初始化数组有两种方法:动态初始化和静态初始化。,5.1.2 一维数组的动态初始化 动态初始化需要借助new运算符,为数组元素分配内存空间,并为数组元素赋初值,数值类型初始化为0,布尔类型初始
2、化为false,字符串类型初始化为null。 动态初始化数组的格式如下: 数组类型 数组名=new 数据类型n元素值0,元素值1,元素值n-1; 其中,“数组类型”是数组中数据元素的数据类型,n为“数组长度”,可以是整型常量或变量,后面一层大括号里为初始值部分。 1. 不给定初始值的情况 如果不给出初始值部分,各元素取默认值。例如: int a = new int10; 该数组在内存中各数组元素均取默认值0。,2. 给定初始值的情况 如果给出初始值部分,各元素取相应的初值,而且给出的初值个数与“数组长度”相等。此时可以省略“数组长度”,因为后面的大括号中已列出了数组中的全部元素。例如: int
3、 a = new int101,2,3,4,5,6,7,8,9,10; 或 int a = new int1,2,3,4,5,6,7,8,9,10; 在这种情况下,不允许“数组长度”为变量,例如: int n = 5; /定义变量n int myarr = new intn 1,2,3,4,5;/错误 如果给出“数组长度”,则初始值的个数应与“数组长度”相等,否则出错。例如: int mya = new int2 1,2;/正确 int mya = new int2 1,2,3;/错误 int mya = new int2 1;/错误,5.1.3 一维数组的静态初始化 静态初始化数组时,必须与
4、数组定义结合在一起,否则会出错。静态初始化数组的格式如下: 数据类型 数组名=元素值0,元素值1,元素值n-1; 用这种方法对数组进行初始化时,无需说明数组元素的个数,只需按顺序列出数组中的全部元素即可,系统会自动计算并分配数组所需的内存空间。 例如,以下是对整型数组myarr的静态初始化: int myarr=1,2,3,4,5; 在这种情况下,不能将数组定义和静态初始化分开,例如,以下是错误的。 int myarr; myarr=1,2,3,4,5;/错误的数组的静态初始化,5.1.4 访问一维数组中的元素 访问一维数组中的某个元素:名称下标或索引。 所有元素下标从0开始,到数组长度减1为
5、止。例如,以下语句输出数组myarr的所有元素值: for (i=0;i5;i+) Console.Write(0 ,ai); Console.WriteLine(); C#还提供foreach语句。该语句提供一种简单、明了的方法来循环访问数组的元素。例如,以下代码定义一个名称为mya的数组,并用foreach语句循环访问该数组。 int mya = 1,2,3,4,5,6; foreach (int i in mya) System.Console.Write(0 ,i); Console.WriteLine(); 输出为:1 2 3 4 5 6。,5.1.5 一组数组的越界 若有如下语句定
6、义并初始化数组ca: int ca = new int101,2,3,4,5,6,7,8,7,9,10; 数组ca的合法下标为09,如果程序中使用ca10或ca50,则超过了数组规定的下标,因此越界了。C#系统会提示以下出错信息。 未处理的异常: Syatem.IndexOutOfRangeException:索引超出了数组界限。,【例5.1】设计一个控制台应用程序,采用二分查找方法在给定的有序数组a中查找用户输入的值,并提示相应的查找结果。,using System; namespace Proj5_1 class Program static void Main(string args)
7、double a=new double100,1.2,2.5,3.1,4.6,5.0,6.7,7.6,8.2,9.8; double k; int low=0,high=9,mid; Console.Write(k:); k=double.Parse(Console.ReadLine(); while (low k) high = mid - 1; else low = mid + 1; Console.WriteLine(未找到0,k); ,5.2 二维数组,5.2.1 二维数组的定义 定义二维数组的语法格式如下: 数组类型, 数组名; 其中,“数据类型”为C#中合法的数据类型,“数组名”为
8、C#中合法的标识符。 例如,以下语句定义了3个二维数组,即整型数组x、双精度数组y和字符串数组z。 int, x; double, y; string, z; 对于多维数组,可以作类似的推广,例如,以下语句定义了一个三维数组p。 int, p;,5.2.2 二维数组的动态初始化 动态初始化二维数组的格式如下: 数据类型, 数组名=new 数据类型mn 元素值0,0,元素值0,1,元素值0,n-1, 元素值1,0,元素值1,1,元素值1,n-1, 元素值m-1,0,元素值m-1,1,元素值m-1,n-1 ; 其中,“数组类型”是数组中数据元素的数据类型,m、n分别为行数和列数,即各维的长度,可以
9、是整型常量或变量。,1. 不给定初始值的情况 如果不给出初始值部分,各元素取默认值。例如: int, x = new int23; 该数组各数组元素均取默认值0。,2. 给定初始值的情况 如果给出初始值部分,各元素取相应的初值,而且给出的初值个数与对应的“数组长度”相等。此时可以省略“数组长度”,因为后面的大括号中已列出了数组中的全部元素。例如: int, x = new int231,2,3,4,5,6; 或 int, x = new int,1,2,3,4,5,6;,5.2.3 二维数组的静态初始化 静态初始化数组时,必须与数组定义结合在一起,否则会出错。静态初始化数组的格式如下: 数据类
10、型, 数组名=元素值0,0,元素值0,1,元素值0,n-1, 元素值1,0,元素值1,1,元素值1,n-1, 元素值m-1,0,元素值m-1,1,元素值m-1,n-1; 例如,以下语句是对整型数组myarr的静态初始化。 int, myarr=1,2,3,4,5,6;,5.2.4 访问二维数组中的元素 为了访问二维数组中的某个元素,需指定数组名称和数组中该元素的行下标和列下标。例如,以下语句输出数组myarr的所有元素值。 for (i=0;i2;i+) for (j=0;j3;j+ Console.Write(0 ,myarri,j); Console.WriteLine(); 对于多维数组
11、,也可以使用foreach语句来循环访问每一个元素,例如。 int, myb = new int3, 2 1, 2, 3,4, 5,6; foreach (int i in myb) Console.Write(0 , i); Console.WriteLine(); 其输出为:1 2 3 4 5 6。,【例5.2】 设计一个控制台应用程序,输出九行杨辉三角形。,using System; namespace Proj5_2 class Program const int N=10; static void Main(string args) int i,j; int, a=new intN,
12、N; for (i=1;iN;i+) /1列和对角线元素均为1 ai,i=1;ai,1=1; for (i=3;iN;i+)/求第3N行的元素值 for (j=2;j=i-1;j+) ai,j=ai-1,j-1+ai-1,j; for (i=1;iN;i+)/输出数序 for (j=1;j=i;j+) Console.Write(0,-2 ,ai,j); Console.WriteLine(); ,5.3 Array类,Array类是所有数组类型的抽象基类型。,【例5.3】 设计一个控制台应用程序,产生10个019的随机整数,对其递增排序并输出。,using System; namespace
13、 Proj5_3 class Program static void Main(string args) int i,k; int myarr = new int10; /定义一个一维数组 Random randobj = new Random(); /定义一个随机对象 for (i = myarr.GetLowerBound(0); i = myarr.GetUpperBound(0); i+) k=randobj.Next() % 20; /返回一个019的正整数 myarr.SetValue(k, i); /给数组元素赋值 Console.Write(随机数序:); for (i = m
14、yarr.GetLowerBound(0); i =myarr.GetUpperBound(0); i+) Console.Write(0 , myarr.GetValue(i); Console.WriteLine(); Array.Sort(myarr); /数组排序 Console.Write(排序数序:); for (i = myarr.GetLowerBound(0); i =myarr.GetUpperBound(0); i+) Console.Write(0 , myarr.GetValue(i); Console.WriteLine(); ,5.4 交错数组,交错数组:元素为数
15、组的数组,元素的维度和大小可以不同。多维数组:元素的维度和大小的均相同。 5.4.1 交错数组的定义和初始化 以下语句定义了一个由3个元素组成的一维数组,其中每个元素都是一个一维整数数组: int arrj = new int3; 必须初始化arrj的元素后才可以使用它。可以如下所示初始化该元素: arrj0 = new int5; arrj1 = new int4; arrj2 = new int2;,5.4.2 访问交错数组中的元素 交错数组元素的访问方式与多维数组类似,通常使用Length方法返回包含在交错数组中的数组的数目,例如,以下程序定义一个交错数组myarr并初始化,最后输出所有
16、元素的值。 int myarr = new int3; myarr0 = new int 1,2,3,4,5,6; myarr1 = new int 7,8,9,10; myarr2 = new int 11,12; for (int i = 0; i myarr.Length; i+) Console.Write(myarr(0): , i); for (int j = 0; j myarri.Length; j+) Console.Write(0 , myarrij); Console.WriteLine(); 程序运行结果如下: myarr(0): 1 2 3 4 5 6 myarr(1
17、): 7 8 9 10 myarr(2): 11 12,5.5 ArrayList类,ArrayList类(在命名空间System.Collections中),用于建立不定长度的数组,由于该类数组的数据类型为Object,其长度不固定,可以将其对象看成是一个集合。 定义ArrayList类的对象的语法格式如下: ArrayList 数组名 = new ArrayList(); 例如,以下语句定义一个ArrayList类的对象myarr,可以将它作为一个数组使用: ArrayList myarr = new ArrayList();,【例5.4】 定义一个ArrayList对象,用于存放若干个姓
18、名,对其进行排序,并输出排序后的结果。,using System; using System.Collections; /新增 namespace Proj5_4 class Program static void Main(string args) ArrayList myarr = new ArrayList(); myarr.Add(Smith); myarr.Add(Mary); myarr.Add(Dava); myarr.Add(John); Console.Write(排序前序列:); foreach(String sname in myarr) Console.Write(sn
19、ame + ); Console.WriteLine(); myarr.Sort(); Console.Write(排序前序列:); foreach(String sname in myarr) Console.Write(sname + ); Console.WriteLine(); ,5.6 List类,List类是ArrayList类的泛型等效类,该类使用大小可按需动态增加的数组实现IList泛型接口。 定义List类的对象的语法格式如下: List 数组名 = new List(); 例如,以下语句定义一个List类的对象myset,其元素类型为string,可以将它作为一个数组使用:
20、 List myset = new List();,方法 说明 Add 将对象添加到List的结尾处。 AddRange 将指定集合的元素添加到List的末尾。 BinarySearch 使用对分检索算法在已排序的List或它的一部分中查找特定 元素。 Clear 从List中移除所有元素。 Contains 确定某元素是否在List中。 CopyTo 将List或它的一部分复制到一个数组中。 Exists 确定List是否包含与指定谓词所定义的条件相匹配的元素。 Find 搜索与指定谓词所定义的条件相匹配的元素,并返回整个 List中的第一个匹配元素。 FindAll 检索与指定谓词所定义的
21、条件相匹配的所有元素。 FindIndex 搜索与指定谓词所定义的条件相匹配的元素,返回List或它 的一部分中第一个匹配项的从零开始的索引。 FindLast 搜索与指定谓词所定义的条件相匹配的元素,并返回整个 List中的最后一个匹配元素。,FindLastIndex 搜索与指定谓词所定义的条件相匹配的元素,返回List或它的 一部分中最后一个匹配项的从零开始的索引。 ForEach 对List的每个元素执行指定操作。 IndexOf 返回List或它的一部分中某个值的第一个匹配项的从零开始的 索引。 Insert 将元素插入List的指定索引处。 InsertRange 将集合中的某个元
22、素插入List的指定索引处。 LastIndexOf 返回List或它的一部分中某个值的最后一个匹配项的从零开始 的索引。 Remove 从List中移除特定对象的第一个匹配项。 RemoveAll 移除与指定的谓词所定义的条件相匹配的所有元素。 RemoveAt 移除List的指定索引处的元素。 RemoveRange 从List中移除一定范围的元素。 Reverse 将List或它的一部分中元素的顺序反转。 Sort 对List或它的一部分中的元素进行排序。 ToArray 将List的元素复制到新数组中。 TrimExcess 将容量设置为List中的实际元素数目(如果该数目小于某个阈 值)。,【例5.5】 设计一个控制台应用程序,定义一个List对象,用于添加若干个学生的学号和姓名,输出后再插入一个学生记录。,using System; namespace Proj5_5 struct Stud /定义结构类型 public int sno; /学号 public string sname; /姓名 ; class Program static void Main(string args) int i; Li
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 氧化钨制备工岗前技术传承考核试卷含答案
- 黄酒发酵工测试验证模拟考核试卷含答案
- 密码技术应用员岗后考核试卷含答案
- 磨工岗前基础操作考核试卷含答案
- 锻造加热工安全生产意识测试考核试卷含答案
- 苯基氯硅烷生产工诚信品质考核试卷含答案
- 2024年连云港市特岗教师笔试真题题库附答案
- 溶剂发酵工安全技能测试知识考核试卷含答案
- 民族拉弦乐器制作工安全理论竞赛考核试卷含答案
- 记号笔制造工岗前技术实务考核试卷含答案
- 稳评机构各项管理制度
- QHBTL01-2022 热力入口装置
- 16吨吊车培训课件下载
- 北京市2025年第一次普通高中学业水平合格性考试政治试题(原卷版)
- GB/T 45732-2025再生资源回收利用体系回收站点建设规范
- 无锡车联天下信息技术有限公司智能网联汽车车载显示模组研发及智能化生产项目环评资料环境影响
- CJ/T 120-2016给水涂塑复合钢管
- 抹灰层阴阳角方正度控制技术
- 中国特色社会主义知识点总结中职高考政治一轮复习
- 五年级数学下册寒假作业每日一练
- 企业管理的基础工作包括哪些内容
评论
0/150
提交评论