What will be printed when the following program is executed?

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

int f(int a, int b, int c) {
    int t = 2*(a+b-c)/5;
    return t;
}

int main() {
    int x = 5, y = 6, z = 7;
    int t = 3*f(y,x,z);
    printf("%d", t);
    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: "3". Thứ tự đối số là chỗ cần bám: lời gọi f(y,x,z) gán a bằng 6, b bằng 5, c bằng 7. Trong hàm, a cộng b trừ c cho 4, nhân 2 thành 8, rồi 8 chia 5 là phép chia giữa hai số nguyên nên C cắt phần thập phân cho ra 1, không làm tròn lên 2. Hàm trả về 1, main nhân 3 và in 3. Lựa chọn "1" là giá trị hàm trả về, bỏ quên phép nhân 3 ở main. Lựa chọn "8" là tử số 2 nhân với 4, tức dừng lại trước khi chia cho 5. Lựa chọn "2" ứng với cách hiểu 8 chia 5 bằng 1.6 rồi làm tròn thành 2, nhưng chia nguyên trong C luôn cắt về phía 0, và ngay cả khi làm tròn thì kết quả cuối vẫn còn phải nhân 3 nữa.

Cùng phần 4

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