版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第4章 数组,4.1 任务描述 4.2 一维数组 4.3 二维数组 4.4 学生信息的数据存储与处理 4.5 习题,在学生成绩管理系统中,我们要录入许多学生的信息,包括学号、姓名、语文成绩与英语成绩,如表4-1所示。如果所有这些数据,都分别用一个单独的变量来存储,那么,需要定义的变量非常多,不利于处理。我们可以利用C#语言提供的数组这种数据类型,来解决学生数据的存储问题。数组可以是一维数组,也可以是多维数组。存储二维表格的学生数据需要使用二维数组,下面先介绍一维数组的使用,在此基础上再介绍二维数组。,4.1 任 务 描 述,表4-1 成 绩 信 息,4.2.1 一维数组的定义定义一维数组的格式
2、如下:数据类型 数组名;其中: 数据类型可以是C#语言中的各种数据类型,包括数值类型和引用类型。 方括号“”在这里表示是定义一个数组。,4.2 一 维 数 组,例如:int arr; /定义了一个名为arr的整型数组double area; /定义了一个名为area的数组,该数组可用来存放多个double型数string arr2; /声明了一个字符串型的一维数组,4.2.2 初始化一维数组定义数组后只有对其进行初始化(为数组分配内存空间)后才能使用。初始化数组有两种方法:静态初始化和动态初始化。1. 静态初始化如果数组中包含的元素不多,且初始元素值是已知的,则可以采用静态初始化方法。静态初始
3、化数组时,必须与数组定义结合在一起,否则会出错。静态初始化格式如下:数据类型 数组名=元素1, 元素2, 元素n;,用这种方法对数组进行初始化,无需说明数组元素的个数,只需按顺序列出数组中全部元素即可,系统会自动计算并分配数组所需的内存空间。例如:int arry=1,2,3,4;string str=优,良,差;,2. 动态初始化动态初始化需用new关键字将数组实例化为一个对象,再为该数组对象分配内存空间 并为数组元素赋初值,动态初始化数组的格式如下。用两条语句实现:数据类型 数组名; /数组定义数组名=new 数据类型表达式; /动态初始化或用一条语句实现:数据类型数组名=new数据类型表
4、达式; /将数组定义和动态初始化结合在一起,new运算符用来为数组对象在内存中分配一定的空间。数组占据的内存空间由数组的数据类型和表达式的数值共同决定。例如: /定义了一个名为arr的整型数组,只进行声明,需要时再实例化intarr;/进行实例化,为arrv数组在内存中分配410个字节的存储空间,元素值均为0arry=new int10;如果需要,也可以在初始化的同时为其赋其他初始值。程序代码如下:int arry = new int 1, 2, 3, 4, 5, 6, 7, 8, 9, 10;,说明:(1) 静态初始化数组必须与数组定义结合在一条语句中,否则程序会出错。(2) 在数组初始化语
5、句中,如大括号中已明确列出了数组中的元素值,即确定了数组元素的个数,则数组元素的个数(方括号中的数值)必须是常量,并且该数值必须与数组元素的个数一致。例如:int i=4;int x=new int41,2,3,4; /正确int y=new intil,2,3,4; /错误,i不是一个常量int z = new int3 1,2,3,4; /错误,数组元素个数与方括号中数值不一致,4.2.3 引用一维数组元素当定义完一个数组并对其初始化后,就可以引用数组中的元素了。可通过数组名和元素的下标来引用数组元素。一维数组的引用方式是:数组名下标;,数组的下标是元素的索引值,代表了要被访问的数组元素在
6、内存中的相对位置,就是从数组的第1个元素到某个数组元素的偏移量。数组元素的索引是从0而不是1开始的,如数组arr的第1个元素是arr 0,第2个元素是arr 1,依次类推,第n个元素是arr n-l。 在访问数组元素时,要注意不要使下标越界,例如:int A=new int5;A5=15; /错误,下标越界,【例4-1】 遍历输出数组中的元素。using System;class Program public static void Main(String args) int a = new int 3, 8, 9, 23, 4 ; for (int i = 0; i a.Length; i+
7、) /Length返回数组元素的个数 Console.WriteLine(ai); 运行结果如图4-1所示。,图4-1 例4-1运行结果,【例4-2】 输入几位学生的成绩,输出最高成绩。using System;class Program static void Main(string args) int grades = new int5 ; for (int j = 0; j 5; j+) gradesj = int.Parse(Console.ReadLine(); int max = grades0; /max变量用于存放最大数 int i = 0;,while (i grades.L
8、ength) if (max gradesi) /如果当前元素ai比max大 max = gradesi; /把当前元素ai的值赋给max i+; Console.WriteLine(最高分为: + max); Console.ReadLine(); 运行结果如图4-2所示。,图4-2 例4-2运行结果,【例4-3】 使用“冒泡”法进行排序(由小到大)。冒泡排序又称简单交换排序。其基本思想是对存放原始数据的数组,按从后往前的方向进行多次扫描,每次扫描称为一趟排序,当发现相邻两个数据的次序与排序要求不符时,将这两个数据交换。这样,较小的数据就会逐单元往前移动,好象气泡往上浮一样。,如图4-3所示
9、。现有5个数,第1趟将9和7对调,然后将 9和4对调,得到38749的顺序,可以看出:最大的数9已“沉底”,成为最下面一个数;而小的数“上升”,如4向上“浮起”一个位置,所以这种排序方法叫“冒泡”法。经过一趟得到最大的数,然后进行第二趟比较,对余下的4个数再按上述方法进行比较,依次类推,直到最后得到一个有序的序列。“冒泡”的过程如下:,原顺序: 3 8 9 7 4第1趟: 3 8 7 4 9第2趟: 3 7 4 8 9第3趟: 3 4 7 8 9第4趟: 3 4 7 8 9,算法代码如下:using System;class Program public static void Main(St
10、ring args) int a = new int 3, 8, 9, 7, 4 ; int n = a.Length; Console.WriteLine(-排序排序前的数据-); for (int j = 0; j n; j+) /显示排序前的数据 Console.Write(0t, aj); ,Console.WriteLine(n-排序过程-); for (int i = 1; i aj + 1) /前大后小,交换 /交换元素 int temp; temp = aj; aj = aj + 1; aj + 1 = temp; ,for (int j = 0; j n; j+) /显示排序
11、后的结果 Console.Write(0t, aj); Console.WriteLine(); Console.WriteLine(-排序后的结果-); for (int j = 0; j n; j+) /显示排序后的结果 Console.Write(0t, aj); Console.Read(); 运行结果如图4-3所示。,图4-3 例4-3运行结果,4.2.4 使用foreach遍历数组foreach语句列举出一个集合(collection)中的所有元素,并执行关于集合中每个元素的嵌套语句。foreach语句的格式如下:foreach (变量类型 迭代变量 in 集合表达式) 循环体语句
12、块,语句中的“迭代变量”是一个循环变量,在循环中,该变量依次获取数组中各元素的值。因此,对于依次获取数组中各元素值的操作,使用这种循环语句就很方便。要注意,“迭代变量”的类型必须与数组的类型一致。foreach语句遍历数组虽然很方便,但其功能受一定的限制。例如,如果想为数组各元素依次有规律地赋值,foreach循环将无能为力。,【例4-4】 计算一维整型数组中奇数和偶数的个数。using System;class Program public static void Main(String args) int odd = 0, even = 0; int array = new int 0,
13、4, 7, 8, 9, 10, 14, 17, 19, 24, 56 ; foreach (int i in array) if (i % 2 = 0) even+;,else odd+; Console.WriteLine(0个奇数,1个偶数, odd, even); 运行结果如图4-4所示。,图4-4 例4-4运行结果,4.3.1 二维数组的定义二维数组的定义格式为:数据类型, 数组名;其中: “数据类型”为数组中元素的数据类型,可以是C#语言中的各种数据类型。 “数组名”的命名规则同变量的命名规则相同。 数组的每一维都用逗号隔开。,4.3 二 维 数 组,例如:int, a; /定义了名
14、为a的整型二维数组string, str; /定义了名为str的字符串型二维数组 float, arr2; /声明一个浮点型的二维数组string, arr3; /声明一个字符串型的二维数组与一维数组一样,以上定义的二维数组并不为数组元素分配内存空间。,4.3.2 初始化二维数组1. 静态初始化二维数组静态初始化格式与一维数组一样。静态二维数组的格式为:数据类型, 数组名=元素0,0,元素0,1,元素0,n-1元素1,0,元素1,1,元素1,n-1,元素n-1,0,元素n-1,1,元素n-1,n-1;,静态初始化数组时可以不指出数组的行数和列数,在最外一层“”内,每一个“”对应一行数组元素,所
15、以最外层“”内的“”个数决定了行数,而每一行的数据个数决定了多维数组的列数。例如:/定义一个3行2列的整型二维数组并对其静态初始化int, a = 1, 3, 7, 4, 10, 21;/定义一个2行2列的字符串二维数组并对其静态初始化string, arr2 = 甲, 乙 , 冠军, 亚军 ;静态初始化二维数组时,也必须与数组定义结合在一条语句中,否则会出错。,2. 动态初始化动态初始化数组也需要使用new关键字为数组元素分配内存空间,并为数组元素赋初值。动态初始化格式如下:数组名=new数据类型数组长度1,数组长度2;其中“数组长度1”和“数组长度2”可以是整型的常量或变量,分别表示数组的
16、第一维和第二维的长度。new关键字仍然是以默认值0来初始化数组元素的。在程序设计中,通常也将数组定义与动态初始化合并在一条语句中,格式为:数据类型, 数组名=new数据类型数组长度1, 数组长度2;,例如:int, a=new int2,3; /定义了一个2行3列的二维数组在动态初始化二维数组时,也可直接为其赋不同的初始值。例如:int, a = new int, 1, 2, 3 , 3, 2, 5 ;int, arr1 = new int2, 4 1, 2, 3, 4 , 5, 6, 7, 8 ;string, arr2 = new string2, 2 某甲, 某乙 , 冠军, 亚军 ;,
17、4.3.3 引用二维数组元素与一维数组类似,二维数组也是通过数组名和下标值来访问数组元素的。唯一与一维数组不同的是,二维数组需由两个下标来标识一个数组元素,二维数组的引用形式为:数组名下标1,下标2其中:“下标1”表示元素所在的行,“下标2”表示元素所在的列,两个下标都应是整数或整数类型的变量、表达式。二维数组的下标也是从0开始算起的。例如:a2,3表示是a数组的第3行、第4个元素。,通常,ai,j表示是数组的第i+1行、j+l列元素(因为下标从0算起)。数组的下标使用范围不要超过数组定义的相应维长度,否则程序编译会出现异常,所以在编程时一定要严格区分多维数组每一维的长度和相应每一维最后一个元
18、素的下标之间的关系,系统默认它们的关系是:某一维的最后一个元素的下标为这一维的长度减1。根据二维数组的特点,访问二维数组中的元素需要通过二重循环。,【例4-5】 求一个33矩阵的对角线元素之和。using System;class Program public static void Main(String args) int, A = 1, 2, 3 , 4, 5, 6 , 7, 8, 9 ; int sum = 0;/输出数组所有元素 for (int i = 0; i 3; i+) for (int j = 0; j 3; j+) ,Console.Write(0t, Ai, j); C
19、onsole.WriteLine(); /求对角线元素之和 for (int i = 0; i 3; i+) sum = sum + Ai, i; Console.WriteLine(对角线和为0, sum); Console.ReadLine(); 运行结果如图4-5所示。,图4-5 例4-5运行结果,【例4-6】 用二维数组存放表4-1的学生成绩信息并输出。采用二维数组来存储学生信息,其中第一维表示学生的个数,因此第一维的长度为3;第二维的长度与每个学生的信息数相对应,这里为学号、姓名、语文成绩与英语成绩,因此第二维的长度为4。,using System;class Program sta
20、tic void Main(string args) string, student = new string3, 4 1,李明,77,78 , 2,刘勇,82,89, 3,张三,80,88 ; Console.WriteLine(学号t姓名t语文t英语); for (int i = 0; i 3; i+) Console.WriteLine(0t1t2t3, studenti, 0, studenti, 1, studenti, 2, studenti, 3); ,运行结果如图4-6所示。,图4-6 例4-6运行结果,下面用二维数组来存储学生信息,实现学生成绩管理系统的主要功能,如学生信息的
21、录入、查询以及输出,按语文成绩排序的功能此处只作简单的输出提示,具体将在后面版本实现。参考运行界面如图4-7至图4-10所示。,4.4 学生信息的数据存储与处理,图4-7 运行界面,图4-8 输入学生成绩,图4-9 显示学生成绩,图4-10 查询学生成绩,学生成绩管理系统V2.0代码的实现步骤如下:using System;public class GradeManage public static void Main() const int COUNT = 100; /最多处理100位学生信息 string, student = new stringCOUNT, 4; /student用于保
22、存学生信息 int pos = 0; do ,Console.WriteLine( * 学生成绩管理系统 *n); Console.WriteLine( 1 - 输入学生记录); Console.WriteLine( 2 - 显示所有成绩); Console.WriteLine( 3 - 查询学生成绩); Console.WriteLine( 4 - 退出); Console.Write( 请选择:); int choice = int.Parse(Console.ReadLine(); switch (choice) case 1: /录入学生信息 do, Console.Write(请输入
23、学号: ); studentpos, 0 = Console.ReadLine(); Console.Write(请输入姓名: ); studentpos, 1 = Console.ReadLine(); Console.Write(请输入语文成绩: ); studentpos, 2 = Console.ReadLine(); Console.Write(请输入英语成绩: ); studentpos, 3 = Console.ReadLine(); pos+; if (pos = COUNT) break; ,Console.Write(是否继续输入? (y/n) ); while (char.Parse(Console.ReadLine() =y); break; case 2: Console.WriteLine(显示学生成绩: ); Console.WriteLine(学号t姓名t语文t英语); for (int i = 0; i pos; i+) Console.WriteLine(0t1t2t3, studenti, 0, studenti, 1, studenti, 2, studenti, 3); ,break; case 3: bool find = fa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国建筑第八工程局有限公司南方公司2026届春季校园招聘笔试参考题库及答案详解
- 中国中煤华东分公司2026年第四批公开招聘17人笔试备考题库及答案详解
- 温州市四港联动发展有限公司 2026年第二批劳务派遣工作人员招聘10人笔试参考题库及答案详解
- 2026年度春季江铜集团江西德普校园招聘1人笔试备考题库及答案详解
- 企业2026年企业培训师服务补充协议
- 2026年辽宁锦州农垦(集团)有限公司计划招录29人笔试参考题库及答案详解
- 2026浙江财经大学数智商学院招聘4人笔试模拟试题及答案详解
- 互联网教育战略联盟合同文本
- 2026内蒙古呼和浩特新城区东街街道党委社区卫生服务站招聘1人笔试备考题库及答案详解
- 订货会参展商产品运输合同
- 2025年甘肃庆阳市地理生物会考真题试卷(+答案)
- 北京市西城区2026年中考二模英语试题(含答案)
- (三模)济南市2026届高三5月针对性训练生物试卷(含答案)
- 2026宁夏电投永利能源有限公司招聘21人考试备考题库及答案解析
- 金牛区驷马桥等街道2026年公开招聘社区专职工作人员(26人)笔试备考试题及答案详解
- 2026中国报废汽车拆解行业盈利动态与需求趋势预测报告
- 2026年无损检涡流检二级考核模拟题库附参考答案详解【考试直接用】
- 2026年春教科版(新教材)小学科学三年级下册第三单元《只有一个地球》知识点清单
- 西安交通大学同等学力人员申请硕士学位资格审查表
- PCB常见不良品图片及改善措施汇总
- 苏教版八年级(上)期末文言文复习《活板》
评论
0/150
提交评论