(本科)第7章数组与集合ppt课件.ppt
《(本科)第7章数组与集合ppt课件.ppt》由会员分享,可在线阅读,更多相关《(本科)第7章数组与集合ppt课件.ppt(48页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、课程主讲人:第7章 数组与集合7.1 数组基本概念数组基本概念7.2 一维数组一维数组7.3 二维数组二维数组7.4 多维数组多维数组7.5 Array7.6 ArrayList将一组有序的、个数有限的、数据类型相同的数据组合起来作为一将一组有序的、个数有限的、数据类型相同的数据组合起来作为一个整体,用一个统一的名字(数组名)来表示,这些有序数据的全体个整体,用一个统一的名字(数组名)来表示,这些有序数据的全体则称为一个数组。数组是具有相同数据类型的元素的有序集合。则称为一个数组。数组是具有相同数据类型的元素的有序集合。1.什么是数组什么是数组在同一个数组中,构成该数组的数据称为数组元素。在同
2、一个数组中,构成该数组的数据称为数组元素。C#中用一个统一的名字(数组名)来表示数组。如果要访问数组中中用一个统一的名字(数组名)来表示数组。如果要访问数组中的数组元素,就需要将数组名与下标(索引)结合起来。的数组元素,就需要将数组名与下标(索引)结合起来。“下标下标”就就是指数组元素在该数组中的索引值,用以标明数组元素在数组中的位是指数组元素在该数组中的索引值,用以标明数组元素在数组中的位置。在置。在C#中,数组元素的索引值是从中,数组元素的索引值是从0开始的,即:开始的,即:0,1,2,3,4,5,。2.数组元素与下标数组元素与下标数组的类型是指构成数组的元素的数据类型(同一数组的所有数组
3、数组的类型是指构成数组的元素的数据类型(同一数组的所有数组元素的数据类型必须一致),它可以是任何的基本数据类型,如:整元素的数据类型必须一致),它可以是任何的基本数据类型,如:整型、字符串型、布尔型等;型、字符串型、布尔型等;也可以是用户自定义类型,如结构、枚举、类类型甚至是控件类型也可以是用户自定义类型,如结构、枚举、类类型甚至是控件类型等。等。3.数组的类型数组的类型数组下标(索引)的个数称为数组的维数,也称为数组的秩数组下标(索引)的个数称为数组的维数,也称为数组的秩(rank)。例如一维数组秩为)。例如一维数组秩为1,二维数组秩为,二维数组秩为2。4.数组的维数(秩)数组的维数(秩)数
4、组的所有维度中的元素的总和称为数组的长度。数组的所有维度中的元素的总和称为数组的长度。注意:数组一旦创建并且初始化,大小就固定了,注意:数组一旦创建并且初始化,大小就固定了,C#不支持动态数不支持动态数组。数组的索引从组。数组的索引从0开始,开始,n个元素的数组索引范围是从个元素的数组索引范围是从0到到n-1。5.数组的长度数组的长度当数组中每个元素都只带有一个下标时,称这样的数组为一维数组。当数组中每个元素都只带有一个下标时,称这样的数组为一维数组。一维数组是计算机程序中最基本的数组。二维及多维数组可以看作是一维数组是计算机程序中最基本的数组。二维及多维数组可以看作是一维数组的多次叠加产生的
5、。一维数组的多次叠加产生的。1.定义一维数组定义一维数组数据类型数据类型 数组名数组名;int x;float y;string z;静态初始化数组时,必须与数组定义结合在一起,否则会出错。数静态初始化数组时,必须与数组定义结合在一起,否则会出错。数组静态初始化语法格式如下:组静态初始化语法格式如下:2.一维数组的静态初始化一维数组的静态初始化数据类型 数组变量名=元素值0, 元素值1, . , 元素值n-1 ;动态初始化需要借助动态初始化需要借助new运算符,为数组元素分配内存空间,并为运算符,为数组元素分配内存空间,并为数组元素赋初值,数值类型初始化为数组元素赋初值,数值类型初始化为0(实
6、数为(实数为0.0),布尔类型初始化),布尔类型初始化为为false,字符串类型初始化为,字符串类型初始化为null。3.一维数组的动态初始化一维数组的动态初始化数组类型 数组名=new 数据类型n元素值0,元素值1, . ,元素值n-1;如果不给出初始值部分,各元素取默认值,例如,以下代码初始化如果不给出初始值部分,各元素取默认值,例如,以下代码初始化了两个整型数组。了两个整型数组。int a = new int5; /以常量作为数组长度int m=6; /声明整型变量int b = new intm; /以变量作为数组长度如果给出初始值部分,各元素取相应的初值,而且给出的初值个数如果给出初
7、始值部分,各元素取相应的初值,而且给出的初值个数与与“数组长度数组长度”相等,此时可以省略相等,此时可以省略“数组长度数组长度”,因为后面的大括,因为后面的大括号中已列出了数组中的全部元素。号中已列出了数组中的全部元素。3.一维数组的动态初始化一维数组的动态初始化int a = new int101,2,3,4,5,6,7,8,9,10; string strs = new string7 AB, B2, C3, Ddef, E12, 12F, 软件 ;int a = new int1,2,3,4,5,6,7,8,9,10; string strs = new string AB, B2, C
8、3, Ddef, E12, 12F, 软件 ;所有元素下标从所有元素下标从0开始,到数组长度减开始,到数组长度减1为止。为止。数组名称下标或索引4.访问一维数组元素访问一维数组元素实例描述:实例描述:编写程序,遍历一维数组。编写程序,遍历一维数组。实例分析:实例分析:使用使用foreach语句遍历数组。首先定义并初始化一个一维语句遍历数组。首先定义并初始化一个一维数组,用来存储学生姓名,然后遍历该数组,依次输出所有元素。数组,用来存储学生姓名,然后遍历该数组,依次输出所有元素。static void Main(string args) string stuNames = new string5
9、 Smith, White, Douglas, Jackson, Thompson; foreach(string s in stuNames) Console.WriteLine(s); Console.ReadKey();【实例实例7-1】遍历学生姓名一维数组,输出所有元素。遍历学生姓名一维数组,输出所有元素。实例描述:实例描述:编写程序,逆序遍历一维数组。编写程序,逆序遍历一维数组。实例分析:实例分析:使用使用for语句,控制数组下标从最后一个元素下标(语句,控制数组下标从最后一个元素下标(n-1)按降序递减到第一个元素下标(按降序递减到第一个元素下标(0),逆序遍历数组。),逆序遍历数
10、组。static void Main(string args) string stuNames = new string5 Smith, White, Douglas, Jackson, Thompson ; for (int i = stuNames.Length; i = 0;i- ) Console.WriteLine(stuNamesi); Console.ReadKey();【实例实例7-2】遍历学生姓名一维数组,逆序输出所有元素。遍历学生姓名一维数组,逆序输出所有元素。程序运行引发程序运行引发“IndexOutOfRangeException”,即数组下标越界异,即数组下标越界异常
11、。引发异常的原因,就在常。引发异常的原因,就在for循环的循环变量初始值设置上。考查如循环的循环变量初始值设置上。考查如下代码:下代码:for (int i = stuNames.Length; i = 0;i- )修改代码如下。修改代码如下。for (int i = stuNames.Length-1; i = 0;i- )【实例实例7-2】遍历学生姓名一维数组,逆序输出所有元素。遍历学生姓名一维数组,逆序输出所有元素。二维数组可以看成是数组的数组,它的每一个元素又是一个一维数二维数组可以看成是数组的数组,它的每一个元素又是一个一维数组。二维数组需要两个下标才能确定元素的位置,因此也可以将二
12、维组。二维数组需要两个下标才能确定元素的位置,因此也可以将二维数组理解为矩阵,两个下标分别代表元素的行和列。数组理解为矩阵,两个下标分别代表元素的行和列。数据类型 , 数组名;1.定义二维数组定义二维数组数据类型, 数组名 = 元素值0,0 ,元素值0,1 ,., 元素值0,n-1 , 元素值1,0 ,元素值1,1 ,., 元素值1,n-1 , . 元素值m-1,0 ,元素值m-1,1 ,., 元素值m-1,n-1 ;2.二维数组的静态初始化二维数组的静态初始化数组类型 , 数组名=new 数据类型mn 元素值0,0 ,元素值0,1 ,., 元素值0,n-1 , 元素值1,0 ,元素值1,1
13、,., 元素值1,n-1 , . 元素值m-1,0 ,元素值m-1,1 ,., 元素值m-1,n-1 ;3.二维数组的动态初始化二维数组的动态初始化4.访问二维数组元素访问二维数组元素数组名称行下标, 列下标访问二维数组中的某个元素,需指定数组名称和数组中该元素的行访问二维数组中的某个元素,需指定数组名称和数组中该元素的行下标和列下标,语法格式为:下标和列下标,语法格式为: 【实例实例7-3】计算学生平均成绩。计算学生平均成绩。实例描述:实例描述:假设每个学生有姓名、三门课程(数学、语文、英语)的成绩,假设每个学生有姓名、三门课程(数学、语文、英语)的成绩,使用一个一维数组来存储学生姓名。用一
14、个二维数组来存储各学生的三门课程使用一个一维数组来存储学生姓名。用一个二维数组来存储各学生的三门课程成绩,每一行代表一个学生,每一列代表某门课程的分数。编写程序,求出每成绩,每一行代表一个学生,每一列代表某门课程的分数。编写程序,求出每个学生的平均成绩,并输出。个学生的平均成绩,并输出。实例分析:实例分析:存储姓名的一维数组可使用存储姓名的一维数组可使用string类型,存储成绩的二维数组为类型,存储成绩的二维数组为数值并需要运算平均成绩,故采用数值并需要运算平均成绩,故采用double类型。为了实用化,学生个数、姓名类型。为了实用化,学生个数、姓名和分数均由用户输入,先根据输入的学生个数定义
15、姓名一维数组和成绩二维数和分数均由用户输入,先根据输入的学生个数定义姓名一维数组和成绩二维数组,然后依次输入姓名和分数。输入结束后计算并输出每个学生的平均分。组,然后依次输入姓名和分数。输入结束后计算并输出每个学生的平均分。本例关键是姓名一维数组和成绩二维数组的元素关联对应问题,即第本例关键是姓名一维数组和成绩二维数组的元素关联对应问题,即第i个姓个姓名一维数组的元素对应第名一维数组的元素对应第i个成绩二维数组的元素(三门课程成绩)。个成绩二维数组的元素(三门课程成绩)。 【实例实例7-3】计算学生平均成绩。计算学生平均成绩。static void Main(string args) Cons
16、ole.WriteLine(*学生平均分计算程序*); int stuNum; /学生个数 Console.WriteLine(请输入学生个数:); /即二维数组的行数 stuNum = int.Parse(Console.ReadLine(); String names = new StringstuNum; /学生姓名一维数组 Double, score = new DoublestuNum, 3; /学生成绩二维数组 Console.WriteLine(*接收数据*); for (int i = 0; i stuNum; i+) Console.WriteLine(请输入学生 + (i
17、+ 1) + 的姓名:); namesi = Console.ReadLine(); Console.WriteLine(请输入 + namesi + 的数学成绩:); scorei, 0 = double.Parse(Console.ReadLine(); Console.WriteLine(请输入 + namesi + 的语文成绩:); scorei, 1 = double.Parse(Console.ReadLine(); Console.WriteLine(请输入 + namesi + 的英语成绩:); scorei, 2 = double.Parse(Console.ReadLine
18、(); Console.WriteLine(*); Console.WriteLine(*计算并显示结果*); for (int i = 0; i stuNum; i+) Double avg=(scorei, 0+scorei,1+scorei,2)/3; Console.WriteLine(namesi+的平均分为: +avg); Console.ReadKey();数据类型, 数组名 = new 数据类型该维度数组的长度,该维度数组的长度,;多维数组通常可以理解为数组的嵌套,即数组的元素又是一个数组,多维数组通常可以理解为数组的嵌套,即数组的元素又是一个数组,以此迭代下去即称为多维数组。
19、二维以上的数组都可以称为多维数组。以此迭代下去即称为多维数组。二维以上的数组都可以称为多维数组。System.Array是所有数组类型的抽象基类型。是所有数组类型的抽象基类型。Array类提供了数组类提供了数组的通用方法,包括创建、元素操作、搜索和排序等,因而在公共语言的通用方法,包括创建、元素操作、搜索和排序等,因而在公共语言运行库中用作所有数组的基类。运行库中用作所有数组的基类。在在C#中,数组实际上是中,数组实际上是System.Array类的对象。如本章前几节实例类的对象。如本章前几节实例中定义的各个数组,均为中定义的各个数组,均为Array类的对象。类的对象。由于由于Array类是抽
20、象类,不能创建对象,所以该类提供了一些静态类是抽象类,不能创建对象,所以该类提供了一些静态方法以供调用。方法以供调用。Sort方法有下列三种语法格式,都是按升序排序:方法有下列三种语法格式,都是按升序排序:(1)Array.Sort(Array1):对整个一维数组:对整个一维数组Array1中的元素进行排中的元素进行排序。序。(2)Array.Sort(Array1, Array2):对两个一维数组进行关联排序,:对两个一维数组进行关联排序,Array1包含要排序的关键字,包含要排序的关键字,Array2包含对应的项;对包含对应的项;对Array1中的关中的关键字排序后,键字排序后,Array
21、2中对应位置的元素按照中对应位置的元素按照Array1中的排序结果自动中的排序结果自动排序。排序。(3)Array.Sort(Array1, m, n):对一维数组:对一维数组Array1中起始位置为中起始位置为m的的n个元素进行排序。个元素进行排序。实例描述:实例描述:在在【实例实例7-3】计算平均成绩的基础上,编写程序,对求出的平均分降序计算平均成绩的基础上,编写程序,对求出的平均分降序输出(从高到低排名),并输出对应的学生姓名。输出(从高到低排名),并输出对应的学生姓名。实例分析:实例分析:【实例实例7-3】已完成计算平均成绩,本实例不再给出重复代码,假设每个已完成计算平均成绩,本实例不
22、再给出重复代码,假设每个学生的平均成绩已计算出来,并存入一个一维数组学生的平均成绩已计算出来,并存入一个一维数组AVGScore中,则直接使用中,则直接使用Array类的类的Sort方法即可实现排序。由于方法即可实现排序。由于Sort方法结果是升序,需调用方法结果是升序,需调用Reverse方法对排序结果进行方法对排序结果进行翻转即可实现降序排序。翻转即可实现降序排序。这里使用这里使用Array.Sort(Array1, Array2)方法实现姓名一维数组和平均成绩一维数组的方法实现姓名一维数组和平均成绩一维数组的关联排序(以平均成绩作为排序关键字),然后分别使用关联排序(以平均成绩作为排序关
23、键字),然后分别使用Reverse方法进行翻转,实现降方法进行翻转,实现降序排序,再依次输出元素值。另一种方法是对两个数组按升序关联排序后,不用序排序,再依次输出元素值。另一种方法是对两个数组按升序关联排序后,不用Reverse方法进行翻转,而是从最后一个元素开始逆向依次输出直到第一个元素,亦可实现按降方法进行翻转,而是从最后一个元素开始逆向依次输出直到第一个元素,亦可实现按降序排名结果。序排名结果。 【实例实例7-4】计算学生平均成绩,并按从高到低降序排名。计算学生平均成绩,并按从高到低降序排名。 【实例实例7-4】计算学生平均成绩,并按从高到低降序排名。计算学生平均成绩,并按从高到低降序排
24、名。static void Main(string args) /为简化程序,直接给出初始值 string names = Smith, Thompson, Black ;/定义姓名数组 int AVGScore = 85, 91, 78 ; /定义平均成绩数组 /以AVGScore为关键字排序,同时调整names数组中对应元素的位置 Array.Sort(AVGScore, names); /对两个数组的元素都进行翻转 Array.Reverse(AVGScore); Array.Reverse(names); for (int i = 0; i = AVGScore.GetUpperBou
25、nd(0); i+) Console.WriteLine(姓名: + namesi + t成绩: + AVGScorei); Console.ReadKey();ArrayList类位于命名空间类位于命名空间System.Collections中,用于建立不定长度中,用于建立不定长度的数组,由于该类数组的数据类型为的数组,由于该类数组的数据类型为Object,且长度不固定,可以将其,且长度不固定,可以将其对象看成是一个集合。对象看成是一个集合。集合不同于数组,是一组可变数量的元素的组合,这些元素可能共集合不同于数组,是一组可变数量的元素的组合,这些元素可能共享某些特征。一般来说,这些元素的类型
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 本科第7章 数组与集合ppt课件 本科 数组 集合 ppt 课件
限制150内