黑马程序员-.NET基础之数组

------- Windows Phone 7手机开发.Net培训、期待与您交流! -------

 

根据黑马的入学视频以及自己的学习状况,找了自己感觉比较薄弱的环节大体看了一下,因为大学学的就是.NET,基本的还是略懂。。现黑马的入学流程需要写博文,就当是对自己了解东西的一些总结吧。

 

数组属性

(1)数组使用类型声明,通过数组下标(或称索引)来访问数组中的数据元素。
(2)数组可以是一维数组、多维数组或交错数组(jagged array)。
(3)数组元素可以为任何数据类型,包括数组类型。
(4)数组下标(索引)从0开始:具有 n 个元素(即维度长度为n)的数组的下标是从 0 到 n-1。
(5)数值数组元素的默认值设置为零,而引用元素的默认值设置为 null。
(6)交错数组是数组的数组,因此,它的元素是引用类型,初始化为 null。
(7)数组中的元素总数是数组中各维度长度的乘积。
(8)通过.NET框架中的System Array类来支持数组。因此,可以利用该类的属性与方法来操作数组。

 

一、一维数组

一般通过数组下标来访问数组中的数据元素。C#语言还可以通过foreach语句来枚举数组的各个元素。下面给出自己练习的一个列子。利用一维数组显示Fibonacii数列:1、1、2、3、5、8、……的前20项。

using System;
namespace CSharpPractice.Array
{
    class Fibonacii
    {
        static void Main()
        {
            int[] Fab= new int[20];
            int i;

            Fab[0] = 1;
            Fab[1] = 1;
            
            for (i = 2; i < 20; i++) Fab[i] = Fab[i-1]+Fab[i-2];

            for (i = 0; i < 20; i++)
            {
                if (i % 5 == 0) Console.WriteLine();//一行显示5个数
                Console.Write("{0,6} ", Fab[i]);
            }

            Console.ReadLine();

        }
    }
}

 

二、多维数组

多维数组的声明、实例化和初始化与一维数组的声明、实例化和初始化相类似。声明多维数组时,用逗号表示维数,一个逗号表示两维数组,两个逗号表示三维数组,以此类推。注意:在声明数组声明中即使没有指定维数的实际大小,也必须使用逗号分隔各个维。下面也给出一个列子。

using System;
namespace CSharpPractice.Array
{
    class Matrix2D
    {
        public static void DisplayMatrix(int[,] A)
        {  // 打印矩阵内容
            for (int i = 0; i < A.GetLength(0); i++)
            {
                for (int j = 0; j < A.GetLength(1); j++)
                    Console.Write("{0,6} ", A[i, j]);
                Console.WriteLine();
            }
        }

        static void Main()
        {
            int i, j, sum = 0, t;
            int[,] A = new int[4, 4];

            for (i = 0; i < 4; i++)        //矩阵A赋值
                for (j = 0; j < 4; j++) A[i, j] = i * 4 + j + 1;

            Console.WriteLine("原始矩阵: ");
            DisplayMatrix(A);

            Console.WriteLine("上三角矩阵: ");
            for (i = 0; i < 4; i++)
            {
                for (int k = 0; k < i * 7; k++) Console.Write(" "); //控制空格
                for (j = i; j < 4; j++)
                    Console.Write("{0,6} ", A[i, j]);
                Console.WriteLine();
            }

            Console.WriteLine("下三角矩阵: ");
            for (i = 0; i < 4; i++)
            {
                for (j = 0; j < i + 1; j++)
                    Console.Write("{0,6} ", A[i, j]);
                Console.WriteLine();
            }

            Console.WriteLine("两条对角线之和: ");
            for (i = 0; i < 4; i++) sum += A[i, i] + A[i, 3 - i];
            Console.WriteLine("{0,6}", sum);

            Console.WriteLine("矩阵A转置: ");
            for (i = 0; i < 4; i++)
            {
                for (j = i; j < 4; j++)
                {
                    t = A[i, j];
                    A[i, j] = A[j, i];
                    A[j, i] = t;
                }
            }
            DisplayMatrix(A);   // 打印矩阵
        }
    }
}

三、交错数组

正交数组、变长数组、锯齿形数组。在二维交错数组中,每一行可以有不同的列数。交错数组是元素为数组的数组,所以有时又称为“数组的数组”。交错数组元素的维度和大小可以不同。交错数组同样需要声明、实例化并且初始化后才能使用。交错数组的使用示例如下:

using System;
namespace CSharpPractice.Array
{
    class JaggedArray
    {
        static void Main()
        {
            int i, j, k;

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

            Console.WriteLine("jaggedArray3:");
            for (i = 0; i < jaggedArray3.Length; i++)
            {
                for (j = 0; j < jaggedArray3[i].Length; j++)
                    Console.Write("A[{0},{1}]={2}  ", i,j,jaggedArray3[i][j]);
                Console.WriteLine();
            }

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

            Console.WriteLine("\njaggedArray4:");
            for (i = 0; i < jaggedArray4.Length; i++)
            {
                for (j = 0; j<jaggedArray4[i].GetLength(0); j++)
                    for (k = 0; k < jaggedArray4[i].GetLength(1); k++)
                        Console.Write("A[{0}][{1},{2}]={3}  ", i,j,k,jaggedArray4[i][j, k]);
                Console.WriteLine();
            }
        }
    }
}


四、数组排序与基本操作

数组求和、求平均值、最值及其位置;数组的常见排序方法,如冒泡法、选择法;插入数据到已排序的数组中;删除已排序的数组中某一元素,下面给出冒泡排序的列子。

using System;
namespace CSharpPractice.Array
{
    class BubbleSort
    {
        public static void DisplayMatrix(int[] A)
        {  //打印矩阵
            foreach (int i in A) Console.Write("{0,5} ", i);
            Console.WriteLine();
        }
        static void Main()
        {
            int i, t;
            int[] A = new int[10];
            Random rNum = new Random();
            for (i = 0; i < A.Length; i++) A[i] = rNum.Next(101);//数组A赋值(0~100之间的随机数)
            Console.WriteLine("原始数组: ");
            DisplayMatrix(A);

            int N = A.Length;                  //获取数组A的长度N
            for (int loop = 1; loop <= N - 1; loop++)//外循环进行N-1轮比较
            {
                for (i = 0; i <= N - 1 - loop; i++)  //内循环两两比较,大数下沉
                    if (A[i] > A[i + 1])
                    {
                        t = A[i];
                        A[i] = A[i + 1];
                        A[i + 1] = t;
                    }
            }
            Console.WriteLine("升序数组: ");
            DisplayMatrix(A);  // 打印矩阵
        }
    }
}

 

数组注意事项

(1)如果为数组指定初始化值,则可以省略对数组长度的说明
(2)如果在声明数组时将其初始化,可以不必再次声明数组类型
(3)一旦要为数组指定初始化值,就必须为数组的所有元素指定初始化值,指定值的个数既不能多于数组长度,也不能少于数组长度
 (4) 可以声明一个数组变量但不将其初始化,但在将数组分配给此变量时必须使用 new 运算符

 ------- Windows Phone 7手机开发.Net培训、期待与您交流! -------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值