What does the following program print?

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

float max(float a, float b) {
    return a > b ? a : b;
}

int main() {
    float x = 5.5, y = 4.5, z = 2;
    printf("%f", max(max(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: "5.500000". Hàm max dùng toán tử ba toán hạng để trả về số lớn hơn. Lời gọi trong cùng là max(x++, y--): cả hai phép tăng giảm đều ở dạng hậu tố nên truyền sang hàm giá trị cũ, tức 5.5 và 4.5, và hàm cho 5.5; sau đó x thành 6.5, y thành 3.5 nhưng không còn ai đọc. Lời gọi ngoài so 5.5 với ++z, dạng tiền tố nên z tăng trước rồi truyền sang 3.0, kết quả vẫn là 5.5. Đặc tả %f in số thực với sáu chữ số thập phân mặc định, nên màn hình hiện 5.500000. Dòng "5.5" là cách con người viết số đó, không phải cách printf in với %f. Dòng "4.500000" là giá trị cũ của y, thứ bị loại ngay ở lời gọi trong cùng. Kết luận "An error will be raised." sai vì tham số float, phép tăng giảm trên số thực và việc lồng hai lời gọi đều hợp lệ.

Cùng phần 4

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