What is the output when the sample code below is executed?

4 phương ánCó giải thích
Đề bài
#include<stdio.h>
int main()
{
    int a=10,b=20,c=30;
    while(a>1)
    {
        if(b%2!=0)
            a/=10;
        b--;
        c*=2;
    }
    printf("%d ; %d ; %d",a,b,c);
    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: "1 ; 18 ; 120". Điểm then chốt là phạm vi khối do ngoặc nhọn quyết định, không do thụt lề: lệnh if trong vòng while không có cặp ngoặc nhọn nên nó chỉ ôm đúng một lệnh a/=10, còn b-- và c*=2 nằm ngoài if và chạy ở mọi lượt dù được thụt vào trông như thuộc nhánh đó. Lượt thứ nhất b bằng 20 chia hết cho 2 nên a giữ nguyên 10, b về 19, c lên 60. Lượt thứ hai b bằng 19 là số lẻ nên a/=10 đưa a về 1, b về 18, c lên 120. Kiểm tra lần ba, a bằng 1 không còn lớn hơn 1 nên vòng lặp dừng. Ý "10 ; 19 ; 60" sai vì nó dừng lại sau một lượt, trong khi điều kiện a>1 vẫn đúng nên vòng lặp phải chạy tiếp. Ý "1 ; 20 ; 60" sai vì b-- chạy mỗi lượt nên b không thể giữ nguyên 20. Ý "10 ; 19 ; 120" sai vì c đã nhân đôi hai lần thì vòng lặp đã đi hai lượt, mà cách duy nhất để vòng lặp kết thúc là a bị chia về 1.

Cùng phần 3

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