Đoạn lệnh sau đưa ra kết quả là gì?
void inc (void* data, int psize) {
if (psize == sizeof (char)) {
char* pchar; pchar =
(char*)data; ++(*pchar);
} else if (psize == sizeof(int)) {
int* pint; pint = (char*)data;
++(*pint);
}
}
int main() { int s = 1642; inc (s);
void << s << endl;
return 0;
}
Trả lời:
Đáp án đúng: D
Đoạn code có lỗi biên dịch. Hàm `inc` được định nghĩa là nhận vào hai tham số: một con trỏ `void* data` và một số nguyên `int psize`. Tuy nhiên, khi gọi hàm `inc` trong hàm `main`, ta chỉ truyền vào một tham số duy nhất là biến `s`. Điều này gây ra lỗi biên dịch vì số lượng tham số truyền vào không khớp với số lượng tham số mà hàm yêu cầu.
Ngoài ra, dòng code `void << s << endl;` cũng gây ra lỗi biên dịch vì `void` không phải là một đối tượng có thể xuất ra luồng. Có thể ý định của người viết là `cout << s << endl;` nhưng đã viết sai cú pháp.
Do đó, đáp án đúng là 'D. Lỗi biên dịch.'
Câu hỏi liên quan
Lời giải:
Đáp án đúng: D
Đoạn code C++ này sử dụng con trỏ hàm để thực hiện các phép toán số học. Tuy nhiên, có một lỗi cú pháp quan trọng trong cách gán giá trị cho biến `m` và `n`.\n\nPhân tích chi tiết:
1. Khai báo hàm:
* `int add(int a, int b)`: Hàm trả về tổng của hai số nguyên.
* `int sub(int a, int b)`: Hàm trả về hiệu của hai số nguyên.
* `int operation(int x, int y, int(*functocall)(int, int))`: Hàm này nhận hai số nguyên `x`, `y` và một con trỏ hàm `functocall` (có kiểu trả về `int` và nhận hai tham số `int`). Hàm `operation` gọi hàm được trỏ bởi `functocall` với `x` và `y` làm đối số.
2. Hàm `main`:
* `int (*minus)(int, int) = sub;`: Khai báo một con trỏ hàm `minus` trỏ đến hàm `sub`.
* `m = (7, 5, add);` : Đây là dòng lệnh gây lỗi. Toán tử dấu phẩy (`,`) trong C/C++ đánh giá các biểu thức từ trái sang phải và trả về giá trị của biểu thức cuối cùng. Trong trường hợp này, `(7, 5, add)` sẽ trả về giá trị của `add`. Vì `add` là một con trỏ hàm, `m` sẽ nhận địa chỉ của hàm `add`, và vì kiểu của `m` là `int` nên đoạn code này gây ra lỗi biên dịch do trình biên dịch không thể chuyển đổi một con trỏ hàm sang một số nguyên.
* `n = (20, m, minus);`: Tương tự như trên, dòng này cũng gây ra lỗi. `(20, m, minus)` sẽ trả về `minus` (là một con trỏ hàm), và `n` sẽ nhận giá trị này, gây ra lỗi biên dịch tương tự như với `m`.
3. Kết luận:
* Đoạn code có lỗi biên dịch do cố gắng gán con trỏ hàm cho biến kiểu `int` sử dụng toán tử dấu phẩy một cách sai. Do đó, chương trình sẽ không biên dịch thành công.
1. Khai báo hàm:
* `int add(int a, int b)`: Hàm trả về tổng của hai số nguyên.
* `int sub(int a, int b)`: Hàm trả về hiệu của hai số nguyên.
* `int operation(int x, int y, int(*functocall)(int, int))`: Hàm này nhận hai số nguyên `x`, `y` và một con trỏ hàm `functocall` (có kiểu trả về `int` và nhận hai tham số `int`). Hàm `operation` gọi hàm được trỏ bởi `functocall` với `x` và `y` làm đối số.
2. Hàm `main`:
* `int (*minus)(int, int) = sub;`: Khai báo một con trỏ hàm `minus` trỏ đến hàm `sub`.
* `m = (7, 5, add);` : Đây là dòng lệnh gây lỗi. Toán tử dấu phẩy (`,`) trong C/C++ đánh giá các biểu thức từ trái sang phải và trả về giá trị của biểu thức cuối cùng. Trong trường hợp này, `(7, 5, add)` sẽ trả về giá trị của `add`. Vì `add` là một con trỏ hàm, `m` sẽ nhận địa chỉ của hàm `add`, và vì kiểu của `m` là `int` nên đoạn code này gây ra lỗi biên dịch do trình biên dịch không thể chuyển đổi một con trỏ hàm sang một số nguyên.
* `n = (20, m, minus);`: Tương tự như trên, dòng này cũng gây ra lỗi. `(20, m, minus)` sẽ trả về `minus` (là một con trỏ hàm), và `n` sẽ nhận giá trị này, gây ra lỗi biên dịch tương tự như với `m`.
3. Kết luận:
* Đoạn code có lỗi biên dịch do cố gắng gán con trỏ hàm cho biến kiểu `int` sử dụng toán tử dấu phẩy một cách sai. Do đó, chương trình sẽ không biên dịch thành công.
Lời giả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".
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".
Lời giải:
Đáp án đúng: A
Đoạn chương trình trên thực hiện tính toán lũy thừa bậc 2 của một số thực.
Trong hàm `main`, biến `i` được khởi tạo bằng 3. Sau đó, giá trị của `i` (là 3) được in ra màn hình. Tiếp theo, hàm `bac3(i, 2)` được gọi.
Hàm `bac3(double a, int x)` tính lũy thừa bậc `x` của `a` bằng cách nhân `a` với chính nó `x` lần trong vòng lặp `for`. Trong trường hợp này, `a` là 3.0 và `x` là 2. Vòng lặp sẽ chạy hai lần:
- Lần 1: `a = a * a = 3.0 * 3.0 = 9.0`
- Lần 2: `a = a * a = 9.0 * 9.0 = 81.0`
Hàm `bac3` trả về giá trị 81.0. Cuối cùng, giá trị này được in ra màn hình sau dấu phẩy và khoảng trắng. Vì vậy, kết quả cuối cùng là `3, 81`.
Trong hàm `main`, biến `i` được khởi tạo bằng 3. Sau đó, giá trị của `i` (là 3) được in ra màn hình. Tiếp theo, hàm `bac3(i, 2)` được gọi.
Hàm `bac3(double a, int x)` tính lũy thừa bậc `x` của `a` bằng cách nhân `a` với chính nó `x` lần trong vòng lặp `for`. Trong trường hợp này, `a` là 3.0 và `x` là 2. Vòng lặp sẽ chạy hai lần:
- Lần 1: `a = a * a = 3.0 * 3.0 = 9.0`
- Lần 2: `a = a * a = 9.0 * 9.0 = 81.0`
Hàm `bac3` trả về giá trị 81.0. Cuối cùng, giá trị này được in ra màn hình sau dấu phẩy và khoảng trắng. Vì vậy, kết quả cuối cùng là `3, 81`.
Lời giải:
Đáp án đúng: C
Đoạn mã C++ định nghĩa một lớp `CRect` biểu diễn hình chữ nhật. Lớp này có hai thuộc tính `height` (chiều cao) và `width` (chiều rộng), cùng với một hàm tạo `CRect(int, int)` để khởi tạo các thuộc tính này và một phương thức `DT()` để tính diện tích của hình chữ nhật. Trong hàm `main()`, một đối tượng `cn` của lớp `CRect` được tạo với chiều cao và chiều rộng đều là 7. Sau đó, diện tích của hình chữ nhật này (7 * 7 = 49) được in ra màn hình. Vậy đáp án đúng là C.
Lời giải:
Đáp án đúng: C
Đoạn code định nghĩa một lớp `CRect` với hai thuộc tính `height` (chiều cao) và `width` (chiều rộng), cùng hai hàm tạo (constructor): một hàm tạo không tham số và một hàm tạo có hai tham số. Hàm `DT` trả về diện tích của hình chữ nhật.
Trong hàm `main`, một đối tượng `cn1` của lớp `CRect` được tạo bằng cách sử dụng hàm tạo có hai tham số (3, 4), do đó `cn1.height` là 3 và `cn1.width` là 4. Một đối tượng `cn2` của lớp `CRect` được tạo bằng cách sử dụng hàm tạo không tham số, do đó `cn2.height` và `cn2.width` đều là 5.
Giá trị được in ra là `cn1.DT() + cn2.DT()`. `cn1.DT()` trả về 3 * 4 = 12. `cn2.DT()` trả về 5 * 5 = 25. Vậy, 12 + 25 = 37.
Do đó, kết quả của đoạn code là 37.
Trong hàm `main`, một đối tượng `cn1` của lớp `CRect` được tạo bằng cách sử dụng hàm tạo có hai tham số (3, 4), do đó `cn1.height` là 3 và `cn1.width` là 4. Một đối tượng `cn2` của lớp `CRect` được tạo bằng cách sử dụng hàm tạo không tham số, do đó `cn2.height` và `cn2.width` đều là 5.
Giá trị được in ra là `cn1.DT() + cn2.DT()`. `cn1.DT()` trả về 3 * 4 = 12. `cn2.DT()` trả về 5 * 5 = 25. Vậy, 12 + 25 = 37.
Do đó, kết quả của đoạn code là 37.
Lời giải:
Bạn cần đăng ký gói VIP để làm bài, xem đáp án và lời giải chi tiết không giới hạn. Nâng cấp VIP
Lời giải:
Bạn cần đăng ký gói VIP để làm bài, xem đáp án và lời giải chi tiết không giới hạn. Nâng cấp VIP
Lời giải:
Bạn cần đăng ký gói VIP để làm bài, xem đáp án và lời giải chi tiết không giới hạn. Nâng cấp VIP
Lời giải:
Bạn cần đăng ký gói VIP để làm bài, xem đáp án và lời giải chi tiết không giới hạn. Nâng cấp VIP
Lời giải:
Bạn cần đăng ký gói VIP để làm bài, xem đáp án và lời giải chi tiết không giới hạn. Nâng cấp VIP

Bộ Đồ Án Tốt Nghiệp Ngành Trí Tuệ Nhân Tạo Và Học Máy
89 tài liệu310 lượt tải

Bộ 120+ Đồ Án Tốt Nghiệp Ngành Hệ Thống Thông Tin
125 tài liệu441 lượt tải

Bộ Đồ Án Tốt Nghiệp Ngành Mạng Máy Tính Và Truyền Thông
104 tài liệu687 lượt tải

Bộ Luận Văn Tốt Nghiệp Ngành Kiểm Toán
103 tài liệu589 lượt tải

Bộ 370+ Luận Văn Tốt Nghiệp Ngành Kế Toán Doanh Nghiệp
377 tài liệu1030 lượt tải

Bộ Luận Văn Tốt Nghiệp Ngành Quản Trị Thương Hiệu
99 tài liệu1062 lượt tải
ĐĂ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.
77.000 đ/ tháng