c#教案第七章.docx

上传人:b****4 文档编号:24611576 上传时间:2023-05-29 格式:DOCX 页数:16 大小:19.05KB
下载 相关 举报
c#教案第七章.docx_第1页
第1页 / 共16页
c#教案第七章.docx_第2页
第2页 / 共16页
c#教案第七章.docx_第3页
第3页 / 共16页
c#教案第七章.docx_第4页
第4页 / 共16页
c#教案第七章.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

c#教案第七章.docx

《c#教案第七章.docx》由会员分享,可在线阅读,更多相关《c#教案第七章.docx(16页珍藏版)》请在冰豆网上搜索。

c#教案第七章.docx

c#教案第七章

长江大学工程技术学院章节备课

章节

名称

第七章(1-7节)

备注

课序

21

学时

2

 

本章主要参考文献资料:

 

基本

内容

声明和创建数组,多维数组,交错数组,foreach语句

数组与方法,Array类

教学目的与教学思路

掌握数组的基本概念,对多维数组交错数组有初步的认识

教学重点难点

重点

数组的声明,创建,foreach语句

难点

多维数组,数组与方法

练习与思考题

数组的使用

过程考核要点

考勤

教学

方法

多媒体讲解、案例讲解

教学内容提要

具体内容

时间分配

7.1声明和创建数组

对应着一组顺序排放的存储单元,数组中的每个元素数组是数据类型相同、数目一定的变量的有序集合,组成数组的变量称为该数组的元素。

内存分配时,数组按照创建时的次序在其中存放。

C#语言中,数组是一种引用类型。

使用前需要声明和创建。

7.1.1声明数组

数据类型[]数组名

例:

int[]a;

string[]str;

注意:

int[5]a;//错误

intb[];//错误

7.1.2创建数组

数组名=new数据类型[数组元素个数]

例:

a=newint[5];

注意:

数组的声明和创建可以出现在同一条语句中。

7.1.2创建数组(续)

访问数组中的元素:

数组名[索引表达式]

注意:

索引表达式的最大值是数组元素个数减1,如果指定的索引表达式的值大于最大值或小于0,程序运行时,将会引发异常。

用类型数组中保存只是对象引用。

在访问这些对象的成员前,必须使用new运算符创建实际的对象。

创建数组时可以给数组元素指定初始值:

int[]b=newint[3]{1,2,3,}int[]c=newint[4]{1,2,3,}//错

注意:

在这种初始化形式中,方括号内用于指定数组元素个数的表达式必须是一个常量表达式。

7.1.2创建数组(续)

用于初始化的值的个数必须与数组中元素的个数相同,因此,上述初始化表达式中完全可以不用显式给出元素的个数。

int[]b=newint[]{1,2,3};//有3个元素

更简洁的初始化方式:

int[]b={1,2,3,};

//只能与数组声明出现在同一条语句中

7.1.2创建数组(续)

int[]b;

b={1,2,3};//错误

而:

int[]b;

b=newint[]{1,2,3};//正确

例7-3初始化数组

7.2多维数组

int[,]array;

array=newint[3,2];

int[,,]array=newint[2,3,4];

7.2多维数组(续)

创建多维数组时,可以同时初始化:

int[,]array1=newint[4,2]

{{1,2},{3,4},{5,6},{7,8}};

int[,,]array2=newint[,,]

{{{1,2,3}},{{4,5,6}}};

7.2多维数组(续)

也可以采用如下形式声明并创建一个多维数组:

int[,]array4={{1,2},

{3,4},{5,6},{7,8}};

注意:

这种简洁方式只能与数组声明出现在同一条语句中。

7.2多维数组(续)

创建一个多维数组后,就可以通过下述表达式访问其中的元素:

数组名[索引表达式1,索引表达式2,…]

其中,每个索引表达式的值都必须在0到它指定的维度的大小减1之间。

例7-4多维数组

7.3交错数组

元素是数组对象的数组通常被称作交错数组:

int[][]jaggedArray=newint[3][];

从本质上说,它是一个由3个元素组成的一维数组,其中每个元素都是一个一维int型数组。

7.3交错数组(续)

交错数组是数组的数组,因此,从本质上说它是一种引用类型的一维数组,元素默认值为null。

在访问其元素前,必须使用new运算符初始化:

jaggedArray[0]=newint[5];

jaggedArray[1]=newint[4];

jaggedArray[2]=newint[2];

交错数组元素中所包含元素的个数可以不同。

7.3交错数组(续)

可以使用初始值列表来初始化交错数组元素:

jaggedArray[0]=newint[]{1,3,5,7,9};

jaggedArray[1]=newint[]{0,2,4,6};

jaggedArray[2]=newint[]{11,22};

7.3交错数组(续)

可以在声明交错数组时直接初始化:

int[][]jaggedArray=newint[][]{newint[]{1,3,5,7,9},newint[]{0,2,4,6},

newint[]{11,22}};

int[][]jaggedArray3={newint[]{1,3,5,7,9},newint[]{0,2,4,6},newint[]{11,22}};

7.3交错数组(续)

对于上述定义,可以使用如下例所示形式访问交错数组中的个别元素:

jaggedArray3[0][1]=77;

jaggedArray3[2][1]=88;

7.3交错数组(续)

可以混合使用交错数组和多维数组:

int[][,]jaggedArray4=newint[3][,]{newint[,]{{1,3},{5,7}},newint[,]{{0,2},{4,6},{8,10}},newint[,]{{11,22},{99,88},{0,9}}};

对于上述定义,可以使用如下例所示形式访问个别元素:

System.Console.Write("{0}",jaggedArray4[0][1,0]);

7.3交错数组(续)

与多维数组不同,对于交错数组,属性Length返回的是包含在当前交错数组中的数组元素的数目。

例:

System.Console.WriteLine(

jaggedArray4.Length);

//输出值3

7.3交错数组(续)

必须注意,即使某个交错数组是“矩形”或“长方体”等形状,也不能使用下述方法创建:

int[][]array=newint[3][4];

例7-5交错数组

7.4foreach语句

foreach(数据类型循环变量名in集合)

语句

foreach语句的执行顺序是:

首先创建一个循环变量,然后从集合中读取第1个元素赋值给该变量(如果集合中不存在元素,foreach语句的执行自动结束),并执行循环体;每次执行完循环体后,如果集合中还有剩余元素,就继续按顺序从集合中读取下一个元素赋值给该变量,并执行循环体;否则,结束foreach语句的执行。

7.4foreach语句(续)

foreach语句中循环变量的值在循环体内不应改变。

事实上,当循环变量的类型是简单类型时,编译器会阻止这种情况的发生。

例:

int[]arr={1,2,3,4};

foreach(intiinarr)

{

i=0;//编译错误

i++;//编译错误

}

7.4foreach语句(续)

当循环变量不属于简单类型时,调用对象的相关方法有可能会改变该变量的值,但最好不要这样做。

例7-6foreach语句

7.4foreach语句(续)

对于多维数组,可以使用相同的方法来循环访问元素。

此时,foreach循环从索引全部为0开始顺序访问所有的索引组合,右边的索引值先增加,当右边的索引值增加到上限时,被重置为0,这时左边的索引值加1。

int[,]numbers2D=newint[3,2]{{9,99},{3,33},{5,55}};

foreach(intiinnumbers2D)

System.Console.Write("{0}",i);

7.4foreach语句(续)

foreach语句用于交错数组时,通常需要嵌套该循环,才能得到实际的数据。

int[][]array={newint[]{1,2},newint[]{3},newint[]{4,5,6}};

foreach(int[]iinarray)

{

foreach(intjini)

System.Console.WriteLine(j);

}

7.4foreach语句(续)

int[][]array={newint[]{1,2},newint[]{3},newint[]{4,5,6}};

foreach(intiinarray)

System.Console.WriteLine(i);

上述foreach语句是错误的。

因为数组array中包含的元素是int[]类型,而不是int类型,必须循环每个数组元素和该交错数组本身。

7.5数组与方法

7.5.1将数组传递给方法

7.5.2参数数组

7.5.3Main方法和命令行参数

7.5.4返回数组

7.5.1将数组传递给方法

数组是一种引用类型,其对象可以用作参数传递给方法。

这种传递属于引用传递。

例7-7将数组传递给方法

7.5.2参数数组

所谓参数数组是指用关键字params修饰的数组类型的形式参数。

使用参数数组,可以直接传递同一类型的数目可变的参数,从而简化了编程。

7.5.2参数数组(续)

classA

{

publicstaticvoidMethod(paramsint[]array)

{}

}

对于上述方法,完全可以使用下述语句调用:

A.Method(1,2)

编译器会将上述调用语句转换成类似如下的代码:

int[]array=newint[]{1,2};

A.Method(array);

当然也可以使用下述语句调用:

A.Method(1,2,3)

7.5.2参数数组(续)

向参数数组传递多个参数时,实际上,编译器会将这些参数写入一个数组,然后传递给它。

因此,参数数组除了可以用多个与参数数组元素类型相容的参数初始化外,还可以用一个元素类型与参数数组的元素类型相同的数组初始化。

使用关键字params修饰的数组只能是一维数组。

一个方法只能有一个参数数组,而且此参数数组必须是方法定义中的最后一个参数。

参数数组必须是值参数,不能使用关键字ref或out修饰。

参数数组是自动可选的,即可以不给参数数组传递任何参数。

关键字params不能用于区分重载方法。

7.5.3Main方法和命令行参数

Main方法的方法头可以是下列4种形式之一:

staticvoidMain()

staticintMain()

staticvoidMain(string[]args)

staticintMain(string[]args)7.5.3Main方法和命令行参数(续)

命令行中的参数传递给Main方法后,保存在Main方法的字符串数组参数args中。

其中,命令行中的第1个参数保存在args[0]中;命令行中的第2个参数保存在args[1]中;......;依此类推。

7.5.4返回数组

数组也可以用作方法的返回值。

从某一方法返回数组,实际返回的只是一个引用数组的引用。

通过这个引用就可以操作相应的数组。

7.6Array类

7.6.1数组的复制

7.6.2数组排序

7.6.3在数组中查找

7.6.1数组的复制

Array.Copy

CopyTo

7.6.2数组排序

Array.sort:

可以给一维数组中的全部或部分元素按从小到大的顺序排序。

排序依据的是数组元素实现的接口System.IComparable或特别给出的与之相关的实现了接口System.IComparer的类。

7.6.2数组排序(续)

接口IComparable和IComparer是比较对象大小的标准方式,

接口IComparable在要待比较的对象的类型中实现,用于比较当前对象与另一个对象;而接口IComparer在另一个单独的类中实现,用于比较任意两个对象。

最常用的是接口IComparable,.NET框架预定义的许多类型都实现了该接口。

比如,数值类型中,该接口被实现按数值大小进行比较。

7.6.2数组排序(续)

为了使某个类型具有默认的比较能力,应该实现接口System.IComparable。

接口IComparable中只有一个方法CompareTo,该方法有一个Object型参数,当这个参数大于该方法所属的对象时返回负整数,等于该方法所属的对象时返回0,小于该方法所属的对象时返回正整数。

7.6.2数组排序(续)

比较两个对象的大小:

实现了接口IComparable的同类对象可以调用方法CompareTo比较大小。

7.6.3在数组中查找

Array.BinarySearch:

在一个一维数组中查找某个元素。

如果查找到了目标元素,返回数组中目标元素的索引值;否则,返回一个负整数。

查找时,比较的依据是数组元素和待查对象所实现的接口IComparable或特别给出的与之相关的实现了接口IComparer的类。

查找前,待查数组必须已经相应地依据数组元素实现的接口IComparable或特别给出的与之相关的实现了接口IComparer的类按从小到大顺序排序。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1