








Preview text:
Câu 1:
Hàm trong ngôn ngữ C là gì? A. Một biến đặc biệt
B. Một cấu trúc điều kiện
C. Một khối lệnh thực hiện công việc cụ thể, có thể được gọi nhiều lần D. Một vòng lặp Câu 2:
Từ khóa nào được dùng để khai báo hàm trong C? A. define B. function
C. void, int, float, v.v. (tùy thuộc kiểu trả về) D. fun Câu 3:
Hàm main() trong C có vai trò gì? A. Lưu trữ dữ liệu
B. Là nơi bắt đầu thực thi chương trình C. Là thư viện chuẩn
D. Không bắt buộc phải có Câu 4:
Câu khai báo hàm nào sau đây là đúng trong C? A. int sum(int a, b) B. function sum(int a, int b) C. int sum(int a, int b); D. sum(int a, int b) Câu 5:
Đâu là lời gọi hàm đúng với hàm khai báo như sau: int add(int x, int y);? A. add(x, y); B. add(); C. add(int x, int y); D. int add = (x, y); Câu 6:
Hàm không trả về giá trị sẽ có kiểu trả về là gì? A. int B. null C. void D. empty Câu 7:
Đâu là mục đích của từ khóa return trong
hàm? A. Đưa ra kết quả của hàm và kết thúc
hàm B. Thoát khỏi vòng lặp C. Gọi một hàm khác D. Dừng chương trình Câu 8: Đoạn mã sau in ra gì? int square(int x) { return x * x; } int main() { printf("%d", square(3)); return 0; } A. 3 B. 6 C. 9 D. Không in gì Câu 9:
Tham số truyền theo giá trị trong hàm nghĩa là
gì? A. Truyền địa chỉ của biến gốc B. Thay đổi biến gốc
C. Truyền bản sao của giá trị D. Không truyền gì cả Câu 10:
Tại sao nên sử dụng hàm trong lập trình
C? A. Giảm kích thước chương trình
B. Tăng tính lặp lại và tổ chức mã tốt
hơn C. Làm chương trình chạy nhanh hơn
D. Không có lợi ích rõ ràng
Câu 11: Cú pháp nào sau đây là đúng để khai báo một hàm trong C? A. int functionName() {} B. functionName int() {} C. void functionName {} D. int functionName[] {}
Câu 12: Kết quả của đoạn code sau là gì? #include int add(int a, int b) { return a + b; } int main() { printf("%d", add( , 3 )); 4 return 0; } A. 7 B. 34 C. 0 D. Lỗi biên dịch
Câu 13: Hàm nào sau đây không trả về giá trị? A. int func() { return 0; } B. void func() {}
C. float func() { return 1.0; }
D. char func() { return 'a'; }
Câu 14: Kết quả của đoạn code sau là gì? #include void swap(int a, int b) { int temp = a; a = b; b = temp; } int main() { int x = , y = 5 10; swap(x, y); printf("%d %d", x, y); return 0; } A. 10 5 B. 5 10 C. Lỗi biên dịch D. 0 0
Câu 15: Để truyền tham số theo tham chiếu trong C, ta sử dụng gì? A. Biến toàn cục B. Con trỏ C. Mảng D. Kiểu void
Câu 16: Kết quả của đoạn code sau là gì? #include int square(int *n) { *n = (*n) * (*n); return *n; } int main() { int num = ; 4
printf("%d", square(&num)); return 0; } A. 16 B. 4 C. 0 D. Lỗi biên dịch
Câu 17: Hàm main trong C có kiểu trả về mặc định là gì nếu không khai báo rõ ràng? A. void B. int C. float D. char
Câu 18: Kết quả của đoạn code sau là gì? #include int factorial(int n) { if (n == ) 0 return 1; return n * factorial(n - ); 1 } int main() { printf("%d", factorial( )); 3 return 0; } A. 6 B. 3 C. 1 D. Lỗi biên dịch
Câu 19: Đoạn code sau có lỗi gì? #include int func(int x) { return x + ; 1 } int main() { printf("%d", func()); return 0; }
A. Thiếu tham số khi gọi hàm
func B. Hàm func không trả về giá
trị C. Thiếu khai báo hàm func D. Không có lỗi
Câu 20: Kết quả của đoạn code sau là gì? #include void printMessage() { printf("Hello "); } int main() { printMessage(); printMessage(); return 0; } A. Hello B. Hello Hello C. Lỗi biên dịch D. Không in gì
Câu 21: Con trỏ trong C là gì?
A. Một biến lưu chuỗi ký tự
B. Một biến lưu địa chỉ của biến khác C. Một kiểu hàm D. Một loại vòng lặp Câu 22:
Ký hiệu nào dùng để khai báo con trỏ? A. & B. * C. @ D. % Câu 23:
Giả sử int a = 10;, câu lệnh nào khai báo đúng con trỏ trỏ tới a? A. int *p = &a; B. int p = *a; C. int &p = *a; D. *int p = a; Câu 42:
Toán tử & trong C được dùng để làm gì?
A. Truy cập nội dung tại địa chỉ
B. Gán địa chỉ cho biến
C. Lấy địa chỉ của biến D. Tạo ra biến mới Câu 25:
Toán tử * trong ngữ cảnh con trỏ có tác dụng gì? A. Nhân hai giá trị B. Gán địa chỉ
C. Truy cập giá trị tại địa chỉ con trỏ đang trỏ
tới D. Lấy địa chỉ của biến Câu 26: int a = 5; int *p = &a; Giá trị của *p là: A. Địa chỉ của a B. 5 C. Lỗi D. Không xác định Câu 27: int a = 5; int *p = &a; *p = 10;
Sau đoạn mã trên, giá trị của a là: A. 5 B. 10 C. Không thay đổi D. Không xác định Câu 28:
Khai báo nào sau đây là đúng để tạo con trỏ đến kiểu float? A. float *p; B. *float p; C. pointer float p; D. float p*; Câu 29: Con trỏ NULL là gì?
A. Con trỏ trỏ đến biến rỗng
B. Con trỏ không trỏ đến địa chỉ hợp lệ nào
C. Con trỏ chứa giá trị 0 D. Cả B và C đều đúng Câu 30:
Đâu là lợi ích của việc sử dụng con trỏ trong
C? A. Truy cập trực tiếp bộ nhớ
B. Truyền tham chiếu cho hàm
C. Quản lý mảng và chuỗi linh hoạt D. Tất cả đều đúng
Câu 31: Con trỏ trong C là gì?
A. Một kiểu dữ liệu nguyên thủy
B. Một biến chứa giá trị của một biến khác
C. Một biến chứa địa chỉ bộ nhớ của một biến
khác D. Một hàm trả về địa chỉ
Câu 32: Kết quả của đoạn code sau là gì? #include int main() { int x = 10; int *p = &x; printf("%d", *p); return 0; } A. 10 B. Địa chỉ của x C. Lỗi biên dịch D. 0
Câu 33: Cú pháp nào sau đây khai báo một con trỏ hợp lệ? A. int p; B. int *p; C. int &p; D. int p*;
Câu 34: Kết quả của đoạn code sau là gì? #include int main() { int x = ; 5 int *p = &x; *p = 20; printf("%d", x); return 0; } A. 5 B. 20 C. Địa chỉ của x D. Lỗi biên dịch
Câu 35: Đoạn code sau có lỗi gì? #include int main() { int *p; *p = 100;