Bài 6: Mảng (Array) 1 chiều và đa chiều
🎯 Mục tiêu bài học
-
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.
-
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).
-
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,1và2. Cố tình gọiscores[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
-
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.
-
Chỉ số mảng (Index) bắt đầu tính từ 0.
-
Dùng thuộc tính
.Lengthđể lấy số lượng phần tử của mảng 1 chiều. -
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 };
-
Viết vòng lặp duyệt qua mảng để tìm và in ra các số lẻ.
-
Đếm xem trong mảng có tổng cộng bao nhiêu số lẻ.
All rights reserved