1. Tại sao việc sử dụng "const" (hằng số) với biến lại quan trọng trong việc quản lý phạm vi và giá trị?
A. Để cho phép thay đổi giá trị của biến dễ dàng hơn.
B. Để đảm bảo giá trị của biến không bị thay đổi ngoài ý muốn trong phạm vi của nó.
C. Để làm cho biến chỉ có thể truy cập được từ bên ngoài.
D. Để tăng phạm vi của biến lên toàn bộ chương trình.
2. Tại sao việc giới hạn phạm vi của biến lại quan trọng trong lập trình?
A. Để làm cho chương trình phức tạp hơn.
B. Để tăng khả năng xảy ra lỗi do nhầm lẫn tên biến.
C. Để cải thiện tính dễ đọc, dễ bảo trì và tránh lỗi không mong muốn.
D. Để bắt buộc sử dụng biến toàn cục.
3. Ý nghĩa của việc một biến có "vòng đời" (lifetime) gắn liền với phạm vi của nó là gì?
A. Biến tồn tại vĩnh viễn sau khi chương trình kết thúc.
B. Biến được tạo ra khi vào phạm vi và bị hủy khi ra khỏi phạm vi đó.
C. Biến chỉ tồn tại khi nó được gán giá trị.
D. Vòng đời của biến chỉ phụ thuộc vào việc nó có được gọi tên hay không.
4. Biến cục bộ (local variable) là biến được khai báo ở đâu?
A. Bên ngoài tất cả các khối lệnh và hàm.
B. Bên trong một hàm hoặc một khối lệnh cụ thể.
C. Trong khai báo hằng số của chương trình.
D. Tại dòng đầu tiên của mọi tệp mã nguồn.
5. Khi một biến được khai báo trong một hàm lồng nhau (nested function), phạm vi của nó là gì?
A. Toàn bộ chương trình.
B. Chỉ trong hàm lồng nhau đó.
C. Trong cả hàm cha và hàm lồng nhau.
D. Phụ thuộc vào hàm được gọi trước.
6. Trong một cấu trúc "if-else", biến được khai báo trong khối "if" có thể truy cập được ở đâu?
A. Trong cả khối "if" và khối "else".
B. Chỉ trong khối "if".
C. Chỉ trong khối "else".
D. Bên ngoài cấu trúc "if-else" hoàn toàn.
7. Phạm vi của biến có thể được coi là một hình thức của:
A. Tối ưu hóa bộ nhớ.
B. Kiểm soát truy cập dữ liệu.
C. Tăng tốc độ biên dịch.
D. Phân tán xử lý.
8. Phạm vi khối (block scope) là phạm vi mà một biến chỉ có thể truy cập được ở đâu?
A. Trong toàn bộ tệp mã nguồn.
B. Trong toàn bộ hàm chứa khối đó.
C. Bên trong khối lệnh cụ thể nơi nó được khai báo (ví dụ: khối "if", "for").
D. Chỉ ở khai báo của hàm.
9. Việc khai báo nhiều biến toàn cục có tên giống nhau trong các tệp khác nhau của một dự án lớn có thể dẫn đến vấn đề gì?
A. Không có vấn đề gì, trình biên dịch sẽ tự xử lý.
B. Gây ra lỗi "undefined variable".
C. Gây ra lỗi "multiple definition" hoặc xung đột liên kết (linking conflict).
D. Làm tăng tốc độ thực thi chương trình.
10. Trong lập trình, "phạm vi của biến" (scope) đề cập đến:
A. Vùng nhớ mà biến được cấp phát để lưu trữ giá trị.
B. Thời điểm mà biến được khai báo và sử dụng trong chương trình.
C. Phần của chương trình nơi biến có thể được truy cập và sử dụng.
D. Tên gọi duy nhất của biến trong toàn bộ dự án.
11. Trong các ngôn ngữ lập trình có hỗ trợ phạm vi "module", biến được khai báo là "private" trong một module sẽ có phạm vi như thế nào?
A. Có thể truy cập từ mọi module khác.
B. Chỉ có thể truy cập bên trong module đó.
C. Có thể truy cập từ các module con của nó.
D. Chỉ có thể truy cập khi module đó được nhập khẩu (import).
12. Nếu một biến được khai báo bên ngoài mọi hàm và bên ngoài mọi lớp trong một ngôn ngữ hỗ trợ các khái niệm này, nó thường được coi là:
A. Biến cục bộ.
B. Biến toàn cục.
C. Biến tạm thời.
D. Biến hằng.
13. Biến "static" trong một hàm có đặc điểm gì về phạm vi và vòng đời?
A. Có phạm vi cục bộ và vòng đời ngắn (bị hủy khi hàm kết thúc).
B. Có phạm vi toàn cục và vòng đời ngắn.
C. Có phạm vi cục bộ nhưng vòng đời của chương trình (duy trì giá trị giữa các lần gọi hàm).
D. Có phạm vi toàn cục và vòng đời của chương trình.
14. Biến có phạm vi "file scope" (phạm vi tệp) là biến được khai báo ở đâu?
A. Bên trong một hàm cụ thể.
B. Ở đầu của mọi hàm.
C. Ở cấp cao nhất của một tệp mã nguồn, bên ngoài tất cả các hàm và lớp.
D. Trong một khối lệnh cụ thể như "for" hoặc "if".
15. Khi hai hàm khác nhau cùng sử dụng một biến toàn cục, điều gì có thể xảy ra nếu một hàm thay đổi giá trị của biến đó?
A. Hàm còn lại sẽ không bị ảnh hưởng.
B. Hàm còn lại sẽ thấy giá trị đã thay đổi của biến.
C. Trình biên dịch sẽ tự động tạo một bản sao cho mỗi hàm.
D. Chương trình sẽ bị treo.
16. Biến toàn cục (global variable) có thể được truy cập từ đâu?
A. Chỉ trong hàm mà nó được khai báo.
B. Chỉ trong khối lệnh mà nó được khai báo.
C. Trong bất kỳ phần nào của chương trình.
D. Chỉ trong các hàm con của hàm khai báo.
17. Khi một biến cục bộ và một biến toàn cục có cùng tên, biến nào sẽ được ưu tiên sử dụng trong phạm vi trùng nhau?
A. Biến toàn cục sẽ luôn được ưu tiên.
B. Biến cục bộ sẽ luôn được ưu tiên.
C. Phụ thuộc vào trình biên dịch.
D. Phụ thuộc vào thứ tự khai báo.
18. Khi một biến được khai báo bên trong một hàm, phạm vi của nó là gì?
A. Toàn bộ chương trình.
B. Chỉ bên trong hàm đó.
C. Chỉ bên ngoài hàm đó.
D. Phụ thuộc vào kiểu dữ liệu của biến.
19. Khi một hàm gọi một hàm khác, các biến cục bộ của hàm gọi sẽ:
A. Bị hủy ngay lập tức.
B. Vẫn tồn tại và có thể truy cập được từ hàm được gọi.
C. Bị che khuất bởi các biến cục bộ của hàm được gọi.
D. Tồn tại nhưng không thể truy cập từ hàm được gọi.
20. Trong ngữ cảnh phạm vi biến, "lexical scoping" (phạm vi từ vựng) nghĩa là gì?
A. Phạm vi của biến được xác định dựa trên thứ tự thực thi của chương trình.
B. Phạm vi của biến được xác định dựa trên cấu trúc mã nguồn tĩnh (cách viết mã).
C. Phạm vi của biến thay đổi tùy thuộc vào giá trị của biến.
D. Phạm vi của biến phụ thuộc vào việc nó được khai báo bằng từ khóa nào.
21. Trong lập trình hướng đối tượng, phạm vi của một biến thành viên (member variable) của lớp là gì?
A. Chỉ bên trong phương thức mà nó được khai báo.
B. Trong toàn bộ chương trình.
C. Trong phạm vi của đối tượng mà lớp đó tạo ra.
D. Chỉ trong các hàm bạn bè (friend functions).
22. Một hàm có thể trả về một biến cục bộ của nó không?
A. Luôn có thể, hàm sẽ tự động chuyển nó thành biến toàn cục.
B. Không thể, vì biến cục bộ bị hủy khi hàm kết thúc.
C. Chỉ có thể nếu biến đó được khai báo là "static".
D. Chỉ có thể nếu biến đó là kiểu dữ liệu nguyên thủy (primitive type).
23. Ưu điểm chính của việc sử dụng biến cục bộ so với biến toàn cục là gì?
A. Tăng khả năng tái sử dụng mã và giảm xung đột tên biến.
B. Cho phép truy cập dữ liệu từ mọi nơi trong chương trình dễ dàng hơn.
C. Giảm lượng bộ nhớ cần thiết cho chương trình.
D. Giúp chương trình chạy nhanh hơn đáng kể.
24. Khái niệm "phạm vi của biến" giúp giải quyết vấn đề gì trong lập trình?
A. Vấn đề về tốc độ xử lý.
B. Vấn đề về quản lý bộ nhớ và tránh xung đột tên biến.
C. Vấn đề về giao diện người dùng.
D. Vấn đề về kết nối mạng.
25. Nếu một biến được khai báo ngay trong vòng lặp "for" (ví dụ: "for (int i = 0; i < 10; i++)"), phạm vi của biến "i" là gì?
A. Toàn bộ chương trình.
B. Chỉ trong khối lệnh của vòng lặp "for" đó.
C. Chỉ bên ngoài vòng lặp "for".
D. Phụ thuộc vào giá trị ban đầu của "i".