1. Phát biểu nào sau đây mô tả chính xác nhất mối quan hệ giữa thuật toán và chương trình máy tính?
A. Thuật toán và chương trình máy tính là hai khái niệm hoàn toàn khác nhau và không liên quan.
B. Chương trình máy tính là một cách biểu diễn thuật toán bằng ngôn ngữ mà máy tính có thể hiểu và thực thi.
C. Thuật toán là một loại chương trình máy tính đặc biệt.
D. Chương trình máy tính là một bước trung gian để tạo ra thuật toán.
2. Khi chúng ta nói một thuật toán có tính đúng đắn, điều đó có nghĩa là gì?
A. Thuật toán được viết bằng ngôn ngữ dễ hiểu nhất.
B. Thuật toán luôn chạy nhanh nhất có thể.
C. Thuật toán luôn đưa ra kết quả đúng với yêu cầu của bài toán với mọi dữ liệu đầu vào hợp lệ.
D. Thuật toán có thể xử lý mọi loại dữ liệu.
3. Đâu là một ví dụ về đầu vào (input) cho một thuật toán tính chu vi hình tròn?
A. Giá trị chu vi hình tròn.
B. Công thức tính chu vi (C = 2 * pi * r).
C. Bán kính (r) của hình tròn.
D. Giá trị của số pi (π).
4. Đâu không phải là đặc điểm cơ bản của một thuật toán?
A. Tính đúng đắn (Correctness): Thuật toán phải cho ra kết quả đúng với yêu cầu bài toán.
B. Tính không rõ ràng (Ambiguity): Mỗi bước của thuật toán phải được phát biểu tường minh, dễ hiểu, không gây nhầm lẫn.
C. Tính hữu hạn (Finiteness): Thuật toán phải thực hiện xong trong một số bước hữu hạn.
D. Tính phổ dụng (Generality): Thuật toán có thể áp dụng cho nhiều trường hợp khác nhau của cùng một lớp bài toán.
5. Trong một thuật toán, thao tác gán giá trị (assignment) ví dụ: `x = 5` có ý nghĩa gì?
A. Kiểm tra xem biến x có bằng 5 hay không.
B. Lưu trữ giá trị 5 vào biến x.
C. Tăng giá trị của biến x lên 5 đơn vị.
D. So sánh biến x với giá trị 5.
6. Một chương trình máy tính là gì?
A. Là một thiết bị phần cứng để xử lý thông tin.
B. Là một chuỗi các lệnh được viết bằng ngôn ngữ lập trình để máy tính thực hiện.
C. Là một hệ điều hành quản lý tài nguyên máy tính.
D. Là một tệp văn bản chứa mô tả bài toán.
7. Đâu là một ví dụ về ngôn ngữ tự nhiên được sử dụng để mô tả thuật toán một cách phi hình thức?
A. Pseudocode (Mã giả).
B. Flowchart (Sơ đồ khối).
C. Tiếng Việt hoặc Tiếng Anh thông thường.
D. Ngôn ngữ máy (Machine Language).
8. Nếu một thuật toán có khả năng thực hiện các hành động khác nhau tùy thuộc vào điều kiện nào đó, thì điều này thể hiện đặc điểm nào?
A. Tính lặp.
B. Tính lựa chọn (hoặc rẽ nhánh).
C. Tính hữu hạn.
D. Tính phổ dụng.
9. Ngôn ngữ lập trình nào sau đây thường được sử dụng để viết chương trình máy tính, có cú pháp gần gũi với ngôn ngữ tự nhiên và dễ đọc?
A. Assembly Language
B. Machine Language
C. High-level Language (ví dụ: Python, Java, C++)
D. Low-level Language
10. Một thuật toán cho phép thực hiện lặp đi lặp lại một nhóm lệnh cho đến khi một điều kiện nhất định được thỏa mãn. Điều này thể hiện đặc điểm nào?
A. Tính lựa chọn.
B. Tính trình tự.
C. Tính đúng đắn.
D. Tính lặp (hoặc tuần hoàn).
11. Cho một bài toán tìm số lớn nhất trong ba số nguyên dương a, b, c. Đâu là cách mô tả thuật toán đúng về mặt logic và thứ tự thực hiện?
A. Bước 1: Nhập a, b, c. Bước 2: Nếu a > b thì so sánh a với c. Nếu a > c thì a là lớn nhất. Nếu không thì c là lớn nhất. Bước 3: Nếu a < b thì so sánh b với c. Nếu b > c thì b là lớn nhất. Nếu không thì c là lớn nhất. Bước 4: Xuất kết quả.
B. Bước 1: Nhập a, b, c. Bước 2: Khởi tạo biến max = a. Bước 3: Nếu b > max thì gán max = b. Bước 4: Nếu c > max thì gán max = c. Bước 5: Xuất max.
C. Bước 1: Nhập a, b, c. Bước 2: So sánh a với b. Bước 3: So sánh b với c. Bước 4: So sánh a với c. Bước 5: Kết luận số lớn nhất.
D. Bước 1: Nhập a, b, c. Bước 2: So sánh a với b, rồi so sánh kết quả với c, cuối cùng so sánh a với c để tìm ra số lớn nhất.
12. Khi so sánh hai thuật toán cùng giải quyết một bài toán, nếu thuật toán A cần 100 bước và thuật toán B cần 1000 bước với cùng lượng dữ liệu đầu vào, thì thuật toán nào có khả năng hiệu quả hơn về mặt thời gian?
A. Thuật toán B, vì nó có nhiều bước hơn.
B. Thuật toán A, vì nó cần ít bước thực hiện hơn.
C. Không thể kết luận nếu không biết lượng bộ nhớ sử dụng.
D. Cả hai thuật toán có hiệu quả như nhau.
13. Đâu là một ví dụ về vòng lặp vô hạn (infinite loop) có thể xảy ra trong một chương trình máy tính?
A. Một vòng lặp chỉ thực hiện 10 lần rồi dừng.
B. Một vòng lặp có điều kiện dừng luôn sai, khiến vòng lặp không bao giờ kết thúc.
C. Một vòng lặp thực hiện một phép tính đơn giản.
D. Một vòng lặp được thiết kế để chạy đúng 5 lần.
14. Nếu một thuật toán để sắp xếp một danh sách các số được viết ra, và sau đó bạn thử nghiệm nó với một danh sách rỗng, một danh sách có một phần tử, và một danh sách có nhiều phần tử, bạn đang thực hiện loại kiểm thử nào?
A. Kiểm thử đơn vị (Unit Testing).
B. Kiểm thử tích hợp (Integration Testing).
C. Kiểm thử biên (Boundary Testing) và kiểm thử trường hợp thông thường.
D. Kiểm thử hiệu năng (Performance Testing).
15. Khi một thuật toán được dịch sang ngôn ngữ máy tính để máy tính có thể hiểu và thực thi, quá trình này gọi là gì?
A. Phân tích thuật toán.
B. Lập trình.
C. Kiểm thử chương trình.
D. Thiết kế giao diện.
16. Đâu là một ví dụ về đầu ra (output) cho một thuật toán tìm ước chung lớn nhất (ƯCLN) của hai số nguyên dương a và b?
A. Hai số nguyên dương a và b.
B. Các ước số của a và b.
C. Giá trị ƯCLN của a và b.
D. Các bước thực hiện thuật toán Euclid.
17. Khi một thuật toán có nhiều bước xử lý phức tạp, việc sử dụng hàm hoặc chương trình con (subroutine/function) giúp:
A. Làm cho thuật toán trở nên khó hiểu hơn.
B. Chia nhỏ bài toán lớn thành các bài toán con dễ quản lý, giúp tái sử dụng và làm cho thuật toán dễ đọc, dễ bảo trì hơn.
C. Tăng số lượng bước thực hiện của thuật toán.
D. Chỉ cho phép thực hiện các phép tính số học.
18. Phát biểu nào sau đây mô tả đúng vai trò của biến trong một thuật toán hoặc chương trình máy tính?
A. Biến là một lệnh cố định không thay đổi giá trị.
B. Biến là một tên đại diện cho một vùng nhớ có thể lưu trữ và thay đổi giá trị trong quá trình thực thi.
C. Biến chỉ dùng để lưu trữ kết quả cuối cùng của thuật toán.
D. Biến là một phần của ngôn ngữ lập trình, không liên quan đến thuật toán.
19. Việc hiểu rõ yêu cầu của bài toán, xác định dữ liệu đầu vào, đầu ra và các bước xử lý để giải quyết bài toán là giai đoạn nào trong quá trình làm việc với thuật toán?
A. Kiểm thử thuật toán.
B. Viết mã chương trình.
C. Phân tích và thiết kế thuật toán.
D. Gỡ lỗi chương trình.
20. Pseudocode (Mã giả) được sử dụng trong thuật toán vì nó:
A. Là ngôn ngữ duy nhất máy tính có thể hiểu.
B. Cho phép mô tả thuật toán một cách rõ ràng, có cấu trúc nhưng không bị ràng buộc bởi cú pháp của một ngôn ngữ lập trình cụ thể.
C. Chỉ có thể được viết bằng tiếng Anh.
D. Là một dạng hình ảnh trực quan hóa thuật toán.
21. Trong một thuật toán, các lệnh được thực hiện tuần tự theo một trật tự nhất định. Điều này thể hiện đặc điểm nào của thuật toán?
A. Tính hữu hạn.
B. Tính rõ ràng.
C. Tính trình tự.
D. Tính đúng đắn.
22. Flowchart (Sơ đồ khối) là một cách biểu diễn thuật toán bằng cách sử dụng:
A. Các câu lệnh văn bản.
B. Các hình khối và mũi tên.
C. Bảng biểu và công thức.
D. Đoạn mã chương trình.
23. Trong Tin học, thuật toán là một dãy hữu hạn các thao tác cần thực hiện, theo một trình tự nhất định, để giải quyết một lớp bài toán hoặc để đạt được một mục đích nào đó. Phát biểu nào sau đây mô tả đúng bản chất của hữu hạn trong định nghĩa thuật toán?
A. Thuật toán phải thực hiện một số bước có thể đếm được và kết thúc sau một số bước hữu hạn.
B. Thuật toán chỉ cần thực hiện một số bước nhất định, không quan trọng việc có kết thúc hay không.
C. Thuật toán có thể thực hiện vô số bước miễn là nó giải quyết được bài toán.
D. Tính hữu hạn chỉ áp dụng cho các thuật toán đơn giản, không áp dụng cho các thuật toán phức tạp.
24. Một thuật toán hiệu quả là thuật toán:
A. Chỉ cần ít bước nhất có thể.
B. Sử dụng ít bộ nhớ nhất có thể.
C. Cả hai yếu tố: ít bước thực hiện (thời gian) và ít bộ nhớ sử dụng.
D. Có thể thực hiện trên mọi loại máy tính.
25. Đâu là một ví dụ về hoạt động gỡ lỗi (debugging) trong quá trình phát triển chương trình máy tính dựa trên thuật toán?
A. Viết thêm các tính năng mới cho chương trình.
B. Tìm và sửa các lỗi sai trong mã nguồn khiến chương trình hoạt động không đúng như mong đợi.
C. Thiết kế giao diện người dùng.
D. Tối ưu hóa tốc độ thực thi của thuật toán.