1. Trong C, một hàm `void` là gì?
A. Một hàm không nhận bất kỳ tham số nào.
B. Một hàm không trả về bất kỳ giá trị nào.
C. Một hàm chỉ có thể được gọi một lần.
D. Một hàm luôn trả về 0.
2. Hàm nào được sử dụng để in ra màn hình trong C?
A. print()
B. display()
C. printf()
D. show()
3. Trong C, một biến static được khai báo bên trong một hàm có ý nghĩa gì?
A. Biến chỉ có thể được truy cập trong hàm đó.
B. Biến được lưu trữ trong bộ nhớ động.
C. Biến giữ giá trị của nó giữa các lần gọi hàm.
D. Biến không thể thay đổi giá trị.
4. Đâu là cách khai báo một mảng các con trỏ ký tự trong C?
A. char **arr;
B. char *arr[];
C. char arr*[];
D. char arr[][];
5. Chỉ thị tiền xử lý nào được sử dụng để bao gồm một tệp tiêu đề trong C?
A. #import
B. #include
C. #using
D. #add
6. Sự khác biệt chính giữa `struct` và `union` trong C là gì?
A. `struct` lưu trữ các thành viên ở các vị trí bộ nhớ riêng biệt, trong khi `union` chia sẻ cùng một vị trí bộ nhớ.
B. `struct` chỉ có thể chứa các biến kiểu nguyên thủy, trong khi `union` có thể chứa bất kỳ kiểu dữ liệu nào.
C. `struct` được sử dụng cho các hàm, trong khi `union` được sử dụng cho các biến.
D. Không có sự khác biệt, chúng là các từ khóa thay thế cho nhau.
7. Trong C, làm thế nào để truyền một mảng vào một hàm sao cho hàm có thể sửa đổi mảng gốc?
A. Truyền mảng theo giá trị.
B. Truyền một bản sao của mảng.
C. Truyền một con trỏ đến mảng.
D. Không thể sửa đổi mảng gốc trong hàm.
8. Điều gì xảy ra nếu bạn cố gắng truy cập một phần tử mảng vượt quá giới hạn trong C?
A. Một lỗi biên dịch sẽ xảy ra.
B. Chương trình sẽ dừng thực thi.
C. Hành vi không xác định (undefined behavior) có thể xảy ra.
D. Mảng sẽ tự động mở rộng.
9. Trong C, sự khác biệt giữa `const char* p` và `char* const p` là gì?
A. `const char* p`: con trỏ không đổi, `char* const p`: dữ liệu không đổi.
B. `const char* p`: dữ liệu không đổi, `char* const p`: con trỏ không đổi.
C. Chúng hoàn toàn giống nhau.
D. Không có sự khác biệt, cả hai đều sai cú pháp.
10. Hàm nào được sử dụng để ghi dữ liệu vào một tệp trong C?
A. read()
B. write()
C. fwrite()
D. fread()
11. Trong C, tham số nào sau đây của hàm `main()` là bắt buộc?
A. int argc
B. char *argv[]
C. Không có tham số nào là bắt buộc
D. void
12. Trong C, kiểu dữ liệu nào được sử dụng để biểu diễn giá trị logic (true/false)?
A. bool
B. logical
C. int (0 hoặc 1)
D. char (‘t’ hoặc ‘f’)
13. Hàm nào được sử dụng để đọc một dòng từ đầu vào chuẩn (stdin) trong C?
A. scanf()
B. gets()
C. fgets()
D. readline()
14. Hàm nào dùng để so sánh hai chuỗi trong C?
A. compare()
B. strcmp()
C. stringCompare()
D. equals()
15. Lệnh nào sau đây được sử dụng để thoát khỏi một vòng lặp trong C?
A. continue
B. exit
C. break
D. return
16. Trong C, `NULL` là gì?
A. Một kiểu dữ liệu.
B. Một macro định nghĩa một con trỏ null.
C. Một hàm trả về 0.
D. Một từ khóa để kết thúc chương trình.
17. Trong C, `typedef` được sử dụng để làm gì?
A. Định nghĩa một hàm mới.
B. Tạo một bí danh cho một kiểu dữ liệu hiện có.
C. Khai báo một biến toàn cục.
D. Bao gồm một tệp tiêu đề.
18. Trong C, tiền xử lý (preprocessor) là gì?
A. Một phần của trình biên dịch để tối ưu hóa mã.
B. Một chương trình chạy trước khi biên dịch để xử lý các chỉ thị.
C. Một công cụ để gỡ lỗi mã.
D. Một thư viện chứa các hàm toán học.
19. Toán tử nào được sử dụng để lấy địa chỉ của một biến trong C?
20. Trong C, chức năng của `fflush(stdin)` là gì?
A. Xóa bộ nhớ đã cấp phát.
B. Xóa bộ đệm đầu ra.
C. Xóa bộ đệm đầu vào.
D. Đóng một tệp.
21. Trong C, một con trỏ là gì?
A. Một biến lưu trữ một giá trị số nguyên.
B. Một biến lưu trữ địa chỉ của một biến khác.
C. Một kiểu dữ liệu đặc biệt cho ký tự.
D. Một hàm không trả về giá trị.
22. Hàm nào được sử dụng để cấp phát bộ nhớ động trong C?
A. allocate()
B. malloc()
C. create()
D. new()
23. Toán tử nào được sử dụng để truy cập các thành viên của một cấu trúc thông qua một con trỏ đến cấu trúc đó?
24. Để giải phóng bộ nhớ đã được cấp phát động trong C, hàm nào được sử dụng?
A. release()
B. free()
C. deallocate()
D. delete()
25. Kiểu dữ liệu nào không có trong C?
A. int
B. char
C. float
D. string
26. Hàm nào được sử dụng để đọc dữ liệu từ một tệp trong C?
A. output()
B. input()
C. fread()
D. fwrite()
27. Toán tử `sizeof` trong C trả về gì?
A. Số lượng biến trong một mảng.
B. Kích thước của một biến hoặc kiểu dữ liệu tính bằng byte.
C. Địa chỉ của một biến.
D. Giá trị của một biến.
28. Trong C, kiểu dữ liệu nào được sử dụng để lưu trữ một ký tự duy nhất?
A. int
B. float
C. char
D. string
29. Cấu trúc điều khiển nào cho phép thực hiện một khối lệnh nhiều lần dựa trên một điều kiện?
A. if
B. switch
C. for
D. typedef
30. Cú pháp nào sau đây đúng để định nghĩa một macro trong C?
A. define macro_name value
B. #define macro_name value
C. macro macro_name = value;
D. const macro_name = value;
31. Trong C, hàm `fprintf()` được sử dụng để làm gì?
A. Đọc dữ liệu từ một file
B. Ghi dữ liệu vào một file
C. Định dạng dữ liệu để in ra màn hình
D. Đóng một file
32. Hàm `fopen()` trả về giá trị gì khi mở file không thành công?
33. Trong C, toán tử `sizeof` trả về cái gì?
A. Địa chỉ của một biến
B. Kích thước của một biến hoặc kiểu dữ liệu tính bằng byte
C. Giá trị của một biến
D. Số lượng phần tử trong một mảng
34. Cú pháp nào sau đây đúng để khai báo một cấu trúc (struct) trong C?
A. structure MyStruct { int x; };
B. struct MyStruct { int x; };
C. class MyStruct { int x; };
D. typedef MyStruct { int x; };
35. Cấu trúc điều khiển nào sau đây cho phép thực thi một khối lệnh nhiều lần dựa trên một điều kiện?
A. if
B. switch
C. for
D. else
36. Trong C, một hàm `static` có ý nghĩa gì?
A. Hàm chỉ có thể được gọi một lần duy nhất
B. Hàm được lưu trữ trong bộ nhớ tĩnh
C. Hàm chỉ có thể được truy cập trong file mà nó được định nghĩa
D. Hàm không thể nhận bất kỳ tham số nào
37. Trong C, một mảng là gì?
A. Một kiểu dữ liệu nguyên thủy
B. Một tập hợp các biến có kiểu dữ liệu khác nhau
C. Một tập hợp các biến có cùng kiểu dữ liệu
D. Một con trỏ
38. Hàm nào được sử dụng để cấp phát bộ nhớ động trong C?
A. free()
B. malloc()
C. sizeof()
D. typedef
39. Trong C, tiền xử lý là gì?
A. Một giai đoạn trong quá trình biên dịch, trong đó các chỉ thị tiền xử lý được thực hiện
B. Một cách để tối ưu hóa mã
C. Một thư viện chuẩn của C
D. Một công cụ để gỡ lỗi chương trình
40. Trong C, vòng lặp vô hạn có thể được tạo ra bằng cách nào?
A. for (i = 0; i < 10; i–)
B. while (1)
C. if (1)
D. switch (1)
41. Chỉ thị tiền xử lý `#include` có chức năng gì trong C?
A. Định nghĩa một macro
B. Bao gồm nội dung của một file header vào trong chương trình
C. Khai báo một biến toàn cục
D. Thực hiện một phép tính số học
42. Hàm nào được sử dụng để so sánh hai chuỗi trong C?
A. strcmp()
B. strcpy()
C. strcat()
D. strlen()
43. Đâu là sự khác biệt giữa `const char*` và `char const*` trong C?
A. Không có sự khác biệt, chúng hoàn toàn tương đương
B. `const char*` là một con trỏ không đổi đến một ký tự, trong khi `char const*` là một con trỏ đến một ký tự không đổi
C. `char const*` là một con trỏ không đổi đến một ký tự, trong khi `const char*` là một con trỏ đến một ký tự không đổi
D. `const char*` chỉ có thể sử dụng trong C++, còn `char const*` trong C
44. Trong ngôn ngữ lập trình C, kiểu dữ liệu nào được sử dụng để lưu trữ một ký tự duy nhất?
A. float
B. int
C. char
D. double
45. Định nghĩa nào sau đây mô tả đúng nhất về một biến toàn cục trong C?
A. Biến chỉ có thể được truy cập trong hàm mà nó được khai báo
B. Biến được khai báo bên trong một khối lệnh
C. Biến được khai báo bên ngoài tất cả các hàm và có thể được truy cập từ bất kỳ hàm nào trong chương trình
D. Biến chỉ có thể được sử dụng trong một file duy nhất
46. Trong C, hàm `atoi()` dùng để làm gì?
A. Chuyển đổi một chuỗi thành một số nguyên
B. Chuyển đổi một số nguyên thành một chuỗi
C. Chuyển đổi một ký tự thành mã ASCII
D. Chuyển đổi một số thực thành một số nguyên
47. Điểm khác biệt chính giữa `while` và `do…while` trong C là gì?
A. Không có sự khác biệt, chúng hoàn toàn giống nhau
B. `while` luôn thực hiện ít nhất một lần, trong khi `do…while` thì không
C. `do…while` luôn thực hiện ít nhất một lần, trong khi `while` thì không
D. `while` chỉ có thể sử dụng với số nguyên, còn `do…while` thì không
48. Trong C, `typedef` được sử dụng để làm gì?
A. Định nghĩa một hàm mới
B. Tạo một biến mới
C. Đặt một tên khác cho một kiểu dữ liệu đã tồn tại
D. Khai báo một biến toàn cục
49. Toán tử nào trong C được sử dụng để lấy địa chỉ của một biến?
50. Đâu là cách khai báo một con trỏ trong C?
A. int variable;
B. int *ptr;
C. int &ref;
D. int array[]
51. Trong C, `volatile` keyword dùng để làm gì?
A. Để khai báo một biến không thể thay đổi
B. Để báo cho trình biên dịch biết rằng giá trị của một biến có thể bị thay đổi bởi các yếu tố bên ngoài chương trình
C. Để tối ưu hóa mã
D. Để khai báo một biến chỉ có thể truy cập trong một hàm
52. Hàm nào sau đây được sử dụng để in ra màn hình trong C?
A. scanf()
B. printf()
C. gets()
D. puts()
53. Sự khác biệt chính giữa `struct` và `union` trong C là gì?
A. Không có sự khác biệt, chúng hoàn toàn giống nhau
B. Các thành viên của `struct` chia sẻ cùng một vùng nhớ, trong khi các thành viên của `union` có vùng nhớ riêng
C. Các thành viên của `union` chia sẻ cùng một vùng nhớ, trong khi các thành viên của `struct` có vùng nhớ riêng
D. `struct` chỉ có thể chứa các biến kiểu `int`, còn `union` thì không
54. Đâu là mục đích chính của việc sử dụng các hàm trong lập trình C?
A. Để làm cho code khó đọc hơn
B. Để giảm kích thước của chương trình
C. Để chia chương trình thành các phần nhỏ hơn, dễ quản lý và tái sử dụng
D. Để tăng tốc độ thực thi của chương trình
55. Hàm nào trong thư viện chuẩn của C được sử dụng để đọc một dòng từ input?
A. scanf()
B. printf()
C. gets()
D. getchar()
56. Đâu là cách khai báo đúng một mảng các con trỏ đến kiểu `int` trong C?
A. int *arr[];
B. int **arr;
C. int arr*[];
D. int &arr[];
57. Đâu là cách truyền tham số cho hàm trong C để hàm có thể thay đổi giá trị của biến gốc?
A. Truyền bằng giá trị
B. Truyền bằng tham chiếu
C. Truyền bằng con trỏ
D. Không có cách nào
58. Trong C, một `union` là gì?
A. Một kiểu dữ liệu để lưu trữ nhiều giá trị khác nhau tại các địa chỉ bộ nhớ khác nhau
B. Một kiểu dữ liệu để lưu trữ nhiều giá trị khác nhau tại cùng một địa chỉ bộ nhớ
C. Một cách để tạo các hàm đa hình
D. Một kiểu dữ liệu để tạo mảng động
59. Hàm nào được sử dụng để giải phóng bộ nhớ đã được cấp phát động trong C?
A. malloc()
B. calloc()
C. free()
D. realloc()
60. Trong C, hàm `exit()` được sử dụng để làm gì?
A. Kết thúc một vòng lặp
B. Thoát khỏi chương trình
C. Bắt đầu một chương trình mới
D. Đóng một file
61. Trong C, ý nghĩa của `#include ` là gì?
A. Khai báo một hàm tên là stdio
B. Nhúng nội dung của file stdio.h vào chương trình
C. Biên dịch file stdio.h
D. Không có ý nghĩa gì, đây chỉ là comment
62. Trong C, kiểu dữ liệu nào phù hợp nhất để lưu trữ địa chỉ bộ nhớ?
A. int
B. float
C. char
D. pointer
63. Sự khác biệt giữa `while` và `do…while` trong C là gì?
A. `while` kiểm tra điều kiện trước khi thực hiện vòng lặp, `do…while` kiểm tra sau khi thực hiện
B. `while` chỉ dùng cho số, `do…while` dùng cho chuỗi
C. `while` không cần điều kiện, `do…while` bắt buộc phải có
D. Không có sự khác biệt, chúng hoàn toàn giống nhau
64. Thế nào là đệ quy trong lập trình C?
A. Một hàm gọi chính nó
B. Một hàm gọi một hàm khác
C. Một biến được khai báo nhiều lần
D. Một cấu trúc dữ liệu phức tạp
65. Trong C, hàm nào được sử dụng để in dữ liệu ra màn hình?
A. scanf()
B. printf()
C. gets()
D. puts()
66. Sự khác biệt chính giữa `struct` và `union` trong C là gì?
A. `struct` lưu trữ các thành viên ở các vùng nhớ khác nhau, `union` chia sẻ cùng một vùng nhớ
B. `struct` chỉ có thể chứa các biến kiểu nguyên, `union` có thể chứa mọi kiểu dữ liệu
C. `struct` được sử dụng cho các hàm, `union` được sử dụng cho các biến
D. Không có sự khác biệt, chúng hoàn toàn giống nhau
67. Trong C, mục đích của việc sử dụng `typedef` là gì?
A. Định nghĩa một kiểu dữ liệu mới
B. Tạo ra một bí danh cho một kiểu dữ liệu đã tồn tại
C. Khai báo một biến toàn cục
D. Khai báo một hàm
68. Trong C, kiểu dữ liệu `void` thường được sử dụng để làm gì?
A. Chỉ định một biến không có kiểu
B. Chỉ định một hàm không trả về giá trị
C. Chỉ định một con trỏ không kiểu
D. Tất cả các đáp án trên
69. Trong C, làm thế nào để truyền một mảng vào một hàm sao cho hàm có thể thay đổi nội dung của mảng?
A. Truyền mảng theo giá trị
B. Truyền mảng theo tham chiếu (sử dụng con trỏ)
C. Không thể thay đổi nội dung của mảng khi truyền vào hàm
D. Sử dụng biến toàn cục
70. Toán tử nào sau đây được sử dụng để gán giá trị trong C?
71. Trong C, hàm `atoi()` dùng để làm gì?
A. Chuyển đổi một số nguyên thành chuỗi
B. Chuyển đổi một chuỗi thành một số nguyên
C. Chuyển đổi một ký tự thành mã ASCII
D. Chuyển đổi một chuỗi thành chữ hoa
72. Trong C, hàm nào được sử dụng để cấp phát bộ nhớ động?
A. free()
B. malloc()
C. sizeof()
D. realloc()
73. Trong C, hàm nào được sử dụng để giải phóng bộ nhớ đã được cấp phát bởi `malloc()`?
A. allocate()
B. deallocate()
C. free()
D. release()
74. Lệnh `#define` được sử dụng để làm gì trong C?
A. Khai báo một biến
B. Định nghĩa một macro
C. Khai báo một hàm
D. Nhúng một file header
75. Hàm `strcmp()` được sử dụng để làm gì trong C?
A. Sao chép một chuỗi
B. Nối hai chuỗi
C. So sánh hai chuỗi
D. Tìm kiếm một chuỗi con trong một chuỗi
76. Trong ngôn ngữ lập trình C, kiểu dữ liệu nào được sử dụng để lưu trữ một ký tự?
A. float
B. int
C. char
D. double
77. Trong C, điều gì xảy ra nếu bạn cố gắng truy cập một phần tử mảng vượt quá kích thước của mảng?
A. Chương trình sẽ báo lỗi biên dịch
B. Chương trình sẽ báo lỗi khi chạy
C. Chương trình có thể hoạt động không ổn định hoặc bị crash
D. Không có gì xảy ra, chương trình vẫn chạy bình thường
78. Cấu trúc điều khiển nào cho phép thực hiện một khối lệnh nhiều lần trong C?
A. if
B. switch
C. for
D. else
79. Trong C, hàm `fopen()` trả về giá trị gì khi mở file không thành công?
80. Trong C, khi nào nên sử dụng con trỏ hàm?
A. Khi cần truyền một hàm như một tham số cho một hàm khác
B. Khi cần truy cập một biến toàn cục
C. Khi cần khai báo một mảng
D. Khi cần sử dụng cấu trúc
81. Điều gì sẽ xảy ra nếu bạn chia một số cho 0 trong C?
A. Chương trình sẽ báo lỗi biên dịch
B. Chương trình sẽ tiếp tục chạy với kết quả là 0
C. Chương trình sẽ bị dừng và báo lỗi runtime
D. Không có gì xảy ra, kết quả sẽ là vô cực
82. Toán tử nào được sử dụng để lấy địa chỉ của một biến trong C?
83. Đâu là cách khai báo một mảng số nguyên có 5 phần tử trong C?
A. int array[];
B. int array[5];
C. array int[5];
D. int array[n];
84. Hàm nào sau đây được sử dụng để đọc một dòng từ input chuẩn trong C?
A. scanf
B. printf
C. gets
D. fscan
85. Từ khóa nào được sử dụng để kết thúc một vòng lặp ngay lập tức trong C?
A. continue
B. exit
C. return
D. break
86. Trong C, `const` được sử dụng để làm gì?
A. Khai báo một biến hằng
B. Khai báo một biến động
C. Khai báo một hàm inline
D. Khai báo một cấu trúc
87. Biến static trong C có đặc điểm gì?
A. Biến chỉ có thể được truy cập trong hàm mà nó được khai báo
B. Biến được lưu trữ trong bộ nhớ heap
C. Biến giữ giá trị của nó giữa các lần gọi hàm
D. Biến tự động bị hủy khi hàm kết thúc
88. Trong C, ý nghĩa của từ khóa `volatile` là gì?
A. Biến chỉ có thể được truy cập bởi một thread
B. Biến có thể thay đổi bởi các yếu tố bên ngoài chương trình
C. Biến được lưu trữ trong bộ nhớ cache
D. Biến không thể thay đổi giá trị
89. Đâu là cách khai báo một con trỏ tới một biến kiểu số nguyên trong C?
A. int ptr;
B. int *ptr;
C. *int ptr;
D. ptr int;
90. Trong C, tiền xử lý (preprocessor) được thực hiện trước giai đoạn nào?
A. Biên dịch (compilation)
B. Liên kết (linking)
C. Thực thi (execution)
D. Gỡ lỗi (debugging)
91. Trong C, cấu trúc dữ liệu nào hoạt động theo nguyên tắc LIFO (Last In, First Out)?
A. Queue (Hàng đợi)
B. Linked List (Danh sách liên kết)
C. Stack (Ngăn xếp)
D. Tree (Cây)
92. Từ khóa `static` có ý nghĩa gì khi được sử dụng bên trong một hàm trong C?
A. Biến chỉ có thể được truy cập từ hàm đó.
B. Biến được lưu trữ trong bộ nhớ động.
C. Biến được khởi tạo mỗi khi hàm được gọi.
D. Biến giữ giá trị của nó giữa các lần gọi hàm.
93. Chức năng của hàm `fprintf()` trong C là gì?
A. Đọc dữ liệu từ tệp.
B. Ghi dữ liệu đã định dạng vào tệp.
C. Đọc dữ liệu đã định dạng từ bàn phím.
D. Ghi dữ liệu vào màn hình.
94. Trong C, mục đích của tiền xử lý (preprocessor) là gì?
A. Để biên dịch mã C thành mã máy.
B. Để tối ưu hóa mã C.
C. Để thực hiện các thao tác trước khi biên dịch, như bao gồm các tệp tiêu đề và thay thế macro.
D. Để gỡ lỗi mã C.
95. Trong C, sự khác biệt giữa `#include ` và `#include “myheader.h”` là gì?
A. Không có sự khác biệt, chúng hoàn toàn giống nhau.
B. `#include ` được sử dụng cho các tệp tiêu đề do người dùng định nghĩa, trong khi `#include “myheader.h”` được sử dụng cho các tệp tiêu đề hệ thống.
C. `#include ` tìm kiếm tệp tiêu đề trong các thư mục hệ thống, trong khi `#include “myheader.h”` tìm kiếm trong thư mục hiện tại trước.
D. `#include ` chỉ có thể được sử dụng trong các hàm, trong khi `#include “myheader.h”` có thể được sử dụng ở bất kỳ đâu.
96. Sự khác biệt giữa `const int *p` và `int * const p` là gì?
A. `const int *p` là một con trỏ không đổi đến một số nguyên, còn `int * const p` là một con trỏ đến một số nguyên không đổi.
B. `const int *p` là một con trỏ đến một số nguyên không đổi, còn `int * const p` là một con trỏ không đổi đến một số nguyên.
C. Cả hai đều giống nhau.
D. Không có sự khác biệt về cú pháp.
97. Đâu là cách khai báo một mảng các con trỏ kiểu int trong C?
A. int arr[];
B. int *arr[];
C. int **arr;
D. int arr*;
98. Trong C, kiểu dữ liệu nào được sử dụng để lưu trữ địa chỉ của một biến?
A. int
B. float
C. char
D. pointer
99. Trong C, hàm `atoi()` dùng để làm gì?
A. Chuyển đổi một số nguyên thành một chuỗi.
B. Chuyển đổi một chuỗi thành một số nguyên.
C. Chuyển đổi một số thực thành một số nguyên.
D. Chuyển đổi một ký tự thành một số nguyên.
100. Trong C, vòng lặp `do…while` khác với vòng lặp `while` như thế nào?
A. Vòng lặp `while` luôn thực hiện ít nhất một lần, trong khi `do…while` có thể không thực hiện lần nào.
B. Vòng lặp `do…while` luôn thực hiện ít nhất một lần, trong khi `while` có thể không thực hiện lần nào.
C. Không có sự khác biệt, chúng hoàn toàn giống nhau.
D. Vòng lặp `while` sử dụng toán tử tăng, trong khi `do…while` sử dụng toán tử giảm.
101. Trong C, làm thế nào để bạn truyền một mảng vào một hàm sao cho hàm có thể sửa đổi các phần tử của mảng gốc?
A. Bằng cách truyền mảng theo giá trị.
B. Bằng cách truyền một bản sao của mảng.
C. Bằng cách truyền một con trỏ đến mảng.
D. Không thể sửa đổi mảng gốc trong hàm.
102. Đoạn code nào sau đây minh họa việc sử dụng đúng cách hàm `realloc()` để thay đổi kích thước một khối bộ nhớ đã cấp phát?
A. int *ptr = (int*)malloc(10 * sizeof(int)); realloc(ptr, 20 * sizeof(int));
B. int *ptr = (int*)malloc(10 * sizeof(int)); ptr = (int*)realloc(ptr, 20 * sizeof(int));
C. int *ptr = (int*)malloc(10 * sizeof(int)); free(ptr); ptr = (int*)realloc(ptr, 20 * sizeof(int));
D. int *ptr = (int*)calloc(10, sizeof(int)); ptr = (int*)realloc(NULL, 20 * sizeof(int));
103. Trong C, sự khác biệt chính giữa `struct` và `union` là gì?
A. `struct` lưu trữ các thành viên ở các vùng nhớ khác nhau, trong khi `union` lưu trữ các thành viên ở cùng một vùng nhớ.
B. `struct` chỉ có thể chứa các biến kiểu int, trong khi `union` có thể chứa bất kỳ kiểu dữ liệu nào.
C. `struct` được sử dụng cho các hàm, trong khi `union` được sử dụng cho các biến.
D. Không có sự khác biệt nào giữa `struct` và `union`.
104. Điều gì xảy ra nếu bạn gọi `free()` trên cùng một con trỏ hai lần trong C?
A. Bộ nhớ sẽ được giải phóng hai lần, dẫn đến tăng hiệu suất.
B. Chương trình sẽ báo lỗi biên dịch.
C. Hành vi không xác định (Undefined behavior).
D. Không có gì xảy ra, `free()` sẽ bỏ qua lần gọi thứ hai.
105. Điều gì sẽ xảy ra nếu bạn cố gắng truy cập một phần tử của mảng vượt quá kích thước của mảng trong C?
A. Chương trình sẽ báo lỗi biên dịch.
B. Chương trình sẽ chạy bình thường.
C. Hành vi không xác định (Undefined behavior).
D. Mảng sẽ tự động mở rộng.
106. Trong C, làm thế nào để bạn định nghĩa một macro?
A. using macro = …;
B. define macro() …;
C. #define MACRO …
D. macro MACRO() …
107. Trong C, điều gì xảy ra nếu bạn không giải phóng bộ nhớ đã cấp phát động?
A. Chương trình sẽ tự động giải phóng bộ nhớ khi kết thúc.
B. Bộ nhớ sẽ bị khóa và không thể sử dụng được nữa.
C. Rò rỉ bộ nhớ (Memory leak).
D. Chương trình sẽ chạy chậm hơn nhưng không có vấn đề gì.
108. Trong C, hàm `strcmp()` được sử dụng để làm gì?
A. Sao chép một chuỗi sang một chuỗi khác.
B. Nối hai chuỗi lại với nhau.
C. So sánh hai chuỗi.
D. Tìm kiếm một chuỗi con trong một chuỗi lớn hơn.
109. Toán tử nào được sử dụng để truy cập một thành viên của một struct thông qua một con trỏ?
110. Trong C, ý nghĩa của `void *` là gì?
A. Một con trỏ không trỏ đến đâu cả.
B. Một con trỏ đến một hàm void.
C. Một con trỏ có thể trỏ đến bất kỳ kiểu dữ liệu nào.
D. Một con trỏ không thể được giải tham chiếu.
111. Trong C, hàm `perror()` dùng để làm gì?
A. In ra một thông báo lỗi do hệ thống tạo ra.
B. Đọc một thông báo lỗi từ tệp.
C. Xóa một thông báo lỗi.
D. Tạo ra một thông báo lỗi tùy chỉnh.
112. Hàm `fopen()` trả về giá trị gì nếu không thể mở tệp?
113. Trong C, giá trị trả về của hàm `main()` có ý nghĩa gì?
A. Số lượng dòng trong chương trình.
B. Địa chỉ của hàm `main()` trong bộ nhớ.
C. Trạng thái thoát của chương trình.
D. Thời gian thực thi của chương trình.
114. Trong C, làm thế nào để bạn khai báo một con trỏ hàm (function pointer)?
A. int function *ptr(int);
B. int *ptr function(int);
C. int (*ptr)(int);
D. int ptr(int) *function;
115. Trong C, hàm `fgets()` được sử dụng để làm gì?
A. Ghi một chuỗi vào tệp.
B. Đọc một chuỗi từ tệp.
C. Đọc một chuỗi từ bàn phím.
D. Tìm kiếm một chuỗi trong một tệp.
116. Trong C, toán tử `sizeof` trả về cái gì?
A. Số lượng phần tử trong một mảng.
B. Kích thước của một biến hoặc kiểu dữ liệu tính bằng byte.
C. Địa chỉ của một biến.
D. Giá trị của một biến.
117. Trong C, hàm `sprintf()` dùng để làm gì?
A. In ra màn hình theo định dạng.
B. Đọc dữ liệu từ bàn phím theo định dạng.
C. Ghi dữ liệu đã định dạng vào một chuỗi.
D. Đọc dữ liệu đã định dạng từ một chuỗi.
118. Câu lệnh nào sau đây được sử dụng để kết thúc vòng lặp ngay lập tức và chuyển điều khiển đến câu lệnh tiếp theo sau vòng lặp trong C?
A. continue
B. break
C. return
D. exit
119. Hàm nào được sử dụng để giải phóng bộ nhớ đã được cấp phát động trong C?
A. malloc()
B. calloc()
C. realloc()
D. free()
120. Hàm nào được sử dụng để cấp phát bộ nhớ động trong C?
A. printf()
B. scanf()
C. malloc()
D. free()
121. Hàm nào được sử dụng để đọc một dòng từ đầu vào chuẩn trong C?
A. scanf()
B. cin()
C. gets()
D. fgets()
122. Trong C, `#include ` có tác dụng gì?
A. Bao gồm các hàm toán học.
B. Bao gồm các hàm nhập/xuất chuẩn.
C. Bao gồm các hàm xử lý chuỗi.
D. Bao gồm các hàm quản lý bộ nhớ.
123. Hàm nào được sử dụng để in ra màn hình trong C?
A. print()
B. System.out.println()
C. printf()
D. console.log()
124. Hàm nào sau đây được sử dụng để ghi dữ liệu nhị phân vào một tệp trong C?
A. fprintf()
B. fwrite()
C. fprintb()
D. fscanb()
125. Tiền xử lý (preprocessor) trong C làm gì?
A. Biên dịch mã C thành mã máy.
B. Liên kết các tệp đối tượng thành một chương trình thực thi.
C. Xử lý các chỉ thị bắt đầu bằng `#` trước khi biên dịch.
D. Gỡ lỗi mã C.
126. Trong C, làm thế nào để bạn kiểm tra xem một tệp có tồn tại hay không trước khi mở nó?
A. Sử dụng hàm `file_exists()`.
B. Không có cách nào trực tiếp để kiểm tra.
C. Mở tệp và kiểm tra xem `fopen()` có trả về `NULL` hay không.
D. Sử dụng hàm `access()` với chế độ `F_OK`.
127. Toán tử nào được sử dụng để gán giá trị trong C?
128. Trong ngôn ngữ C, kiểu dữ liệu nào được sử dụng để lưu trữ một ký tự duy nhất?
A. int
B. float
C. char
D. string
129. Trong C, vòng lặp `do-while` khác với vòng lặp `while` như thế nào?
A. Vòng lặp `do-while` không tồn tại trong C.
B. Vòng lặp `while` luôn thực thi ít nhất một lần, trong khi `do-while` có thể không thực thi lần nào.
C. Vòng lặp `do-while` luôn thực thi ít nhất một lần, trong khi `while` có thể không thực thi lần nào.
D. Chúng hoàn toàn giống nhau.
130. Từ khóa nào được sử dụng để kết thúc một vòng lặp ngay lập tức trong C?
A. continue
B. exit
C. break
D. return
131. Trong C, làm thế nào để bạn định nghĩa một hằng số?
A. constant int x = 10;
B. final int x = 10;
C. #define x 10
D. static int x = 10;
132. Trong C, `static` có ý nghĩa gì khi được sử dụng bên trong một hàm?
A. Biến chỉ có thể được truy cập từ các hàm khác trong cùng một tệp.
B. Biến chỉ có thể được truy cập từ bên trong hàm đó.
C. Biến được lưu trữ trong bộ nhớ chỉ đọc.
D. Biến giữ lại giá trị của nó giữa các lần gọi hàm.
133. Điều gì sẽ xảy ra nếu bạn cố gắng truy cập một phần tử của mảng vượt quá kích thước của nó trong C?
A. Chương trình sẽ báo lỗi biên dịch.
B. Chương trình sẽ chạy nhưng có thể gây ra lỗi không mong muốn.
C. Chương trình sẽ tự động mở rộng kích thước mảng.
D. Không có gì xảy ra.
134. Điều gì xảy ra nếu bạn chia một số cho 0 trong C?
A. Chương trình sẽ biên dịch thành công và chạy đúng.
B. Chương trình sẽ báo lỗi biên dịch.
C. Chương trình sẽ chạy nhưng có thể gây ra lỗi runtime (ví dụ: floating-point exception).
D. Chương trình sẽ tự động gán kết quả bằng 0.
135. Trong C, `volatile` có ý nghĩa gì?
A. Biến có thể bị thay đổi bởi hệ điều hành.
B. Biến chỉ có thể được truy cập một lần.
C. Biến có thể thay đổi ngoài tầm kiểm soát của chương trình.
D. Biến được lưu trữ trong bộ nhớ ảo.
136. Trong C, khi nào bạn nên sử dụng `inline`?
A. Để giảm kích thước mã.
B. Để tăng tốc độ thực thi của các hàm nhỏ được gọi thường xuyên.
C. Để ngăn chặn việc biên dịch một hàm.
D. Để tạo một hàm đệ quy.
137. Trong C, một con trỏ là gì?
A. Một kiểu dữ liệu nguyên thủy.
B. Một biến lưu trữ địa chỉ của một biến khác.
C. Một hàm đặc biệt.
D. Một mảng các ký tự.
138. Hàm nào được sử dụng để giải phóng bộ nhớ đã được cấp phát động trong C?
A. allocate()
B. release()
C. free()
D. deallocate()
139. Đâu là cách sử dụng đúng của `typedef` trong C?
A. Để định nghĩa một hàm mới.
B. Để tạo ra một hằng số.
C. Để tạo ra một bí danh cho một kiểu dữ liệu.
D. Để bao gồm một thư viện.
140. Cách khai báo một con trỏ hàm trong C?
A. int function *ptr(int);
B. int (*ptr)(int);
C. int *ptr function(int);
D. function int *ptr(int);
141. Cấu trúc điều khiển nào sau đây KHÔNG có trong C?
A. if
B. switch
C. for
D. foreach
142. Sự khác biệt chính giữa `struct` và `union` trong C là gì?
A. `struct` lưu trữ các thành viên trong các vùng nhớ riêng biệt, trong khi `union` chia sẻ cùng một vùng nhớ.
B. `struct` chỉ có thể chứa các kiểu dữ liệu nguyên thủy, trong khi `union` có thể chứa bất kỳ kiểu dữ liệu nào.
C. `struct` được sử dụng cho các hàm, trong khi `union` được sử dụng cho các biến.
D. Không có sự khác biệt, chúng là giống nhau.
143. Thư viện nào trong C cung cấp các hàm để làm việc với chuỗi?
A. stdio.h
B. string.h
C. math.h
D. stdlib.h
144. Điều gì xảy ra khi bạn sử dụng toán tử `&` trước một biến trong C?
A. Bạn nhận được giá trị của biến.
B. Bạn nhận được địa chỉ của biến.
C. Bạn thực hiện phép AND bitwise.
D. Bạn khai báo một con trỏ.
145. Trong C, hàm `atoi()` dùng để làm gì?
A. Chuyển đổi một số nguyên thành một chuỗi.
B. Chuyển đổi một chuỗi thành một số nguyên.
C. Chuyển đổi một số thực thành một số nguyên.
D. Chuyển đổi một ký tự thành mã ASCII.
146. Trong C, sự khác biệt giữa `const char*` và `char* const` là gì?
A. `const char*` là một con trỏ không đổi đến một ký tự, `char* const` là một con trỏ đến một ký tự không đổi.
B. `const char*` là một con trỏ đến một ký tự không đổi, `char* const` là một con trỏ không đổi đến một ký tự.
C. Chúng hoàn toàn giống nhau.
D. `const char*` là một ký tự không đổi, `char* const` là một con trỏ không đổi.
147. Trong C, tham số nào sau đây được truyền theo giá trị?
A. Mảng
B. Con trỏ
C. Cấu trúc
D. Biến thông thường (int, float, char)
148. Trong C, hàm `qsort()` được sử dụng để làm gì?
A. Để tìm kiếm một phần tử trong một mảng.
B. Để sắp xếp một mảng.
C. Để đảo ngược một mảng.
D. Để sao chép một mảng.
149. Chức năng của hàm `fopen()` trong C là gì?
A. Để định dạng ổ đĩa.
B. Để mở một tệp.
C. Để đóng một tệp.
D. Để đọc dữ liệu từ bàn phím.
150. Đoạn code C nào sau đây cấp phát bộ nhớ động cho một mảng 10 số nguyên?
A. int arr[10];
B. int *arr = malloc(10);
C. int *arr = malloc(10 * sizeof(int));
D. int *arr = calloc(10, sizeof(int));