JavaScript is required

Kết quả của đoạn chương trình sau là gì? Nếu gõ vào: “r 45”.
char c;
int n;
scanf(“ % c % d”, & n, & c);

A.
n=45, c=’ ‘
B.
n=45, c=’r’
C.
Lỗi khi xây dựng chương trình
D.
Kết quả khác
Trả lời:

Đáp án đúng: D


Đoạn chương trình sử dụng hàm `scanf` để đọc dữ liệu từ đầu vào chuẩn. Cú pháp `scanf(" %c %d", &n, &c);` có một lỗi quan trọng: thứ tự của `%c` (đọc ký tự) và `%d` (đọc số nguyên) bị đảo ngược so với thứ tự của các biến `n` (int) và `c` (char) trong danh sách các tham số truyền vào hàm `scanf`. Điều này có nghĩa là chương trình sẽ cố gắng đọc một ký tự vào biến `n` (biến số nguyên) và một số nguyên vào biến `c` (biến ký tự). Khi nhập "r 45", chương trình sẽ cố gắng gán ký tự 'r' cho biến `n` kiểu `int`. Điều này sẽ dẫn đến việc `n` nhận một giá trị không mong muốn (thường là mã ASCII của 'r', nhưng không đảm bảo). Sau đó, chương trình sẽ cố gắng đọc '45' vào biến `c` kiểu `char`, điều này cũng sẽ không hoạt động như mong đợi vì kiểu dữ liệu không phù hợp. Vì thứ tự chỉ định định dạng và biến không khớp, và chương trình cố gắng gán một ký tự cho một biến số nguyên, kết quả sẽ không phải là `n = 45` và `c = 'r'`. Do đó, đáp án B không đúng. Đáp án A cũng không đúng vì lý do tương tự. Tuy nhiên, trong thực tế, cách chương trình xử lý việc gán sai kiểu này phụ thuộc vào trình biên dịch và hệ điều hành. Một số trình biên dịch có thể cảnh báo, nhưng chương trình vẫn có thể chạy, mặc dù với kết quả không mong muốn. Do đó, đáp án D ("Kết quả khác") có vẻ phù hợp nhất trong tình huống này, vì kết quả chắc chắn sẽ không phải là A hoặc B. Tuy nhiên, cần lưu ý rằng theo chuẩn C, việc sử dụng sai định dạng trong `scanf` là một lỗi lập trình nghiêm trọng và có thể dẫn đến hành vi không xác định. Trong một số trường hợp, chương trình có thể gặp sự cố. Mặc dù đáp án D có vẻ gần đúng nhất, nhưng có thể lập luận rằng chương trình có "lỗi" theo nghĩa rộng. Trong các kỳ thi, nên chọn đáp án phản ánh rõ ràng nhất lỗi trong code. Do đó, đáp án D (Kết quả khác) là đáp án chính xác nhất.

Tổng hợp 600+ câu hỏi trắc nghiệm lập trình C có đáp án đầy đủ nhằm giúp các bạn dễ dàng ôn tập lại toàn bộ các kiến thức.


50 câu hỏi 60 phút

Câu hỏi liên quan