第5章数组和指针

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在多维数组中,二维数组是最简单也是最常用的数组。 在多维数组中,二维数组是最简单也是最常用的数组。 1.二维数组的定义 . 数据类型[ 数组名; 数据类型 , ] 数组名; 例如: 例如: double[ , ] dArr; //定义一个 定义一个double型二维数组 定义一个 型二维数组 2.二维数组的初始化 . 格式: 数组名=new 数据类型 数组长度 ,数组长度 ; 数据类型[数组长度 数组长度2]; 数组长度1, 格式: 数组名 例如: 例如:
int[,] A = new int[4,4]{{1,2,3,4},{21,22,23,24},{31,32,33,34},{41,42,43,44}};
二维数组定义和初始化分离: 二维数组 double[ , ] dArr; dArr=new double[ 3, 4 ] ; 也可以将二维数组的定义与动态初始化合并在一条语句中。 动态初始化合并在一条语句中 也可以将二维数组的定义与动态初始化合并在一条语句中。 例如: 例如: double[ , ] dArr=new double[ 3, 4 ] ; 在动态初始化二维数组时,也可以直接为其赋予初始化值。 在动态初始化二维数组时,也可以直接为其赋予初始化值。 例如: 例如: int[ , ] IntArr=new int[ , ]{{1, 3}, {2, 4}, {5,6}}; 二维数组也可以进行静态 静态初始化 二维数组也可以进行静态初始化 : char[ , ] c={{‘a’, ‘b’, ‘c’}, {‘x’, ‘y’, ‘z’}}; ‘ ’ ’ ’ ‘ ’ ’ ’ 【例5.3】二维数组的使用 5.3】
运行结果如下: 运行结果如下:
编程: 选 。随机产生7个数 每个数在1~36范围内,要求每个数不同。 个数, 范围内, 编程:36选7。随机产生 个数,每个数在 范围内 要求每个数不同。
using System; class Rnd_36_7 { static void Main( ) { int[] a=new int[7]; Random ran=new Random(); for(int i=0;i<a.Length;i++) { one_num: a[i]=(int)ran.Next(36)+1; for(int j=0;j<i;j++) { if(a[i]==a[j]) goto one_num; } } foreach(int n in a) { Console.Write("{0}\0",n); } } }
第5章 数组和指针
一维数组的声明、实例化、初始化和访问 多维数组的声明、实例化、初始化和访问 交错数组的声明、实例化、初始化和访问 数组的基本操作和排序 System.Array类的使用 System.Array类的使用 C# 语言中不安全代码的基本概念 C# 语言中指针的使用
5.1 数组
数组(array)是一种数据结构,它包含相同类型的一组 数组(array)是一种数据结构,它包含相同类型的一组 数据 数组有一个“秩(rank) 数组有一个“秩(rank)”,它确定和每个数组元素 (element)关联的索引个数,其值是数组类型的方括号 element)关联的索引个数,其值是数组类型的方括号 之间逗号个数加上1。数组的秩又称为数组的维度。“ 之间逗号个数加上1。数组的秩又称为数组的维度。“秩” 为 1 的数组称为一维数组(single-dimensional array), 的数组称为一维数组(singlearray), “秩”大于 1 的数组称为多维数组(multi-dimensional 的数组称为多维数组(multiarray)。维度大小确定的多维数组通常称为两维数组、 array)。维度大小确定的多维数组通常称为两维数组、 三维数组等 数组的每个维度都有一个关联的长度(length),它是一 数组的每个维度都有一个关联的长度(length),它是一 个大于或等于零的整数。创建数组实例时,将确定维度 和各维度的长度,它们在该实例的整个生存期内保持不 变。换而言之,对于一个已存在的数组实例,既不能更 改它的维度,也不可能调整它的维度大小
实例
using System; class Test { static void Main() { bool[] a=new bool[2]; char[] b=new char[3]; double[] c=new double[4]; string[] d=new string[5]; Console.WriteLine(a[0]); Console.WriteLine(b[0]); Console.WriteLine(c[0]); Console.WriteLine(d[0]); } }
数组属性
(1)数组使用类型声明,通过数组下标(或称索引)来访问数组中 的数据元素。 (2)数组可以是一维数组、多维数组或交错数组(jagged array)。 数组可以是一维数组、多维数组或交错数组(jagged array)。 (3)数组元素可以为任何数据类型,包括数组类型。 (4)数组下标(索引)从0开始:具有 n 个元素(即维度长度为n) 数组下标(索引)从0 个元素(即维度长度为n 的数组的下标是从 0 到 n-1。 (5)数值数组元素的默认值设置为零,而引用元素的默认值设置为 null。 null。 (6)交错数组是数组的数组,因此,它的元素是引用类型,初始化 为 null。 null。 (7)数组中的元素总数是数组中各维度长度的乘积。 (8)通过.NET框架中的System Array类来支持数组。因此,可以利用 通过.NET框架中的System Array类来支持数组。因此,可以利用 该类的属性与方法来操作数组
举一反三: 举一反三:牛的繁殖问题
有一头母牛,它每年年初一生一头小母牛。每头小母牛从第 有一头母牛,它每年年初一生一头小母牛。 四个年头算起,每年年初一也生一头小母牛。若无牛死亡, 四个年头算起,每年年初一也生一头小母牛。若无牛死亡, 问在20年时,共有多少头? 20年时 问在20年时,共有多少头?
int x=70; ; char[] xss= new char[]{‘d’,‘5’}; //或 char[] xss = { 'd', '5' }; ‘ ’‘ ’ 或 xss = "qfds".ToCharArray(); Console.WriteLine(xss[0]); q xss = new char[x]; Console.WriteLine(xss[0]);
数组在实例化时,可以为数组元素指定初始化值
数组名称 = new 类型名称[数组长度] {初始值设定项}; 类型名称[数组长度] {初始值设定项 初始值设定项}; 如果为数组指定初始化值, (1)如果为数组指定初始化值,则可以省略对数组长度的说明 如果在声明数组时将其初始化, (2)如果在声明数组时将其初始化,可以不必再次声明数组类型 一旦要为数组指定初始化值, (3)一旦要为数组指定初始化值,就必须为数组的所有元素指定初始 化值,指定值的个数既不能多于数组长度, 化值,指定值的个数既不能多于数组长度,也不能少于数组长度
5.1.1 一维数组
【例5.1】一维数组的使用示例:随机产生100个学生的成绩, 5.1】一维数组的使用示例:随机产生100个学生的成绩, 计算学生的平均成绩,并统计高于平均成绩的学生人数
举一反三: 举一反三:统计个分数段的人数和各自占的百分比
【例5.2】利用一维数组显示Fibonacii数列:1、1、2、3、5、 5.2】利用一维数组显示Fibonacii数列:1 8、……的前20项。要求每行显示5项 ……的前20项。要求每行显示5
数组注意事项
数组必须先声明:类型名称[] 数组名; 数组必须先声明:类型名称[] 数组名; 数组在声明后必须实例化才能使用: 数组在声明后必须实例化才能使用:
数组名称 = new 类型名称[数组长度]; 类型名称[数组长度];
数组声明和实例化可以使用一条语句实现
类型名称[] 类型名称[] 数组名称 = new 类型名称[数组长度]; 类型名称[数组长度];
可以声明一个数组变量但不将其初始化,但在将数组分配给此变量 时必须使用 new 运算符
5.1.1 一维数组
1.定义 定Leabharlann Baidu 格式: 格式: 数组类型[ ] 数组名; ; 例 : int[ ] a; string[ ] arr; ; char[ ] carr;
5.1.1 一维数组
2.动态初始化 . 动态初始化需要借助new运算符,为数组元素分配内 运算符, 动态初始化需要借助 运算符 存空间,并为数组元素赋初值 数值类型初始化为0, 赋初值, 存空间,并为数组元素赋初值,数值类型初始化为 ,布尔 类型初始化为false,字符串类型初始化为 类型初始化为 ,字符串类型初始化为null。 。 格式: 数组名=new 数据类型 数组长度 ; 数据类型[数组长度 数组长度]; 格式: 数组名 例 : a =new int[6]; 也可以将定义和动态初始化写在一起: 也可以将定义和动态初始化写在一起: 例 : string[ ] arr=new string[3 ]{“as”,”vb”,”23”}; “ ”” ”” ”
5.1.1 一维数组
5.访问一维数组中的元素 . 中是通过数组名和下标来访问数组元素的。 在C#中是通过数组名和下标来访问数组元素的。 中是通过数组名和下标来访问数组元素的 例:int[ ] a=new int[12]; int c=5; int b=6; a[b+c]+=2; 每一个C#的数组都知道自己的长度 的数组都知道自己的长度, 每一个 的数组都知道自己的长度,数组的长度由 Length 决定。 决定。 int i=a.Length; //i=12
5.1.1 一维数组
例:写出下列程序的结果。 写出下列程序的结果。 using System; class Arraysort { static void Main( ) { int[] nums=new int[]{10,8,36,12,24}; foreach(int j in nums) { Console.Write(“{0}\0”, j); “ ” } Console.WriteLine(); for(int j=nums.Length-1;j>=0;j--) Console.Write (“{0}\0”, nums[j]); “ ” ; Console.WriteLine(); } }
5.1.2 多维数组
多维数组的声明、实例化和初始化与一维数组的声明、 实例化和初始化相类似。声明多维数组时,用逗号表示 实例化和初始化相类似。声明多维数组时,用逗号表示 维数,一个逗号表示两维数组,两个逗号表示三维数组, 以此类推。注意:在声明数组声明中即使没有指定维数 以此类推。注意:在声明数组声明中即使没有指定维数 的实际大小,也必须使用逗号分隔各个维 C#支持两种类型的多维数组。第一种是矩形数组,也称 C#支持两种类型的多维数组。第一种是矩形数组,也称 等长数组
5.1.1 一维数组
3.静态初始化 . 静态初始化数组的格式如下: 静态初始化数组的格式如下: 数据类型[ 数组名={元素 元素1[,元素2...]}; 数据类型 ] 数组名 元素 ,元素 ; 用这种方法对数组进行初始化时, 用这种方法对数组进行初始化时,无须说明数组元 素的个数,只需按顺序列出数组中的全部元素即可, 素的个数,只需按顺序列出数组中的全部元素即可,系 统会自动计算并分配数组所需的内存空间 自动计算并分配数组所需的内存空间。 统会自动计算并分配数组所需的内存空间。 例如: 例如: int[ ] IntArr={-45,9,29,32,46}; char[ ] StringArr={‘a’,’b’, ‘c’, ‘d’}; ‘ ’’ ’ ’ ’
5.1.1 一维数组
4.关于一维数组初始化的几点说明 .
(1)动态初始化数组时,可以把定义与初始化分开在不同的语句中进 )动态初始化数组时, 行; (2)静态初始化数组必须与数组定义结合在一条语句中,否则程序就 )静态初始化数组必须与数组定义结合在一条语句中, 会出错 ; (3)在数组初始化语句中,如果大括号中已明确列出了数组中的元素, )在数组初始化语句中,如果大括号中已明确列出了数组中的元素, 即确定了元素个数, 则表示数组元素个数的数值(即方括号中的数值) 即确定了元素个数, 则表示数组元素个数的数值(即方括号中的数值) 必须是常量, 必须是常量, 并且该数值必须与数组元素个数一致 。
相关文档
最新文档