Cho khai báo sau:
struct Date {
unsigned int ngay: 5;
unsigned int thang;
unsigned int nam: 11;
} sn1;
Số lượng bit sử dụng trong biến cấu trúc trên là bao nhiêu?
Đáp án đúng: C
Trong khai báo struct Date:
- ngay chiếm 5 bits
- thang chiếm số bit mặc định của unsigned int (thường là 4 bytes = 32 bits)
- nam chiếm 11 bits
Tổng số bits sử dụng là 5 + 32 + 11 = 48 bits.
Câu hỏi liên quan
Cấu trúc tự trỏ là một loại cấu trúc dữ liệu đặc biệt, trong đó một hoặc nhiều trường của cấu trúc đó là con trỏ, và con trỏ này lại trỏ đến một biến có kiểu dữ liệu chính là kiểu của cấu trúc chứa nó. Điều này cho phép tạo ra các cấu trúc dữ liệu liên kết, ví dụ như danh sách liên kết, cây, đồ thị, v.v.
Phân tích các đáp án:
- A. Sai. Định nghĩa này chưa đủ chính xác vì nó chỉ nói đến con trỏ chứa địa chỉ của một biến cấu trúc nói chung, mà không chỉ rõ là cấu trúc đó phải có kiểu dữ liệu giống với cấu trúc chứa nó.
- B. Đúng. Định nghĩa này chính xác nhất vì nó chỉ rõ rằng con trỏ phải chứa địa chỉ của một biến cấu trúc có dạng dữ liệu giống với cấu trúc chứa con trỏ đó. Điều này tạo ra tính 'tự trỏ'.
- C. Sai. Một cấu trúc có một trường có kiểu dữ liệu giống nó là không hợp lệ trong hầu hết các ngôn ngữ lập trình, vì nó sẽ dẫn đến định nghĩa đệ quy vô hạn, không thể cấp phát bộ nhớ.
- D. Sai. Vì A và C sai.
Vậy, đáp án đúng là B.
Phát biểu đúng về danh sách móc nối là "Các phần tử của nó được lưu trữ rải rác trong bộ nhớ RAM" và "Để cài đặt danh sách móc nối phải sử dụng đến cấu trúc tự trỏ". Tuy nhiên, phương án C chính xác hơn vì nó đề cập đến một đặc điểm cốt lõi của việc *cài đặt* danh sách móc nối. Danh sách móc nối (linked list) cần các node, mỗi node chứa dữ liệu và một con trỏ đến node tiếp theo. Con trỏ này là một cấu trúc tự trỏ (self-referential structure), tức là một cấu trúc chứa một con trỏ đến một cấu trúc cùng loại. Điều này cho phép các node được liên kết với nhau một cách linh hoạt, ngay cả khi chúng nằm rải rác trong bộ nhớ. Các lựa chọn khác không đúng vì:
- A: Độ dài danh sách móc nối có thể thay đổi động trong quá trình chạy chương trình.
- B: Đúng một phần, nhưng không phải là yếu tố *duy nhất* hoặc quan trọng nhất để mô tả danh sách móc nối.
- D: Có thể xóa bất kỳ phần tử nào trong danh sách, không chỉ phần tử đầu tiên.
Danh sách móc nối (linked list) là một cấu trúc dữ liệu, trong đó các phần tử được liên kết với nhau thông qua các con trỏ. Do đó, việc thêm một phần tử mới vào danh sách móc nối có thể được thực hiện ở bất kỳ vị trí nào, không nhất thiết chỉ ở đầu danh sách hoặc không thể ở cuối danh sách. Vì vậy, phương án C là đáp án chính xác.
- Phương án A sai vì có thể thêm vào cuối hoặc giữa danh sách.
- Phương án B sai vì có thể thêm vào cuối danh sách.
- Phương án D sai vì có một phương án đúng là phương án C.
Đề bài yêu cầu thêm một phần tử vào **đầu** danh sách liên kết đơn.
Để thêm một phần tử vào đầu danh sách, ta cần thực hiện các bước sau:
- Tạo một node mới (trong đoạn code, node mới được trỏ bởi con trỏ
p
). - Cho con trỏ
next
của node mới (p->next
) trỏ đến node đầu tiên hiện tại của danh sách (địa chỉ được lưu tronghead
). - Cập nhật
head
để nó trỏ đến node mới (p
), biến node mới thành node đầu tiên của danh sách.
Phân tích các đáp án:
- Đáp án A:
p->next = head; head = p;
- Câu lệnh
p->next = head;
gán địa chỉ của phần tử đầu tiên hiện tại (được trỏ bởihead
) vào trườngnext
của phần tử mới (được trỏ bởip
). Điều này đảm bảo phần tử mới sẽ liên kết đến phần còn lại của danh sách. - Câu lệnh
head = p;
gán địa chỉ của phần tử mới (p
) chohead
. Điều này làm cho phần tử mới trở thành phần tử đầu tiên của danh sách.
=> Đáp án A đúng.
- Câu lệnh
- Đáp án B:
p->next = head; head->p; head = p->next;
p->next = head;
gán địa chỉ của phần tử đầu tiên hiện tại cho trường next của node mới.head->p;
Câu lệnh này không hợp lệ về mặt cú pháp vì không có trường 'p' trong struct S1, và hơn nữa cũng không thực hiện chức năng gì có ý nghĩa trong việc thêm phần tử vào danh sách.head = p->next;
gán địa chỉ mà p trỏ tới (chính là địa chỉ của phần tử đầu tiên trước đó) cho head. Như vậy head vẫn trỏ vào phần tử đầu tiên ban đầu, và phần tử mới không được thêm vào đầu danh sách.
=> Đáp án B sai.
- Đáp án C:
head->next = p; p = head;
- Câu lệnh
head->next = p;
gán địa chỉ của phần tử mới (p
) vào trườngnext
của phần tử đầu tiên hiện tại (được trỏ bởihead
). Điều này thêm phần tử mới vào *sau* phần tử đầu tiên, chứ không phải vào đầu danh sách. - Câu lệnh
p = head;
gán địa chỉ của phần tử đầu tiên (head
) chop
, làm chop
trỏ đến phần tử đầu tiên ban đầu. Điều này không thay đổi cấu trúc danh sách.
=> Đáp án C sai.
- Câu lệnh
- Đáp án D: Không có câu nào đúng.
Vì đáp án A đúng, nên đáp án D sai.
Đề bài cho một danh sách liên kết đơn, với head
là con trỏ trỏ đến phần tử đầu tiên. Để xóa phần tử đầu tiên, ta cần cập nhật head
để nó trỏ đến phần tử thứ hai. Điều này có thể thực hiện bằng cách gán head
bằng head->next
.
- Phương án A:
head->next = head;
Gán con trỏnext
của phần tử đầu tiên trỏ lại chính nó, không xóa phần tử đầu tiên khỏi danh sách. - Phương án B:
head = head->next;
Gánhead
bằng địa chỉ của phần tử thứ hai, do đó phần tử đầu tiên bị loại khỏi danh sách (không còn con trỏ nào trỏ đến nó). Đây là phương án đúng. - Phương án C:
head = head->next->next;
Gánhead
bằng địa chỉ của phần tử thứ ba (nếu có), làm mất phần tử đầu và phần tử thứ hai khỏi danh sách. - Phương án D: Loại vì chỉ ra 2 và 3, nhưng chỉ 2 đúng.
Vậy đáp án đúng là B.

Bộ Đồ Án Tốt Nghiệp Ngành Trí Tuệ Nhân Tạo Và Học Máy

Bộ 120+ Đồ Án Tốt Nghiệp Ngành Hệ Thống Thông Tin

Bộ Đồ Án Tốt Nghiệp Ngành Mạng Máy Tính Và Truyền Thông

Bộ Luận Văn Tốt Nghiệp Ngành Kiểm Toán

Bộ 370+ Luận Văn Tốt Nghiệp Ngành Kế Toán Doanh Nghiệp

Bộ Luận Văn Tốt Nghiệp Ngành Quản Trị Thương Hiệu
ĐĂNG KÝ GÓI THI VIP
- Truy cập hơn 100K đề thi thử và chính thức các năm
- 2M câu hỏi theo các mức độ: Nhận biết – Thông hiểu – Vận dụng
- Học nhanh với 10K Flashcard Tiếng Anh theo bộ sách và chủ đề
- Đầy đủ: Mầm non – Phổ thông (K12) – Đại học – Người đi làm
- Tải toàn bộ tài liệu trên TaiLieu.VN
- Loại bỏ quảng cáo để tăng khả năng tập trung ôn luyện
- Tặng 15 ngày khi đăng ký gói 3 tháng, 30 ngày với gói 6 tháng và 60 ngày với gói 12 tháng.