Anh (Chị) hãy cho biết kết quả của đoạn lệnh sau là gì? (Kết quả lấy tròn 2 số sau dấu thập phân)
int main() {
double a = 4, xn, kq, dem = 0;
xn = (a + 1) / 2;
do {
kq = xn; xn = 0.5 * (xn + a/xn);
dem++;
} while (fabs(xn - kq) > 0.001);
cout << kq;
return 0;
}
Trả lời:
Đáp án đúng: A
Đoạn chương trình tính căn bậc hai của một số bằng phương pháp Newton.
Ban đầu, `a` được gán bằng 4, và `xn` được khởi tạo bằng (a + 1) / 2 = 2.5.
Vòng lặp `do...while` lặp lại cho đến khi giá trị tuyệt đối của sự khác biệt giữa `xn` và `kq` nhỏ hơn hoặc bằng 0.001.
Trong mỗi lần lặp:
1. `kq` được gán bằng giá trị hiện tại của `xn`.
2. `xn` được cập nhật bằng công thức `xn = 0.5 * (xn + a/xn)`.
3. `dem` tăng lên 1.
Vòng lặp dừng lại khi `fabs(xn - kq) <= 0.001`.
Các giá trị của xn trong mỗi lần lặp:
- Lần 1: xn = 2.5, kq = 2.5, xn = 0.5 * (2.5 + 4/2.5) = 0.5 * (2.5 + 1.6) = 2.05
- Lần 2: xn = 2.05, kq = 2.05, xn = 0.5 * (2.05 + 4/2.05) = 0.5 * (2.05 + 1.951) = 2.0005
- Lần 3: xn = 2.0005, kq = 2.0005, |2.0005 - 2.0005| < 0.001. Vòng lặp dừng lại.
Giá trị của `kq` sau khi vòng lặp kết thúc là khoảng 2.0005. Làm tròn đến hai chữ số thập phân, kết quả là 2.00.
Vậy đáp án đúng là A. 2





