What will the following program output?

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

int main()
{
    int a = -5;

    switch ((a > 0) - (a < 0)) {
        case 1:
            printf("a is an positive number.");
            break;
        case -1:
            printf("a is an negative number.");
            break;
        default:
            printf("a is zero.");
    }

    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: "a is an negative number." a bằng -5 nên phép so sánh a > 0 cho 0 và a < 0 cho 1; biểu thức chọn nhánh là 0 trừ 1, tức -1, và switch so khớp với nhãn case -1 nên in ra câu nói a là số âm rồi break thoát. Mẹo (a > 0) - (a < 0) chính là hàm dấu, nó dựa vào bản chất của C là phép so sánh trả về số nguyên 1 hoặc 0 chứ không trả về kiểu luận lý riêng. "a is an positive number." đòi biểu thức bằng 1, chỉ xảy ra khi a dương. "a is zero." là nhánh default, chỉ chạy khi hiệu bằng 0, tức khi a bằng 0. "An error will be raised." sai vì switch chỉ cần một biểu thức nguyên, nhãn case mang giá trị âm hoàn toàn hợp lệ.

Cùng phần 3

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