Anh (Chị) hãy cho biết kết quả của đoạn lệnh sau là gì?
struct hocsinh {
string hoten;
int namsinh;
double diem;
} ;
double bac3 (double a,int x) {
double d = 1;
for (int i = 0; i < x; i++) d *= a;
return d;
}
int main() {
hocsinh hs[3]
hocsinh *p;
p = hs;
for (int i = 0; i < 3; i++) {
p->diem = 5;
p++;
}
cout << hs[0].diem << “, “ << bac3(hs[1].diem,2);
Trả lời:
Đáp án đúng: C
Đoạn chương trình khai báo một struct `hocsinh` với các trường `hoten`, `namsinh`, và `diem`. Hàm `bac3` tính lũy thừa bậc `x` của số `a`. Trong hàm `main`, một mảng `hs` gồm 3 phần tử kiểu `hocsinh` được khai báo, và một con trỏ `p` được gán địa chỉ của `hs`.
Vòng lặp `for` duyệt qua 3 phần tử của mảng `hs` thông qua con trỏ `p`. Trong mỗi lần lặp, trường `diem` của phần tử hiện tại được gán giá trị 5, và con trỏ `p` được tăng lên để trỏ đến phần tử tiếp theo trong mảng. Do đó, sau vòng lặp, `hs[0].diem`, `hs[1].diem`, và `hs[2].diem` đều bằng 5.
Dòng `cout` in ra giá trị của `hs[0].diem` và kết quả của `bac3(hs[1].diem, 2)`. `hs[0].diem` bằng 5. `bac3(hs[1].diem, 2)` tương đương với `bac3(5, 2)`, tính 5 mũ 2, kết quả là 25. Vì vậy, đầu ra sẽ là "5, 25".