BÀI 4: NỀN TẢNG CỦA C# 2008

4.1. Các kiểu dữ liệu (Data Types)

Biến là tên gọi cho một vùng nhớ, dùng để lưu trữ dữ liệu. Mọi biến trong C# phải được khai báo kiểu dữ liệu.

Kiểu dữ liệuTên .NETÝ nghĩaVí dụ
intInt32Số nguyên (4 byte)int tuoi = 30;
doubleDoubleSố thực (8 byte)double diem = 8.5;
stringStringChuỗi ký tựstring ten = "Văn An";
charCharMột ký tự (Unicode)char x = 'A';
boolBooleanLogic (Đúng/Sai)bool daKetHon = false;
decimalDecimalSố thực (chính xác cao, dùng cho tài chính)decimal luong = 1500.50m;
  • Phép toán:

    • Số học: +, -, *, / (chia), % (chia lấy dư).

    • So sánh: == (bằng), != (không bằng), >, <, >=, <=.

    • Logic: && (VÀ), || (HOẶC), ! (Phủ định).

    • Gán: =, +=, -=, *=, /=.

4.2. Kiểu dữ liệu mảng (Array) và ArrayList

  • Mảng (Array):

    • Khái niệm: Dùng để lưu trữ một tập hợp cố định các phần tử cùng kiểu dữ liệu.

    • Khai báo: kieu_du_lieu[] ten_mang = new kieu_du_lieu[so_phan_tu];

    • Ví dụ:

      C#

       
      // Tạo mảng 5 số nguyên
      int[] diemSo = new int[5];
      // Gán giá trị
      diemSo[0] = 8;
      diemSo[1] = 10;
      // ...
      // Lấy giá trị
      Console.WriteLine(diemSo[1]); // In ra 10
      
    • Ưu điểm: Tốc độ truy xuất nhanh.

    • Nhược điểm: Kích thước cố định, không thể thêm/xóa sau khi tạo.

  • ArrayList: (Nằm trong System.Collections)

    • Khái niệm: Dùng để lưu trữ một tập hợp các phần tử (đối tượng) có kích thước linh động.

    • Khai báo: ArrayList list = new ArrayList();

    • Ví dụ:

      C#

       
      using System.Collections;
      // ...
      ArrayList myList = new ArrayList();
      myList.Add(10); // Thêm số nguyên
      myList.Add("Xin chào"); // Thêm chuỗi
      myList.Add(true); // Thêm bool
      
      myList.RemoveAt(0); // Xóa phần tử ở vị trí 0
      
      Console.WriteLine(myList[0]); // In ra "Xin chào"
      
    • Ưu điểm: Kích thước linh động (thêm/xóa thoải mái).

    • Nhược điểm: Chậm hơn Array, không an toàn về kiểu (có thể chứa nhiều kiểu dữ liệu lẫn lộn).
    • Ghi chú: Trong C# 2.0+ (VS 2008 hỗ trợ), người ta thường dùng List<T> (Generic) thay cho ArrayList để đảm bảo an toàn kiểu. Ví dụ: List<int> numbers = new List<int>();

4.3. Phát biểu rẽ nhánh (Conditional Statements)

  • Phát biểu ifelse: Dùng để kiểm tra một điều kiện và thực thi các khối lệnh tương ứng.

    C#

     
    int tuoi = 18;
    if (tuoi >= 18)
    {
        Console.WriteLine("Bạn là người trưởng thành.");
    }
    else if (tuoi >= 13)
    {
        Console.WriteLine("Bạn là thanh thiếu niên.");
    }
    else
    {
        Console.WriteLine("Bạn là trẻ em.");
    }
    
  • Phát biểu switchcase: Dùng khi có nhiều trường hợp cần so sánh với một biến duy nhất.

    C#
    int ngayTrongTuan = 2; // Giả sử 2 là Thứ Hai
    switch (ngayTrongTuan)
    {
        case 2:
            Console.WriteLine("Thứ Hai");
            break; // Bắt buộc phải có break
        case 3:
            Console.WriteLine("Thứ Ba");
            break;
        // ...
        case 8: // Chủ Nhật
            Console.WriteLine("Chủ Nhật");
            break;
        default: // Trường hợp còn lại
            Console.WriteLine("Không hợp lệ");
            break;
    }
    

4.4. Phát biểu vòng lặp (Loop Statements)

  • Vòng lặp for: Dùng khi biết trước số lần lặp.

    C#
    // In ra các số từ 0 đến 9 (lặp 10 lần)
    for (int i = 0; i < 10; i++)
    {
        Console.WriteLine(i);
    }
    
  • Vòng lặp while: Dùng khi lặp cho đến khi một điều kiện còn đúng (có thể không chạy lần nào).

    C#

     
    int n = 0;
    while (n < 5)
    {
        Console.WriteLine(n);
        n++; // Phải có lệnh thay đổi điều kiện, nếu không sẽ lặp vô hạn
    }
    
  • Vòng lặp dowhile: Giống while, nhưng đảm bảo khối lệnh chạy ít nhất 1 lần.

    C#

     
    int pass;
    do
    {
        Console.Write("Nhap mat khau: ");
        pass = int.Parse(Console.ReadLine());
    } while (pass != 123); // Lặp lại nếu nhập sai
    
    Console.WriteLine("Mat khau dung!");
    
4.5. Xử lý lỗi (Try…Catch) 
  • Khái niệm: Khi một lỗi nghiêm trọng xảy ra lúc chạy (ví dụ: int.Parse("abc"), chia cho 0, không tìm thấy tệp), chương trình sẽ ném ra một Ngoại lệ (Exception) và bị “crash” (dừng đột ngột).

  • Công dụng: try...catch dùng để “bắt” các ngoại lệ này lại, xử lý chúng một cách an toàn để chương trình không bị dừng.

  • Cú pháp:

    C#

     
    try
    {
        // Đặt mã lệnh CÓ NGUY CƠ gây lỗi vào đây
        Console.Write("Nhap so a = ");
        int a = int.Parse(Console.ReadLine());
    
        Console.Write("Nhap so b = ");
        int b = int.Parse(Console.ReadLine());
    
        double thuong = (double)a / b;
        Console.WriteLine("Thuong = " + thuong);
    }
    catch (FormatException) // Bắt lỗi nhập sai định dạng (ví dụ: nhập chữ)
    {
        Console.WriteLine("Lỗi: Bạn phải nhập số!");
    }
    catch (DivideByZeroException) // Bắt lỗi chia cho 0
    {
        Console.WriteLine("Lỗi: Không thể chia cho 0!");
    }
    catch (Exception ex) // Bắt tất cả các lỗi khác
    {
        Console.WriteLine("Có lỗi không xác định: " + ex.Message);
    }
    finally
    {
        // Khối này LUÔN LUÔN được thực thi (dù có lỗi hay không)
        Console.WriteLine("Kết thúc chương trình tính toán.");
    }
    

4.6. Sử dụng Debugger (Trình gỡ lỗi)

Đây là kỹ năng quan trọng nhất của lập trình viên.

  • Breakpoint (Điểm dừng): Nhấp vào lề trái của dòng code (hoặc nhấn F9). Khi chạy ở chế độ Debug (F5), chương trình sẽ dừng lại ngay trước khi thực thi dòng đó.

  • Các phím điều khiển khi dừng:

    • F10 (Step Over): Chạy dòng lệnh hiện tại và đi tới dòng tiếp theo. Nếu dòng hiện tại là một lời gọi hàm, nó sẽ chạy cả hàm đó và dừng ở dòng sau.

    • F11 (Step Into): Nếu dòng hiện tại là một lời gọi hàm, nó sẽ đi vào bên trong hàm đó và dừng ở dòng đầu tiên của hàm.

    • Shift + F11 (Step Out): Chạy nốt phần còn lại của hàm hiện tại và dừng ở dòng lệnh đã gọi nó.

  • Cửa sổ theo dõi (Watch/Locals/Autos): Khi dừng tại Breakpoint, bạn có thể xem giá trị của tất cả các biến tại thời điểm đó.

Bài tập 4.1: Kiểm tra chẵn lẻ (Dùng if%)

  • Viết chương trình Console cho phép người dùng nhập 1 số nguyên.

  • Sử dụng try...catch để bắt lỗi nếu người dùng nhập không phải là số.

  • Sử dụng if và toán tử % (chia lấy dư) để kiểm tra xem số đó là chẵn hay lẻ và in ra màn hình.

Hướng dẫn

Bước 1: Tạo dự án

  1. Mở Visual Studio 2008.

  2. Tạo một dự án Console Application mới (File -> New -> Project…).

  3. Đặt tên (Name) là: BaiTap4_ChanLe.

  4. Nhấn OK.

Bước 2: Viết mã nguồn (Chi tiết từng bước)

Mở tệp Program.cs. Chúng ta sẽ xây dựng code từng phần:

2.1. Chuẩn bị “bộ khung”

  • gõ “bộ khung” cơ bản:

    C#
     
    using System;
    
    namespace BaiTap4_ChanLe
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Chúng ta sẽ viết code vào đây
            }
        }
    }
    

2.2. Xây dựng khối try...catch...finally

  • Mục tiêu: Lệnh int.Parse() sẽ bị “crash” nếu người dùng nhập chữ. Chúng ta phải bọc code trong try...catch để bắt lỗi này.

  • Viết vào bên trong Main:

    C#
    try
    {
        // 1. Đặt code có nguy cơ gây lỗi vào đây
    }
    catch (FormatException) // Chỉ bắt lỗi sai định dạng (nhập chữ thay vì số)
    {
        // 2. Xử lý nếu có lỗi
    }
    finally
    {
        // 3. Code này LUÔN LUÔN chạy, dù có lỗi hay không
        // Dùng để dừng màn hình
    }
    

2.3. Viết code trong khối try (Phần xử lý chính)

  • Viết vào bên trong try { ... }:

    C#
    // Yêu cầu người dùng nhập số
    Console.Write("Vui long nhap mot so nguyen: ");
    
    // Đọc chuỗi và chuyển (parse) sang số nguyên
    int so = int.Parse(Console.ReadLine());
    
    // --- PHẦN LOGIC QUAN TRỌNG ---
    // Toán tử % (chia lấy dư)
    // Nếu so % 2 == 0 (một số chia 2 dư 0) thì đó là số chẵn
    if (so % 2 == 0)
    {
        // In kết quả
        Console.WriteLine("So {0} la SO CHAN.", so);
    }
    else // Ngược lại (chia 2 dư 1)
    {
        // In kết quả
        Console.WriteLine("So {0} la SO LE.", so);
    }
    

2.4. Viết code trong khối catch (Xử lý lỗi)

  • Viết vào bên trong catch (FormatException) { ... }:

    C#
    Console.WriteLine("Loi: Ban da nhap khong phai la so nguyen!");
    

2.5. Viết code trong khối finally (Dừng màn hình)

  • Viết vào bên trong finally { ... }:

    C#
     
    Console.WriteLine("\nNhan phim bat ky de thoat.");
    Console.ReadKey();
    
Bước 3: Chạy và kiểm thử
  1. Nhấn F5 để chạy.

  2. Trường hợp 1 (Chẵn):10 -> Nhấn Enter. Kết quả phải là So 10 la SO CHAN.

  3. Trường hợp 2 (Lẻ): Chạy lại (F5). Gõ 7 -> Nhấn Enter. Kết quả phải là So 7 la SO LE.

  4. Trường hợp 3 (Lỗi): Chạy lại (F5). Gõ abc -> Nhấn Enter. Kết quả phải là Loi: Ban da nhap khong phai la so nguyen!

Bài tập 4.2: Tính điểm trung bình (Dùng forArray)

Mục tiêu: Sử dụng Mảng (Array) để lưu trữ một danh sách giá trị và dùng vòng lặp for để duyệt mảng đó.

  • Viết chương trình cho phép nhập điểm của 5 môn học (lưu vào một mảng int[] diem = new int[5];).

  • Dùng vòng lặp for để yêu cầu người dùng nhập 5 lần.

  • Dùng một vòng lặp for (hoặc foreach) khác để tính tổng điểm.

  • In ra điểm trung bình.

Hướng dẫn

Bước 1: Tạo dự án

  1. Tạo một dự án Console Application mới.

  2. Đặt tên (Name) là: BaiTap4_DiemTrungBinh.

  3. Nhấn OK.

Bước 2: Viết mã nguồn (Chi tiết từng bước)

Mở tệp Program.cs. Chúng ta sẽ viết code từng phần.

2.1. Chuẩn bị “bộ khung”

  • Gõ “bộ khung” cơ bản:

    C#
     
    using System;
    
    namespace BaiTap4_DiemTrungBinh
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Code sẽ được viết vào đây
            }
        }
    }
    

2.2. Khai báo mảng (Array)

  • Mục tiêu: Tạo 5 “ô nhớ” để lưu 5 điểm số.

  • Viết vào bên trong Main:

    C#
     
    // 1. Khai báo mảng tên 'diemSo' có 5 phần tử kiểu số nguyên
    int[] diemSo = new int[5];
    

2.3. Vòng lặp for thứ nhất (Nhập điểm)

  • Mục tiêu: Lặp lại hành động “hỏi điểm” 5 lần và lưu vào 5 ô nhớ.

  • Viết ngay bên dưới dòng trên:

    C#
     
    // 2. Dùng vòng lặp for để nhập dữ liệu
    Console.WriteLine("--- NHAP DIEM 5 MON HOC ---");
    
    // i = 0: Bắt đầu đếm từ 0
    // i < 5: Lặp lại chừng nào i còn nhỏ hơn 5 (tức là 0, 1, 2, 3, 4 -> đủ 5 lần)
    // i++: Tăng i lên 1 sau mỗi lần lặp
    for (int i = 0; i < 5; i++)
    {
        // i bắt đầu từ 0, nên ta +1 để hiển thị (Môn 1, Môn 2...)
        Console.Write("Nhap diem mon thu {0}: ", i + 1);
    
        // Lưu điểm vào mảng tại vị trí i (ví dụ: diemSo[0], diemSo[1]...)
        diemSo[i] = int.Parse(Console.ReadLine());
    }
    

2.4. Vòng lặp for thứ hai (Tính tổng)

  • Mục tiêu: Duyệt lại 5 ô nhớ đã lưu, cộng dồn giá trị của chúng.

  • Viết ngay bên dưới vòng lặp for ở trên:

    C#
     
    // 3. Tính tổng
    // Khai báo biến tổng, bắt đầu bằng 0
    // Dùng 'double' để tí nữa chia cho ra số lẻ (ví dụ 8.5)
    double tong = 0; 
    
    // Dùng vòng lặp for để duyệt qua mảng
    // 'diemSo.Length' là một thuộc tính, nó tự biết mảng này có 5 phần tử
    for (int i = 0; i < diemSo.Length; i++)
    {
        // Cộng dồn: Lấy giá trị cũ của 'tong', cộng thêm điểm ở vị trí i
        tong = tong + diemSo[i]; 
        // Dòng trên có thể viết tắt là: tong += diemSo[i];
    }
    

2.5. Tính trung bình và Xuất kết quả

  • Mục tiêu: Lấy tổng chia cho 5 và in ra màn hình.

  • Viết ngay bên dưới vòng lặp for ở trên:

    C#
     
    // 4. Tính điểm trung bình và In kết quả
    double diemTrungBinh = tong / 5; // Hoặc: tong / diemSo.Length
    
    Console.WriteLine("\n--- KET QUA ---"); // \n để xuống dòng
    Console.WriteLine("Tong diem 5 mon la: " + tong);
    Console.WriteLine("Diem trung binh la: " + diemTrungBinh);
    

2.6. Dừng màn hình

  • Viết làm dòng cuối cùng (trước dấu } của Main):

    C#
     
    Console.ReadKey();

Bài tập 4.3: Menu đơn giản (Dùng do...whileswitch)

Mục tiêu: Kết hợp vòng lặp do...while (để lặp lại menu) và cấu trúc switch...case (để xử lý lựa chọn). Đây là cấu trúc rất phổ biến.

  • Viết chương trình hiển thị 1 menu:

    --- MENU ---
    1. Tính tổng 2 số
    2. Tính hiệu 2 số
    3. Thoát
    Chọn chức năng:
    
  • Sử dụng vòng lặp do...while để lặp lại menu cho đến khi người dùng chọn 3.

  • Sử dụng switch...case để xử lý lựa chọn của người dùng.

  • Sử dụng try...catch khi người dùng nhập lựa chọn (đề phòng nhập chữ).

Hướng dẫn

Bước 1: Tạo dự án

  1. Tạo một dự án Console Application mới.

  2. Đặt tên (Name) là: BaiTap4_Menu.

  3. Nhấn OK.

Bước 2: Viết mã nguồn (Chi tiết từng bước)

Mở tệp Program.cs. Chúng ta sẽ tổ chức code thành nhiều hàm (phương thức) cho khoa học.

2.1. Chuẩn bị “bộ khung”

  • Xóa mã cũ và gõ “bộ khung” (lần này chúng ta sẽ tạo thêm hàm bên ngoài Main):

    C#
     
    using System;
    
    namespace BaiTap4_Menu
    {
        class Program
        {
            // === HÀM CHÍNH (MAIN) ===
            static void Main(string[] args)
            {
                // Code điều hướng menu sẽ ở đây
            }
    
            // === CÁC HÀM CHỨC NĂNG PHỤ ===
    
            // Hàm này chỉ để in Menu
            static void InMenu()
            {
                // Code in menu sẽ ở đây
            }
    
            // Hàm chức năng cho Case 1
            static void TinhTong()
            {
                // Code tính tổng sẽ ở đây
            }
    
            // Hàm chức năng cho Case 2
            static void TinhHieu()
            {
                // Code tính hiệu sẽ ở đây
            }
        }
    }
    

2.2. Viết code cho các hàm phụ (Hàm chức năng)

  • Mục tiêu: Hoàn thành các hàm InMenu, TinhTong, TinhHieu trước.

  • Viết code cho InMenu:

    C#
    static void InMenu()
    {
        Console.Clear(); // Xóa màn hình cho sạch
        Console.WriteLine("--- MENU CHUONG TRINH ---");
        Console.WriteLine("1. Tinh Tong 2 so");
        Console.WriteLine("2. Tinh Hieu 2 so");
        Console.WriteLine("3. Thoat chuong trinh");
        Console.Write("Vui long chon chuc nang (1-3): ");
    }
    
  • Viết code cho TinhTongTinhHieu (có try...catch riêng):

    C#
     
    static void TinhTong()
    {
        try
        {
            Console.WriteLine("\n--- Chuc nang 1: Tinh Tong ---");
            Console.Write("Nhap so a = ");
            int a = int.Parse(Console.ReadLine());
            Console.Write("Nhap so b = ");
            int b = int.Parse(Console.ReadLine());
            Console.WriteLine("=> KET QUA: {0} + {1} = {2}", a, b, (a + b));
        }
        catch (FormatException)
        {
            Console.WriteLine("Loi: Ban phai nhap so nguyen!");
        }
    }
    
    static void TinhHieu()
    {
        try
        {
            Console.WriteLine("\n--- Chuc nang 2: Tinh Hieu ---");
            Console.Write("Nhap so a = ");
            int a = int.Parse(Console.ReadLine());
            Console.Write("Nhap so b = ");
            int b = int.Parse(Console.ReadLine());
            Console.WriteLine("=> KET QUA: {0} - {1} = {2}", a, b, (a - b));
        }
        catch (FormatException)
        {
            Console.WriteLine("Loi: Ban phai nhap so nguyen!");
        }
    }
    

2.3. Viết code cho Main (Phần điều hướng)

  • Mục tiêu: Tạo vòng lặp do...while để gọi các hàm trên.

  • Viết vào bên trong static void Main(string[] args) { ... }:

    C#
     
    int luaChon = 0; // Biến lưu lựa chọn, đặt bên ngoài vòng lặp
    
    // Vòng lặp do...while
    // Luôn chạy 1 lần (in menu), sau đó kiểm tra điều kiện (while)
    do
    {
        // 1. In menu ra màn hình (gọi hàm InMenu)
        InMenu();
    
        // 2. Lấy lựa chọn của người dùng (có bẫy lỗi)
        try
        {
            luaChon = int.Parse(Console.ReadLine());
        }
        catch
        {
            Console.WriteLine("Loi! Phai nhap mot so (1-3).");
            luaChon = 0; // Gán bằng 0 để nó tiếp tục lặp
            continue;    // Bỏ qua switch, quay lại đầu vòng lặp
        }
    
        // 3. Xử lý lựa chọn bằng switch...case
        switch (luaChon)
        {
            case 1:
                TinhTong(); // Gọi hàm tính tổng
                break;      // Ngắt case 1
            case 2:
                TinhHieu(); // Gọi hàm tính hiệu
                break;      // Ngắt case 2
            case 3:
                Console.WriteLine("Tam biet! Hen gap lai.");
                break;      // Ngắt case 3
            default: // Bất kỳ số nào khác 1, 2, 3
                Console.WriteLine("Lua chon khong hop le. Vui long chon lai.");
                break;
        }
    
        // Yêu cầu nhấn phím để quay lại menu (cho dễ nhìn)
        if (luaChon != 3) // Nếu chưa thoát
        {
            Console.WriteLine("\nNhan phim bat ky de quay ve Menu...");
            Console.ReadKey();
        }
    
    } while (luaChon != 3); // Lặp lại nếu người dùng CHƯA chọn số 3 (Thoát)
    
    // Dừng lần cuối trước khi tắt hẳn
    Console.WriteLine("Nhan phim bat ky de ket thuc.");
    Console.ReadKey();
    
 

Bước 3: Chạy và kiểm thử

  1. Nhấn F5 để chạy.

  2. Thử Chức năng 1:1 -> Enter. Nhập 105. Kết quả phải là 15. Sau đó quay lại menu.

  3. Thử Lỗi nhập chữ: Tại menu, gõ abc -> Enter. Phải báo lỗi Phai nhap mot so và quay lại menu.

  4. Thử Lỗi sai số: Tại menu, gõ 5 -> Enter. Phải báo Lua chon khong hop le và quay lại menu.

  5. Thử Thoát:3 -> Enter. Chương trình phải in “Tam biet!” và kết thúc.

Bài tập 4.4: Sử dụng Debugger

Mục tiêu: Đây là kỹ năng quan trọng nhất của lập trình viên. Bạn không viết code mới, mà học cách “theo dõi” chương trình chạy để tìm lỗi. Chúng ta sẽ dùng lại Bài tập 4.2 (Tính điểm trung bình) để thực hành.

    • Thực hiện Bài tập 4.2.
    • Đặt một Breakpoint (F9) ngay tại dòng bắt đầu vòng lặp for tính tổng.
    • Chạy chương trình (F5) và nhập 5 điểm số.
    • Khi chương trình dừng lại, quan sát giá trị của các biến (biến i, biến tong, mảng diem) thay đổi như thế nào sau mỗi lần nhấn F10.

Hướng dẫn

Bước 1: Mở dự án BaiTap4_DiemTrungBinh

  1. Đóng dự án Menu hiện tại.

  2. Mở lại dự án BaiTap4_DiemTrungBinh (từ Bài tập 4.2).

  3. Mở tệp Program.cs.

Bước 2: Đặt Breakpoint (Điểm dừng) (Chi tiết)

  1. Tìm đến dòng code bắt đầu vòng lặp for thứ hai (vòng lặp dùng để tính tổng). Dòng đó là: for (int i = 0; i < diemSo.Length; i++)

  2. Di chuột đến lề màu xám (Margin) ở phía bên trái của dòng code đó.

  3. Nhấp chuột 1 cái. Một chấm tròn màu đỏ (Breakpoint) sẽ xuất hiện.

    • (Hoặc) Bạn có thể đặt con trỏ vào dòng đó và nhấn phím F9.

  • Ý nghĩa: Bạn vừa ra lệnh cho Visual Studio: “Khi chạy, hãy ‘đóng băng’ chương trình ngay tại vị trí này để tôi kiểm tra.”

Bước 3: Chạy ở chế độ Debug

  1. Nhấn phím F5 (hoặc nút Start Debugging <img>).

  2. Chương trình sẽ chạy. Cửa sổ Console hiện ra, yêu cầu bạn nhập 5 điểm.

  3. Hãy nhập 5 điểm số (ví dụ: 10, 8, 9, 7, 5).

  4. Ngay sau khi bạn nhập điểm thứ 5 và nhấn Enter, cửa sổ Console sẽ “treo”, và Visual Studio sẽ sáng lên.

  5. Bạn sẽ thấy một mũi tên màu vàng <img> chỉ ngay vào dòng code màu đỏ (nơi bạn đặt Breakpoint). Chương trình đã “đóng băng” tại đây.

Bước 4: “Bước” qua code (Step Over) (Chi tiết)

  1. Mở cửa sổ Locals:

    • Hãy nhìn xuống cửa sổ Locals (Thường ở góc dưới bên trái).

    • Nếu không thấy, vào menu Debug -> Windows -> Locals.

    • Cửa sổ này hiển thị giá trị của tất cả các biến hiện tại.

    • Quan sát: Bạn sẽ thấy mảng diemSo (nhấp vào dấu + để xem 5 giá trị bạn vừa nhập). Bạn thấy tong đang bằng 0. Biến i (của vòng lặp tính tổng) chưa tồn tại.

  2. “Bước” đầu tiên (F10):

    • Nhấn phím F10 (tên là Step Over – Bước qua).

    • Quan sát: Mũi tên vàng di chuyển xuống dòng tong += diemSo[i];. Trong cửa sổ Locals, i giờ đã có giá trị là 0.

  3. “Bước” thứ hai (F10):

    • Nhấn phím F10 một lần nữa.

    • Quan sát: Mũi tên vàng quay lại dòng for. Trong cửa sổ Locals, tong bây giờ đã có giá trị là 10 (lấy từ diemSo[0]).

  4. “Bước” thứ ba (F10):

    • Nhấn phím F10 một lần nữa.

    • Quan sát: Mũi tên vàng vào dòng tong.... Biến i giờ bằng 1.

  5. “Bước” thứ tư (F10):

    • Nhấn phím F10 một lần nữa.

    • Quan sát: Mũi tên vàng quay lại for. Biến tong giờ là 18 (vì 10 + 8).

  6. Tiếp tục “bước”:

    • Tiếp tục nhấn F10… Bạn đang “đi bộ” qua từng bước của vòng lặp và tận mắt thấy cách biến i tăng lên và biến tong được cộng dồn.

Bước 5: Tiếp tục chạy (Resume)

Sau khi bạn đã hiểu cách vòng lặp chạy, bạn không cần nhấn F10 nữa.

  1. Hãy nhấn phím F5 (lần nữa).

  2. Chương trình sẽ “hết đóng băng” và chạy nốt phần còn lại.

  3. Cửa sổ Console sẽ hiển thị kết quả cuối cùng.