Cho đoạn chương trình sau: struct { int to; float soluong;} x[10] for (int i=0; i<10; i++) scanf(“%d%f”,&x[i].to,&x[i].soluong);Chọn câu đúng nhất trong các câu sau:
10;>
Trả lời:
Đáp án đúng: C
Đoạn chương trình khai báo một mảng `x` gồm 10 phần tử, mỗi phần tử là một cấu trúc (struct) chứa hai trường: `to` (kiểu int) và `soluong` (kiểu float). Sau đó, chương trình sử dụng một vòng lặp `for` để nhập giá trị cho các trường `to` và `soluong` của từng phần tử trong mảng `x` bằng hàm `scanf`.
Phân tích các lựa chọn:
* **A. Đoạn chương trình trên có lỗi cú pháp.** Câu này sai. Đoạn chương trình không có lỗi cú pháp nào.
* **B. Không được phép sử dụng toán tử lấy địa chỉ đối với các thành phần “to” và “soluong”.** Câu này sai. Trong C, toán tử `&` (lấy địa chỉ) hoàn toàn hợp lệ và cần thiết để truyền địa chỉ của biến cho hàm `scanf` để hàm này có thể gán giá trị trực tiếp vào biến đó.
* **C. Lấy địa chỉ thành phần “soluong” dẫn đến chương trình hoạt động không đúng đắn.** Câu này sai. Việc lấy địa chỉ của `x[i].soluong` là hoàn toàn đúng để hàm `scanf` có thể gán giá trị kiểu float vào biến này.
* **D. Cả 3 ý trên đều sai.** Câu này đúng vì cả ba ý A, B, C đều sai.
Vậy đáp án đúng là D.