1. Khai báo mảng hai chiều trong Pascal: `var matrix: array[1..3, 1..4] of Real;` có bao nhiêu phần tử?
2. Đâu là đặc điểm của mảng động so với mảng tĩnh trong lập trình?
A. Kích thước của mảng động có thể thay đổi trong quá trình thực thi chương trình.
B. Mảng động luôn có hiệu suất truy cập nhanh hơn mảng tĩnh.
C. Mảng động không cần khai báo kiểu dữ liệu.
D. Mảng tĩnh luôn chiếm ít bộ nhớ hơn mảng động.
3. Trong một bài toán sắp xếp mảng, nếu ta muốn sắp xếp theo thứ tự giảm dần, ta cần điều chỉnh điều kiện so sánh như thế nào so với sắp xếp tăng dần?
A. Thay đổi điều kiện so sánh từ `a > b` thành `a < b` (hoặc ngược lại tùy thuật toán).
B. Không cần thay đổi điều kiện, chỉ cần đảo ngược kết quả.
C. Phải sử dụng một thuật toán sắp xếp khác hoàn toàn.
D. Tăng gấp đôi số lần so sánh.
4. Đâu là một kỹ thuật dùng để duyệt qua tất cả các phần tử của mảng hai chiều?
A. Sử dụng hai vòng lặp lồng nhau, một cho hàng và một cho cột.
B. Sử dụng một vòng lặp duy nhất với chỉ số tổng.
C. Truy cập trực tiếp vào từng phần tử theo một trình tự ngẫu nhiên.
D. Chỉ duyệt qua các phần tử trên đường chéo chính.
5. Tại sao tìm kiếm nhị phân (Binary Search) hiệu quả hơn tìm kiếm tuần tự (Linear Search) trên mảng đã sắp xếp?
A. Tìm kiếm nhị phân loại bỏ một nửa không gian tìm kiếm ở mỗi bước.
B. Tìm kiếm tuần tự yêu cầu ít bộ nhớ hơn.
C. Tìm kiếm nhị phân không cần mảng đã sắp xếp.
D. Tìm kiếm tuần tự có thể tìm thấy phần tử ngay lập tức.
6. Đâu là một nhược điểm của việc sử dụng mảng một chiều với kích thước cố định?
A. Khó khăn trong việc thêm hoặc bớt phần tử nếu mảng đã đầy hoặc còn nhiều chỗ trống.
B. Tốc độ truy cập dữ liệu chậm hơn.
C. Không thể lưu trữ các phần tử cùng kiểu dữ liệu.
D. Yêu cầu bộ nhớ lớn hơn so với nhu cầu thực tế.
7. Đâu là điểm khác biệt cơ bản giữa mảng một chiều và mảng hai chiều về cấu trúc dữ liệu?
A. Mảng một chiều lưu trữ dữ liệu theo dạng danh sách tuyến tính, mảng hai chiều lưu trữ dữ liệu theo dạng bảng.
B. Mảng một chiều chỉ chứa các phần tử cùng kiểu, mảng hai chiều cho phép chứa các phần tử khác kiểu.
C. Mảng một chiều có thể truy cập ngẫu nhiên, mảng hai chiều chỉ có thể truy cập tuần tự.
D. Mảng một chiều có giới hạn kích thước cố định, mảng hai chiều có thể thay đổi kích thước động.
8. Trong lập trình Pascal, khai báo `var table: array[1..5, 1..5] of Char;` tạo ra một mảng có thể coi như là gì?
A. Một ma trận vuông 5x5.
B. Một danh sách 5 ký tự.
C. Một chuỗi ký tự có độ dài 25.
D. Một tập hợp các biến ký tự độc lập.
9. Đoạn mã C++ sau: `int numbers[3][2] = {{1, 2}, {3, 4}, {5, 6}}; int val = numbers[1][0];` Giá trị của biến `val` là bao nhiêu?
10. Nếu bạn cần lưu trữ thông tin điểm số của 30 học sinh trong một lớp, cách biểu diễn dữ liệu hiệu quả nhất là gì?
A. Một mảng một chiều có 30 phần tử kiểu số nguyên hoặc số thực.
B. Một mảng hai chiều có 30 hàng và 1 cột.
C. 30 biến riêng lẻ cho mỗi học sinh.
D. Một cấu trúc dữ liệu phức tạp hơn.
11. Khi thực hiện phép toán cộng hai ma trận A và B có kích thước khác nhau, điều gì sẽ xảy ra?
A. Phép toán không thực hiện được và sẽ báo lỗi.
B. Chương trình sẽ tự động điều chỉnh kích thước ma trận nhỏ hơn cho khớp với ma trận lớn hơn.
C. Chương trình sẽ bỏ qua các phần tử thừa của ma trận lớn hơn.
D. Phép cộng sẽ được thực hiện trên phần giao nhau của hai ma trận.
12. Cho đoạn chương trình sau (Ngôn ngữ C++): `int arr[5] = {10, 20, 30, 40, 50}; int index = 2; cout << arr[index];` Kết quả in ra màn hình là gì?
A. 30
B. 20
C. 40
D. Lỗi biên dịch
13. Cho mảng `data: array of integer` trong ngôn ngữ Delphi/Free Pascal. Để lấy số lượng phần tử của mảng, ta sử dụng hàm nào?
A. Length(data)
B. Size(data)
C. Count(data)
D. data.Length
14. Trong thuật toán sắp xếp nổi bọt (Bubble Sort), bước cơ bản nhất là gì?
A. So sánh hai phần tử liền kề và đổi chỗ nếu chúng sai thứ tự.
B. Tìm phần tử nhỏ nhất và đặt nó vào đầu mảng.
C. Chia mảng thành hai nửa và sắp xếp đệ quy.
D. Chọn một phần tử làm chốt và phân chia mảng.
15. Khi tìm kiếm một phần tử trong mảng một chiều chưa sắp xếp, phương pháp hiệu quả nhất là gì?
A. Tìm kiếm tuần tự (Linear Search).
B. Tìm kiếm nhị phân (Binary Search).
C. Tìm kiếm dựa trên băm (Hash Table Search).
D. Sử dụng hàm `find` có sẵn.
16. Để truy cập vào phần tử lớn nhất trong một mảng một chiều chưa sắp xếp, bạn cần làm gì?
A. Duyệt qua toàn bộ mảng, so sánh từng phần tử và lưu lại giá trị lớn nhất tìm được.
B. Truy cập vào phần tử cuối cùng của mảng.
C. Truy cập vào phần tử đầu tiên của mảng.
D. Không thể xác định nếu mảng chưa sắp xếp.
17. Tại sao việc khởi tạo giá trị cho mảng là quan trọng?
A. Để đảm bảo mảng chứa các giá trị hợp lệ và tránh lỗi khi truy cập các phần tử chưa được gán giá trị.
B. Để làm cho mảng có kích thước lớn hơn.
C. Để tăng tốc độ xử lý của chương trình.
D. Để thay đổi kiểu dữ liệu của mảng.
18. Nếu một mảng hai chiều có 5 hàng và 3 cột, làm thế nào để truy cập vào phần tử ở hàng cuối cùng và cột đầu tiên (giả sử chỉ số bắt đầu từ 1)?
A. Truy cập bằng chỉ số [5, 1]
B. Truy cập bằng chỉ số [4, 0]
C. Truy cập bằng chỉ số [5, 0]
D. Truy cập bằng chỉ số [4, 1]
19. Đâu là một trong những ứng dụng phổ biến của mảng hai chiều trong khoa học máy tính?
A. Lưu trữ và xử lý dữ liệu ảnh (pixel).
B. Quản lý danh sách người dùng đăng nhập.
C. Lưu trữ các lệnh của hệ điều hành.
D. Xây dựng cây tìm kiếm nhị phân.
20. Trong ngôn ngữ lập trình Pascal, khai báo mảng `var A: array[1..10] of Integer;` cho phép truy cập phần tử thứ 5 bằng cách nào sau đây?
A. A[5]
B. A(5)
C. A[4]
D. A(4)
21. Cho mảng một chiều `scores` kiểu integer có 10 phần tử. Để tính tổng tất cả các phần tử trong mảng, cách tiếp cận phổ biến nhất là gì?
A. Sử dụng vòng lặp duyệt qua từng phần tử và cộng dồn vào một biến tổng.
B. Truy cập trực tiếp vào phần tử cuối cùng của mảng.
C. Sử dụng hàm `sum()` có sẵn cho mảng.
D. Tính trung bình cộng rồi nhân với số phần tử.
22. Nếu một mảng hai chiều được khai báo là `int grid[3][4];`, thì `grid[2][3]` sẽ truy cập vào phần tử nào?
A. Phần tử ở hàng thứ 3 (chỉ số 2) và cột thứ 4 (chỉ số 3).
B. Phần tử ở hàng thứ 2 (chỉ số 1) và cột thứ 3 (chỉ số 2).
C. Phần tử ở hàng thứ 3 (chỉ số 2) và cột thứ 3 (chỉ số 2).
D. Phần tử ở hàng thứ 4 (chỉ số 3) và cột thứ 3 (chỉ số 2).
23. Trong lập trình, khi làm việc với mảng hai chiều, cách truy cập phần tử ở hàng thứ i và cột thứ j thường được biểu diễn như thế nào?
A. TenMang[i, j] hoặc TenMang[i][j]
B. TenMang(i, j)
C. TenMang.get(i, j)
D. TenMang[i+j]
24. Trong C++, khi khai báo `int matrix[2][3];`, kích thước bộ nhớ mà `matrix` chiếm dụng (giả sử kiểu `int` là 4 byte) là bao nhiêu byte?
25. Mục đích chính của việc sử dụng mảng hai chiều là gì?
A. Lưu trữ một tập hợp các phần tử có cùng kiểu dữ liệu theo cấu trúc bảng (hàng và cột).
B. Lưu trữ một tập hợp các phần tử có kiểu dữ liệu khác nhau.
C. Tăng tốc độ truy cập dữ liệu so với các cấu trúc dữ liệu khác.
D. Giảm dung lượng bộ nhớ cần thiết để lưu trữ dữ liệu.