1. Nguyên tắc "DRY" (Don"t Repeat Yourself) trong lập trình khuyến khích điều gì?
A. Tránh lặp lại cùng một đoạn mã hoặc logic nhiều lần, thay vào đó nên sử dụng hàm hoặc phương thức.
B. Không sử dụng lại các thư viện đã có.
C. Luôn viết mã nguồn càng dài càng tốt để dễ hiểu.
D. Chỉ tập trung vào một chức năng duy nhất của chương trình.
2. Nguyên tắc "chia để trị" (Divide and Conquer) là một chiến lược thiết kế thuật toán. Nó bao gồm những bước chính nào?
A. Chia bài toán lớn thành các bài toán con tương tự có kích thước nhỏ hơn, giải các bài toán con, sau đó kết hợp các kết quả.
B. Thực hiện tuần tự các bước cho đến khi hoàn thành.
C. Luôn ưu tiên giải quyết vấn đề lớn nhất trước.
D. Sử dụng các vòng lặp để lặp lại một hành động.
3. Phát biểu nào sau đây mô tả đúng vai trò của "từ khóa" (keyword) trong ngôn ngữ lập trình?
A. Là các từ có ý nghĩa đặc biệt, được ngôn ngữ lập trình định nghĩa sẵn và không thể dùng làm tên biến hay hàm.
B. Là các biến mà người lập trình tự định nghĩa.
C. Là các ký hiệu dùng để tạo bình luận trong mã nguồn.
D. Là các hàm có sẵn trong thư viện chuẩn của ngôn ngữ.
4. Khái niệm "biến cục bộ" (local variable) và "biến toàn cục" (global variable) liên quan đến phạm vi của biến. Phạm vi của biến cục bộ là gì?
A. Chỉ tồn tại và có thể truy cập được bên trong một khối lệnh hoặc một hàm cụ thể nơi nó được khai báo.
B. Có thể truy cập từ bất kỳ đâu trong toàn bộ chương trình.
C. Tồn tại suốt đời chương trình nhưng chỉ có thể truy cập từ hàm chính.
D. Tự động được tạo ra khi chương trình bắt đầu và bị xóa khi kết thúc.
5. Trong lập trình, "hằng số" (constant) khác với "biến" (variable) ở điểm nào?
A. Giá trị của hằng số không thể thay đổi sau khi được gán, trong khi biến có thể thay đổi giá trị.
B. Hằng số chỉ dùng cho các giá trị số, còn biến dùng cho chuỗi.
C. Hằng số luôn được khai báo là biến cục bộ.
D. Hằng số không cần khai báo kiểu dữ liệu.
6. Trong lập trình, "cú pháp" (syntax) có vai trò gì?
A. Quy định cách viết đúng các câu lệnh, từ khóa và cấu trúc của một ngôn ngữ lập trình.
B. Xác định logic xử lý của chương trình.
C. Quyết định giao diện người dùng của ứng dụng.
D. Đảm bảo chương trình chạy nhanh nhất.
7. Khi nói về "cấu trúc điều kiện" (if-else statement), mục đích chính của nó là gì trong lập trình?
A. Cho phép chương trình đưa ra các quyết định và thực thi các khối lệnh khác nhau dựa trên điều kiện đúng hoặc sai.
B. Lặp lại một hành động cho đến khi một điều kiện được đáp ứng.
C. Lưu trữ dữ liệu mà không cần khai báo trước.
D. Tổ chức các hàm và thủ tục trong một chương trình.
8. Phát biểu nào sau đây mô tả đúng khái niệm "ngôn ngữ lập trình" (programming language)?
A. Một hệ thống các ký hiệu, quy tắc và ngữ nghĩa dùng để con người viết các chỉ thị cho máy tính thực hiện.
B. Một phần cứng chuyên dụng để chạy chương trình.
C. Một loại hệ điều hành quản lý tài nguyên máy tính.
D. Một phương pháp để kết nối các máy tính thành mạng.
9. Ngôn ngữ lập trình bậc cao khác biệt với ngôn ngữ lập trình bậc thấp ở điểm nào là cơ bản nhất?
A. Sử dụng các lệnh gần với ngôn ngữ tự nhiên của con người và trừu tượng hóa chi tiết phần cứng.
B. Chỉ có thể chạy trên các máy tính có cấu hình mạnh.
C. Yêu cầu người lập trình phải hiểu sâu về kiến trúc vi xử lý.
D. Tốc độ thực thi luôn chậm hơn ngôn ngữ bậc thấp.
10. Khái niệm "lập trình tuyến tính" (linear programming) thường được sử dụng để giải quyết loại bài toán nào?
A. Tối ưu hóa một hàm mục tiêu (ví dụ: lợi nhuận, chi phí) dưới các ràng buộc tuyến tính.
B. Tạo ra các đồ họa phức tạp.
C. Phân tích dữ liệu lớn.
D. Lập trình trò chơi điện tử.
11. Trong lập trình hướng đối tượng (OOP), khái niệm "tính đóng gói" (encapsulation) đề cập đến điều gì?
A. Kết hợp dữ liệu (thuộc tính) và các phương thức (hàm) xử lý dữ liệu đó vào một đơn vị duy nhất (đối tượng) và che giấu chi tiết cài đặt bên trong.
B. Cho phép một đối tượng kế thừa các thuộc tính và phương thức từ đối tượng khác.
C. Tạo ra một giao diện chung cho nhiều đối tượng khác nhau.
D. Cho phép một đối tượng có nhiều dạng biểu hiện khác nhau.
12. Khi thiết kế một thuật toán, điều nào sau đây KHÔNG phải là thuộc tính cần có của một thuật toán tốt?
A. Phức tạp (Complexity) - thuật toán càng phức tạp càng tốt.
B. Tính xác định (Definiteness) - mỗi bước phải rõ ràng.
C. Tính hữu hạn (Finiteness) - thuật toán phải kết thúc.
D. Tính đúng đắn (Correctness) - thuật toán phải cho ra kết quả đúng.
13. Một "thuật toán" trong tin học được định nghĩa là gì?
A. Một tập hợp hữu hạn các bước mô tả cách giải một bài toán hoặc thực hiện một nhiệm vụ.
B. Một chương trình máy tính được viết bằng ngôn ngữ Python.
C. Một thiết bị phần cứng dùng để xử lý thông tin.
D. Một cách để mã hóa dữ liệu nhạy cảm.
14. Phát biểu nào sau đây mô tả đúng vai trò của "chuỗi ký tự" (string) trong lập trình?
A. Là một kiểu dữ liệu dùng để biểu diễn một dãy các ký tự, thường được dùng để lưu trữ văn bản.
B. Chỉ có thể chứa các ký tự số.
C. Là một cấu trúc dữ liệu chỉ chứa một ký tự duy nhất.
D. Được sử dụng để thực hiện các phép toán số học phức tạp.
15. Trong lập trình, "lỗi logic" (logic error) là loại lỗi gì?
A. Lỗi xảy ra khi chương trình chạy đúng cú pháp nhưng lại đưa ra kết quả không mong muốn do sai sót trong thuật toán hoặc cách biểu diễn ý tưởng.
B. Lỗi do sai sót trong cách viết câu lệnh, khiến chương trình không thể chạy được.
C. Lỗi do thiết bị phần cứng gặp sự cố.
D. Lỗi do chương trình bị nhiễm virus.
16. Đâu là đặc điểm của "mảng" (array) trong lập trình?
A. Là một tập hợp các phần tử cùng kiểu dữ liệu, được truy cập thông qua chỉ số (index).
B. Có thể lưu trữ các phần tử có kiểu dữ liệu khác nhau một cách tùy ý.
C. Luôn có kích thước cố định sau khi khai báo và không thể thay đổi.
D. Yêu cầu mỗi phần tử phải là một biến độc lập.
17. Đâu là một ví dụ về "kiểu dữ liệu số nguyên" (integer data type)?
A. 42
B. 3.14
C. "Hello"
D. True
18. Khái niệm "biên dịch" (compilation) trong lập trình đề cập đến quá trình nào?
A. Chuyển đổi mã nguồn viết bằng ngôn ngữ lập trình bậc cao thành mã máy hoặc mã trung gian mà máy tính có thể hiểu và thực thi.
B. Kiểm tra lỗi cú pháp trong chương trình.
C. Tự động sinh ra mã nguồn từ các thuật toán.
D. Lưu trữ chương trình vào bộ nhớ RAM.
19. Phát biểu nào sau đây mô tả đúng vai trò của "vòng lặp" (loop) trong lập trình?
A. Cho phép thực hiện một khối lệnh nhiều lần dựa trên một điều kiện nhất định.
B. Là cách để chương trình giao tiếp với người dùng.
C. Dùng để lưu trữ nhiều giá trị cùng lúc trong một biến duy nhất.
D. Quyết định chương trình sẽ đi theo nhánh nào dựa trên điều kiện.
20. Trong lập trình, "kiểu dữ liệu" (data type) dùng để làm gì?
A. Xác định loại giá trị mà một biến có thể chứa và các phép toán có thể thực hiện trên giá trị đó.
B. Quyết định tốc độ chạy của chương trình.
C. Tạo ra các biến mới một cách tự động.
D. Định nghĩa các hàm trong chương trình.
21. Trong lập trình, "hàm" (function) hay "thủ tục" (procedure) có vai trò gì?
A. Đóng gói một khối lệnh thực hiện một nhiệm vụ cụ thể, giúp tái sử dụng và làm cho chương trình dễ đọc hơn.
B. Xác định loại dữ liệu mà một biến có thể lưu trữ.
C. Tạo giao diện đồ họa cho ứng dụng.
D. Tự động sửa lỗi cú pháp trong mã nguồn.
22. Phát biểu nào sau đây đúng về "trình thông dịch" (interpreter)?
A. Chuyển đổi và thực thi mã nguồn từng dòng một, không tạo ra tệp mã máy độc lập.
B. Chuyển đổi toàn bộ mã nguồn thành mã máy trước khi thực thi.
C. Yêu cầu người dùng biên dịch lại chương trình mỗi lần chạy.
D. Chỉ hoạt động với các ngôn ngữ lập trình bậc thấp.
23. Trong lập trình, khái niệm "biến" được sử dụng để làm gì?
A. Lưu trữ dữ liệu có thể thay đổi trong quá trình thực thi chương trình.
B. Thực hiện các phép toán số học phức tạp.
C. Tạo ra các vòng lặp trong chương trình.
D. Định nghĩa cấu trúc dữ liệu mới.
24. Phát biểu nào sau đây mô tả đúng "cấu trúc dữ liệu" (data structure)?
A. Là một cách tổ chức, quản lý và lưu trữ dữ liệu trong máy tính để có thể truy cập và thao tác hiệu quả.
B. Là một loại ngôn ngữ lập trình dùng để viết chương trình.
C. Là một thuật toán dùng để sắp xếp dữ liệu.
D. Là một thiết bị phần cứng để lưu trữ dữ liệu lâu dài.
25. Trong lập trình, "gỡ lỗi" (debugging) là hoạt động gì?
A. Tìm kiếm, xác định và sửa các lỗi (bug) trong mã nguồn của chương trình.
B. Viết thêm các tính năng mới cho chương trình.
C. Tối ưu hóa tốc độ thực thi của chương trình.
D. Tạo tài liệu hướng dẫn sử dụng cho chương trình.