wayground logo

Free Printable Worksheets

Font size

S
M
L
XL
Worksheets

LTCB 99

Total questions: 99

Worksheet time: 50mins

Name
Class
Date
1.

Trong C, thuật toán được hiểu là gì?

a)

Một ngôn ngữ lập trình

b)

Một dãy hữu hạn các bước để giải bài toán

c)

Một biến trong C

d)

Một compiler

2.

Tính chất nào KHÔNG phải của một thuật toán?

a)

Tính đúng

b)

Tính hiệu quả

c)

Tính mơ hồ

d)

Tính xác định

3.

Khi nào nên dùng switch thay vì if-else?

a)

Khi so sánh biểu thức số thực

b)

Khi kiểm tra một biến trên nhiều giá trị rời rạc (biến nguyên/char)

c)

Khi cần so sánh khoảng giá trị

d)

Khi cần phép logic phức tạp

4.

Cho đoạn mã: int a = 5; float x = a/2; Giá trị của x là bao nhiêu?

a)

2.5

b)

2.0

c)

3.0

d)

5.0

5.

Hàm printf thuộc thư viện nào trong C?

a)

math.h

b)

stdio.h

c)

conio.h

d)

string.h

6.

Cú pháp đúng để khai báo hàm trả về int, nhận hai đối số kiểu int là gì?

a)

int f(int a, int b);

b)

f(int a, int b) int;

c)

int f(a,b) int a,b;

d)

void f(int,int);

7.

Lệnh continue trong vòng lặp có tác dụng gì?

a)

Kết thúc vòng lặp hoàn toàn

b)

Bỏ phần còn lại của lần lặp hiện tại và chuyển sang lần lặp tiếp

c)

Dừng chương trình

d)

Nhảy ra ngoài hàm

8.

Khi truyền tham trị cho hàm, thay đổi trong hàm có ảnh hưởng tới biến gốc không?

a)

Có luôn

b)

Không

c)

Có nếu là con trỏ

d)

Có nếu là biến toàn cục

9.

Toán tử % trong C dùng để làm gì?

a)

Lấy phép chia nguyên

b)

Lấy phần dư

c)

Toán lũy thừa

d)

Toán logic

10.

Cho khai báo char s[] = "ABC"; Độ dài chuỗi (theo strlen) trả về là bao nhiêu?

a)

4

b)

3

c)

0

d)

2

11.

Trong hệ 16-bit thường gặp, sizeof(int) bằng bao nhiêu byte?

a)

1 byte

b)

2 byte

c)

4 byte

d)

8 byte

12.

Để đọc một chuỗi có khoảng trắng bằng scanf, dùng định dạng nào?

a)

%s

b)

%c

c)

gets()

d)

%[^ ]s

13.

Trong biểu thức, '++a' và 'a++' khác nhau ở điểm nào?

a)

Không khác

b)

'++a' trả về giá trị sau khi tăng, 'a++' trả về trước khi tăng

c)

'a++' nhanh hơn

d)

'++a' chỉ cho số nguyên

14.

Mục đích của #include <...> trong C là gì?

a)

Khai báo prototype hàm

b)

Chèn nội dung header (thư viện) vào file trước biên dịch

c)

Ghi chú

d)

Định nghĩa biến toàn cục

15.

Biểu thức logic nào tương đương với !(a && b)?

a)

!a && !b

b)

!a || !b

c)

a || b

d)

a && b

16.

Vòng do-while khác while ở điểm nào?

a)

do-while kiểm tra điều kiện trước khi thực hiện

b)

do-while thực hiện thân ít nhất một lần

c)

while luôn chạy ít nhất một lần

d)

Không khác

17.

Hàm malloc trả về gì?

a)

Giá trị int

b)

Con trỏ tới vùng nhớ cấp phát

c)

Kiểu float

d)

Không có

18.

Trong C, câu hỏi: "char *p = NULL; có an toàn để dereference ngay không?" Chọn đáp án đúng nhất.

a)

An toàn

b)

Không an toàn (sẽ lỗi)

c)

Tùy compiler

d)

Chỉ an toàn trên Windows

19.

Trong mảng khai báo "int a[5];" tập chỉ số hợp lệ là gì?

a)

1..5

b)

0..4

c)

0..5

d)

-1..4

20.

Câu lệnh switch trong C hỗ trợ những kiểu dữ liệu nào?

a)

float

b)

double

c)

int và char (nguyên dạng rời rạc)

d)

string trực tiếp

21.

Khi muốn hàm thay đổi biến gốc bên ngoài, ta nên truyền gì?

a)

Giá trị trực tiếp

b)

Địa chỉ (con trỏ) của biến

c)

Hằng

d)

Không thể thay đổi

22.

Giá trị trả về của hàm main() thường dùng để làm gì?

a)

In ra màn hình

b)

Trả trạng thái cho hệ điều hành

c)

Tăng biến toàn cục

d)

Không có ý nghĩa

23.

Cú pháp khai báo mảng 2 chiều có 3 hàng và 4 cột trong C là gì?

a)

int a[3][4];

b)

int a[4][3];

c)

int a(3,4);

d)

int a[3,4];

24.

Hàm strlen() trả về kiểu dữ liệu nào?

a)

char

b)

int

c)

size_t

d)

float

25.

Chỉ thị "#define PI 3.14" là gì trong C?

a)

Hằng (constant) được tiền xử lý

b)

Biến toàn cục

c)

Macro hàm

d)

Định nghĩa hàm

26.

Cho câu lệnh "a = b = 3;" giá trị của a là gì?

a)

0

b)

3

c)

b

d)

undefined

27.

Bao giờ xuất hiện cảnh báo (warning) khi biên dịch?

a)

Khi có lỗi cú pháp

b)

Khi có nghi ngờ về kiểu nhưng vẫn biên dịch được

c)

Khi chạy chương trình

d)

Khi thiếu header

28.

Lệnh printf("%d", 'A'); in ra số nào theo mã ASCII?

a)

65

b)

'A'

c)

1

d)

Lỗi

29.

Biến toàn cục có phạm vi (scope) như thế nào?

a)

Chỉ trong hàm khai báo

b)

Toàn chương trình

c)

Chỉ file hiện tại

d)

Không xác định

30.

Hàm chuẩn nào dùng để mở file văn bản trong C?

a)

fopen

b)

openfile

c)

fileopen

d)

fopen_s

31.

Cho vòng lặp: "while(i>=0) printf("%d", i--);" nếu i là unsigned int ban đầu = 0, vòng lặp sẽ thế nào?

a)

In 0 rồi dừng

b)

Vô hạn (do underflow)

c)

Báo lỗi biên dịch

d)

Không in gì

32.

Khi nào dùng con trỏ tới hàm (function pointer) trong C?

a)

Khi cần gọi hàm động (callback) hoặc truyền hàm như tham số

b)

Khi khai báo biến

c)

Khi cần string

d)

Không bao giờ

33.

Biểu thức logic "a && b" chỉ đánh giá b trong trường hợp nào?

a)

Luôn

b)

Nếu a là true

c)

Nếu a là false

d)

Không bao giờ

34.

Lệnh getch() thuộc thư viện nào (Turbo C / conio)?

a)

stdio.h

b)

conio.h

c)

math.h

d)

string.h

35.

Giả sử int chiếm 4 byte. Cho mảng int a[] = {1,2,3}; biểu thức sizeof(a) trả về giá trị nào?

a)

3

b)

12

c)

4

d)

0

36.

Trong C, ký tự kết thúc chuỗi (string terminator) là gì?

a)

'\n'

b)

'\0'

c)

EOF

d)

' ' (space)

37.

Để so sánh hai chuỗi s1 và s2 trong C một cách đúng chuẩn thư viện, nên dùng hàm nào?

a)

s1 == s2

b)

strcmp(s1,s2)

c)

strcmp(s1,s2)` (có dấu backtick)

d)

equals(s1,s2)

38.

Biến tạm (local variable) mặc định được lưu vùng nhớ nào?

a)

Stack (ngăn xếp) thường

b)

Heap

c)

File

d)

ROM

39.

Cho khai báo int *p; trước khi gán p = 5; cần điều kiện nào?

a)

Phải được khai báo

b)

Trỏ tới địa chỉ hợp lệ (đã cấp phát hoặc địa chỉ biến)

c)

NULL

d)

Không cần gì

40.

Trong các toán tử sau: '+', '*', '==', '&&', toán tử nào có độ ưu tiên cao nhất?

a)

+

b)

*

c)

==

d)

&&

41.

So với vòng lặp tương đương, đệ quy (recursion) thường tốn thêm tài nguyên nào?

a)

CPU ít hơn

b)

Bộ nhớ stack nhiều hơn

c)

Không khác

d)

Không thực hiện được

42.

Xét vòng for: for(i=0; i

a)

Vòng chạy vô hạn

b)

Không chạy lần nào

c)

Biên dịch lỗi

d)

Chạy 1 lần

43.

Khi hàm được khai báo trả về kiểu non-void, khi nào cần dùng return?

a)

Bất cứ khi nào

b)

Để trả giá trị theo kiểu khai báo

c)

Không cần

d)

Chỉ trong main

44.

Hàm fopen() trả NULL trong trường hợp nào?

a)

Khi mở file thành công

b)

Khi không mở được file (không tồn tại/không được phép)

c)

Lỗi cú pháp

d)

Dùng sai tên biến

45.

sizeof(char) thông thường là bao nhiêu?

a)

1 byte

b)

2 byte

c)

4 byte

d)

Tùy hệ điều hành

46.

Biểu thức a = (b>c) ? b : c; là ví dụ của toán tử nào trong C?

a)

And

b)

Ternary (?)

c)

Elvis

d)

Lambda

47.

Trong C, enum cho phép điều gì?

a)

Định nghĩa hằng số nguyên có tên

b)

Định nghĩa hàm

c)

Định nghĩa mảng

d)

Định nghĩa con trỏ

48.

Từ khóa break trong switch có tác dụng gì?

a)

Kết thúc switch và nhảy ra ngoài

b)

Kết thúc hàm

c)

Tiếp tục

d)

Không có tác dụng

49.

Phát biểu "float có độ chính xác thấp hơn double" là đúng hay sai?

a)

Đúng

b)

Sai

c)

Tùy compiler

d)

Không xác định

50.

Tên biến bắt đầu bằng chữ số trong C có hợp lệ không?

a)

Hợp lệ

b)

Không hợp lệ

c)

Tùy ngôn ngữ

d)

Chỉ trong C++

51.

Khi gặp lỗi segmentation fault trong chương trình C, nguyên nhân phổ biến nhất là gì?

a)

Thiếu header

b)

Truy cập vùng nhớ không hợp lệ (lỗi con trỏ)

c)

Thiếu main

d)

Thiếu return

52.

Chọn hàm an toàn để đọc chuỗi có khoảng trắng từ stdin, tránh tràn bộ đệm.

a)

scanf("%s")

b)

gets()

c)

fgets()

d)

putchar()

53.

Muốn in một ký tự đơn ra màn hình trong C, nên dùng hàm nào?

a)

printf("%d")

b)

putchar()

c)

puts()

d)

fgets()

54.

Với khai báo int arr[5]; nếu không khởi tạo, giá trị ban đầu của các phần tử thường là gì?

a)

0

b)

Giá trị rác (undefined) nếu không khởi tạo

c)

-1

d)

Lỗi biên dịch

55.

Đối với người mới, thuật toán sắp xếp nào dễ code nhất để sắp xếp tăng dần?

a)

QuickSort

b)

MergeSort

c)

Bubble sort / Selection sort

d)

HeapSort

56.

Với khai báo char *s = "Hello"; sau đó gán s[0] = 'h'; hành động này có an toàn không?

a)

An toàn

b)

Không an toàn (chuỗi literal thường read-only)

c)

Chỉ an toàn trên Linux

d)

Chỉ an toàn khi dùng gcc

57.

Hai khai báo hàm void f(int a[]) và void f(int *a) có khác nhau không khi truyền mảng?

a)

Khác

b)

Không khác (về tham số hàm, mảng bị chuyển thành con trỏ)

c)

Một cái lỗi

d)

Chỉ một cái hợp lệ

58.

Kết quả của printf("%4d", 12) là gì?

a)

"12"

b)

" 12" (2 khoảng trắng + 12)

c)

"0012"

d)

"12 "

59.

Hàm rand() trong C trả về giá trị nằm trong khoảng nào (không chuẩn hóa)?

a)

0..RAND_MAX

b)

-RAND_MAX..RAND_MAX

c)

0..1

d)

-1..1

60.

Trong phép toán con trỏ, với int *p thì p+1 sẽ dịch chuyển bao nhiêu byte?

a)

Tăng 1 byte

b)

Tăng sizeof(int) bytes

c)

Tăng 1 bit

d)

Không xác định

61.

Trong for(i=0;i

a)

Chạy chính xác

b)

Có thể overflow và hành vi không xác định

c)

Biên dịch lỗi

d)

Tự động chuyển lên long

62.

Mục đích chính của scanf là gì?

a)

In ra file

b)

Đọc dữ liệu từ file theo định dạng

c)

Kiểm tra file tồn tại

d)

Xóa file

63.

Để giải bài USCLN (ước số chung lớn nhất) bằng đệ quy, thuật toán thường dùng là gì?

a)

Euclid (lặp/đệ quy)

b)

Sắp xếp

c)

BFS

d)

QuickSort

64.

Với scanf("%d", &x); nếu người dùng nhập ký tự không phải số, điều gì xảy ra?

a)

Giá trị không đổi, scanf trả số lượng items đọc

b)

Giá trị không đổi, scanf trả 0

c)

Gán 0

d)

Chương trình crash

65.

Khi dùng bộ nhớ động malloc, sau khi dùng cần gọi hàm nào để giải phóng?

a)

free(ptr);

b)

delete ptr;

c)

close(ptr);

d)

release(ptr)

66.

Toán tử sizeof trong C trả về giá trị có kiểu dữ liệu nào?

a)

int

b)

size_t

c)

long

d)

char

67.

Hàm strcpy(dest, src) thực hiện chức năng gì?

a)

So sánh hai chuỗi

b)

Sao chép src vào dest (không kiểm tra kích thước)

c)

Nối chuỗi

d)

Trả độ dài chuỗi

68.

Cấu trúc while(1) { /*...*/ } là ví dụ của loại vòng lặp nào?

a)

Vòng lặp điều kiện

b)

Vòng lặp vô hạn

c)

Vòng lặp do-while

d)

Không hợp lệ

69.

Trong C, một chương trình điển hình gồm mấy phần chính theo giáo trình truyền thống? Chọn đáp án phản ánh liệt kê ngắn gọn.

a)

2 phần

b)

4–6 phần (header, khai báo, function prototypes, định nghĩa hàm, main)

c)

10

d)

1

70.

Lệnh return trong một hàm khai báo kiểu void có hợp lệ không?

a)

Không

b)

c)

Chỉ trong main

d)

Chỉ nếu compiler cho phép

71.

Trong ngữ cảnh con trỏ C, toán tử & và * nghĩa là gì?

a)

& lấy địa chỉ, * dereference (lấy giá trị tại địa chỉ)

b)

& là AND, * là nhân

c)

Cú pháp sai

d)

Không liên quan

72.

Trong switch(x) { case 1: ... } nếu không có break ở cuối case thì điều gì xảy ra?

a)

Chỉ một case chạy

b)

Fall-through: các case sau sẽ tiếp tục thực hiện

c)

Lỗi cú pháp

d)

Dừng chương trình

73.

Hàm malloc(0) có thể trả về gì theo chuẩn C?

a)

NULL hoặc một con trỏ hợp lệ tùy implementation

b)

Luôn NULL

c)

Luôn con trỏ hợp lệ

d)

Làm chương trình crash

74.

printf("%s", NULL); có thể gây ra điều gì?

a)

In "NULL"

b)

Undefined behavior (có thể crash)

c)

In rỗng

d)

Biên dịch lỗi

75.

int a = 5; int b = ++a + a++; giá trị của b là gì? Hãy chọn đáp án phản ánh thực tế phụ thuộc thứ tự đánh giá.

a)

Xác định, một giá trị cụ thể

b)

Undefined behavior (vi phạm việc sửa & đọc không sequence point)

c)

11

d)

10

76.

char s[5]; scanf("%s", s); nếu người dùng nhập >4 ký tự thì kết quả nào sau đây đúng nhất?

a)

Bị cắt bớt

b)

Buffer overflow (ghi vượt) dẫn tới undefined behavior

c)

Tự động mở rộng mảng

d)

Lỗi biên dịch

77.

Hàm qsort thuộc thư viện tiêu đề nào?

a)

stdio.h

b)

stdlib.h

c)

string.h

d)

math.h

78.

Toán tử -> dùng để làm gì trong C?

a)

Truy cập thành viên của struct qua con trỏ

b)

Toán tử lui

c)

Định nghĩa function pointer

d)

Chỉ comment

79.

Gọi fflush(stdin) có portable theo chuẩn C không?

a)

b)

Không portable, undefined behavior theo chuẩn

c)

Luôn an toàn

d)

Lỗi biên dịch bắt buộc

80.

Khi đặt từ khóa static trước biến trong một hàm, ý nghĩa là gì?

a)

Biến cục bộ nhưng giữ giá trị giữa các lần gọi

b)

Biến toàn cục

c)

Lỗi

d)

Biến volatile

81.

printf("%p", (void*)p); sẽ in ra điều gì?

a)

Giá trị int

b)

Địa chỉ của con trỏ p

c)

Giá trị tại p

d)

Lỗi runtime

82.

Trong các toán tử *, +, && thứ tự ưu tiên cao nhất thuộc về toán tử nào?

a)

*

b)

+

c)

&&

d)

Tất cả bằng nhau

83.

close() trong C có tác dụng gì lên một file descriptor?

a)

Mở file

b)

Đóng file và flush buffers

c)

Xóa file

d)

Không làm gì

84.

typedef dùng để làm gì trong C?

a)

Tạo alias cho kiểu

b)

Khai báo hàm

c)

Định nghĩa macro

d)

Định nghĩa namespace

85.

strncpy(dest, src, n) khác strcpy ở điểm nào sau đây?

a)

Không khác

b)

strncpy giới hạn tối đa n ký tự (có thể không thêm '\0' nếu src dài)

c)

strncpy luôn thêm dấu '\0' bất kể n

d)

strncpy chỉ sao chép khi dest lớn hơn src

86.

Chọn cú pháp đúng để truyền mảng 2 chiều có kích thước cột cố định vào hàm trong C:

a)

void f(int a[][4])

b)

void f(int a[4][])

c)

void f(int a)

d)

void f(int a[])

87.

volatile qualifier được dùng khi nào trong C?

a)

Khi biến có thể thay đổi ngoài luồng kiểm soát chương trình (ví dụ ISR/hardware)

b)

Khi biến không đổi

c)

Khi biến là hằng

d)

Khi biến static

88.

fprintf(stderr, "error"); sẽ in ra luồng nào?

a)

stdout (luồng tiêu chuẩn)

b)

stderr (luồng lỗi chuẩn)

c)

Một file bất kỳ

d)

Không in gì

89.

sizeof của mảng trả kích thước toàn bộ mảng. Vậy biểu thức sizeof(a)/sizeof(a[0]) thường cho kết quả gì?

a)

Kích thước một phần tử

b)

Số phần tử của mảng

c)

Số chiều của mảng

d)

Giá trị rỗng

90.

strncmp(s1,s2,n) trả về 0 trong trường hợp nào?

a)

Khi hai chuỗi khác nhau

b)

Khi giống nhau trong n ký tự đầu

c)

Khi s1 dài hơn s2

d)

Khi n=0 luôn false

91.

getchar() trả EOF khi nào?

a)

Khi hết file hoặc gặp lỗi I/O

b)

Chỉ khi hết file

c)

Luôn trả 0

d)

Không bao giờ

92.

assert(expr) dùng để làm gì trong quá trình phát triển?

a)

Kiểm tra điều kiện debug, dừng chương trình nếu sai

b)

Ghi log mọi giá trị

c)

Ép buộc thực thi một nhánh

d)

Thay thế hoàn toàn if

93.

Memcpy khác memmove ở điểm nào?

a)

memcpy an toàn khi vùng nhớ không overlap; memmove an toàn khi có overlap

b)

Chúng giống hệt nhau

c)

memcpy luôn chậm hơn

d)

memmove xóa vùng nguồn

94.

int main(void) và int main() khác nhau thế nào trong C hiện đại?

a)

Không khác đáng kể; void cho thấy rõ không có tham số

b)

Khác hoàn toàn về ngữ nghĩa

c)

Một lỗi cú pháp

d)

Chỉ main() là chuẩn

95.

Trong debug, printf hữu ích nhưng nhược điểm chính là gì?

a)

Luôn in sai

b)

Có thể làm thay đổi thứ tự thực thi (timing) và che dấu lỗi

c)

Không thể in con trỏ

d)

Gây lỗi biên dịch

96.

calloc(n, size) khác malloc ở điểm nào?

a)

calloc cấp phát và zero-initialize bộ nhớ

b)

calloc nhanh hơn

c)

calloc trả về kiểu int

d)

Không khác nhau

97.

sizeof(char*) trên hệ 64-bit thường bằng bao nhiêu byte?

a)

4

b)

8

c)

2

d)

1

98.

volatile sig_atomic_t flag; thường dùng cho trường hợp nào?

a)

Biến chia sẻ giữa ISR và hàm main

b)

Biến static trong file

c)

Biến toàn cục cho I/O file

d)

Không dùng trong thực tế

99.

Nếu dùng printf với định dạng "%f" nhưng truyền một giá trị double, điều gì xảy ra theo chuẩn C?

a)

In đúng vì float được promote thành double khi truyền

b)

Nếu truyền float sẽ tự động promote thành double

c)

Lỗi biên dịch ngay lập tức

d)

Lỗi runtime chắc chắn