第4章 数组
本章电子档下载:
高校.net课件教程,.net基础教程下载(四)说明:本教程是从上面的电子档中拷贝下来的,下文中所有的图片均未显示,如需要更好的阅读体验,请下载电子档。本章要点:
数组的概念一维数组的定义、分配与初始化二维数组的定义、分配与初始化foreach语句的使用方法与数组有关的算法例4.1 循序渐进学理论
4.1.1
数组的概念可以把数组看成是很多个变量的集合,这些变量具有相同的类型,它们在内存中是连续存放的,这些变量均具有相同的名称,并且可以通过下标相互区分,每一个这样的变量我们把它称为数组元素。
如假设存放300个学生数学成绩的数组名为cj,要求出所有学生的数学的平均分,可使用下列语句:
aver=0.0;
for(i=0;i<300;i++)
aver=aver+cj[i];
aver=aver/300;
4.1.2 一维数组的定义、分配与使用
所谓一维数组是指只有一个下标的数组。数组在使用之
前必须先定义(或称声明)和分配空间,然后才能使用
数组元素。
1.一维数组的定义与分配
[格式]:数据类型符 [] 数组名 = new 数据类型符[长度];
例如,有下列语句:
int [] a= new int [10];//定义了一个数组a,该数组的数据类
型是int,具有10个元素。
其实数组的声明与分配可以写成两条语句,上述语句也可以写成:
int [] a;//定义数组
a=new int [10];//给数组分配存储空间
与C/C++不同的是,C#中的数组的大小可以动态确定,如有以下语句:
int AL=6;
int a[]=new int[AL];
这两条语句定义了一个长度为6的数组a。
2.定义数组时对数组元素进行初始化
[格式]:数据类型符 [] 数组名 ={初值列表};
例如,有下列语句:
int [] x={1,2,3,4};
该语句定义了具有4个元素的数组x,并依次给x[0]、x[1]、x[2]和x[3]赋初值1、2、3和4。上述语句也可以写成:int [] x= new int []{1,2,3,4};
3.数组元素的引用
引用一维数组元素的一般形式如下:
数组名[下标]
例如,有定义语句:
int [] a= new int [5] ;
那么a数组具有元素a[0]、a[1]、a[2]、a[3]和a[4]。【例4-1】 找最大数游戏:有一批数,请你快速地找出最大数及其位置。
【例4-2】 随机产生十个两位数,然后利用选择法把它们从小到大排序。
4.1.3 多维数组的定义、分配与使用
一维数组只有一个下标,多维数组具有多个下标,要引用多维数组的数组元素,需要使用多个下标。多维数组中最常用的是二维数组。所谓二维数组,就是有两个下标的数组,适合处理如成绩报告表、矩阵等具有行列结构的数据。与C/C++不同的是,C#的二维数组的每一行的数组元素个数可以相等,也可以不相等。每行数组元素个数相等的二维数组称为方形二维数组,各行数组元素个数不同的称参差数组。
1.方形二维数组
(1)定义与分配
[格式]:数据类型符 [ , ] 数组名 = new 数据类型符[长度1,长度2];例如,有下列语句:
int [,] a= new int [3,4];//定义了一个数组a,该数组的数据类型是int,具有12个元素。
其实上述数组的声明与分配可以写成两条语句,上述语句也可以写成:
int [ , ] a;//定义数组
a=new int [3,4];//给数组分配存储空间
(2)赋初值
[格式]:数据类型符 [ , ] 数组名 = {{初值列表1},{初值列表2},…,{初值列表n}};
例如,有下列语句:
int [,] b={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
上述语句也可以写成:
int [,] a= new int [3,4]{{1,2,3,4},{5,6,7,8},{9,10,11,12}};
(3)元素引用
引用方形二维数组元素的一般格式如下:
数组名[下标1,下标2]
2.参差数组
与C/C++不同的是,在C#中,二维数组的每一行的长度可以是不同的,每一行的元素个数均可以由用户指定。
(1)分配行
[格式]:数据类型符 [][] 数组名 = new 数据类型符[行数][];
例如,有下列语句:
int [][] b=new int[3][];
该语句定义了一个名为b的参差数组,数组的行数为3。
(2)名行数组元素个数的分配
[格式]:数组名[i]=new 数据类型符[长度];
例如,有以下语句:
int [][] b=new int[3][];//定义具有3行的参差数组b
b[0]=new int [2]; //首行具有2个元素
b[1]=new int [3]; //第二行具有3个元素
b[2]=new int [4]; //第三行具有4个元素
(3)元素引用
数组名[下标1][下标2]
【例4-3】 某班有M名同学,本学期开了N门课,期末考试后,要统计每个学生的平均分。请你编写一个程序实现该功能。要求:对于每个学生要输入学号和N门课的成绩。
【例4-4】编程输出杨辉三角的前五行。杨辉三角的前五行值如下所示。
1
1 1
1 2 1
1 3 3 1
1 4 6 4
1
4.1.4 foreach
foreach语句是专用于对数组、集合等数据结构中的每一个元素进行循环操作的语句,通过它可以列举数组、集合中的每一个元素,并且通过执行循环体对每一个元素进行需要的操作。
[格式]:foreach(数据类型符 变量名 in 数组或集合)
循环体;
【例4-5】 使用foreach语句求二维数组的最小值。
4.2 典型实例练能力
4.2.1 典型实例一:冒泡法排序
【实例题目】
用冒泡法把随机产生的10个整数从小到大排列。
4.2.1 典型实例二:求二维数组各行的最大值及其下标
【实例题目】
某次集会时,学生排成了M行N列的方阵。请你编程把每个人的身高录入到计算机中,然后找出每行的最高身高和该同学在该行中的位置。
4.3 上机练习重应用
4.3.1 上机练习一:二分法查找
【练习题目】
定义一个具有十个元素的一维数组,给它赋一个有序整数序列,然后利用折半查找算法查找一个输入的数m在数组中的位置。若找到,输出其下标,若找不到,则显示没有找到信息。
4.3.1 上机练习二:求二维数组的鞍点
【练习题目】
找出一个5×4数组的“鞍点”。所谓“鞍点”是指在本行中值最大,在本列中值最小的数组元素。鞍点可能有,也可能没有,如果有要求输出所有“鞍点”的行号和列号以及鞍点个数,如果没有鞍点,则输出相应的提示信息。^NN騗╟黐鶴&{T鍕ag鯪剉鱏x闟颯齹 g