JavaScript is required

Giả sử các khai báo biến đều hợp lệ. Ðể tính S = 10!, chọn câu nào?

A.

S := 1; i := 1;while i<= 10 do S := S * i;i := i + 1;

B.

S := 1; i := 1;while i<= 10 do i := i + 1;S := S * i;

C.

S := 0; i := 1;while i<= 10 dobeginS := S * i;i := i + 1;end;

D.

S := 1; i := 1; while i<= 10 dobeginS := S * i;i := i + 1;end;

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.

Câu hỏi liên quan