0

Bài 6: Mảng (Array) 1 chiều và đa chiều

🎯 Mục tiêu bài học

  1. Hiểu bản chất của Mảng (Array) và cách lưu trữ nhiều giá trị trong một biến duy nhất.

  2. Thao tác thành thạo với Mảng 1 chiều (khởi tạo, truy xuất, duyệt mảng).

  3. Làm quen với Mảng 2 chiều (bảng dữ liệu, ma trận).

📖 Phần 1: Mảng 1 chiều (1D Array)

Khi bạn cần lưu một danh sách điểm số của 30 học sinh, thay vì phải tạo ra 30 biến rời rạc (score1, score2,...), mảng cho phép bạn gộp chúng vào một "dãy ô nhớ" liên tiếp.

1. Khởi tạo mảng

Có 2 cách phổ biến để tạo mảng trong C#:

C#

// Cách 1: Khai báo kích thước cố định rồi gán giá trị sau
int[] scores = new int[3]; // Tạo mảng chứa được 3 phần tử (index từ 0 đến 2)
scores[0] = 8;
scores[1] = 9;
scores[2] = 10;

// Cách 2: Khai báo và gán giá trị luôn (nhanh gọn)
string[] names = { "Hieu", "An", "Binh" };

⚠️ Lưu ý cực kỳ quan trọng: Chỉ số của mảng (Index) trong C# luôn bắt đầu từ 0. Mảng có 3 phần tử thì vị trí của chúng là 0, 1 và 2. Cố tình gọi scores[3] sẽ gây lỗi sập chương trình (IndexOutOfRangeException).

2. Truy xuất và thay đổi phần tử

C#

string[] languages = { "C#", "Java", "Python" };

// Lấy ra phần tử đầu tiên (vị trí 0)
Console.WriteLine(languages[0]); // Kết quả: C#

// Thay đổi giá trị phần tử thứ 2
languages[1] = "Go"; 

3. Duyệt mảng bằng vòng lặp foreach

Cách thanh lịch nhất để quét qua toàn bộ mảng:

C#

string[] devRoles = { "Backend", "Frontend", "DevOps" };

foreach (string role in devRoles)
{
    Console.WriteLine($"Vi tri: {role}");
}

📖 Phần 2: Mảng đa chiều (Multidimensional Array - Mảng 2 chiều)

Mảng 2 chiều giống như một bảng tính Excel hoặc một bàn cờ, có các hàng (row) và cột (column).

1. Khởi tạo mảng 2 chiều

Cú pháp sử dụng dấu phẩy [,] bên trong cặp ngoặc vuông:

C#

// Tạo mảng 2 chiều gồm 2 hàng, 3 cột
int[,] matrix = {
    { 1, 2, 3 }, // Hàng 0
    { 4, 5, 6 }  // Hàng 1
};

2. Truy xuất mảng 2 chiều

C#

// Lấy giá trị ở Hàng 1, Cột 2 (số 6)
int value = matrix[1, 2]; 
Console.WriteLine(value); // 6

3. Duyệt mảng 2 chiều bằng vòng lặp lồng nhau (nested loop)

C#

int[,] grid = {
    { 10, 20 },
    { 30, 40 },
    { 50, 60 }
};

// grid.GetLength(0) lấy tổng số hàng (3)
// grid.GetLength(1) lấy tổng số cột (2)
for (int i = 0; i < grid.GetLength(0); i++)
{
    for (int j = 0; j < grid.GetLength(1); j++)
    {
        Console.Write($"{grid[i, j]}\t"); // In ra kèm tab cho đẹp
    }
    Console.WriteLine(); // Xuống dòng sau khi hết một hàng
}

💻 Phần 3: Thực hành

Viết chương trình quản lý điểm số của một nhóm sinh viên, tính điểm trung bình và tìm điểm số cao nhất:

C#

using System;

namespace Lesson6
{
    class Program
    {
        static void Main(string[] args)
        {
            // Khai báo mảng chứa điểm số của 5 sinh viên
            double[] studentScores = { 7.5, 8.0, 9.2, 6.4, 8.8 };

            double sum = 0;
            double maxScore = studentScores[0]; // Giả sử phần tử đầu tiên lớn nhất

            Console.WriteLine("Danh sach diem so:");
            foreach (double score in studentScores)
            {
                Console.Write($"{score}  ");
                sum += score;

                // Cập nhật điểm cao nhất nếu tìm thấy điểm lớn hơn
                if (score > maxScore)
                {
                    maxScore = score;
                }
            }

            // Tính điểm trung bình
            double avgScore = sum / studentScores.Length; // .Length lấy tổng số phần tử của mảng

            Console.WriteLine($"\n-------------------------");
            Console.WriteLine($"Diem trung binh: {Math.Round(avgScore, 2)}");
            Console.WriteLine($"Diem cao nhat: {maxScore}");

            Console.ReadLine();
        }
    }
}

📝 Tóm tắt bài học

  1. Mảng (Array) lưu trữ tập hợp dữ liệu cùng kiểu dữ liệu trên các ô nhớ liên tiếp.

  2. Chỉ số mảng (Index) bắt đầu tính từ 0.

  3. Dùng thuộc tính .Length để lấy số lượng phần tử của mảng 1 chiều.

  4. Mảng 2 chiều được khai báo với cú pháp [ , ] và duyệt qua bằng vòng lặp lồng nhau kết hợp hàm .GetLength().

🛠 Bài tập thực hành

Yêu cầu: Cho một mảng số nguyên gồm các phần tử bất kỳ: int[] numbers = { 15, 3, 22, 9, 41, 12 };

  1. Viết vòng lặp duyệt qua mảng để tìm và in ra các số lẻ.

  2. Đếm xem trong mảng có tổng cộng bao nhiêu số lẻ.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí