Anh (Chị) hãy cho biết kết quả của đoạn lệnh sau là gì?
double i = 0, n = 10, s = 0;
while (i < n)
{ double s = s + n;
n--;
} cout <
Trả lời:
Đáp án đúng: A
Đoạn code có lỗi vì biến `s` được khai báo lại bên trong vòng lặp `while`. Điều này dẫn đến biến `s` bên ngoài vòng lặp không được cập nhật. Tuy nhiên, vì câu hỏi yêu cầu "kết quả của đoạn lệnh", ta sẽ xét theo logic code (cho dù code lỗi).
Ban đầu: `i = 0`, `n = 10`, `s = 0`.
Vòng lặp `while (i < n)` sẽ thực hiện với điều kiện `i` luôn là 0, do đó `i < n` luôn đúng (với `n` giảm dần nhưng vẫn lớn hơn 0). Điều này dẫn đến vòng lặp vô hạn (infinite loop).
Tuy nhiên, đề bài có `cout << s;` nằm ngoài vòng lặp, nghĩa là đoạn code sẽ biên dịch và chạy (nếu bỏ qua lỗi khai báo biến trùng tên trong vòng lặp). Khi đó giá trị của `s` in ra sẽ là giá trị khởi tạo ban đầu của `s` (biến `s` bên ngoài vòng lặp) tức là 0. Dù vòng lặp vô hạn, giá trị s ban đầu vẫn được in ra nếu chương trình biên dịch được.
Do đó, đáp án đúng nhất trong các đáp án được đưa ra là A. 0 (mặc dù chương trình có thể không kết thúc do vòng lặp vô hạn).





