Giả sử các khai báo biến đều hợp lệ. Ðể tính S = 10!, chọn câu nào?
Trả lời:
Đáp án đúng: D
Để tính giai thừa của 10 (10!), ta cần một vòng lặp nhân tích lũy từ 1 đến 10.
Phương án A: `S := 1; i := 1; while i <= 10 do S := S * i; i := i + 1;`
- Khởi tạo S = 1 và i = 1.
- Trong vòng lặp `while i <= 10`, S được nhân với i, và i tăng lên 1.
- Vòng lặp này thực hiện đúng việc tính tích từ 1 đến 10.
Phương án B: `S := 1; i := 1; while i <= 10 do i := i + 1; S := S * i;`
- Khởi tạo S = 1 và i = 1.
- Trong vòng lặp `while i <= 10`, i tăng lên 1 *trước* khi S được nhân với i. Do đó sau vòng lặp, i = 11 và S chỉ được nhân với 11 một lần duy nhất, không phải tính giai thừa.
Phương án C: `S := 0; i := 1; while i <= 10 do begin S := S * i; i := i + 1; end;`
- Khởi tạo S = 0 và i = 1.
- Vì S khởi đầu bằng 0, sau mỗi lần lặp `S := S * i`, S vẫn bằng 0. Do đó, kết quả cuối cùng luôn là 0.
Phương án D: `S := 1; i := 1; while i <= 10 do begin S := S * i; i := i + 1; end;`
- Tương đương với phương án A về mặt logic, nhưng có thêm `begin` và `end;`. Tuy nhiên, nó không ảnh hưởng đến tính đúng sai của thuật toán vì chỉ có một lệnh trong vòng lặp.
Vì vậy, phương án A và D đều đúng, tuy nhiên do phương án A không có begin end nên không thực hiện được trong 1 số ngôn ngữ lập trình nên phương án D đúng hơn.





