Xem đoạn code sau:typedef struct ST{ int d1,d2,d3;};ST v= {5, 6, 7};ST* p=&v; p.d1++;Giá trị của biến v là:
Đáp án đúng: D
Đoạn code này có lỗi cú pháp. Trong C, khi bạn có một con trỏ đến một struct, bạn cần sử dụng toán tử ->
để truy cập các thành viên của struct thông qua con trỏ, hoặc sử dụng (*p).d1++
. Biểu thức p.d1++
sẽ gây ra lỗi biên dịch vì p
là một con trỏ, không phải một struct trực tiếp. Do đó, đoạn code sẽ không biên dịch được.
Câu hỏi liên quan
1. `clrscr()`: Hàm này thường được sử dụng trong môi trường Turbo C++ để xóa màn hình. Tuy nhiên, nó không phải là một phần của thư viện chuẩn C/C++. Để sử dụng, cần include thư viện `conio.h`. Nếu không có thư viện này hoặc tương đương, trình biên dịch có thể báo lỗi hoặc cảnh báo, nhưng chương trình vẫn có thể chạy với kết quả không mong muốn (màn hình không được xóa).
2. Cấu trúc `sv`: Định nghĩa một cấu trúc có hai thành viên: `d` (kiểu `float`) và `ht` (kiểu mảng ký tự `char[10]`).
3. `p = &m;`: Gán địa chỉ của biến cấu trúc `m` cho con trỏ `p`. Do đó, `p` trỏ tới `m`.
4. `(*p).d = p->d = 10;`: Dòng này gán giá trị 10 cho thành viên `d` của cấu trúc `m` thông qua cả hai cách truy cập bằng con trỏ: `(*p).d` và `p->d`. Vì `p` trỏ tới `m`, cả hai cách đều tương đương và gán `m.d = 10`.
5. `strcpy(m.ht, “NguyenVanTuan”);`: Sao chép chuỗi "NguyenVanTuan" vào mảng `m.ht`. Tuy nhiên, `m.ht` chỉ có kích thước 10 ký tự (bao gồm cả ký tự null '\0'). Chuỗi "NguyenVanTuan" dài hơn nhiều (14 ký tự + '\0'). Điều này dẫn đến lỗi tràn bộ đệm (buffer overflow). Hành vi của chương trình trong trường hợp này là không xác định. Nó có thể in ra kết quả không mong muốn, gây ra lỗi hoặc thậm chí treo chương trình.
6. `printf(“%0.1f”, m.d);`: In giá trị của `m.d` (đã được gán là 10) với định dạng số thực dấu phẩy động, với độ chính xác một chữ số sau dấu phẩy. Kết quả sẽ là "10.0".
7. `printf(“%s”, m.ht);`: In chuỗi `m.ht`. Vì đã xảy ra tràn bộ đệm ở bước 5, nội dung của `m.ht` có thể không còn là chuỗi hợp lệ và việc in có thể dẫn đến kết quả không mong muốn. Trong trường hợp này, vì bộ nhớ bị ghi đè có thể không gây ra sự cố ngay lập tức, nó có thể in ra "NguyenVanTuan" hoặc một phần của nó, hoặc thậm chí một chuỗi rác.
Dựa trên phân tích trên, chương trình có lỗi tràn bộ đệm khi sao chép chuỗi vào `m.ht`. Tuy nhiên, chương trình vẫn có thể chạy và in ra một kết quả nào đó. Tuy nhiên, đáp án B có vẻ hợp lý nhất nếu bỏ qua lỗi tràn bộ đệm (chương trình in "10.0" rồi in chuỗi đã sao chép).
Tuy nhiên, do có lỗi tràn bộ đệm không xác định, đáp án chính xác nhất là C. Kết quả khá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.
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.
* 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ộ Đồ Á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.