JavaScript is required

ong các khởi tạo giá trị cho các cấu trúc sau, hãy chọn câu đúng:
struct S1 {
int ngay, thang, nam;
};
S1 = (2, 1, 3);
struct S2 {
char hoten[10]
struct S1 ngaysinh;
};
S2 = {

Ly Ly”,
{
4,
5,
6
}
};

A.
S1 đúng
B.
S2 đúng
C.
S1 và S2 đều đúng
D.
S1 và S2 đều sai
Trả lời:

Đáp án đúng: B


Đoạn code đưa ra 2 cấu trúc `S1` và `S2`, sau đó cố gắng khởi tạo giá trị cho chúng. Ta cần xem xét tính đúng đắn của các khởi tạo này. * **Cấu trúc S1:** * `struct S1 { int ngay, thang, nam; };` Khai báo một cấu trúc `S1` chứa ba thành viên kiểu `int`: `ngay`, `thang`, và `nam`. * `S1 = (2, 1, 3);` **Sai**. Trong C/C++, không thể gán giá trị cho một biến cấu trúc (ở đây là `S1`) bằng cách sử dụng cú pháp `(2, 1, 3)`. Cú pháp này sử dụng toán tử dấu phẩy (comma operator), và nó chỉ trả về giá trị cuối cùng (trong trường hợp này là 3). Để khởi tạo một biến kiểu `S1`, chúng ta cần sử dụng cú pháp khởi tạo danh sách (list initialization) hoặc khởi tạo từng thành viên một. * **Cấu trúc S2:** * `struct S2 { char hoten[10]; struct S1 ngaysinh; };` Khai báo cấu trúc `S2` chứa một mảng ký tự `hoten` và một biến `ngaysinh` kiểu cấu trúc `S1`. * `S2 = { "Ly Ly", { 4, 5, 6 } };` **Sai**. Việc gán trực tiếp một chuỗi ký tự như `"Ly Ly"` cho một mảng ký tự (`hoten[10]`) không được phép trong C/C++. Chúng ta cần sử dụng hàm `strcpy` để sao chép chuỗi vào mảng. Ngoài ra, để khởi tạo `ngaysinh`, cú pháp `{ 4, 5, 6 }` có thể được chấp nhận nếu trình biên dịch hỗ trợ C++11 hoặc các phiên bản mới hơn (khởi tạo danh sách rút gọn). Tuy nhiên, do lỗi sai ở phần gán chuỗi cho `hoten`, khởi tạo này vẫn sai. Vì cả hai cách khởi tạo `S1` và `S2` đều sai, đáp án đúng là "S1 và S2 đều sai".

Tổng hợp 600+ câu hỏi trắc nghiệm lập trình C có đáp án đầy đủ nhằm giúp các bạn dễ dàng ôn tập lại toàn bộ các kiến thức.


50 câu hỏi 60 phút

Câu hỏi liên quan