1、数组的声明与分配空间
数组:多个相同类型数据的组合。在C#中,数组为引用类型。
(1)一维数组的声明方式
Int[] a1; //注意方括号写到变量名的前面
Double[] b;
Mydate[] c;
C#语言中数组声明时不能指定其长度(数组中元素的个数) 例如:int a[5] 非法
(2)数组初始化
A、动态数组初始化
数组定义与为数组元素分配空间并赋值的操作分开进行。 因为C#中的数组是引用型
例如:int[] a=new int[3]; //初始化
a[0]=3; a[1]=6; a[2]=9 //赋值
MyDate[] dates; //对象型数组
Dates=new MyDate[3];
dates[0]=new MyDate(22,7,1964); dates[1]=new MyDate(1,7,1984); dates[2]=new MyDate(22,12,1964);
B、静态初始化
在定义数组的同时就为数组元素分配空间并赋值。 注意:最后可以多一个逗号
例如:int[] a={3,9,8}; //也可以写成 int[] a= new int[]{3,9 8,};
MyDates[] dates={new MyDates(22,7,1964),new MyDates(1,7,1984),new MyDates(2,12,1964)};
C、数组元素的默认初始化
数组是引用类型,它的元素相当于类的成员变量,因此数组一经分配空间,其中的每个元素也被按照成员变量同样的方式被隐式初始化。 数值型是0,引用类型是null
例如: int[] a=new int[5]; //a[]中的每个元素均为0
3、数组元素的引用
index为数组元素下标,可以使整型常量或整型表达式。 例:a[3],b[i],c[6-i]
数组元素下标从0开始,长度为n的数组合法下标取值范围为0~n-1
每个数组都有一个属性Length指明它的长度。如:a.Length指明数组a的长度(元素个数)
4、foreach语句
foreach可以很方便地处理数组、集合中各元素。 foreach是只读式遍历(只能取值,无法改变)
如: int[] ages=new int[10];
foreach(int age in ages)
{
//……
}
5、复制数组
Array.Copy方法提供了数组元素复制功能:
Int[] source={1,2,3,4,5,6}; //源数组
Int[] dest={10,9,8,7,6,5,4,3,2,1}; //目的数组
//复制源数组中从下标0开始的source.Length个元素到目的数组,从下标0的位置开始存储
Array.Copy(source,0,dest,0,source.Length);
6、多维数组
二维数组举例: int[,] a={{1,2,3},{4,5,6},{7,8,9}};
可以用a.GetLength(0)获得数组的行数,a.GetLength(1)获得数组的列数
7、交错数组
C#中交错数组是数组的数组
例如:int[][] t=new int[3][];
t[0]=new int[2];
t[1]=new int[4];
t[2]=new int[3];
C#中多维数组的声明和初始化应按照从高维到低维的顺序进行。
如:int [][]t1= new int[][4]; // 非法,与C++不同
------数组初始化实例:
1 //#region 一维数组初始化显示
2 //int[] arr1 = new int[6] { 23, 12, 4, 66, 74, 24 };
3 //foreach (int n in arr1)
4 // Console.WriteLine("{0}", n + " ");
5 //Console.WriteLine();
6 //Console.WriteLine("请输入数组的下标:");
7 //int i;
8 //i = Convert.ToInt32(Console .ReadLine ());
9 //Console.WriteLine(arr1[i]);
10 ////Console.ReadKey();
11 //#endregion
12
13 /* #region 数组初始化显示
14 int[,] arr2 = new int[2, 3] { { 1, 2, 3 }, { 4, 5, 6 } };
15 Console .Write ("数组的行数为:");
16 Console.WriteLine(arr2.Rank);
17 Console.Write("数组的列数为:");
18 Console.WriteLine(arr2.GetUpperBound(arr2.Rank - 1)+1);
19 for (int j = 0; j < arr2.Rank; j++)
20 {
21 string s="";
22 for (int k = 0; k <arr2.GetUpperBound(arr2.Rank - 1)+1; k++)
23 {
24 s = s + Convert.ToString(arr2[j, k]) + " ";
25 }
26 Console.WriteLine(s);
27 }
28 #endregion */
29
30 int[] scores = new int[10];
31 int sum = 0;
32 //对数组中的元素进行赋值
33 for (int i = 0; i < scores.Length; i++)
34 {
35 Console.Write("请输入第{0}个成绩:", i + 1);
36 scores[i] = Convert.ToInt32(Console.ReadLine());
37 //sum = sum + scores[i];
38 }
39 //Console.WriteLine("学生平均成绩为:" + (sum / 10));
40
41 //通过一个for循环求学生的总成绩
42 for (int i = 0; i < scores.Length; i++)
43 {
44 sum += scores[i];
45 }
46 //Console.Clear(); //清屏
47 Console.WriteLine("学生平均成绩为:" + (sum / scores .Length ));
48 //通过循环输出每一个学生的成绩
49 for (int i = 0; i < scores.Length; i++)
50 {
51 Console.WriteLine("第{0}个学生的成绩为:{1}", i + 1, scores[i]);
52 }
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace 二维数组声明初始化
7 {
8 class Program
9 {
10 static void Main(string[] args)
11 {
12 #region 二维数组初始化显示
13 int[,] arr2 = new int[3, 3] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8 ,9 } };
14 Console.Write("数组的行数为:");
15 Console.WriteLine(arr2.Rank);
16 Console.Write("数组的列数为:");
17 Console.WriteLine(arr2.GetUpperBound(arr2.Rank - 1) + 1);
18 for (int j = 0; j < arr2.Rank; j++)
19 {
20 string s = "";
21 for (int k = 0; k < arr2.GetUpperBound(arr2.Rank - 1) + 1; k++)
22 {
23 s = s + Convert.ToString(arr2[j, k]) + " ";
24 }
25 Console.WriteLine(s);
26 }
27 #endregion
28 }
29 }
30 }
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace 动态二维声明初始化
7 {
8 class Program
9 {
10 static void Main(string[] args)
11 {
12 Console.WriteLine("请输入定义数组的行数:");
13 int row = Convert.ToInt32(Console.ReadLine());
14 Console.WriteLine("请输入定义数组的列数:");
15 int col = Convert.ToInt32(Console.ReadLine());
16 int[,] arr2 = new int[row, col];
17 Console.WriteLine("结果:");
18 for (int i = 0; i < row; i++)
19 {
20 for (int j = 0; j < col; j++)
21 {
22 if (i == j)
23 {
24 Console.Write("*");
25 }
26 else
27 {
28 Console.Write("@");
29 }
30 }
31 Console.WriteLine();
32 }
33 }
34 }
35 }