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