黑馬程序員-.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培訓、期待與您交流! -------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章