Đáp án đúng: B
Đúng vậy. Mỗi khi một hàm đệ quy được gọi, một khung ngăn xếp (stack frame) mới được tạo để lưu trữ các biến cục bộ, tham số và địa chỉ trả về của hàm. Nếu một hàm đệ quy gọi chính nó quá nhiều lần mà không có điểm dừng (điều kiện cơ sở), số lượng khung ngăn xếp sẽ tăng lên liên tục. Cuối cùng, ngăn xếp sẽ hết dung lượng, dẫn đến lỗi "tràn ngăn xếp" (stack overflow).
Câu hỏi liên quan
1. Tránh dư thừa, lặp lại nhiều lần một đoạn lệnh: Hàm cho phép đóng gói một đoạn mã thực hiện một chức năng cụ thể. Thay vì viết lặp đi lặp lại đoạn mã đó ở nhiều nơi trong chương trình, ta chỉ cần gọi hàm đó. Điều này giúp giảm thiểu sự dư thừa và làm cho code gọn gàng hơn.
2. Dễ bảo trì: Khi cần thay đổi hoặc sửa lỗi trong một đoạn mã được sử dụng nhiều lần, ta chỉ cần sửa trong định nghĩa hàm. Thay đổi này sẽ tự động áp dụng cho tất cả các nơi gọi hàm đó, giúp việc bảo trì trở nên dễ dàng và ít tốn công sức hơn.
3. Khả năng sử dụng lại đoạn lệnh: Hàm cho phép sử dụng lại một đoạn mã đã được viết cho các mục đích khác nhau trong cùng một chương trình hoặc thậm chí trong các chương trình khác. Điều này giúp tiết kiệm thời gian và công sức viết mã.
Vì các đáp án A, B, và C đều là lợi ích của việc dùng hàm, nên đáp án D "Tất cả đều sai" là đáp án không đúng.
Phân tích câu hỏi:
Câu hỏi này kiểm tra sự hiểu biết về con trỏ và mảng trong C, đặc biệt là cách gán địa chỉ cho con trỏ.
Đánh giá các phương án:
- Phương án A: ptr = value;
Câu lệnh này sai.
value
là một biến kiểuchar
, chứa một ký tự. Khi gánvalue
choptr
(là một con trỏ kiểuchar *
), bạn đang cố gắng gán một giá trị (ký tự) cho một biến lưu địa chỉ. Điều này gây ra lỗi kiểu dữ liệu. - Phương án B: ptr = msg;
Câu lệnh này đúng.
msg
là một mảng kiểuchar
, và khi sử dụng tên mảng (msg
) mà không có chỉ số, nó sẽ tự động chuyển đổi thành một con trỏ đến phần tử đầu tiên của mảng. Vì vậy,ptr = msg
gán địa chỉ của phần tử đầu tiên trong mảngmsg
cho con trỏptr
. Kiểu dữ liệu phù hợp (char *
).
Kết luận:
Phương án B đúng, phương án A sai.
Như vậy, đáp án đúng là C.
Khi nhập "r 45", `scanf` sẽ cố gắng gán ký tự 'r' vào biến `n` (kiểu int). Trong C, ký tự 'r' có giá trị số tương ứng (trong bảng mã ASCII), giá trị này sẽ được gán cho `n`. Tiếp theo, `scanf` sẽ cố gắng gán số 45 vào biến `c` (kiểu char). Như vậy, `n` sẽ có giá trị là giá trị ASCII của 'r' và `c` sẽ có giá trị 45 (tương ứng với ký tự có mã ASCII là 45).
Tuy nhiên, có một lỗi trong đoạn code này. Thứ tự của `%c` và `%d` trong chuỗi định dạng của `scanf` không khớp với thứ tự của `&n` và `&c` trong danh sách các đối số. Vì vậy chương trình sẽ không chạy theo kết quả mà các đáp án đưa ra.
Do đó không có đáp án nào đúng trong các đáp án trên.

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.