C#--数组

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1、数组元素与下标数组是一种数据结构,它包含多个相同数据类型的变量。包含在数组中的变量,也称为数组元素。C#中用一个统一的名字(数组名)来表示数组。如果要访问数组中的数组元素,需要将数组名与下标结合起来。下标是指数组元素在该数组中的索引值,用以标明数组元素在数组中的位置。数组元素的下标从0开始的。21、数组的类型数组的类型是指构成数组的元素的数据类型(同一数组的所有数组元素的数据类型必须一致),它可以是任何的数据类型,如:整型、字符串型等。3、数组的维数数组下标的个数称为数组的维数。有一维数组、二维数据、三维数组等。35.2.1一维数组的定义语法格式:数据类型[]数组名;例:int[]a;string[]arr;char[]carr;说明:定义数组后,必须对数组进行初始化才能使用。初始化数组有两种方式:动态初始化和静态初始化41.动态初始化动态初始化需要借助new运算符,为数组元素分配内存空间,并为数组元素赋初值。格式:数组名=new数据类型[数组长度];例:a=newint[6];5说明:(1)数值类型初始化为0,布尔类型初始化为false,字符串类型初始化为null)(2)也可以将定义和动态初始化写在一起,并可以为其赋其他的初始值,例如:int[]a=newint[6]{1,3,5,7,9,11};6数组长度的定义有几点需注意:(1)不给定初始值时,数组长度可以是变量。例如:intm=6;int[]a=newint[m];在给定初始值的情况下,“数组长度”不允许为变量。例如:intn=5;//定义变量nint[]myarr=newint[n]{1,2,3,4,5};//错误7(2)如果给出初始值部分,可以省略数组长度,因为大括号中已列出了数组中的全部元素。string[]strs=newstring[]{A,B,C,D,E,F};(3)如果给出初始值部分,并且给出数组长度,则初始值的个数应与数组长度相等,否则出错。例如:int[]mya=newint[2]{1,2};//正确int[]mya=newint[2]{1,2,3};//错误82.静态初始化如果数组中包含的元素不多,而且初始元素可以穷举时,可以采用静态初始化的方法。静态初始化数组时,必须与数组定义结合在一起,否则程序会报错。静态初始化数组的格式如下:数据类型[]数组名={元素值0,元素值1,…,元素值n-1};9例如:int[]myarr={1,2,3,4,5};//定义了一个整型数组,它包含这5个元素。例如,以下程序段是错误的。int[]myarr;myarr={1,2,3,4,5};//错误的数组的静态初始化10数组元素的表示形式:数组名[下标]例如:a[0],a[5]a[m],其中m表示下标变量。a[m+n],其中m+n是运算表达式注意:只能逐个引用数组元素而不能一次引用数组中的全部元素。11以下语句可以输出数组myarr的所有元素值:int[]myarr={1,2,3,4,5};for(i=0;i5;i++)Console.Write({0},myarr[i]);Console.WriteLine();//输出换行符每一个数组都有确定的长度,可以通过数组的Length属性得到其长度。inti=a.Length;//变量i的值为512【例5.1】引用数组元素。利用循环给数组元素a[0]~a[9]赋值为0~9,然后按逆序输出各元素的值。staticvoidMain(string[]args){int[]a=newint[10];//定义并动态初始化inti;for(i=0;i10;i++){a[i]=i;}Console.WriteLine();for(i=9;i=0;i--){Console.Write({0,5:d},a[i]);}}13Foreach访问数组可以避免使用数组长度。格式如下:foreach(数据类型循环变量in数组名){//循环体}说明:①数据类型是与数组的元素相匹配的数据类型。②循环变量是一个普通的变量,在foreach语句的循环体中用来表示数组中的元素。14例如,以下代码定义一个名称为mya的数组,并用foreach语句循环访问该数组。int[]mya={1,2,3,4,5,6};foreach(intiinmya)Console.Write({0},i);Console.WriteLine();运行结果:123456。151.分类统计分类统计,是将一批数据按分类的条件统计每一类中包含的个数。例如,将学生成绩按优、及格、不及格三类,统计各类人数。职工按各职称分类统计人数等。16引例:若要统计班上10个学生的平均成绩,以及高于平均分的人数。1718staticvoidMain(string[]args){int[]a=newint[10];inti,k=0;doubles=0,aver;Randomrd=newRandom(0);for(i=0;i10;i++){a[i]=rd.Next(40,100);s=s+a[i];//求成绩总和}aver=s/10;//求平均分Console.WriteLine(成绩:);foreach(intxina)//输出成绩{Console.Write({0,4},x);}Console.WriteLine();for(i=0;i10;i++)//统计高于平均分人数{if(a[i]aver)k++;}Console.WriteLine(平均分为:{0},高于平均分人数:{1},aver,k);}2.数据的查找查找是一个常见的操作,所谓查找就是指在一个含有多个数据元素的集合中找出某个特定的数据元素。查找是遍历所有数据元素,因此要使用循环结构。查找的操作过程是:从第1个数开始,与给定数据进行比较,如果符合条件,则查找成功,否则继续与第2个数比较,直到最后一个数。19staticvoidMain(string[]args){int[]a={8,6,9,3,2,7};intx,i;Console.Write(请输入要查找的数:);x=int.Parse(Console.ReadLine());for(i=0;ia.Length;i++){if(a[i]==x)break;}if(i==a.Length)Console.WriteLine(Thisdatahasnotbeenfound.);elseConsole.WriteLine(Thisdatahasbeenfound.Itisa[{0}],i);}203.求数组最小值及下标。21int[]a=newint[]{8,6,9,3,2,7};inti,min,p;//min存放最小值,对应下标为pintn=a.Length;//输出原数组,代码省略min=a[0];p=0;//先假设第一个元素为最小值for(i=1;in;i++){if(a[i]min){min=a[i];p=i;}}Console.WriteLine(最小值为{0},下标为{1},min,p);3.数据的排序数据的排序是指将一批数据由小到大(升序)或由大到小(降序)进行排列,如按学生的成绩、球赛积分等排序。常用的排序算法有选择法、冒泡法、插入法、合并排序等。下面介绍选择法。22选择法排序选择法的基本思想是在n个数中,每次找最小(大)数,并放在相应的位置。对n个数的序列,用选择法按递增次序排序的步骤如下:①在n个数(存放在数组a[n]中)中,选出最小的数,与第1个数交换位置;通过这一轮排序,第1个数(最小数)的位置已确定。②除第1个数外,在其余n-1个数中选最小的数,与第2个数交换位置。③以此类推,选择了n-1次后,这个数列已按升序排列。23【例5.4】对已知存放在数组中的6个数{8,6,9,3,2,7},用选择法按递增顺序排序,排序过程如下表所示。24选择法排序算法(升序):(设数组有n个元素:a[0],…,a[n],n=5)第1遍:从数组中选最小的数,与第1个数交换位置;869327269387第2遍:除第1个数外,从其余n-1个数中选最小的数,与第2个数交换位置;269387239687第3遍:除第1,2个数外,从其余n-2个数中选最小的数,与第3个数交换位置;239687236987第4遍:除第1,2,3个数外,从其余n-3个数中选最小的数,与第4个数交换位置;236987236789第5遍:除第1,2,3,4个数外,从其余n-4个数中选最小的数,与第5个数交换位置;236789第5个刚好是最小值,不用交换2367896个数,选择了5次后,数列已按升序排列。若是N个数,选择了多少次后,数列将按升序排列?28staticvoidMain(string[]args){int[]a={8,6,9,3,2,7};inti,j,n,t,p=0;n=a.Length;Console.WriteLine(排序前:);for(i=0;in;i++)Console.Write({0,5:d},a[i]);Console.WriteLine();for(i=0;in-1;i++)//进行n-1轮比较{p=i;//对第i轮比较时,初始假定第i个元素最小for(j=i+1;jn;j++)if(a[p]a[j])p=j;//在数组i~n个元素中选最小元素的下标t=a[i];//i~n个元素中选最小元素与第i个元素交换a[i]=a[p];a[p]=t;}Console.WriteLine(排序后:);for(i=0;in;i++)Console.Write({0,5:d},a[i]);Console.WriteLine();}【例5.6】用数组求Fibonacci数列前10个数:{1,1,2,3,5,8,13,……}。Fibonacci数列问题的含义如下:29staticvoidMain(string[]args){int[]a=newint[10];inti;a[0]=1;a[1]=1;for(i=2;ia.Length;i++){a[i]=a[i-1]+a[i-2];}foreach(intxina){Console.Write({0,5:d},x);}}30二维数组可以存储和处理某些具有二维特性的数据,如矩阵、行列式等。5.3.1二维数组的定义定义一个二维数组需要指明数组类型、数组名和下标个数。语法格式如下:数组类型[,]数组名;说明:[,]表示数组是二维数组,两个下标。例如:int[,]x;string[,]y;315.3.2二维数组的初始化二维数组定义后,再进行初始化,初始化分为动态初始化和静态初始化。1、动态初始化语法格式:数组名=new数据类型[m,n];说明:①数据类型是数组中数据元素的数据类型;②m、n分别为行数和列数,即各维的长度,可以是整型常量或变量。32例如:int[,]a;a=newint[3,4];也可以写为int[,]a=newint[3,4];33二维数组初始化的注意事项①如果不给出初始值部分,各元素取默认值。例如:int[,]x=newint[2,3];该数组各数组元素均取默认值0②在定义时,对二维数组赋初始值,如:int[,]a=newint[2,3]{{1,2,3}{4,5,6}};③如果给出的初值个数与对应的数组长度相等,可以省略数组长度。int[,]x=newint[,]{{1,2,3},{4,5,6}};342.静态初始化静态初始化必须和定义绑在一起,否则会出错。例如:int[,]myarr={{1,2,3},{4,5,6}};351、二维数组元素的表示:数组名[行下标,列下标]例如:int[,]a=newint[2,3]{{1,2,3}{4,5,6}};intx;x=a[0,1];//x值为2a[1,2]=10;//a[1,2]被重新赋值,数组a的值变为{{1,2,3}{4,5,10}}362、二维数组元素的输出for(inti=0;i2;i++){fo

1 / 54
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功