1. Phát biểu nào sau đây mô tả đúng nhất về "biên dịch" (compilation) trong lập trình?
A. Là quá trình thực thi trực tiếp mã nguồn.
B. Là quá trình chuyển đổi mã nguồn viết bằng ngôn ngữ bậc cao thành mã máy mà máy tính có thể hiểu và thực thi.
C. Là quá trình tìm và sửa lỗi trong mã nguồn.
D. Là quá trình tạo giao diện người dùng.
2. Phát biểu nào sau đây là đúng về "mảng" (array) trong lập trình?
A. Là một cấu trúc dữ liệu chỉ lưu trữ được một phần tử duy nhất.
B. Là một tập hợp các phần tử có kiểu dữ liệu khác nhau, không có thứ tự.
C. Là một tập hợp các phần tử cùng kiểu dữ liệu, có thứ tự và được truy cập thông qua chỉ số (index).
D. Là một cấu trúc dùng để lưu trữ các cặp khóa-giá trị.
3. Khái niệm "đa hình" (polymorphism) trong OOP nghĩa là gì?
A. Khả năng một lớp chỉ có một phương thức duy nhất.
B. Khả năng các đối tượng thuộc các lớp khác nhau phản ứng theo cùng một cách với một lệnh gọi phương thức.
C. Khả năng một lớp chỉ được kế thừa bởi một lớp con duy nhất.
D. Khả năng che giấu hoàn toàn dữ liệu của đối tượng.
4. Khái niệm "đóng gói" (encapsulation) trong OOP có ý nghĩa gì?
A. Cho phép một lớp kế thừa thuộc tính và phương thức từ nhiều lớp khác.
B. Che giấu chi tiết triển khai bên trong của một đối tượng và chỉ cung cấp giao diện để tương tác.
C. Cho phép một đối tượng có nhiều dạng biểu hiện khác nhau.
D. Cho phép thay đổi kiểu dữ liệu của biến một cách linh hoạt.
5. Khi so sánh hai thuật toán thực hiện cùng một chức năng, tiêu chí quan trọng nhất để đánh giá là gì?
A. Độ dài của mã nguồn.
B. Số lượng câu lệnh trong thuật toán.
C. Hiệu quả về thời gian thực thi và bộ nhớ sử dụng.
D. Số lượng biến được sử dụng.
6. Trong Python, câu lệnh `print()` được dùng để làm gì?
A. Nhập dữ liệu từ bàn phím.
B. Thực hiện phép tính toán học.
C. Hiển thị thông tin ra màn hình console.
D. Định nghĩa một biến mới.
7. Trong lập trình, "gỡ lỗi" (debugging) là quá trình:
A. Viết mã nguồn mới.
B. Tìm kiếm, xác định và sửa các lỗi (bugs) trong chương trình.
C. Tối ưu hóa hiệu suất chương trình.
D. Thiết kế giao diện người dùng.
8. Khái niệm "kế thừa" (inheritance) trong OOP cho phép:
A. Một đối tượng có thể thay đổi lớp của mình.
B. Một lớp mới có thể kế thừa các thuộc tính và phương thức từ một lớp đã có.
C. Tất cả các lớp trong chương trình phải giống nhau.
D. Một lớp có thể có nhiều tên gọi khác nhau.
9. Lỗi cú pháp (syntax error) trong lập trình là gì?
A. Lỗi logic khiến chương trình chạy sai kết quả mong muốn.
B. Lỗi do cấu trúc mã không tuân thủ quy tắc của ngôn ngữ lập trình.
C. Lỗi xảy ra khi chương trình cố gắng truy cập vào một vùng nhớ không hợp lệ.
D. Lỗi do dữ liệu đầu vào không phù hợp.
10. Trong lập trình hướng đối tượng, "đối tượng" (object) là gì?
A. Một loại dữ liệu cơ bản như số nguyên hay chuỗi.
B. Một thể hiện cụ thể, một bản sao của một lớp, có các thuộc tính và phương thức được xác định.
C. Một hàm thực hiện một tác vụ đơn giản.
D. Một tệp tin văn bản.
11. Ngôn ngữ lập trình biên dịch (compiled language) khác với ngôn ngữ lập trình thông dịch (interpreted language) ở điểm nào?
A. Ngôn ngữ biên dịch chạy nhanh hơn và cần bước biên dịch trước khi thực thi.
B. Ngôn ngữ thông dịch không cần dịch mã.
C. Ngôn ngữ biên dịch có thể chạy trực tiếp mà không cần bước trung gian.
D. Ngôn ngữ thông dịch luôn có hiệu suất cao hơn ngôn ngữ biên dịch.
12. Cấu trúc điều khiển "if-else" được sử dụng để:
A. Lặp lại một hành động cho đến khi điều kiện sai.
B. Chọn một trong hai nhánh thực thi dựa trên điều kiện đúng hoặc sai.
C. Thực hiện một hành động nhiều lần không giới hạn.
D. Định nghĩa một hàm mới.
13. Phát biểu nào mô tả đúng nhất về "lập trình hướng đối tượng" (Object-Oriented Programming - OOP)?
A. Tập trung vào các hàm và quy trình xử lý dữ liệu.
B. Tổ chức mã nguồn dựa trên các "đối tượng", mỗi đối tượng là một thể hiện của một "lớp" (class) và có các thuộc tính (attributes) và phương thức (methods).
C. Chỉ sử dụng các câu lệnh điều kiện và vòng lặp.
D. Tạo ra các chương trình chỉ chạy trên một hệ điều hành duy nhất.
14. Đặc điểm nào sau đây KHÔNG phải là của một thuật toán tốt?
A. Tính hữu hạn (Finite): Thuật toán phải kết thúc sau một số hữu hạn các bước.
B. Tính rõ ràng (Unambiguous): Mỗi bước phải được định nghĩa rõ ràng, không gây hiểu lầm.
C. Tính không hiệu quả (Inefficient): Thuật toán nên tốn nhiều tài nguyên nhất có thể.
D. Tính đầu vào (Input): Thuật toán có thể có 0 hoặc nhiều đầu vào.
15. Tại sao việc sử dụng hàm trong lập trình lại quan trọng?
A. Để làm cho chương trình chạy chậm hơn.
B. Để giảm thiểu sự lặp lại của mã, giúp chương trình dễ đọc, dễ bảo trì và tái sử dụng.
C. Để tăng số lượng biến trong chương trình.
D. Để chỉ cho phép chương trình thực hiện một lệnh duy nhất.
16. Trong lập trình, thuật toán là gì?
A. Là một loại biến đặc biệt.
B. Là một tập hợp các bước hữu hạn, rõ ràng để giải quyết một vấn đề hoặc thực hiện một nhiệm vụ.
C. Là một câu lệnh để hiển thị thông tin.
D. Là một lỗi trong quá trình biên dịch chương trình.
17. Câu lệnh `input()` trong Python thường được sử dụng để:
A. In kết quả ra màn hình.
B. Lưu trữ một giá trị vào biến.
C. Nhận dữ liệu đầu vào từ người dùng thông qua bàn phím.
D. Kiểm tra điều kiện trong vòng lặp.
18. Trong lập trình, "biến" được định nghĩa là gì?
A. Một quy trình xử lý dữ liệu theo một trình tự nhất định.
B. Một vùng nhớ được đặt tên để lưu trữ dữ liệu có thể thay đổi.
C. Một câu lệnh dùng để điều khiển luồng thực thi của chương trình.
D. Một tập hợp các hướng dẫn máy tính thực hiện để giải quyết vấn đề.
19. Trong lập trình, "hàm" (function) là gì?
A. Một biến lưu trữ dữ liệu tạm thời.
B. Một khối mã được đặt tên, có thể nhận đầu vào và trả về kết quả, dùng để thực hiện một tác vụ cụ thể.
C. Một cấu trúc dữ liệu để lưu trữ nhiều giá trị cùng loại.
D. Một câu lệnh để hiển thị thông báo ra màn hình.
20. Lỗi logic (logic error) trong lập trình xảy ra khi:
A. Chương trình không thể biên dịch được.
B. Mã nguồn vi phạm quy tắc của ngôn ngữ.
C. Chương trình chạy mà không có lỗi cú pháp nhưng cho kết quả sai so với ý định.
D. Chương trình bị treo hoặc thoát đột ngột.
21. Trong lập trình, "vòng lặp for" thường được sử dụng khi:
A. Số lần lặp là không xác định trước.
B. Cần thực hiện một hành động dựa trên điều kiện đúng/sai.
C. Số lần lặp đã được biết trước hoặc có thể tính toán được.
D. Chỉ cần thực hiện hành động một lần.
22. Trong lập trình, "cấu trúc điều khiển vòng lặp" (loop control structure) dùng để làm gì?
A. Để thực hiện một khối lệnh chỉ một lần.
B. Để đưa ra quyết định dựa trên một điều kiện nhất định.
C. Để lặp đi lặp lại một khối lệnh nhiều lần dựa trên một điều kiện.
D. Để kết thúc chương trình ngay lập tức.
23. Phát biểu nào sau đây mô tả đúng nhất về kiểu dữ liệu "chuỗi" (string) trong lập trình?
A. Là một dãy các ký tự số được dùng cho tính toán số học.
B. Là một tập hợp các giá trị logic (đúng/sai).
C. Là một dãy các ký tự, bao gồm chữ cái, số, ký hiệu, được đặt trong dấu nháy đơn hoặc nháy kép.
D. Là một giá trị duy nhất đại diện cho một số nguyên hoặc số thực.
24. Nguyên tắc cơ bản của việc đặt tên biến trong hầu hết các ngôn ngữ lập trình là gì?
A. Tên biến có thể chứa ký tự đặc biệt như !, @, #.
B. Tên biến không được bắt đầu bằng chữ số.
C. Tên biến phải luôn viết hoa toàn bộ.
D. Tên biến có thể trùng với từ khóa của ngôn ngữ lập trình.
25. Khái niệm "lớp" (class) trong lập trình hướng đối tượng đại diện cho điều gì?
A. Một biến lưu trữ giá trị duy nhất.
B. Một bản thiết kế hoặc khuôn mẫu để tạo ra các đối tượng.
C. Một câu lệnh để kết thúc vòng lặp.
D. Một chuỗi các ký tự.