What will be the output of the following C code?

4 phương ánCó giải thích
Đề bài
#include <stdio.h>
int main()
{
    int a,b,c;
    a = b = c = 10;
    c = a++ || ++b && ++c;
    printf("%d %d %d",c, a, b);
    return 0;
}

Các phương án trả lời

Chọn một phương án
Lời giảiChọn phương án để mở
Đáp án đúng: "1 11 10". Toán tử và kết chặt hơn toán tử hoặc, nên biểu thức được hiểu là a++ || (++b && ++c). Phép a++ trả về giá trị cũ 10, khác 0 nên vế trái đã đúng; toán tử hoặc rút mạch nên vế phải không được tính lần nào, do đó b giữ nguyên 10 và c không hề tăng. Giá trị của cả biểu thức luận lý là 1, và chính 1 đó được gán cho c, còn a đã tăng thành 11; thứ tự in là c, a, b nên ra 1 11 10. Cần công bố khuyết điểm: bản khoá in kèm ghi 10 11 10, giá trị đó chỉ đúng nếu phép gán nhận giá trị của a thay vì giá trị chân lý của biểu thức, nên "10 11 10" sai. "10 11 1" vừa gán sai cho c vừa đổi chỗ b với c khi in. "1 1 10" sai vì a đã tăng thành 11, không thể còn 1.

Cùng phần 2

Xuất hiện trong 2 bộ đề