What is the output of the variable "sum" in the following code:
4 phương ánCó giải thích
int a[] = {1, 2, 3, 4, 5}, i;
float sum = 0;
for (i = 0; i < 4; i++) {
sum = sum + a[i]/a[i+1];
}
printf("%.2f", sum);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.00". Mỗi hạng tử là phép chia giữa hai phần tử int, nên kết quả bị cắt về số nguyên ngay trước khi được cộng vào sum; việc sum có kiểu float không cứu được gì vì sự cắt đã xảy ra rồi. Bốn lượt cho 1 chia 2 bằng 0, 2 chia 3 bằng 0, 3 chia 4 bằng 0 và 4 chia 5 bằng 0, nên sum vẫn là 0 và in ra 0.00. Muốn có chia thực phải ép một toán hạng sang float trước khi chia. Lựa chọn "2.72" chính là tổng khi chia thực, tức 0.5 cộng 0.67 cộng 0.75 cộng 0.8, nên nó giả định sai rằng kiểu của biến nhận kết quả quyết định kiểu của phép chia. Lựa chọn "2.80" không khớp với tổng nào ở đây, dù tính theo chia nguyên hay chia thực. Lựa chọn "Runtime Error" lo nhầm về vượt biên, nhưng i chỉ chạy tới 3 nên chỉ số lớn nhất được đọc là 4, vẫn nằm trong năm phần tử.
Cùng phần 2
Xuất hiện trong 1 bộ đề
Đi tiếp từ đây