C#-数组和方法_第1页
C#-数组和方法_第2页
C#-数组和方法_第3页
C#-数组和方法_第4页
C#-数组和方法_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数组与方法 面向对象程序设计数组与方法多维数组多维数组 2数组数组 1方法方法 4值类型与引用类型值类型与引用类型 34.1 数组任务4.1 计算月平均降雨量任务4.2 显示月名称任务4.3 创建数组任务4.1 计算月平均降雨量l 任务4.1:计算月平均降雨量 问题描述:编写程序,从输入对话框中输入12个月中每个月的实际降雨量,计算月平均降雨量及月实际降雨量与月平均降雨量的偏差。并将结果输出。任务4.1 计算月平均降雨量l 数组是同一类型的一组变量,数组允许你通过同一名称引用这一系列的变量,并使用一个称为“索引”或“下标”的数字来进行区分。数组中包含的变量(又称数组的元素)具有相同的类型,该类

2、型称为数组的元素类型。l 如果程序中要存储一个月中每一天的日常开销,可以创建一个含有 30 个元素的数组,而不必声明30个变量。数组中的每个元素都存有一个值,可通过指定元素的索引进行访问。l 例如,如果要用数组number表示5个整数的集合(26, 86, 98, 12, 68),可以这样创建数组number: int number = new int5;相关知识数组的声明int number一维数组对象的创建 int number = new int5;int number; number=new int5;数组元素的引用数组名下标数组Length属性Length属性的值为该数组对象中数组元

3、素的数目。相关知识方法:用来实现可以由对象或类执行的计算或操作构造方法:类中众方法中的一个。方法名:构造方法的名字必须和类名相同。 普通方法:任意取名。执行顺序:构造方法:在类实例化之前执行 普通方法:在类实例化后被调用执行任务 4.2 显示月名称l任务4.2:显示月名称 问题描述:修改计算月平均降雨量的程序,使命令窗口中的输入提示是“一月”而不是“1月”,如图所示。任务 4.2 显示月名称 C#通过将初始值括在大括号()内,为在声明时初始化数组提供了简单而直接了当的方法。特别要注意的是,如果声明时未初始化数组,则数组成员自动初始化为该数组类型的默认初始值。 1、在声明数组是将其初始化2、使用

4、new运算符实例化数组任务4.3 创建数组 问题描述:在创建数组时,元素个数是否能为变量。数组的Length属性。 编写一控制台应用程序,先输入要创建的数组的元素的个数,然后输入每个元素的值,最后将数组输出(如图所示)。可变长度的数组的声明 相关知识l利用常数声明数组称为“定长数组声明”。C#并不限于定长数组声明,还可以在每次运行程序时声明不同长度的数组。l下面的代码提示用户输入数组的长度,然后创建指定长度的数组:int size;Console.WriteLine(请输入要创建的数组的元素的个数:);size = Int32.Parse(Console.ReadLine();numbers

5、= new intsize; l foreach语句 依次为数组的各个元素执行一次嵌入语句。 foreach(类型 变量名 in 数组名称) 嵌入语句; 4.2 多维数组任务4.4 二维数组任务4.5 学生考试成绩统计任务4.4 二维数组主要知识点:二维数组的声明、创建、初始化。 输出二维数组每个元素的值。 将初始化的数组作为参数传递给方法。 获得数组每维的长度。 问题描述:创建一简单程序,演示二维数组的声明、创建、初始化,并将创建的数组对象以调用输出数组的方法输出。相关知识l 除一维数组之外,C#还支持多维数组。一维数组由排列在一行中的所有元素组成,它只有一个索引。从概念上讲,二维数组就像一

6、个具有行和列的表格一样。l 我们可以用一个二维数组表示这个表。先声明并创建一个二维数组Score: int, Score = new int5, 2;l其中5表示行数,2表示列数。二维数组有两个索引(索引号从0开始),其中一个表示行,一个表示列,如我们要将第1行第2列的元素赋值为88,表示为: Score0, 1 = 88;lScore 0, 1表示学生1的考试2成绩,Score0, 0表示学生1的考试1成绩。相关知识l 可以在声明数组时将其初始化,如下所示: int, myArray = new int, 1,2, 3,4, 5,6, 7,8;l 如果在声明数组时提供了初始值设定项,可省略

7、new 语句: int, myArray = 1,2, 3,4, 5,6, 7,8;l 如果要声明一个数组变量但不将其初始化,必须使用 new 运算符将数组分配给此变量,例如: int, myArray; myArray = new int, 1,2, 3,4, 5,6, 7,8; / 正确 myArray = 1,2, 3,4, 5,6, 7,8; / 错误l 可以给数组元素赋值,例如: myArray2, 1 = 25;l 也可以读取数组元素的值,例如: int aNumber = myArray10, 1;相关知识l 二维数组的长度获得l 每一维的长度可以通过GetLength方法来得到

8、。维度的最小下标值始终是0,最大下标值由该数组的GetUpperBound方法返回。l w. GetUpperBound (0)=w. GetLength(0)-1任务4.5:学生考试成绩统计l任务4.5:学生考试成绩统计主要知识点: 二维数组的应用。 问题描述:假定5个学生参加了两门课的考试,试统计出全部学生的最高分和全部学生的最低分及每个学生的平均成绩,并输出(如图所示)。4.3 值类型与引用类型l 前面讲的基本数据类型都是值类型,到目前为止学过的数组、String、类是引用类型。如果某个数据类型在自己的内存分配中包含数据,则该数据类型是“值类型”。l “引用类型”含有指向包含数据的其他内

9、存位置的地址。也就是说,值类型变量的值是该变量包含的实际数据,该实际数据存储在值类型变量的存储位置中。引用类型变量的值为一地址,该变量包含的数据存储在该地址指向的内存位置中。4.3 值类型与引用类型l 下面我们介绍把一个变量的值赋给另外一个变量时发生的情况,考虑下列使用整数的赋值语句:int num1, num2;num1 = 14;num2 = num1;num1 += 5;其中,变量声明语句int num1, num2;分配了存储了一个类型为int的值的存储位置,同时命名这个位置为num1;分配了存储了一个类型为int的值的另一个存储位置,同时命名这个位置为num2(如图所示)。4.3 值

10、类型与引用类型l 为了在存储位置为num1的存储位置存储一个整数值,即把一个整数值赋给变量num1,我们写出的语句为: num1 = 14;l 图4.8说明了此赋值语句执行之后内存的状态。l 为了在存储位置为num2的地方存储一个与存储位置为num1的地方所存储的值同样的整数值,即把num1变量的值赋给变量num2,我们写出的语句为: num2 = num1;l 图4.9说明此赋值语句执行之后内存的状态。l 执行语句“num1+=5;”后内存的状态如图4.10所示。4.4 方法任务4.6 移动矩形任务4.7 以传值方式传递数组任务4.8 调用方法获得多个值(使用ref参数)任务4.9 调用方法

11、获得多个值(使用out参数)任务4.10 改变矩形位置任务4.11 调用方法为实参创建新的对象4.4 方法l方法是用来实现可以由对象或类执行的计算或操作。l应用程序中的每行代码都必须在某个方法的内部,如Main、Calculate或button1_Click。l可以把在一个程序中多次用到的某个任务定义为方法,如常用的计算、文本和控件的操作。方法对执行重复或共享的任务很有用,可以在代码中的许多不同位置调用方法,因此可以将方法作为应用程序的生成块。l用方法构造代码有以下优点: 方法允许将程序分为不连续的逻辑单元。调试单独的单元与调试不包含方法的整个程序相比要容易得多。 可以在其他程序中使用为某个程

12、序开发的方法,而通常只需进行少量修改,甚至不需要修改。4.4.1 传值方式l 所谓“传值”,就是在方法调用时,将实参的值传递给形参。如果实参的类型为值类型,则实参的值为该参数包含的数据。如果实参的类型为引用类型,则实参的值为地址。l 如参数是以传值方式传递,形参将创建新的存储位置,在该存储位置存储形参接收的值。传值时,如果对被调用的方法的值的副本进行修改,不会影响实参变量的值。l 值参数:值参数以传值方式进行传递。任务4.6 移动矩形l任务4.6:移动矩形 问题描述:创建一个Rectangle类来描述矩形,矩形有两个基本属性即位置和大小。并定义一个方法,将矩形的位置调整指定的量。相关知识l值类

13、型参数的值为该参数包含的实际数据,以传值方式传递值类型参数时,当形参接收到实参的值后,形参变量和实参变量就不再有任何关系。任务4.7 以传值方式传递数组主要知识点: 通过传值方式传递引用类型变量。本任务内容:使用任务4.1中的代码,修改printArray方法。该例子演示:向printArray方法传递引用类型的参数app.rainfall。由于该参数是对app.rainfall数组对象的引用,所以printArray方法有可能更改数组元素的值。但是,将形式参数aArray重新分配到不同的内存位置时,该操作仅在方法内有效,并不影响原始变量app.rainfall。相关知识l 引用类型参数的值是

14、地址,该地址表示的存储位置存储的是该引用类型变量引用的对象。以传值方式传递引用类型参数时,形参分配独立的存储位置,该存储位置与实参的存储位置不同。形参接收到的值为一地址并将其存储在形参表示的存储位置中,形参所引用的对象存储在形参的值表示的存储位置中。l 因此,以传值方式传递引用类型参数时,将创建实参值(地址)的副本,而不是实参引用对象的副本。l 数组是引用类型,数组变量的值是一地址,该地址表示的存储位置存储的是该数组变量所引用的数组对象。l 要向方法传递一个数组参数,需要在省略括号的前提下指定数组名。如任务4.1中调用printArray方法采用如下方式: printArray(app.rai

15、nfall);4.4.4 传引用方式l ref和out关键字指出一个值类型变量或引用类型变量应该以传引用方式传递。如果使用关键字ref和out通过引用传递变量,则方法能够修改变量本身。l 若要使用 ref 参数,必须将参数作为 ref 参数显式地传递到方法。ref 参数的值被传递到 ref 参数。传递到 ref 参数的参数必须最先初始化。l out指定一个输出参数,被调用的方法会向其赋值。out参数的值不会传递到out参数。不必初始化作为out参数传递的变量。out参数通常用于产生多个返回值的方法中。任务4.8:调用方法获得多个值(使用ref参数)主要知识点:通过传引用方式传递值类型变量。 问

16、题描述:在矩形Rectangle类中,声明方法getXYWH,用户调用该方法时,可一次获得表示矩形位置的x、y坐标和矩形的宽度(Width)、高度(Height)。解决方案:(1) 创建一个空项目Testref,向该项目添加如下代码文件(2) 添加System.Windows.Forms.dll引用后。按Ctrl+F5键执行该应用程序,可得到如图所示的输出。任务4.8:调用方法获得多个值(使用out参数)主要知识点:使用out参数。 问题描述:使用out参数修改上一个示例,使其完成同样的任务。解决方案:l使用out参数调用方法时,不必对out参数初始化,由被调用的方法为其赋值。l编译并运行程序

17、,可得到如图所示的输出。任务 4.10:改变矩形位置主要知识点: ref参数与out参数的区别。问题描述:声明一矩形类,在矩形类中声明一方法ChangePos,该方法将矩形的位置坐标x、y改变为参数指定的量,并将修改后的矩形的位置坐标x、y返回。解决方案:由于要求方法返回两个值,因此必须使用传引用方式传递参数,因为方法要使用传递参数的值,所以必须采用ref参数。(1)创建一个空项目Testref1,在该项目中添加如下类:(2)编译并运行程序,可得到如图所示的输出。任务4.11 调用方法为实参创建新的对象l 主要知识点:通过传引用方式传递引用类型变量。l 问题描述:修改任务4.1中的代码和printArray方法,演示通过引用传递方式向printArray方法传递引用类型的参数app.rainfall。由于采用引用传递方式传递参数,实参和形参存储位置相同,因此在方法中对形参重新创建对象(形参的值被修改)后,实参也被重新分配对象,也就是在被调用方法中为实参创建了一个新对象。l 解决方案:(1) 打开任务4.1的项目及其代码文件。将MonthActualApp类的printArray方法修改(2) 修改Main方法中调用printArray方法的参数类型 (3) 按Ctrl+F5键来运行程序,还是按图4.1所示输入数据,可得到如图所示的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论