1. Trong ngữ cảnh của mảng hai chiều, thuật ngữ hàng (row) đề cập đến:
A. Một tập hợp các phần tử được truy cập bằng chỉ số cột.
B. Một tập hợp các phần tử được truy cập bằng chỉ số hàng.
C. Một tập hợp các phần tử nằm trên cùng một đường ngang.
D. Một tập hợp các phần tử nằm trên cùng một đường dọc.
2. Cho một mảng hai chiều `matrix` với kích thước 3x4 (3 hàng, 4 cột). Nếu chỉ số hàng và cột đều bắt đầu từ 0, thì phần tử nằm ở hàng thứ 2 và cột thứ 3 sẽ được truy cập như thế nào?
A. matrix[3][2]
B. matrix[2][3]
C. matrix[3][3]
D. matrix[2][2]
3. Khi khai báo một mảng một chiều trong một ngôn ngữ lập trình, điều gì là quan trọng nhất cần xác định để đảm bảo việc sử dụng bộ nhớ hiệu quả và tránh lỗi truy cập?
A. Tên của mảng và giá trị của phần tử đầu tiên.
B. Kiểu dữ liệu của các phần tử và số lượng phần tử (kích thước).
C. Giá trị lớn nhất và nhỏ nhất có thể có trong mảng.
D. Ngôn ngữ lập trình sẽ sử dụng để biên dịch chương trình.
4. Trong các ngôn ngữ lập trình hiện đại, khi khai báo một mảng với kích thước cố định, việc cấp phát bộ nhớ cho mảng đó thường diễn ra ở giai đoạn nào?
A. Thời gian chạy (runtime).
B. Thời gian biên dịch (compile-time).
C. Thời gian liên kết (link-time).
D. Sau khi chương trình hoàn thành.
5. Nếu một mảng một chiều có 10 phần tử, và ta muốn truy cập phần tử thứ 8, chỉ số tương ứng sẽ là bao nhiêu, giả sử chỉ số bắt đầu từ 1?
6. Phát biểu nào sau đây là đúng về cách lưu trữ các phần tử trong mảng một chiều trong bộ nhớ?
A. Các phần tử được lưu trữ rải rác tại các địa chỉ bộ nhớ khác nhau một cách ngẫu nhiên.
B. Các phần tử được lưu trữ tại các ô nhớ liền kề nhau trong bộ nhớ.
C. Chỉ phần tử đầu tiên và cuối cùng được lưu trữ liền kề.
D. Vị trí lưu trữ phụ thuộc vào giá trị của các phần tử.
7. Trong lập trình, để tính tổng tất cả các phần tử của một mảng một chiều, ta thường sử dụng phương pháp nào?
A. Gán giá trị của phần tử đầu tiên cho biến tổng và dừng lại.
B. Duyệt qua từng phần tử của mảng, cộng giá trị của nó vào một biến tổng đã khởi tạo bằng 0.
C. Lấy giá trị của phần tử cuối cùng trừ đi giá trị của phần tử đầu tiên.
D. Sử dụng hàm tính trung bình nhân với số lượng phần tử.
8. Xét một mảng một chiều có tên `numbers` với các phần tử kiểu số nguyên: `[10, 20, 30, 40, 50]`. Nếu chỉ số của phần tử đầu tiên trong mảng là 0, thì phần tử có giá trị 30 sẽ được truy cập bằng chỉ số nào?
9. Phát biểu nào sau đây mô tả đúng nhất về out of bounds (vượt quá giới hạn) khi làm việc với mảng?
A. Cố gắng gán một giá trị không hợp lệ cho một phần tử mảng.
B. Truy cập một phần tử của mảng bằng một chỉ số nằm ngoài phạm vi chỉ số hợp lệ của mảng.
C. Sử dụng sai kiểu dữ liệu khi khai báo mảng.
D. Khối lượng dữ liệu cần lưu trữ lớn hơn kích thước mảng đã khai báo.
10. Trong lập trình, mảng một chiều được sử dụng để lưu trữ một tập hợp các phần tử cùng kiểu dữ liệu, có thể truy cập thông qua chỉ số (index). Phát biểu nào sau đây mô tả chính xác nhất bản chất của mảng một chiều?
A. Một tập hợp các biến không có liên quan với nhau, mỗi biến có thể có kiểu dữ liệu khác nhau.
B. Một cấu trúc dữ liệu tuyến tính, lưu trữ các phần tử cùng kiểu dữ liệu, có thể truy cập bằng một chỉ số duy nhất.
C. Một tập hợp các phần tử có thể thay đổi kích thước động trong quá trình thực thi chương trình.
D. Một cấu trúc dữ liệu phi tuyến tính, cho phép truy cập các phần tử bằng nhiều chỉ số khác nhau.
11. Nếu ta có một mảng một chiều `scores = [85, 92, 78, 95, 88]`, và muốn tìm xem có điểm nào bằng 90 hay không, hành động nào là hợp lý nhất?
A. So sánh `scores[0]` với 90.
B. Duyệt qua từng phần tử của mảng `scores` và kiểm tra xem có phần tử nào bằng 90.
C. Kiểm tra phần tử lớn nhất và nhỏ nhất của mảng.
D. Gán giá trị 90 cho phần tử cuối cùng của mảng và kiểm tra.
12. Phát biểu nào sau đây là SAI về việc tính trung bình cộng của các phần tử trong mảng một chiều?
A. Cần tính tổng tất cả các phần tử.
B. Cần biết số lượng phần tử trong mảng.
C. Trung bình cộng = (Tổng các phần tử) / (Số lượng phần tử).
D. Chỉ cần lấy giá trị của phần tử ở giữa mảng.
13. Khi duyệt qua tất cả các phần tử của một mảng hai chiều có kích thước M hàng và N cột, cách tiếp cận phổ biến và hiệu quả nhất là sử dụng cấu trúc lặp nào?
A. Một vòng lặp duy nhất duyệt từ phần tử đầu đến phần tử cuối của toàn bộ mảng.
B. Hai vòng lặp lồng nhau, một vòng lặp cho hàng và một vòng lặp cho cột.
C. Sử dụng đệ quy để truy cập từng phần tử.
D. Một vòng lặp với điều kiện kiểm tra cả chỉ số hàng và cột.
14. Phát biểu nào sau đây là SAI về mảng hai chiều?
A. Mảng hai chiều có thể được hình dung như một bảng hoặc ma trận với các hàng và cột.
B. Mỗi phần tử trong mảng hai chiều được xác định bởi một cặp chỉ số: chỉ số hàng và chỉ số cột.
C. Tất cả các hàng trong một mảng hai chiều phải có cùng số lượng phần tử.
D. Mảng hai chiều chỉ có thể lưu trữ các phần tử có kiểu dữ liệu số.
15. Khi làm việc với mảng hai chiều, thao tác truy cập phần tử yêu cầu bao nhiêu chỉ số?
A. Một chỉ số duy nhất.
B. Hai chỉ số, một cho hàng và một cho cột.
C. Ba chỉ số, một cho hàng, một cho cột và một cho độ sâu.
D. Số lượng chỉ số bằng số chiều của mảng.
16. Đâu là lợi thế chính của việc sử dụng mảng hai chiều so với việc sử dụng nhiều mảng một chiều riêng biệt để biểu diễn dữ liệu có cấu trúc dạng bảng?
A. Tiết kiệm bộ nhớ hơn do không lưu trữ thông tin về số hàng.
B. Cho phép truy cập các phần tử nhanh hơn bằng cách chỉ dùng một chỉ số.
C. Cung cấp cấu trúc dữ liệu rõ ràng, dễ quản lý và thao tác với dữ liệu có tính hai chiều.
D. Tự động xử lý việc thay đổi kích thước của bảng dữ liệu.
17. Một mảng hai chiều có thể được xem như là một tập hợp của các:
A. Mảng hai chiều khác.
B. Biến đơn lẻ.
C. Mảng một chiều.
D. Con trỏ đến các mảng khác.
18. Trong ngôn ngữ lập trình C++, khai báo mảng `int arr[5];` sẽ cấp phát bao nhiêu ô nhớ liên tiếp?
A. 5 byte
B. 20 byte (giả sử int là 4 byte)
C. 5 lần kích thước của kiểu int
D. Phụ thuộc vào hệ điều hành.
19. Trong lập trình, việc sắp xếp (sorting) một mảng một chiều thường liên quan đến việc thay đổi vị trí của các phần tử dựa trên một tiêu chí nào đó. Phát biểu nào sau đây là SAI về mục đích của sắp xếp mảng?
A. Tăng tốc độ tìm kiếm phần tử.
B. Giúp việc xử lý dữ liệu trở nên có tổ chức và dễ dàng hơn.
C. Giảm kích thước của mảng.
D. Hỗ trợ các thuật toán yêu cầu dữ liệu đã được sắp xếp.
20. Xét một mảng hai chiều `data_table` có kích thước 3x3. Có bao nhiêu phần tử trong mảng này?
21. Xét mảng một chiều `data = [1.5, 2.3, 4.1]`. Nếu `data[1]` là 2.3, thì `data[0]` có giá trị là bao nhiêu?
A. 1.5
B. 2.3
C. 4.1
D. Lỗi, chỉ số 0 không tồn tại.
22. Phát biểu nào sau đây mô tả đúng nhất về cách biểu diễn một ma trận vuông 3x3 bằng mảng hai chiều?
A. Một mảng một chiều có 3 phần tử.
B. Một mảng hai chiều có kích thước 3x3.
C. Ba mảng một chiều, mỗi mảng có 3 phần tử.
D. Tất cả các phương án trên đều đúng.
23. Nếu một mảng hai chiều `grid` có kích thước 2x2, với `grid[0][0] = 1`, `grid[0][1] = 2`, `grid[1][0] = 3`, `grid[1][1] = 4`. Giá trị của `grid[1][0]` là bao nhiêu?
24. Khi thực hiện phép gán `arr[i] = value;` cho một mảng một chiều `arr`, điều gì sẽ xảy ra nếu chỉ số `i` nằm ngoài phạm vi hợp lệ của mảng?
A. Chương trình sẽ tự động mở rộng kích thước mảng để chứa giá trị mới.
B. Giá trị `value` sẽ được gán vào một ô nhớ ngẫu nhiên gần đó.
C. Có thể gây ra lỗi tràn bộ đệm, làm hỏng dữ liệu hoặc gây sập chương trình.
D. Phép gán sẽ bị bỏ qua và không có thay đổi nào xảy ra.
25. Phát biểu nào sau đây là SAI về việc tìm phần tử lớn nhất trong một mảng một chiều?
A. Cần khởi tạo một biến để lưu giá trị lớn nhất, ban đầu có thể bằng giá trị của phần tử đầu tiên.
B. Duyệt qua từng phần tử của mảng, so sánh với giá trị lớn nhất hiện tại và cập nhật nếu tìm thấy phần tử lớn hơn.
C. Chỉ cần kiểm tra phần tử cuối cùng của mảng để xác định phần tử lớn nhất.
D. Sau khi duyệt hết mảng, biến lưu giá trị lớn nhất sẽ chứa kết quả.