JavaScript is required

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;

}

A.

27

B.

9

C.

3

D.

Lỗi biên dịch.

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.

Câu hỏi liên quan