JavaScript is required

Đầu ra là gì? #include #include void main() { int i = 2, j = 2; while(i+1? --i : j++) printf("%d", i); getch(); }

A.

1

B.

B.2

C.

Lỗi biên dịch

Trả lời:

Đáp án đúng: A


Đoạn code sử dụng toán tử bậc ba (ternary operator) trong điều kiện của vòng lặp `while`. Hãy xem xét luồng thực thi: 1. **Khởi tạo:** `i = 2`, `j = 2`. 2. **Vòng lặp `while`:** Điều kiện `i+1? --i : j++` được đánh giá. - `i + 1` (tức là `2 + 1 = 3`) khác 0, do đó biểu thức bên trái dấu `:` được thực thi, tức là `--i`. - `--i` làm giảm `i` xuống 1 (vậy `i = 1`). Giá trị của biểu thức `--i` là 1. - Vòng lặp in ra giá trị của `i` (tức là 1). 3. **Lặp lại vòng lặp `while`:** - `i + 1` (tức là `1 + 1 = 2`) khác 0, do đó `--i` được thực thi. - `--i` làm giảm `i` xuống 0 (vậy `i = 0`). Giá trị của biểu thức `--i` là 0. - Vòng lặp in ra giá trị của `i` (tức là 0). 4. **Lặp lại vòng lặp `while`:** - `i + 1` (tức là `0 + 1 = 1`) khác 0, do đó `--i` được thực thi. - `--i` làm giảm `i` xuống -1 (vậy `i = -1`). Giá trị của biểu thức `--i` là -1. - Vòng lặp in ra giá trị của `i` (tức là -1). 5. **Lặp lại vòng lặp `while`:** - `i + 1` (tức là `-1 + 1 = 0`) bằng 0, do đó `j++` được thực thi. - `j++` làm tăng `j` lên 1 (vậy `j = 3`). Giá trị của biểu thức `j++` là 2 (giá trị trước khi tăng). - Vòng lặp in ra giá trị của `i` (tức là -1). 6. **Lặp lại vòng lặp `while`:** - `i + 1` (tức là `-1 + 1 = 0`) bằng 0, do đó `j++` được thực thi. - `j++` làm tăng `j` lên 1 (vậy `j = 4`). Giá trị của biểu thức `j++` là 3 (giá trị trước khi tăng). - Vòng lặp in ra giá trị của `i` (tức là -1). Vì vòng lặp `while` không có điều kiện dừng cụ thể (ngoài việc `i + 1` bằng 0, nhưng `i` luôn bị thay đổi và `j` luôn tăng), nên vòng lặp sẽ tiếp tục cho đến khi có lỗi tràn số hoặc một điều kiện dừng khác bên ngoài vòng lặp (ví dụ: do người dùng can thiệp). Tuy nhiên, trong các lựa chọn đưa ra, không có lựa chọn nào phản ánh chính xác đầu ra của vòng lặp này. Các giá trị i sẽ tiếp tục giảm cho đến khi i+1 = 0, lúc đó j sẽ tăng và quá trình lặp lại, vì thế đáp án đúng nhất là không có đáp án nào đúng.

Câu hỏi liên quan