Which of the following switch statement will correctly compute the result for the expression 5 * 4?

4 phương ánCó giải thích
Đề bài
double result;
char op = '*';
int num1 = 5, num2 = 4;
switch (op) {
    case '+': result = num1 + num2; break;
    case '-': result = num1 - num2; break;
    case '*': result = num1 * num2; break;
    case '/': if (num2 != 0) result = num1 / num2; break;
    default: printf("Invalid Operator");
}
printf("%d", result);

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: "20". Biến op mang hằng ký tự dấu nhân, nên switch rẽ vào đúng nhãn khớp với ký tự đó và thực hiện result bằng num1 nhân num2, tức 5 nhân 4 bằng 20, rồi break thoát switch. Cần công bố một khuyết điểm của đề: result khai báo kiểu double nhưng lại in bằng đặc tả số nguyên, đây là sai khớp định dạng nên con số hiện trên màn hình không được bảo đảm; câu hỏi chỉ xét giá trị mà switch tính ra, và giá trị đó là 20. Lựa chọn "9" là kết quả của nhánh cộng, chỉ chạy nếu op mang dấu cộng. Lựa chọn "1.25" là 5 chia 4 theo nghĩa thực, nhưng nhánh chia không được chọn, và hơn nữa num1 chia num2 giữa hai số nguyên sẽ cho 1 chứ không phải 1.25. Lựa chọn "0" ứng với trường hợp result chưa bao giờ được gán, tức op không khớp nhãn nào và chỉ nhánh mặc định chạy.

Cùng phần 3

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