Kết quả của chương trình sẽ là gì? #include
Trả lời:
Đáp án đúng: A
Đoạn code sử dụng các toán tử tăng trước (++i), hoặc (||) và và (&&). Thứ tự ưu tiên của các toán tử này là ++i (tăng trước), sau đó là && và cuối cùng là ||. Tuy nhiên, trong C, các toán tử logic như || và && có tính chất "short-circuit evaluation". Điều này có nghĩa là nếu kết quả của biểu thức đã được xác định từ toán hạng đầu tiên, toán hạng thứ hai sẽ không được đánh giá.
Trong biểu thức `m = ++i || ++j && ++k;`:
1. `++i` sẽ tăng `i` lên 4. Vì `i` bây giờ là 4 (khác 0), `++i` trả về giá trị true (1).
2. Do toán tử `||` (hoặc) có tính chất short-circuit, và toán hạng đầu tiên `++i` đã là true, toàn bộ biểu thức `++i || ++j && ++k` sẽ được coi là true mà không cần đánh giá `++j && ++k`.
3. Vì vậy, `++j` và `++k` sẽ không được thực thi, `j` và `k` giữ nguyên giá trị ban đầu.
4. `m` sẽ nhận giá trị true, tương đương với 1.
Kết quả cuối cùng là `i = 4`, `j = 2`, `k = -1`, và `m = 1`.
Vậy đáp án đúng là: A. 4 2 -1 1