What does the following program display?

4 phương ánCó giải thích
Đề bài
#include <stdio.h>

int main()
{
    int x = 1, y = 2, z = 3;

    x = x - --y;
    z = z + ++y;

    printf("%d %d %d", x, y, z);

    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: "0 2 5". Phép giảm trước --y hạ y từ 2 xuống 1 rồi mới nộp giá trị mới là 1 cho biểu thức, nên x bằng 1 trừ 1 là 0. Ngay sau đó phép tăng trước ++y nâng y từ 1 lên 2 và nộp giá trị 2, nên z bằng 3 cộng 2 là 5, còn y dừng lại ở 2; ba số in ra là 0, 2 và 5. Ý "1 5 3" sai vì y chỉ dao động giữa 1 và 2 nên không thể thành 5, mà x cũng không thể giữ nguyên 1 khi vế phải bị trừ đi một lượng khác 0; đây là khuyết điểm phải công bố của câu này, bộ khoá đi kèm đề chốt đúng bộ số không thể xảy ra ấy. Ý "-1 5 3" sai vì z chắc chắn bị ghi lại ở lệnh thứ hai nên không còn là 3, và giá trị 5 của y vẫn vô căn cứ. Ý "1 2 4" sai vì nó đọc --y và ++y như thể là giảm sau và tăng sau, dùng giá trị cũ của y, trong khi dạng tiền tố luôn thay đổi y trước rồi mới trả giá trị mới.

Cùng phần 2

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