Cho đoạn mã sau:
1.public static void main(String[ ] args) {
2.float S = 0.0;
3.int N=3,k;
4.for (k = 1; k <= N; k ++)
5.S += 1/sum(k);
6.System.out.print(S);
7.}
8.public static float sum(int k) {
9.float tong = 0;
10.for (int x = 1; x <= k; x ++)
11.tong +=tich(x);
12.return tong;
13.}
14.public static float tich(int x) {
15.int t=1;
16.for (int j = 1; j <= x; j ++)
17.t *= j;
18.return t;
19.}
Đoạn chương trình trên sai ở dòng nào?
=>=>=>
Trả lời:
Đáp án đúng: A
Đoạn chương trình có lỗi ở dòng 5. Phép chia 1/sum(k) thực hiện phép chia hai số nguyên nếu cả 1 và sum(k) đều là số nguyên. Để phép chia trả về kết quả số thực, ít nhất một trong hai số phải là số thực. Do đó, cần ép kiểu 1 thành 1.0 hoặc 1f để thực hiện phép chia số thực.
Ngoài ra, cần khai báo biến tong ở dòng 9 là kiểu float.
Xét các dòng được đề cập:
- Dòng 3: Khai báo biến `N` và `k` kiểu `int` là hợp lệ.
- Dòng 4: Vòng lặp `for` với điều kiện `k <= N` là hợp lệ.
- Dòng 12: Trả về giá trị `tong` từ hàm `sum` là hợp lệ.
- Dòng 16: Vòng lặp `for` với điều kiện `j <= x` là hợp lệ.
- Dòng 2: Khai báo biến S là kiểu float là hợp lệ.
- Dòng 18: Trả về giá trị t từ hàm `tich` là hợp lệ.
Như vậy, đáp án đúng nhất là A.3, 9 (dù dòng 5 cũng có lỗi). Cần sửa dòng 5 thành S += 1.0/sum(k); và dòng 9 thành float tong = 0.0f;