Trả lời:
Đáp án đúng: C
Trong ngôn ngữ lập trình C, định dạng `%p` được sử dụng để in ra địa chỉ bộ nhớ của một biến hoặc con trỏ. Các định dạng khác có chức năng sau:
- `%f`: Dùng để in ra số thực dấu phẩy động.
- `%s`: Dùng để in ra chuỗi ký tự.
- `%h`: Không phải là một định dạng chuẩn trong C. Có thể là một định dạng tùy chỉnh hoặc không hợp lệ tùy thuộc vào ngữ cảnh sử dụng.
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
Lời giải:
Đáp án đúng: C
Câu hỏi yêu cầu tìm phát biểu sai về tập tin.
- Phương án A đúng: Tập tin là một khối dữ liệu được lưu trữ trên bộ nhớ ngoài (ví dụ: ổ cứng, USB) và được quản lý bởi hệ điều hành. Dữ liệu này có thể do người dùng tạo ra hoặc do một chương trình tạo ra.
- Phương án B đúng: Hệ điều hành xác định một tập tin thông qua tên đầy đủ của nó, bao gồm đường dẫn (vị trí thư mục) và tên tập tin. Điều này cho phép hệ điều hành tìm và truy cập chính xác tập tin đó.
- Phương án C sai: Trong ngôn ngữ C, đường dẫn tập tin sử dụng dấu gạch chéo ngược (\) để phân tách các thư mục. Tuy nhiên, trong chuỗi ký tự (string literals) trong C, dấu gạch chéo ngược được sử dụng làm ký tự thoát (escape character). Vì vậy, để biểu diễn một dấu gạch chéo ngược thực sự, ta cần sử dụng hai dấu gạch chéo ngược (\\). Do đó, cách viết "C:\\tm\\TEN.txt" mới đúng, còn "C:\tm\TEN.txt" có thể gây ra lỗi biên dịch hoặc hành vi không mong muốn.
- Phương án D đúng: "C:/tm/TEN.txt" là cách mô tả tập tin hợp lệ trong C, đặc biệt khi làm việc với các hệ điều hành khác nhau hoặc khi sử dụng các thư viện hỗ trợ đường dẫn theo kiểu POSIX.
Vậy, phương án C là sai.
- Phương án A đúng: Tập tin là một khối dữ liệu được lưu trữ trên bộ nhớ ngoài (ví dụ: ổ cứng, USB) và được quản lý bởi hệ điều hành. Dữ liệu này có thể do người dùng tạo ra hoặc do một chương trình tạo ra.
- Phương án B đúng: Hệ điều hành xác định một tập tin thông qua tên đầy đủ của nó, bao gồm đường dẫn (vị trí thư mục) và tên tập tin. Điều này cho phép hệ điều hành tìm và truy cập chính xác tập tin đó.
- Phương án C sai: Trong ngôn ngữ C, đường dẫn tập tin sử dụng dấu gạch chéo ngược (\) để phân tách các thư mục. Tuy nhiên, trong chuỗi ký tự (string literals) trong C, dấu gạch chéo ngược được sử dụng làm ký tự thoát (escape character). Vì vậy, để biểu diễn một dấu gạch chéo ngược thực sự, ta cần sử dụng hai dấu gạch chéo ngược (\\). Do đó, cách viết "C:\\tm\\TEN.txt" mới đúng, còn "C:\tm\TEN.txt" có thể gây ra lỗi biên dịch hoặc hành vi không mong muốn.
- Phương án D đúng: "C:/tm/TEN.txt" là cách mô tả tập tin hợp lệ trong C, đặc biệt khi làm việc với các hệ điều hành khác nhau hoặc khi sử dụng các thư viện hỗ trợ đường dẫn theo kiểu POSIX.
Vậy, phương án C là sai.
Lời giải:
Đáp án đúng: D
Câu hỏi kiểm tra kiến thức về cách C đọc các kí tự đặc biệt từ file văn bản, đặc biệt là các kí tự liên quan đến việc xuống dòng và kết thúc file.
* Phương án A: Sai. Kí tự có mã 1A (EOF - End Of File) thường được C dùng để báo hiệu kết thúc file, chứ không đọc thành -1. Việc đọc đến kí tự này thường khiến hàm đọc file trả về giá trị báo hiệu kết thúc file (ví dụ `EOF`).
* Phương án B: Đúng. Trong các hệ thống như Windows, việc xuống dòng trong file văn bản thường được biểu diễn bằng hai kí tự: OD (Carriage Return - CR) và OA (Line Feed - LF). Khi đọc file văn bản trên các hệ thống này, C (và nhiều ngôn ngữ khác) thường chuyển đổi cặp kí tự OD OA thành một kí tự xuống dòng duy nhất (OA). Điều này giúp chương trình xử lý file văn bản một cách thống nhất, không phụ thuộc vào hệ điều hành.
* Phương án C: Sai. C không bỏ qua kí tự OD. Như đã giải thích ở phương án B, kí tự OD thường được kết hợp với OA để biểu diễn việc xuống dòng, và C sẽ xử lý cặp kí tự này.
* Phương án D: Sai. Vì A và C sai.
Vậy, phương án B là đáp án đúng nhất.
* Phương án A: Sai. Kí tự có mã 1A (EOF - End Of File) thường được C dùng để báo hiệu kết thúc file, chứ không đọc thành -1. Việc đọc đến kí tự này thường khiến hàm đọc file trả về giá trị báo hiệu kết thúc file (ví dụ `EOF`).
* Phương án B: Đúng. Trong các hệ thống như Windows, việc xuống dòng trong file văn bản thường được biểu diễn bằng hai kí tự: OD (Carriage Return - CR) và OA (Line Feed - LF). Khi đọc file văn bản trên các hệ thống này, C (và nhiều ngôn ngữ khác) thường chuyển đổi cặp kí tự OD OA thành một kí tự xuống dòng duy nhất (OA). Điều này giúp chương trình xử lý file văn bản một cách thống nhất, không phụ thuộc vào hệ điều hành.
* Phương án C: Sai. C không bỏ qua kí tự OD. Như đã giải thích ở phương án B, kí tự OD thường được kết hợp với OA để biểu diễn việc xuống dòng, và C sẽ xử lý cặp kí tự này.
* Phương án D: Sai. Vì A và C sai.
Vậy, phương án B là đáp án đúng nhất.
Lời giải:
Đáp án đúng: C
Đầu tiên, ta cần xác định giá trị của các trường d1, d2, và d3 sau khi thực hiện đoạn code. Ban đầu, v.d1 = 2, v.d2 = 3, v.d3 = 4. Sau dòng lệnh v.d1++, giá trị của v.d1 sẽ tăng lên 1, trở thành 3. Vậy, v.d1 = 3, v.d2 = 3, v.d3 = 4. Để tính giá trị trung bình, ta cộng các giá trị này lại và chia cho số lượng trường (3): (3 + 3 + 4) / 3 = 10 / 3 = 3.333... Vì không có đáp án nào trùng khớp hoàn toàn với 3.333..., đáp án chính xác nhất là 'Giá trị khác'.
Lời giải:
Đáp án đúng: C
Đoạn chương trình có lỗi vì kiểu dữ liệu của con trỏ không tương thích. Cụ thể:
1. `int a, *p, *q;`: Khai báo biến `a` kiểu `int` và hai con trỏ `p` và `q` cùng kiểu `int *`.
2. `float *t;`: Khai báo con trỏ `t` kiểu `float *`.
3. `a = 5;`: Gán giá trị 5 cho biến `a`.
4. `p = &a;`: Gán địa chỉ của `a` cho con trỏ `p`.
5. `p = q;`: Gán giá trị của `q` (là một địa chỉ) cho `p`. Tuy nhiên, `q` chưa được khởi tạo, nên `p` sẽ chứa một địa chỉ không xác định (hoặc `NULL` nếu được khởi tạo mặc định).
6. `t = p;`: Lỗi chính ở đây. Cố gắng gán giá trị của con trỏ `p` (kiểu `int *`) cho con trỏ `t` (kiểu `float *`). Trong C, việc gán trực tiếp giữa các con trỏ khác kiểu (mà không ép kiểu tường minh) thường dẫn đến lỗi hoặc cảnh báo, vì trình biên dịch không cho phép gán địa chỉ của một biến kiểu `int` cho một biến kiểu `float` một cách trực tiếp.
7. `printf(" %d %f", a, t);`: Lệnh `printf` sử dụng định dạng `%f` để in giá trị mà `t` trỏ tới (dưới dạng số thực dấu phẩy động). Tuy nhiên, `t` đang trỏ tới một vùng nhớ có thể không phải là một số `float` hợp lệ, hoặc thậm chí là một địa chỉ không hợp lệ, nên kết quả là không xác định hoặc gây ra lỗi.
Vì có lỗi gán kiểu con trỏ, chương trình sẽ báo lỗi hoặc cảnh báo khi biên dịch. Do đó, đáp án đúng nhất là "Chương trình lỗi".
1. `int a, *p, *q;`: Khai báo biến `a` kiểu `int` và hai con trỏ `p` và `q` cùng kiểu `int *`.
2. `float *t;`: Khai báo con trỏ `t` kiểu `float *`.
3. `a = 5;`: Gán giá trị 5 cho biến `a`.
4. `p = &a;`: Gán địa chỉ của `a` cho con trỏ `p`.
5. `p = q;`: Gán giá trị của `q` (là một địa chỉ) cho `p`. Tuy nhiên, `q` chưa được khởi tạo, nên `p` sẽ chứa một địa chỉ không xác định (hoặc `NULL` nếu được khởi tạo mặc định).
6. `t = p;`: Lỗi chính ở đây. Cố gắng gán giá trị của con trỏ `p` (kiểu `int *`) cho con trỏ `t` (kiểu `float *`). Trong C, việc gán trực tiếp giữa các con trỏ khác kiểu (mà không ép kiểu tường minh) thường dẫn đến lỗi hoặc cảnh báo, vì trình biên dịch không cho phép gán địa chỉ của một biến kiểu `int` cho một biến kiểu `float` một cách trực tiếp.
7. `printf(" %d %f", a, t);`: Lệnh `printf` sử dụng định dạng `%f` để in giá trị mà `t` trỏ tới (dưới dạng số thực dấu phẩy động). Tuy nhiên, `t` đang trỏ tới một vùng nhớ có thể không phải là một số `float` hợp lệ, hoặc thậm chí là một địa chỉ không hợp lệ, nên kết quả là không xác định hoặc gây ra lỗi.
Vì có lỗi gán kiểu con trỏ, chương trình sẽ báo lỗi hoặc cảnh báo khi biên dịch. Do đó, đáp án đúng nhất là "Chương trình lỗi".
Lời giải:
Đáp án đúng: B
Câu hỏi này kiểm tra kiến thức về hai hàm `rectangle()` và `bar()` trong đồ họa máy tính (thường dùng trong các thư viện đồ họa như graphics.h trong Turbo C++).
* `rectangle(int x1, int y1, int x2, int y2)`: Hàm này vẽ một hình chữ nhật với đường viền. (x1, y1) là tọa độ góc trên bên trái và (x2, y2) là tọa độ góc dưới bên phải của hình chữ nhật.
* `bar(int x1, int y1, int x2, int y2)`: Hàm này vẽ một hình chữ nhật được tô đầy (vẽ cả đường viền và tô màu bên trong). (x1, y1) là tọa độ góc trên bên trái và (x2, y2) là tọa độ góc dưới bên phải của hình chữ nhật.
Như vậy, hàm `rectangle()` chỉ vẽ đường viền, còn hàm `bar()` vẽ cả đường viền và tô màu bên trong.
Phân tích các phương án:
* A. Cả 2 hàm đều vẽ hình chữ nhật. Phát biểu này đúng một phần, nhưng chưa đầy đủ vì không đề cập đến việc tô màu.
* B. Hàm thứ nhất chỉ vẽ đường viền hình chữ nhật, không tô màu bên trong còn hàm thứ 2 thì tô cả màu bên trong. Đây là phát biểu chính xác nhất.
* C. Hàm thứ 2 chỉ vẽ đường viền hình chữ nhật, không tô màu bên trong còn hàm thứ nhất thì tô cả màu bên trong. Phát biểu này ngược lại và sai.
* D. Cả hai hàm đều vẽ hình chữ nhật và tô cả màu bên trong. Phát biểu này sai vì hàm `rectangle()` chỉ vẽ đường viền.
Vậy đáp án đúng là B.
* `rectangle(int x1, int y1, int x2, int y2)`: Hàm này vẽ một hình chữ nhật với đường viền. (x1, y1) là tọa độ góc trên bên trái và (x2, y2) là tọa độ góc dưới bên phải của hình chữ nhật.
* `bar(int x1, int y1, int x2, int y2)`: Hàm này vẽ một hình chữ nhật được tô đầy (vẽ cả đường viền và tô màu bên trong). (x1, y1) là tọa độ góc trên bên trái và (x2, y2) là tọa độ góc dưới bên phải của hình chữ nhật.
Như vậy, hàm `rectangle()` chỉ vẽ đường viền, còn hàm `bar()` vẽ cả đường viền và tô màu bên trong.
Phân tích các phương án:
* A. Cả 2 hàm đều vẽ hình chữ nhật. Phát biểu này đúng một phần, nhưng chưa đầy đủ vì không đề cập đến việc tô màu.
* B. Hàm thứ nhất chỉ vẽ đường viền hình chữ nhật, không tô màu bên trong còn hàm thứ 2 thì tô cả màu bên trong. Đây là phát biểu chính xác nhất.
* C. Hàm thứ 2 chỉ vẽ đường viền hình chữ nhật, không tô màu bên trong còn hàm thứ nhất thì tô cả màu bên trong. Phát biểu này ngược lại và sai.
* D. Cả hai hàm đều vẽ hình chữ nhật và tô cả màu bên trong. Phát biểu này sai vì hàm `rectangle()` chỉ vẽ đường viền.
Vậy đáp án đúng là B.
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

FORM.08: Bộ 130+ Biểu Mẫu Thống Kê Trong Doanh Nghiệp
136 tài liệu563 lượt tải

FORM.07: Bộ 125+ Biểu Mẫu Báo Cáo Trong Doanh Nghiệp
125 tài liệu585 lượt tải

FORM.06: Bộ 320+ Biểu Mẫu Hành Chính Thông Dụng
325 tài liệu608 lượt tải

FORM.05: Bộ 330+ Biểu Mẫu Thuế - Kê Khai Thuế Mới Nhất
331 tài liệu1010 lượt tải

FORM.04: Bộ 240+ Biểu Mẫu Chứng Từ Kế Toán Thông Dụng
246 tài liệu802 lượt tải

CEO.22: Bộ Tài Liệu Quy Trình Kiểm Toán, Kiểm Soát Nội Bộ Doanh Nghiệp
138 tài liệu417 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