《第4章数组、枚举和结构.ppt》由会员分享,可在线阅读,更多相关《第4章数组、枚举和结构.ppt(32页珍藏版)》请在三一办公上搜索。
1、第4章 数组、枚举和结构,本章要点,通过本章的学习,使读者:掌握一维数组的定义、初始化和使用 掌握二维数组的定义、初始化和使用 熟悉用foreach语句遍历数组元素 理解结构类型的含义,掌握结构类型变量的定义和使用 理解枚举类型的含义,掌握枚举类型变量的定义和使用,4.1 数组的定义,4.1.1 一维数组1.一维数组的声明,语法形式如下:类型标识符 数组名;,例如:int a1;/a1是一个含有int类型数据的数组float f1;/f1是一个含有float类型数据的数组string s1;/s1是一个含有string类型数据的数组,2.创建数组对象(2种基本形式),声明数组和创建数组分别进行
2、 类型标识符 数组名;/数组声明 数组名=new 类型标识符size;/创建数组实例 声明数组和创建数组实例可以合在一起写:类型标识符 数组名=new类型标识符size;,例如:int a1;a1=new int 10;/a1是一个含有10个int类型元素的数组string s1=new string 5;/s1是一个含有5个string类/型元素的数组,4.1 数组的定义,4.1.2 二维数组,1.二维数组声明的语法形式 类型标识符,数组名;,例如:int,score;/score是一个int类型的二维数组float,table;/table是一个float类型的二维数组,2.创建数组对象(
3、2种基本形式),声明数组和创建数组分别进行类型标识符,数组名;/数组声明 数组名=new 类型标识符size1,szie2;其中:size1,szie2分别表明多维数组每一维的元素个数 声明数组和创建数组实例可一合在一起写类型标识符,数组名=new 类型标识符 size1,szie2;,例如:int,score;score=new int 3,4;/score是一个3行4列的二维数组float,table=new float2,3;/table是二维数/组,每维分别是2,3,4.2.1 一维数组初始化 语法形式1:类型标识符 数组名=new 类型标识符size元素1,元素2,元素n;语法形式2
4、:类型标识符 数组名=new 类型标识符 元素1,元素2,元素n;语法形式3:类型标识符 数组名=元素1,元素2,元素n;语法形式4:类型标识符 数组名;数组名=new 类型标识符 size 元素1,元素2,元素n;,4.2 数组的初始化,例如:以下数组初始化实例都是等同的。int nums=new int 100,1,2,3,4,5,6,7,8,9;int nums=new int 0,1,2,3,4,5,6,7,8,9;int nums=0,1,2,3,4,5,6,7,8,9int nums;nums=new int 100,1,2,3,4,5,6,7,8,9;,4.2.2 二维数组初始化
5、 语法形式1:类型标识符,数组名=new 类型标识符 size1,size2val11,val12,val1n,val21,val22,val2n;语法形式2:类型标识符 数组名=new 类型标识符,val11,val12,val1n,val21,val22,val2n;,4.2 数组的初始化,例如:以下数组初始化实例都是等同的。int,a=new int 3,4 1,2,3,4,5,6,7,8,9,10,11,12;int,a=new int,1,2,3,4,5,6,7,8,9,10,11,12;int,a=1,2,3,4,5,6,7,8,9,10,11,12;int a;a=new int
6、 3,4 1,2,3,4,5,6,7,8,9,10,11,12;,4.3 数组元素的访问,4.3.1一维数组的引用,一维数组的引用语法形式:数组名下标,下标-数组元素的索引值,实际上就是要访问的那个数组元素在内存中的相对位移,记住相对位移是从0开始,所以下标的数值从0到数组元素的个数-1为止。,【例4-1】定义一个数组,存放一组数据,找出这组数中最大数和最小数。static void Main(string args)int max,min;int queue=new int 101,2,5,6,8,8,9,9,11,2;max=min=queue0;for(int i=1;imax)max=
7、queuei;if(queueimin)min=queuei;Console.Write(最大数是0,最小数是1,max,min);,4.3 数组元素的访问,4.3.2 二维数组的引用,二维数组的引用语法形式:数组名下标1,下标2,【例4-2】求两个矩阵的乘积,假定一个矩阵A为3行4列,一个矩阵B为4行3列,根据矩阵乘法规则,其乘积C为一个3行3列的矩阵。static void Main(string args)int i,j,k;int,a=new int 3,4 1,2,3,4,5,6,7,8,9,10,11,12;int,b=new int 4,3 12,13,14,15,16,17,1
8、8,19,20,21,22,23;int,c=new 3,3;for(i=0;i3;i+)for(j=0;j3;j+)for(k=0;i4;k+)ci,j+=ai,k*bk,j;for(i=0;i3;i+)for(j=0;j3;j+)Console.Write(0,4:d,ci,j);Console.WriteLine();,4.4 综合应用举例,4.4.1 数组与System.Array,System.Array类型是所有数组类型的抽象基本类型,所有的数组类型均由它派生,任何数组都可以使用System.Array具有的属性及其方法。例如,System.Array有一个Length属性,通过它
9、可以使用获取数组的长度,有一个GetLength(n)方法,用它可以得到n维的数组长度(n从0开始)。利用这个属性和方法,可以有效的防止数组下标志的越界。,【例4-4】求两个矩阵的乘积,假定一个矩阵A为3行4列,一个矩阵B为4行3列,根据矩阵乘法规则,其乘积C为一个3行3列的矩阵,static void Main(string args)int i,j,k;int,a=new int 3,4 1,2,3,4,5,6,7,8,9,10,11,12;int,b=new int 4,3 12,13,14,15,16,17,18,19,20,21,22,23;int,c=new 3,3;for(i=0
10、;ic.GetLength(0);i+)/c.GetLength(0)是C数组第一维的长度 for(j=0;jc.GetLength(1);j+)/c.GetLength(0)是C数组第二维的长度 for(k=0;i4;k+)ci,j+=ai,k*bk,j;for(i=0;i3;i+)for(j=0;j3;j+)Console.Write(0,5:d,ci,j);Console.WriteLine();Console.WriteLine(“C数组一共有0个元素”,c.Length);,4.4 综合应用举例,4.4.2 使用foreach语句遍历数组元素 foreach循环主要用于遍历集合中的每
11、个元素,数组也属于集合类型,因此foreach语句允许用于数组元素的遍历。,语法形式:foreach(类型 标识符 in 集合表达式)语句;,【例4-5】用foreach语句遍历数组,找出最大数和最小数。,static void Main(string args)int max,min;int queue=new int 10 11,22,45,6,78,8,9,99,1,2;max=min=queue0;foreach(int x in queue)if(xmax)max=x;if(xmin)min=x;Console.WriteLine(最大数是0,最小数是1,max,min);,4.4
12、综合应用举例,4.4.3 数组元素的清空 数组是不可变大小的,其大小在初始化时已经确定,因此,数组元素的清空只是将部分元素设为0、false或空,这和数组元素的类型有关。为此,C#中提供了Array.Clear方法。,Array.Clear方法定义如下:public static void Clear(Array array,int index;int length),【例4-7】数组元素的清空,static void Main(string args)int myArray=new int 5 1,2,3,4,5;foreach(int i in myArray)/输出未清空时数组的元素值
13、Console.Write(0,4:d,i);Array.Clear(myArray,1,2);/从myArray数组的1号索引元素/开始清空两个元素值 Console.WriteLine(n After Cleared);Console.WriteLine(The length of myArray is 0,myArray.Length);foreach(int i in myArray)/输出清空后数组的元素值 Console.Write(0,4:d,i);,4.4 综合应用举例,4.4.4 数组的查找 由于数组的特性,如需要查找其中的某个元素,则只能对其遍历比较.,C#为数组提供了Ar
14、ray.IndexOf和Array.LastIndexOf方法用于查找数组中的元素。,【例4-8】数组元素的查找,static void Main(string args)int myArray=new int 8 98,5,92,3,4,15,5,45;foreach(int i in myArray)Console.Write(0,4:d,i);int m=Array.IndexOf(myArray,5);Console.WriteLine(n 5在数组中第一次出现的位置是0,m);int n=Array.LastIndexOf(myArray,5);Console.WriteLine(n
15、 5在数组中第最后出现的位置是0,n);,4.4 综合应用举例,4.4.5 数组的排序,C#中提供了用于排序的算法Array.Sort和Array.ReverseArray.Sort方法用于对一维Array对象中元素进行排序。,【例4-9】数组元素的排序,static void Main(string args)int myArray=new int 8 98,5,92,3,4,15,5,45;foreach(int i in myArray)Console.Write(0,4:d,i);Console.WriteLine(n);Array.Sort(myArray,1,3);foreach(
16、int i in myArray)Console.Write(0,4:d,i);Console.WriteLine(n);Array.Sort(myArray);foreach(int i in myArray)Console.Write(0,4:d,i);,4.5 枚举,4.5.1 声明枚举 声明枚举的语法格式:enum 枚举名 枚举成员名称1,枚举成员名称2,枚举成员名称n;,枚举成员默认值为整数,且第一个成员的值为0,其它依此增加1,也可单独指定值;例如,定义一个WeekDay枚举类型:enum WeekDay Sun,Mon,Tue,Wed,Thu,Fri,Sat在WeekDay枚举类
17、型中,含Sun,Mon,Tue,Wed,Thu,Fri,Sat 7个枚举成员,分别被赋予默认整数值0、1、2、3、4、5、6,也就是Sun=0,Sat=6。,4.5 枚举,4.5.1 声明枚举,用户定义枚举类型时,对枚举成员的赋值可以不采用默认值,而赋给用户指定值,例如:enum WeekDay Sun=1,Mon,Tue,Wed,Thu=6,Fri,Sat此时的枚举成员Sun=1,Mon递增1、Mon=2,Tue递增1、Tue=3,Wed递增1、Wed=4,Thu赋值6、Thu=6,Fri递增1、Fri=7,Sat递增1、Sat=8。,4.5 枚举,4.5.2 引用枚举,【例4-11】声明一
18、个名为WeekDay的枚举,演示用枚举变量来访问枚举成员。class Program enum WeekDay Sun=1,Mon,Tue,Wed,Thu=6,Fri,Sat;static void Main(string args)WeekDay wd1,wd2;wd1=WeekDay.Sun;wd2=WeekDay.Sat;Console.WriteLine(0,1,wd1,Convert.ToInt32(wd1);Console.WriteLine(0,1,wd2,Convert.ToInt32(wd2);,4.6 结构,4.6.1 结构类型的声明,struct 结构名称 结构成员定义;
19、,struct student/定义实例成员 public long Sno;public string SName;public int Age;/定义静态成员 public static string Speciality;/定义方法成员 public long SeatNo()/方法代码,struct为关键字,表明声明的是结构类型;结构名称必须符合标识的规则;大括号中定义了结构体成员。与C语言中的结构不同,C#中的结构还可以含有成员方法。结构成员分实例成员和静态成员。,4.6.2 结构成员的访问,结构成员的访问有两种方法,对于实例成员必须用结构变量来访问,对于静态成员可以通过结构名来访问
20、。声明结构变量的语法如下:例如,声明一个学生结构变量stuExamp的格式如下:student stuExamp;,结构名 变量名称;,【例4-12】通过学生结构类型来存储某学生的信息,学生信息包括学号、姓名、年龄、专业等,并通过学号计算出学生上机座位号。,创建控制台应用程序chap4,程序代码如下:namespace chap4 struct student public long Sno;public string SName;public int Age;public static string Speciality=Computer;public long SeatNo()return
21、 Sno%100;,class Program static void Main(string args)student stuExamp;stuExamp.Sno=80012;stuExamp.SName=Yang;stuExamp.Age=22;Console.WriteLine(学号:0,姓名:1,stuExamp.Sno,stuExamp.SName);Console.WriteLine(年龄:0,专业:1,stuExamp.Age,student.Speciality);Console.WriteLine(上机座位号为:0,stuExamp.SeatNo();,课堂实训,1用一维数组计算Fibonacci数列的前20项。Fibonacci数列,按如下递归定义:F(1)=1;F(2)=1F(n)=F(n-1)+F(n-2)n22用冒泡排序法对输入的20个数进行降序排序并存入数组中,然后输入一个数,查找该数是否在数组中存在,若存在,打印出数组中对应的下标值。3试定义一结构,用来描述日期,具体地说,该结构共有三个成员变量,分别描述年、月、日信息。然后再定义该结构类型的一个变量,要求从键盘输入数据,并输出结果,