Kết quả của chương trình sau là gì:
#include
void main() {
int i, j;
for (i = 1; i < 4; i++)
j = i;
printf("%3d", j);
}
>
Đáp án đúng: C
Câu hỏi liên quan
* Tránh dư thừa, lặp lại code: Khi một đoạn code cần được sử dụng nhiều lần, việc viết nó thành một hàm giúp tránh việc lặp lại đoạn code đó ở nhiều nơi, giúp code ngắn gọn và dễ đọc hơn.
* Dễ bảo trì: Khi cần sửa đổi một đoạn code được sử dụng nhiều lần, việc sửa đổi hàm sẽ tự động cập nhật tất cả các vị trí sử dụng hàm đó, giúp việc bảo trì dễ dàng hơn.
* Khả năng sử dụng lại đoạn lệnh: Hàm có thể được sử dụng lại trong các chương trình khác nhau, giúp tiết kiệm thời gian và công sức.
Như vậy, các phương án A, B, và C đều là những lợi ích của việc sử dụng hàm. Do đó, phương án D (Tất cả đều sai) là phát biểu không đúng.
Cho các khai báo sau:
void *tongquat;
int *nguyen;
char *kitu;
Phép gán nào là không hợp lệ:
Trong C/C++, kiểu void *
là một kiểu con trỏ đặc biệt, có thể trỏ tới bất kỳ kiểu dữ liệu nào. Tuy nhiên, khi sử dụng con trỏ void *
, cần phải ép kiểu tường minh khi gán giá trị cho một con trỏ kiểu khác hoặc khi truy xuất giá trị mà nó trỏ tới.
Phân tích các lựa chọn:
- A.
tongquat = nguyen;
: Gán một con trỏ kiểuint *
cho một con trỏ kiểuvoid *
là hợp lệ vìvoid *
có thể trỏ đến bất kỳ kiểu dữ liệu nào. - B.
*nguyen = *tongquat;
: Đây là phép gán không hợp lệ.tongquat
là con trỏ kiểuvoid *
, do đó không thể trực tiếp truy xuất giá trị mà nó trỏ tới (*tongquat
) mà không ép kiểu. Hơn nữa, ngay cả khi ép kiểu, ta cũng không biết kiểu dữ liệu màtongquat
trỏ tới là gì để có thể gán giá trị cho*nguyen
một cách an toàn. - C.
kitu = (char*)tongquat;
: Phép gán này gần đúng, nên ép kiểu tường minh từvoid*
sangchar*
trước khi gán. Trong đề,kitu = (char)tongquat;
là sai vì ép kiểu về 1 ký tự rồi gán cho con trỏ ký tự. - D.
tongquat = kitu;
: Tương tự như A, việc gán một con trỏ kiểuchar *
cho một con trỏ kiểuvoid *
là hợp lệ.
Vậy, phép gán không hợp lệ là B và C, tuy nhiên, vì đây là câu hỏi trắc nghiệm chọn MỘT đáp án, ta cần đánh giá xem đáp án nào sai hơn. Trong trường hợp này, B sai nghiêm trọng hơn vì truy xuất giá trị từ con trỏ void mà không ép kiểu là một lỗi lập trình nghiêm trọng, trong khi C sai do ép kiểu không đúng cách (ép kiểu thành `char` thay vì `char*`).
Trong C/C++, khi trừ hai con trỏ có cùng kiểu, kết quả sẽ là một số nguyên. Số nguyên này biểu thị số lượng phần tử (có kiểu dữ liệu mà con trỏ trỏ tới) giữa hai địa chỉ mà hai con trỏ đang giữ.
1. clrscr();: Hàm `clrscr()` không phải là một phần của thư viện chuẩn C/C++. Nó thường được sử dụng trong Turbo C++. Để chương trình biên dịch được trên các trình biên dịch khác, cần loại bỏ dòng này hoặc sử dụng các phương pháp xóa màn hình khác (ví dụ, sử dụng các lệnh điều khiển terminal).
2. char chu[80]: Mảng `chu` được khai báo nhưng không được khởi tạo. Do đó, nội dung của mảng là không xác định.
3. int tong, dem: Biến `tong` không được khởi tạo trước khi sử dụng trong vòng lặp `for (dem = 0; dem < tong; dem++);`. Điều này dẫn đến việc vòng lặp có thể chạy không đúng số lần, hoặc thậm chí không chạy nếu `tong` có giá trị âm hoặc bằng 0.
4. for (dem = 0; dem < tong; ++dem) putchar(toupper(chu[dem]));: Vòng lặp này cố gắng in các ký tự từ mảng `chu` sau khi chuyển chúng thành chữ hoa bằng hàm `toupper()`. Tuy nhiên, vì `chu` không được khởi tạo và `tong` có thể có giá trị không xác định, chương trình có thể truy cập vào các vùng nhớ không hợp lệ, dẫn đến hành vi không xác định hoặc lỗi.
5. return;: Trong hàm `main()`, nếu kiểu trả về là `int`, ta nên trả về một giá trị nguyên (thường là 0 để báo hiệu chương trình chạy thành công).
Do các lỗi trên, chương trình có thể không chạy được hoặc cho ra kết quả không xác định. Không có đáp án nào trong các lựa chọn phù hợp với hành vi thực tế của chương trình. Vì vậy, đáp án đúng nhất là "Kết quả khác".
Khi nhập "r 45", chương trình sẽ cố gắng đọc ký tự 'r' vào biến `n`. Do `n` là kiểu số nguyên, việc đọc ký tự 'r' vào `n` sẽ dẫn đến lỗi, `scanf` sẽ không thể chuyển đổi 'r' thành một số nguyên hợp lệ. Vì vậy, giá trị của `n` sẽ không được gán (hoặc được gán một giá trị không xác định tùy thuộc vào trình biên dịch).
Tiếp theo, `scanf` sẽ cố gắng đọc một số nguyên vào biến `c`. Vì việc đọc 'r' vào `n` đã thất bại, `scanf` sẽ dừng lại và không đọc thêm dữ liệu nào nữa.
Do đó, không có đáp án nào trong các lựa chọn là chính xác. Tuy nhiên, có một điểm quan trọng là mặc dù việc đọc sai định dạng có thể dẫn đến kết quả không mong muốn hoặc lỗi, nhưng trong trường hợp này chương trình vẫn sẽ tiếp tục chạy (mặc dù kết quả có thể không đúng như ý muốn). Đáp án D ("Kết quả khác") là đáp án gần đúng nhất trong trường hợp này vì các đáp án khác đều không mô tả chính xác tình huống xảy ra.
Tuy nhiên, điều quan trọng cần lưu ý là câu hỏi có vẻ như đang kiểm tra sự hiểu biết về lỗi định dạng trong `scanf`. Trong thực tế, trình biên dịch có thể đưa ra cảnh báo về việc sử dụng sai định dạng, nhưng chương trình vẫn sẽ được xây dựng. Khi chạy, `scanf` sẽ gặp lỗi và có thể không hoạt động như mong đợi.
Trong trường hợp này, không có đáp án nào hoàn toàn đúng. Tuy nhiên, theo cách hiểu thông thường, việc `scanf` không thể đọc dữ liệu theo đúng định dạng được xem là một dạng lỗi logic, dẫn đến kết quả không chính xác. Do đó, đáp án D ("Kết quả khác") là hợp lý nhất.
Tuy nhiên, cần lưu ý rằng nếu thứ tự đọc được đảo ngược lại thành `%d%c` thì chương trình sẽ báo lỗi khi biên dịch.
Lưu ý: Do không có đáp án chính xác tuyệt đối, và theo phân tích ở trên, đáp án gần đúng nhất là D. Tuy nhiên, cần hiểu rõ bản chất vấn đề là lỗi định dạng trong `scanf`.

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.