Chương trình tên test.exe với mã lệnh như bên dưới. Anh (Chị) hãy cho biết kết quả của đoạn lệnh sau khi chạy lệnh chương trình: test 3 3?
int main(int argc,char* argv[]) { double s = 1;
for (int i = 0; i < argv[2] i++) s += atof(argv[1]);
cou << s << endl; return 0;
}
Trả lời:
Đáp án đúng: D
Đề bài yêu cầu tìm kết quả của chương trình C++ khi chạy với dòng lệnh `test 3 3`. Ta cần phân tích code để xem chương trình thực hiện phép tính gì.
* `int main(int argc,char* argv[])`: Hàm `main` nhận hai tham số: `argc` (số lượng tham số dòng lệnh) và `argv` (mảng các chuỗi tham số).
* `double s = 1;`: Khởi tạo biến `s` kiểu `double` với giá trị ban đầu là 1.
* `for (int i = 0; i < argv[2]; i++) s += atof(argv[1]);`: Vòng lặp này lặp lại một số lần phụ thuộc vào giá trị của `argv[2]`. Trong mỗi lần lặp, giá trị của `argv[1]` (được chuyển đổi sang kiểu `double` bằng hàm `atof`) được cộng vào `s`.
* `cout << s << endl;`: In giá trị của `s` ra màn hình.
Trong trường hợp này, khi chạy lệnh `test 3 3`, ta có:
* `argc = 3` (tên chương trình, tham số thứ nhất, tham số thứ hai).
* `argv[0] = "test"`
* `argv[1] = "3"`
* `argv[2] = "3"`
Vòng lặp `for` sẽ lặp lại `argv[2]` lần, tức là 3 lần. Trong mỗi lần lặp, `atof(argv[1])` sẽ chuyển đổi chuỗi "3" thành số thực 3.0, và cộng vào `s`.
Vậy, `s` sẽ được tính như sau:
`s = 1 + 3 + 3 + 3 = 10`
Tuy nhiên, có một lỗi cú pháp trong vòng lặp `for`. Biểu thức điều kiện `i < argv[2]` không đúng vì `argv[2]` là một chuỗi (char*), không phải là một số nguyên. Do đó, chương trình sẽ không biên dịch được.
Vậy đáp án đúng là D.





