《c#面向对象程序设计》第4章:数组与方法

上传人:mg****85 文档编号:50738217 上传时间:2018-08-10 格式:PPT 页数:31 大小:697.50KB
返回 下载 相关 举报
《c#面向对象程序设计》第4章:数组与方法_第1页
第1页 / 共31页
《c#面向对象程序设计》第4章:数组与方法_第2页
第2页 / 共31页
《c#面向对象程序设计》第4章:数组与方法_第3页
第3页 / 共31页
《c#面向对象程序设计》第4章:数组与方法_第4页
第4页 / 共31页
《c#面向对象程序设计》第4章:数组与方法_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《《c#面向对象程序设计》第4章:数组与方法》由会员分享,可在线阅读,更多相关《《c#面向对象程序设计》第4章:数组与方法(31页珍藏版)》请在金锄头文库上搜索。

1、第4章 数组与方法主要内容与学习目标 4.1 数组 4.2 多维数组 4.3 值类型与引用类型 4.4 方法主要内容与学习目标l主要内容:(1)声明数组、创建对象数组、数组元素的引用。(2)数组的Length属性。(3)数组初始化。(4)可变长度的数组的声明。(5)foreach语句。(6)数组对象的赋值运算。(7)多维数组的声明和创建、多维数组初始化。(8)二维数组应用举例。(9)值类型与引用类型。(10)方法。(11)传值方式、以传值方式传递值类型参数、以传值方式传递引用类型参数。(12)传引用方式、以传引用方式传递值类型参数、以传引用方式传递引用类型参数。(13)值传递方式与引用传递方式

2、比较。l学习目标:(1)使用方法,以模块方式构造程序。(2)理解在方法之间传递信息的机制。(3)理解如何声明数组、初始化数组,以及引用数组的单独元素。(4)声明和操纵多下标数组。4.1 数组l数组是同一类型的一组变量,数组允许你通过同一名称引用这一系列的变量,并使 用一个称为“索引”或“下标”的数字来进行区分。数组中包含的变量(又称数组的元素 )具有相同的类型,该类型称为数组的元素类型。l如果程序中要存储一个月中每一天的日常开销,可以创建一个含有 30 个元素的数 组,而不必声明30个变量。数组中的每个元素都存有一个值,可通过指定元素的索 引进行访问。l例如,如果要用数组number表示5个整

3、数的集合(26, 86, 98, 12, 68),可以这样创 建数组number:int number = new int5;l任务4.1:计算月平均降雨量问题描述:编写程序,从输入对话框中输入12个月中每个月的实际降雨量,计算月平均降 雨量及月实际降雨量与月平均降雨量的偏差。并将结果输出。 4.1.1 数组初始化 4.1.2 可变长度的数组的声明4.1.1 数组初始化lC#通过将初始值括在大括号()内,为在声明时初始化数组提供 了简单而直接了当的方法。特别要注意的是,如果声明时未初始 化数组,则数组成员自动初始化为该数组类型的默认初始值。 l任务4.2:显示月名称 问题描述:修改计算月平均降

4、雨量的程序,使命令窗口中的输入提 示是“一月”而不是“1月”,如图4.3所示。图4.3 从命令窗口中输入值4.1.2 可变长度的数组的声明l在前面的例子中,我们利用常数指定数组的大小,例如下面的语句中的常数12:double difference = new double12; l利用常数声明数组大小不总占用有效的存储空间。例如,假设我们声明大小为100的整数数 组:int numbers = new int100; l我们把利用常数声明数组称为“定长数组声明”。利用定长数组声明可能产生两个问题:第1 个问题是程序最多处理100个数,如果我们需要处理的数多于100(例如,需要处理101个数)

5、,则必须修改程序后重新编译,第2个问题是可能产生未充分利用空间的问题,上面的声明 语句分配100个空间而忽略这些空间是否被使用。假设程序平均处理20个数,那么该程序的 平均空间利用率只有20%。C#并不限于定长数组声明,还可以在每次运行程序时声明不同长 度的数组。下面的代码提示用户输入数组的长度,然后创建指定长度的数组:int size;Console.WriteLine(“请输入要创建的数组的元素的个数:“);size = Int32.Parse(Console.ReadLine();numbers = new intsize; l任务4.3:创建数组 问题描述:在创建数组时,元素个数是否能

6、为变量。数组的Length属性。 编写一控制台应用程序,先输入要创建的数组的元素的个数,然后输入每个元素的值,最后将数组输 出(如图4.4所示)。图4.4 创建数组4.2 多维数组4.2.1 多维数组的声明和创建 4.2.2 多维数组初始化 4.2.3 二维数组应用举例4.2.1 多维数组的声明和创建l除一维数组之外,C#还支持多维数组。一维数组由排列在一行中的所有 元素组成,它只有一个索引。从概念上讲,二维数组就像一个具有行和 列的表格一样。考虑以下考试成绩的表格(表4.1),它有5行2列,5行代 表5个学生,2列代表2次考试,第1列代表第1次考试的成绩,第2列代表 第2次考试的成绩。l我们

7、可以用一个二维数组表示这个表。先声明并创建一个二维数组 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成绩。表4.1 学生考试成绩表4.2.2 多维数组初始化l可以在声明数组时将其初始化,如下所示: int, myArray = new int, 1,2, 3,4, 5,6, 7,8;l如果在声明数组时提供了初始值设定项

8、,可省略 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;4.2.3 二维数组应用举例l任务4.4:二维数组 主要知识点:二维数组的声明、创

9、建、初始化。输出二维数组 每个元素的值。将初始化的数组作为参数传递给方法。获得数 组每维的长度。 问题描述:创建一简单程序,演示二维数组的声明、创建、初始化 ,并将创建的数组对象以调用输出数组的方法输出。l任务4.5:学生考试成绩统计主要知识点: 二维数组的应用。 问题描述:假定5个学生参加了两门课的考试,试统计出全部学生 的最高分和全部学生的最低分及每个学生的平均成绩,并输出(如图 4.6所示)。图4.6 成绩统计4.3 值类型与引用类型l前面讲的基本数据类型都是值类型,到目前为止学过的数组、String、类是引用类型。如果某个数据类型在自 己的内存分配中包含数据,则该数据类型是“值类型”。

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

11、.7所示) 。l为了在存储位置为num1的存储位置存储一个整数值,即把一个整数值赋给变量num1,我们写出的语句为:num1 = 14;l图4.8说明了此赋值语句执行之后内存的状态。l为了在存储位置为num2的地方存储一个与存储位置为num1的地方所存储的值同样的整数值,即把num1变量 的值赋给变量num2,我们写出的语句为:num2 = num1;l图4.9说明此赋值语句执行之后内存的状态。l执行语句“num1+=5;”后内存的状态如图4.10所示。图4.7 声明整型变量的结果 图4.8 整型变量赋值的结果一图4.9 整型变量赋值的结果二 图4.10 整型变量赋值的结果三4.4 方法l方法

12、是用来实现可以由对象或类执行的计算或操作。l在前面几章中,我们已经尝试过如何在自己定义的类中定义自己的Main方法,也定义过事件处理方法,用它们 指定我们在程序中发生的操作,在我们的方法中调用.NET框架类库(FCL)中的一些类的方法以执行特定的任务 ,如MessageBox类的Show方法、Int32类的Parse方法、Math类的Pow方法等。l应用程序中的每行代码都必须在某个方法的内部,如Main、Calculate或button1_Click。l可以把在一个程序中多次用到的某个任务定义为方法,如常用的计算、文本和控件的操作。方法对执行重复或 共享的任务很有用,可以在代码中的许多不同位置

13、调用方法,因此可以将方法作为应用程序的生成块。l用方法构造代码有以下优点: 方法允许将程序分为不连续的逻辑单元。调试单独的单元与调试不包含方法的整个程序相比要容易得多 。 可以在其他程序中使用为某个程序开发的方法,而通常只需进行少量修改,甚至不需要修改。 4.4.1 传值方式 4.4.2 以传值方式传递值类型参数 4.4.3 以传值方式传递引用类型参数 4.4.4 传引用方式 4.4.5 以传引用方式传递值类型参数 4.4.6 以传引用方式传递引用类型参数4.4.1 传值方式l如果声明方法的参数时,参数前没有ref或out修饰符,则调用方法时,以传值方 式向方法传递参数。在C#中默认为通过值传

14、递参数。l所谓“传值”,就是在方法调用时,将实参的值传递给形参。如果实参的类型为值 类型,则实参的值为该参数包含的数据。如果实参的类型为引用类型,则实参的 值为地址。l如参数是以传值方式传递,形参将创建新的存储位置,在该存储位置存储形参接 收的值。也就是说,被调用的方法将接收实参的一个副本。传值时,如果对被调 用的方法的值的副本进行修改(也就是形参的值进行修改),不会影响实参变量的 值。也就是说,传值时,允许在方法体内将新值赋给形参。这样的赋值只影响由 形参表示的局部存储位置的值它们不影响在方法调用中给出的实参的值,这 是因为参数以传值方式传递时,形参和实参的存储位置不同。以传值方式时,形 参

15、的初始化是通过复制对应实参的值来完成的。l在这里我们再给出一个概念:值参数。值参数以传值方式进行传递。注意,不要 将值参数和值类型参数弄混淆。值参数既可是值类型参数也可以是引用类型参数 。l值参数在调用方法时出现,并由调用中给定的参数值初始化。值参数也是局部变 量,它和局部变量一样,当所在方法返回时消失。4.4.2 以传值方式传递值类型参数l值类型参数的值为该参数包含的实际数据,以传值方式传递值类 型参数时,当形参接收到实参的值后,形参变量和实参变量就不 再有任何关系。l任务4.6:移动矩形 问题描述:创建一个Rectangle类来描述矩形,矩形有两个 基本属性即位置和大小。并定义一个方法,将

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

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号