What does the following program display?
4 phương ánCó giải thích
#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 ánLờ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ộ đề
Đi tiếp từ đây