Khối lệnh sau ra kết quả là bao nhiêu với a = 5, b = 8?
double a, b;
if (a == 0)
if (b != 0) System.out.println(“Phuong trinh vo nghiem”);
else System.out.println(“Phuong trinh co vo so nghiem”);
else System.out.println(-b/a);
Trả lời:
Đáp án đúng: C
Đoạn code trên có lỗi về mặt logic thụt lề. Theo như đoạn code được viết, mệnh đề `else System.out.println(-b/a);` được hiểu là thuộc về `if (a == 0)` chứ không phải là trường hợp ngược lại. Tuy nhiên, nếu chúng ta giả sử rằng ý định của người viết code là `else` này thuộc về `if (a == 0)` thì chương trình sẽ hoạt động như sau:
1. **`double a, b;`**: Khai báo hai biến `a` và `b` kiểu `double`.
2. **`a = 5; b = 8;`**: Gán giá trị `a = 5` và `b = 8`.
3. **`if (a == 0)`**: Kiểm tra nếu `a` bằng 0. Trong trường hợp này, `a = 5` nên điều kiện này sai.
4. **`else System.out.println(-b/a);`**: Vì điều kiện `a == 0` sai, chương trình sẽ thực hiện lệnh `else`. Tính `-b/a = -8/5 = -1.6` và in ra giá trị này.
Vậy đáp án đúng là -1.6.
*Lưu ý*: Nếu đoạn code được viết đúng cú pháp thụt lề và `else` thuộc về `if (a == 0)`, chương trình sẽ chạy như sau:
1. **`double a, b;`**: Khai báo hai biến `a` và `b` kiểu `double`.
2. **`a = 5; b = 8;`**: Gán giá trị `a = 5` và `b = 8`.
3. **`if (a == 0)`**: Kiểm tra nếu `a` bằng 0. Trong trường hợp này, `a = 5` nên điều kiện này sai.
4. Chương trình không thực hiện bất kỳ lệnh nào vì không có `else` tương ứng với `if (b != 0)`.
Trong trường hợp này, không có output nào được in ra. Tuy nhiên, dựa trên các đáp án được đưa ra, ta có thể kết luận rằng người ra đề muốn `else` thuộc về `if (a == 0)`.