《c#pp第五章数组、结构和枚举.ppt》由会员分享,可在线阅读,更多相关《c#pp第五章数组、结构和枚举.ppt(42页珍藏版)》请在金锄头文库上搜索。
1、第第5章章数组、结构和枚举数组、结构和枚举内容提要:内容提要:数组、结构和枚举的概念数组、结构和枚举的概念一维数组、二维数组的定义及使用一维数组、二维数组的定义及使用结构和枚举的定义及使用结构和枚举的定义及使用目的要求:目的要求:理解数组的含义理解数组的含义掌握一维数组、二维数组的用法掌握一维数组、二维数组的用法掌握结构和枚举的定义及使用掌握结构和枚举的定义及使用重点难点:重点难点:一维数组、二维数组和结构一维数组、二维数组和结构5.1数组数组5.1.1数组的概念数组的概念数组是一种数据结构,是一组具有相同数据结构的元素数组是一种数据结构,是一组具有相同数据结构的元素组成的有序的数据集合。组成
2、数组的元素统称为数组元素。数组成的有序的数据集合。组成数组的元素统称为数组元素。数组用一个统一的名称来标识这些元素,这个名称就是数组名。组用一个统一的名称来标识这些元素,这个名称就是数组名。它包含大量相同类型的变量,这些变量可以通过一个它包含大量相同类型的变量,这些变量可以通过一个数组名和数组名和数组下标数组下标(或者叫索引(或者叫索引),来访问。包含在数组中的变量,也,来访问。包含在数组中的变量,也称为称为数组元素数组元素。在在C#中,数组有一维(只有一个下标)或者多维(有多中,数组有一维(只有一个下标)或者多维(有多个下标)。个下标)。对于每一维中,数组中数组元素的个数叫这个维的对于每一维
3、中,数组中数组元素的个数叫这个维的数组长数组长度度。无论是一维数组还是多维数组,每个维的下标都是从。无论是一维数组还是多维数组,每个维的下标都是从0开开始,结束于这个维的数组长度减始,结束于这个维的数组长度减1。5.1.2一维数组一维数组1一维数组的定义一维数组的定义格式:格式:数组类型数组类型数组名;数组名;例:例:inta;stringarr;charcarr;2动态初始化动态初始化动态初始化需要借助动态初始化需要借助new运算符,为数组元素分配内存运算符,为数组元素分配内存空间,并为数组元素空间,并为数组元素赋初值赋初值,数值类型初始化为,数值类型初始化为0,布尔类型,布尔类型初始化为初
4、始化为false,字符串类型初始化为,字符串类型初始化为null。格式:格式:数组名数组名=new数据类型数据类型数组长度数组长度;例:例:a=newint6;也可以将定义和动态初始化写在一起:也可以将定义和动态初始化写在一起:例:例:stringarr=newstring3“as”,”vb”,”23”;usingSystem;classzy4staticvoidMain()boola=newbool2;charb=newchar3;doublec=newdouble4;stringd=newstring5;Console.WriteLine(a0);Console.WriteLine(b0)
5、;Console.WriteLine(c0);Console.WriteLine(d0);3静态初始化静态初始化静态初始化数组的格式如下:静态初始化数组的格式如下:数据类型数据类型数组名数组名=元素元素1,元素,元素2.;用这种方法对数组进行初始化时,无须说明数组元用这种方法对数组进行初始化时,无须说明数组元素的个数,只需按顺序列出数组中的全部元素即可,系素的个数,只需按顺序列出数组中的全部元素即可,系统会统会自动自动计算并计算并分配分配数组所需的数组所需的内存空间内存空间。例如:例如:intIntArr=-45,9,29,32,46;charStringArr=a,b,c,d;4关于一维数组
6、初始化的几点说明关于一维数组初始化的几点说明在在C#中,数组初始化是程序设计中经常容易出错的中,数组初始化是程序设计中经常容易出错的部分,为加深读者对部分,为加深读者对C#中数组的理解,下面列出一些需中数组的理解,下面列出一些需要读者注意的方面:要读者注意的方面:(1)动态初始化数组时,可以把定义与初始化分开在)动态初始化数组时,可以把定义与初始化分开在不同的语句中进行不同的语句中进行;(2)静态初始化数组必须与数组定义结合在一条语句)静态初始化数组必须与数组定义结合在一条语句中,否则程序就会出错中,否则程序就会出错;(3)在数组初始化语句中,如果大括号中已明确列出)在数组初始化语句中,如果大
7、括号中已明确列出了数组中的元素,了数组中的元素,即确定了元素个数,即确定了元素个数,则表示数组元素则表示数组元素个数的数值(即方括号中的数值)必须是常量,个数的数值(即方括号中的数值)必须是常量,并且该并且该数值必须与数组元素个数一致数值必须与数组元素个数一致。5访问一维数组中的元素访问一维数组中的元素在在C#中是通过数组名和下标来访问数组元素的。中是通过数组名和下标来访问数组元素的。例:例:inta=newint12;intc=5;intb=6;ab+c+=2;每一个每一个C#的数组都知道自己的长度,数组的长度由的数组都知道自己的长度,数组的长度由Length决定。决定。inti=a.Len
8、gth;/i=12例:计算例:计算a数组中前数组中前3个元素的总和,并且把结果保存到变个元素的总和,并且把结果保存到变量量sum中。中。intsum=a0+1+a2;如果要把数组中的元素全部相加,则用循环比较方便。如果要把数组中的元素全部相加,则用循环比较方便。例:例:for(inti=0;ia.Length;i+)sum+=ai;/注意:不能写成注意:不能写成i=0;j-)Console.Write(“00”,numsj);Console.WriteLine();运行结果如下:运行结果如下:usingSystem;classRnd_36_7staticvoidMain()inta=newin
9、t7;Randomran=newRandom();for(inti=0;ia.Length;i+)one_num:ai=(int)ran.Next(36)+1;for(intj=0;ji;j+)if(ai=aj)gotoone_num;foreach(intnina)Console.Write(00,n);编程:编程:36选选7。随机产生。随机产生7个数,每个数在个数,每个数在136范围内,要求每个数不同。范围内,要求每个数不同。1下面是几条动态初始化一维数组的语句,其中正确的是下面是几条动态初始化一维数组的语句,其中正确的是()A.intarr2=newint;B.intarr2=newin
10、t4;C.intarr2=newinti6,5,1,2,3;D.intarr2=newint46,5,1,2,3;练习练习:5.1.3二维数组二维数组在多维数组中,二维数组是最简单也是最常用的数组。在多维数组中,二维数组是最简单也是最常用的数组。1二维数组的定义二维数组的定义数据类型数据类型,数组名;数组名;例如:例如:double,dArr;/定义一个定义一个double型二维数组型二维数组2二维数组的初始化二维数组的初始化格式:格式:数组名数组名=new数据类型数据类型数组长度数组长度1,数组长度,数组长度2;例如:例如:dArr=newdouble3,4;也可以将二维数组的定义与也可以将
11、二维数组的定义与动态动态初始化合并在一条语句中。初始化合并在一条语句中。例如:例如:double,dArr=newdouble3,4;在动态初始化二维数组时,也可以直接为其赋予初始化值。在动态初始化二维数组时,也可以直接为其赋予初始化值。例如:例如:int,IntArr=newint,1,3,2,4,5,6;二维数组也可以进行二维数组也可以进行静态静态初始化初始化:char,c=a,b,c,x,y,z;写出下列程序的结果:写出下列程序的结果:classmyClassstaticvoidMain()double,a=1.2,2.3,3.4,4.5,5.6,6.7,7.8,8.9;doubleb=
12、1.2,6.7,5.4;boolexist;foreach(doubleiina)exist=false;foreach(doublekinb)if(i=k)exist=true;if(exist=false)Console.WriteLine(0,i);运行结果:运行结果:usingSystem;classYHtrianglestaticvoidMain()int,a=newint6,6;a0,0=1;for(inti=1;i=5;i+)ai,0=1;ai,i=1;for(intj=1;j=i;j+)ai,j=ai-1,j-1+ai-1,j;for(inti=0;i=5;i+)for(int
13、j=0;j=i;j+)Console.Write(00,ai,j);Console.WriteLine();编程:输出如右图所示的杨辉三角。编程:输出如右图所示的杨辉三角。1下面是几条定义并初始化二维数组的语句,指出其中正下面是几条定义并初始化二维数组的语句,指出其中正确的是(确的是()Aintarr3=newint2,3;Bintarr3=newint2,3;Cintarr3,=newint2,3;Dint,arr3=newint2,3;练习练习:2写出下列程序的输出结果。写出下列程序的输出结果。int,a=newint2,2;for(inti=0;i3;i+)for(intj=0;j3;j
14、+)if(i=j)ai,j=1;elseai,j=0;Console.WriteLine();结果:结果:结结构构是是用用户户自自定定义义的的数数据据类类型型。结结构构类类型型是是指指把把各各种种不不同类型数据信息组合在一起形成的组合类型。同类型数据信息组合在一起形成的组合类型。5.2结构类型结构类型5.2.1结构的声明结构的声明结构类型也是先声明后使用。结构类型也是先声明后使用。声声明明结结构构类类型型时时要要使使用用struct关关键键字字,声声明明结结构构类类型型的的一般语法格式如下:一般语法格式如下:struct标识符标识符/结构成员定义结构成员定义例:定义一个表示矩形的结构。例:定义
15、一个表示矩形的结构。structRectangle/定义名为定义名为Rectangle的结构的结构publicdouble长长;publicdouble宽宽;public代表这个成员是公有成员,可以被外界访问。代表这个成员是公有成员,可以被外界访问。结构体中也可以放结构体中也可以放方法方法成员,如可以在结构体中计算面积。成员,如可以在结构体中计算面积。例:例:structRectangle/定义名为定义名为Student的结构的结构publicdouble长长;publicdouble宽宽;publicvoid面积面积()Console.WriteLine(“面积面积=0”,长长*宽宽);5.
16、2.2结构成员的访问结构成员的访问结构成员可分为两类,一是结构成员可分为两类,一是实例实例成员,一是成员,一是静态静态成员。成员。若若成成员员名名前前有有static关关键键字字,则则该该成成员员为为静静态态成成员员,否否则为实例成员。静态成员通过结构名来访问,格式则为实例成员。静态成员通过结构名来访问,格式:结构名结构名.静态成员名静态成员名实实例例成成员员的的访访问问是是通通过过创创建建结结构构类类型型的的变变量量来来访访问问结结构的实例成员。格式:构的实例成员。格式:结构名结构名标识符;标识符;实例成员访问格式为:实例成员访问格式为:结构变量名结构变量名.实例成员名实例成员名练习练习:1
17、.声明结构类型的关键字为(声明结构类型的关键字为()AclassBdoubleCstructDint枚枚举举类类型型是是用用户户自自定定义义的的数数据据类类型型,是是一一种种允允许许用用符符号号代代表数据的值类型。表数据的值类型。枚枚举举是是指指程程序序中中某某个个变变量量具具有有一一组组确确定定的的值值,通通过过“枚枚举举”可以将其值一一列出来。可以将其值一一列出来。例例如如:将将一一个个星星期期的的7天天分分别别用用符符号号Monday、Tuesday、Wednesday、Thursday、Friday、Saturday和和Sunday来表示。来表示。5.3枚举枚举5.3.1枚举类型的定义
18、枚举类型的定义枚举类型是一种用户自己定义的由一组指定常量集合组枚举类型是一种用户自己定义的由一组指定常量集合组成的独特类型。成的独特类型。格式:格式:enum枚举名枚举名枚举成员表枚举成员表;例:例:enumWeekDaySun,Mon,Tue,Wed,Thu,Fri,Sat;注意:两个枚举成员名不能完全相同。注意:两个枚举成员名不能完全相同。5.3.2枚举成员的赋值枚举成员的赋值在在定定义义的的枚枚举举类类型型中中,每每一一个个枚枚举举成成员员都都有有一一个个相相对对应应的的整整数数值值,对对于于枚枚举举成成员员对对应应的的整整数数值值,默默认认情情况况下下C#规规定定第第1个个枚枚举举成成
19、员员的的值值取取0,它它后后面面的的每每一一个个枚枚举举成成员员的的值按值按加上加上1递增递增。例:例:enumWeekDaySun,Mon,Tue,Wed,Thu,Fri,Sat;中,其枚举中,其枚举成员成员Sun、Mon、Tue、Wed、Thu、Fri和和Sat在执行程序在执行程序时,分别被赋予整数值时,分别被赋予整数值0、1、2、3、4、5和和6。例:输出枚举成员对应的整数值。例:输出枚举成员对应的整数值。usingSystem;enumcoloryellow,brown,blue,black,purpleclassEnumDemostaticvoidMain()Console.Writ
20、eLine(“yellow=0”,color.yellow);Console.WriteLine(“yellow=0”,(int)color.yellow);Console.WriteLine(“brown=0”,(int)color.brown);Console.WriteLine(“blue=0”,(int)color.blue);Console.WriteLine(“black=0”,(int)color.black);Console.WriteLine(“purple=0”,(int)color.purple);注意:注意:枚举成员的值在不经过显式转换前,是不会变换成整数值的。枚举成员
21、的值在不经过显式转换前,是不会变换成整数值的。1.为第为第1个枚举成员赋值个枚举成员赋值在在定定义义枚枚举举类类型型时时,为为第第1个个枚枚举举成成员员赋赋值值,它它后后面面的的每每一一个个枚枚举举成员的值成员的值按加按加1递增递增。例:例:usingSystem;enumcoloryellow=-1,brown,blue,black,purpleclassEnumDemostaticvoidMain()Console.WriteLine(“yellow=0”,color.yellow);Console.WriteLine(“yellow=0”,(int)color.yellow);Conso
22、le.WriteLine(“brown=0”,(int)color.brown);Console.WriteLine(“blue=0”,(int)color.blue);Console.WriteLine(“black=0”,(int)color.black);Console.WriteLine(“purple=0”,(int)color.purple);2.为某一个枚举成员赋值为某一个枚举成员赋值如如果果在在定定义义枚枚举举类类型型时时,直直接接为为某某个个枚枚举举成成员员赋赋值值,则则其其他他枚举成员枚举成员依次取值依次取值,如:,如:enumcoloryellow,brown,blue,
23、black=6,purple;例:例:usingSystem;enumcoloryellow,brown,blue,black=6,purpleclassEnumDemostaticvoidMain()Console.WriteLine(“yellow=0”,color.yellow);Console.WriteLine(“yellow=0”,(int)color.yellow);Console.WriteLine(“brown=0”,(int)color.brown);Console.WriteLine(“blue=0”,(int)color.blue);Console.WriteLine(
24、“black=0”,(int)color.black);Console.WriteLine(“purple=0”,(int)color.purple);3.为多个枚举成员赋值为多个枚举成员赋值在定义枚举类型时,还可以为多个枚举成员赋值。在定义枚举类型时,还可以为多个枚举成员赋值。例如:例如:enumcoloryellow,brown=3,blue,black=-3,purple; 例:输出枚举成员对应的整数值。例:输出枚举成员对应的整数值。usingSystem;enumcoloryellow,brown=3,blue,black=-3,purpleclassEnumDemostaticvoi
25、dMain()Console.WriteLine(“yellow=0”,color.yellow);Console.WriteLine(“yellow=0”,(int)color.yellow);Console.WriteLine(“brown=0”,(int)color.brown);Console.WriteLine(“blue=0”,(int)color.blue);Console.WriteLine(“black=0”,(int)color.black);Console.WriteLine(“purple=0”,(int)color.purple);4.为多个枚举成员赋同样的值为多个枚
26、举成员赋同样的值在在定定义义枚枚举举类类型型时时,可可以以让让多多个个枚枚举举成成员员具具有有同同样样的的整整数数值,如:值,如:enumcoloryellow,brown=3,blue,black=blue,purple;/这里这里black的整数值就为的整数值就为4例:输出枚举成员对应的整数值。例:输出枚举成员对应的整数值。usingSystem;classEnumDemoenumcoloryellow,brown=3,blue,black=blue,purplestaticvoidMain()Console.WriteLine(“yellow=0”,color.yellow);Conso
27、le.WriteLine(“yellow=0”,(int)color.yellow);Console.WriteLine(“brown=0”,(int)color.brown);Console.WriteLine(“blue=0”,(int)color.blue);Console.WriteLine(“black=0”,(int)color.black);Console.WriteLine(“purple=0”,(int)color.purple);5.3.3 枚举成员的访问枚举成员的访问可以通过枚举型变量和枚举名两种方式来访问枚举成员。可以通过枚举型变量和枚举名两种方式来访问枚举成员。1.通
28、过变量访问枚举成员通过变量访问枚举成员先要声明一个枚举型变量,形式如下:先要声明一个枚举型变量,形式如下:枚举类型名枚举类型名变量名;变量名;例:例:enumWeekDaySun,Mon,Tue,Wed,Thu,Fri,Sat;Weekdaywd1;/声明一个枚举型变量声明一个枚举型变量wd1wd1=WeekDay.Sun;/给枚举型变量给枚举型变量wd1赋值赋值例:声明一个枚举类型,通过枚举型变量访问枚举成员。例:声明一个枚举类型,通过枚举型变量访问枚举成员。enumColorRed,Green=10,BlueclassTeststaticvoidMain()Console.Write(“请
29、输入请输入c的值:的值:);intc=int.Parse(Console.ReadLine();/输入输入10Colorb=(Color)c;Console.WriteLine(b);switch(b)caseColor.Red:Console.WriteLine(Red=+(int)b);break;caseColor.Green:Console.WriteLine(Green=+(int)b);break;caseColor.Blue:Console.WriteLine(Blue=+(int)b);break;default:Console.WriteLine(Invalidcolor);
30、break;2. 通过枚举名访问枚举成员通过枚举名访问枚举成员通过枚举名访问枚举成员的一般形式:通过枚举名访问枚举成员的一般形式:枚举名枚举名.枚举成员;枚举成员;练习练习:已知已知enumCourseMath,English,Computer,History,Chemistry=0,Philology,PhilosophyCoursecc;则下列语句错误的是(则下列语句错误的是()Ainta=(int)Course.English;Bcc=Course.English+2;Ccc=5;Dboolb=Course.Math=Course.Chemistry;本章作业: 1. 习题5的1、2、3 。 实验报告:实验报告: 实验四实验四