Ngôn ngữ lập trình nào dưới đây là ngôn ngữ lập trình có cấu trúc?
Đáp án đúng: B
Câu hỏi liên quan
1. Khai báo và khởi tạo: `char ch[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};` khai báo một mảng ký tự `ch` chứa các ký tự số từ '0' đến '9'.
2. Ép kiểu và gán: `int *p = (int*)ch;` Khai báo một con trỏ kiểu `int` là `p` và gán địa chỉ của mảng `ch` cho nó. Việc ép kiểu `(int*)` cho phép con trỏ `p` coi vùng nhớ của `ch` như một mảng các số nguyên.
3. Tăng con trỏ: `p++;` Tăng con trỏ `p` lên một vị trí. Vì `p` là một con trỏ kiểu `int`, nó sẽ tăng lên một khoảng bằng kích thước của một số nguyên (thường là 4 bytes).
4. In giá trị: `printf("%x", *p);` In giá trị mà con trỏ `p` trỏ tới dưới dạng số hex. Vì con trỏ `p` đã được tăng lên 1, nó sẽ trỏ đến 4 bytes tiếp theo trong mảng `ch`.
Trên hầu hết các hệ thống, một số nguyên (int) chiếm 4 byte. Do đó, sau khi `p++`, `p` sẽ trỏ đến vị trí bắt đầu từ ký tự '4'. Giá trị của `*p` sẽ là một số nguyên được tạo thành từ 4 byte này. Thứ tự byte có thể khác nhau tùy thuộc vào kiến trúc (big-endian hoặc little-endian).
Giả sử hệ thống là little-endian (byte nhỏ nhất ở địa chỉ thấp nhất), thì 4 byte từ vị trí '4' sẽ là '4', '5', '6', '7'. Khi được đọc như một số nguyên, nó sẽ được hiểu là `0x34353637` (trong hệ thập phân là 875770423), vì mã ASCII của '4' là 0x34, '5' là 0x35, '6' là 0x36, và '7' là 0x37.
Vì vậy, kết quả in ra sẽ là `34353637`.
Nếu hệ thống là big-endian, kết quả sẽ là 0x37363534.
Trong các lựa chọn đưa ra, lựa chọn phù hợp nhất (dựa trên cách trình bày mã và giả định little-endian) là B.
Giải thích chi tiết:
1. `char *pstr[2] = {"LAPTRINHC++", ".NET"};`: Khai báo một mảng `pstr` gồm 2 con trỏ kiểu `char`, mỗi con trỏ trỏ đến một chuỗi ký tự hằng.
2. `swap(pstr[0], pstr[1]);`: Gọi hàm `swap` để hoán đổi giá trị của `pstr[0]` và `pstr[1]`. Trong hàm `swap`, các con trỏ `t1` và `t2` trỏ lần lượt đến `pstr[0]` và `pstr[1]`. Việc hoán đổi `t1` và `t2` chỉ thay đổi giá trị của chúng trong hàm `swap`, không ảnh hưởng đến `pstr[0]` và `pstr[1]` trong `main`.
3. `printf("%s%s", pstr[0], pstr[1]);`: In ra màn hình nội dung mà `pstr[0]` và `pstr[1]` trỏ tới. Vì `pstr[0]` vẫn trỏ đến "LAPTRINHC++" và `pstr[1]` vẫn trỏ đến ".NET", kết quả in ra sẽ là "LAPTRINHC++.NET".
Do đó, đáp án đúng là A. LAPTRINHC++.NET
Đề bài yêu cầu xác định kích thước của struct `t`. Trong struct `t`, ta có một mảng `s` kiểu `short` có 5 phần tử, mỗi phần tử `short` chiếm 2 bytes, vậy mảng `s` chiếm 5 * 2 = 10 bytes.
Tiếp theo là union `u`. Trong union, các thành viên chia sẻ cùng một vùng nhớ. Kích thước của union là kích thước của thành viên lớn nhất. Trong union `u`, ta có `float y` và `long z`. Giả sử kích thước của `float` và `long` đều là 4 bytes.
Vậy, kích thước của union `u` là max(sizeof(float), sizeof(long)) = max(4, 4) = 4 bytes.
Tổng kích thước của struct `t` là kích thước của mảng `s` cộng với kích thước của union `u`, tức là 10 + 4 = 14 bytes.
Tuy nhiên, cần xem xét đến padding (phần đệm). Để đảm bảo việc truy cập các thành viên của struct được hiệu quả (thường là bội số của kích thước từ của CPU), compiler có thể thêm các byte padding.
Trong trường hợp này, giả sử không có padding ở cuối struct. Khi đó sizeof(t) = 14.
Tuy nhiên, không có đáp án nào là 14. Xem xét đến khả năng có padding:
- Nếu padding để kích thước struct là bội số của 2, thì padding là 0 và kích thước là 14.
- Nếu padding để kích thước struct là bội số của 4, thì padding là 2 và kích thước là 16.
Đáp án A (16) có thể là đáp án đúng nếu compiler thêm padding để kích thước của struct là bội số của 4.
Đáp án B (22), C (32), D (18) không phù hợp.
Vậy, đáp án phù hợp nhất là A. 16
`i = 5 + (2*5) + (2*5) + 2`
`i = 5 + 10 + 10 + 2`
`i = 27`
Vậy, giá trị của `i` sẽ là 27.

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.