320 Câu hỏi trắc nghiệm lập trình C có đáp án
Tổng hợp 320 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. Để ôn tập hiệu quả các bạn có thể ôn theo từng phần trong bộ câu hỏi này bằng cách trả lời các câu hỏi và xem lại đáp án và lời giải chi tiết. Sau đó các bạn hãy chọn tạo ra đề ngẫu nhiên để kiểm tra lại kiến thức đã ôn.
Chọn hình thức trắc nghiệm (50 câu/60 phút)
-
Câu 1:
Hàm dùng để cấp phát bộ nhớ động cho kiểu nhớ động do lập trình viên tự định nghĩa như (union, struct):
A. calloc();
B. malloc();
C. realloc();
D. Cả 3 đáp án trên
-
Câu 2:
Phép toán % có ý nghĩa gì?
A. Đổi dấu một số thực hoặc một số nguyên
B. Chia hai số thực hoặc nguyên
C. Lấy phần dư của phép chia hai số nguyên
D. 1 và 2
-
Câu 3:
Cho khai báo sau. Số lượng bít sử dụng trong biến cấu trúc trên là bao nhiêu:
struct Date { unsigned int ngay: 5; unsigned int thang; unsigned int nam: 11; } sn1;
A. 16
B. 20
C. 32
D. 48
-
Câu 4:
Giả sử a và b là 2 số thực. Biểu thức nào dưới đây là không được phép:
A. (a+=b)
B. (a-=b)
C. (a>>=b)
D. (a*=b)
-
Câu 5:
Lệnh nào trong các lệnh sau cho phép dừng câu lệnh điều khiển:
A. break
B. goto
C. continue
D. Cả 3 phương án trên
-
Câu 6:
Có bao nhiêu cách khai báo biến cấu trúc?
A. 1
B. 2
C. 3
D. 4
-
Câu 7:
Hàm setcolor(int color) làm nhiệm vụ gì:
A. Thiết lập màu nền
B. Đặt màu vẽ hiện tại
C. Cả 2 ý trên đều đúng
D. Cả hai ý trên đều sai
-
Câu 8:
Ngôn ngữ lập trình được Dennish đưa ra vào năm nào?
A. 1967
B. 1972
C. 1970
D. 1976
-
Câu 9:
Điểu gì là đúng nhất khi nói về hàm floodfill(int x, int y, int Border):
A. Dùng để tô màu hình tròn chứa điểm (x,y)
B. Dùng để tô màu hình chữ nhật chứa điểm (x,y)
C. Dùng để tô màu đa giác chứa điểm (x,y)
D. Dùng để tô màu miền kín bất kì chứa điểm (x,y)
-
Câu 10:
Hàm putpixel(int x, int y) dùng để làm gì?
A. Vẽ một điểm tại tọa độ (x,y);
B. Lấy màu của điểm có tọa độ (x,y);
C. Vẽ một điểm tại vị trí con trỏ.
D. Cả 3 phương án trên đều sai.
-
Câu 11:
Tại sao hai hàm scanf() và printf() gọi là 2 hàm nhập, xuất có định dạng:
A. Vì chúng có chuỗi định dạng trong tham số.
B. Vì chúng thường dùng để nhập, xuất các trị trong chỉ một kiểu đã định trước.
C. Vì một lí do khác.
D. 2 hàm trên không phải là hai hàm nhập xuất có định dạng.
-
Câu 12:
Biến con trỏ có thể chứa:
A. Địa chỉ vùng nhớ của một biến khác.
B. Giá trị của một biến khác.
C. Cả a và b đều đúng.
D. Cả a và b đều sai.
-
Câu 13:
Giả sử a và b là hai số thực. Biểu thức nào dưới đây là không được phép theo cú pháp của ngôn ngữ lập trình C
A. (a /=b)
B. (a-=b)
C. (a>>=b)
D. (a*=b)
-
Câu 14:
Khi loại bỏ node x ở cây nhị phân tìm kiếm ta chỉ cần kiểm tra xem:
A. x có phải là node lá trái của cây nhị phân tìm kiếm hay không.
B. x có phải là node lá phải của cây nhị phân tìm kiếm hay không.
C. Sự tồn tại của x trên cây.
D. Cả 3 phương án a, b, c đều sai.
-
Câu 15:
Nghiên cứu đoạn code sau. Hãy chọn câu đúng
FILE * f = fopen(“FL.txt”, ”r”); int n = 7; fprintf(f, ” % d”, n);
A. Đoạn code gây lỗi
B. Đoạn code không lỗi
C. Đoạn code này sẽ ghi trị 7 lên file “FL.txt”
D. Đoạn code này sẽ đọc một trị từ file “FL.txt” vào biến n
-
Câu 16:
Cho mảng A gồm các phần tử kiểu struct, phát biểu nào là đúng khi truy cập đến các trường của các phần tử:
A. A[chỉ số].tên_trường;
B. A.tên_trường;
C. &A.tên_trường;
D. &A[chỉ số].tên_trường;
-
Câu 17:
Chọn kết quả đúng cho chương trình sau:
#include <stdio.h> #include <string.h> void main() { struct S1 { float d; float d1; float d2; }; struct S1 m = { 12, 1 }; printf(“ % 0.1 f % 0.1 f % 0.1 f”, m.d, m.d1, m.d2); };
A. “12.01.00.0”
B. “12.0000001.0000000.000000”
C. Kết quả khác
D. Chương trình bị lỗi
-
Câu 18:
Kết quả của chương trình sau là gì:
#include <stdio.h> void main() { int x, * p; x = 3; x = 6; p = & x; * p = 9; printf(“ % d”, x); printf(“ % d”, * p); printf(“ % d”, x); };
A. “369”
B. “696”
C. “999”
D. Kết quả khác
-
Câu 19:
Cho một danh sách móc nối với các phần tử trong danh sách có kiểu S1 được định nghĩa như sau: struct S1{ int info; struct S1 * next;} *head;
Biết con trỏ “head” lưu địa chỉ của phần tử đầu tiên trong danh sách. Cho biết mục đích của câu lệnh sau: {(head->next)=(head->next)->next;};
A. Loại bỏ phần tử thứ nhất ra khỏi danh sách.
B. Loại bỏ phần tử thứ 2 ra khỏi danh sách.
C. Loại bỏ phần tử thứ 3 ra khỏi danh sách.
D. Câu lệnh bị lỗi.
-
Câu 20:
Đâu là phát biểu đúng về danh sách:
A. Chỉ có thể xóa phần tử đầu tiên trong danh sách
B. Chỉ có thể xóa phần tử cuối cùng trong danh sách
C. Có thể xóa một phần tử tại vị trí bất kì trong danh sách
D. Tất cả đều sai
-
Câu 21:
Toán tử “++n” được hiểu
A. Giá trị n giảm đi sau khi giá trị của nó được sử dụng
B. Giá trị n giảm đi trước khi giá trị của nó được sử dụng
C. Giá trị của n được tăng sau khi giá trị của nó được sử dụng
D. Giá trị của n được tăng lên trước khi giá trị của nó được sử dụng
-
Câu 22:
Xâu định dạng nào dưới đây dùng để in ra một số nguyên dài:
A. “%ld”
B. “%x”
C. “%d”
D. “%o”
-
Câu 23:
Kết quả của chương trình sau là gì:
#include <stdio.h> int change(int * a) { * a = 10; return *a; }; void main() { int i = 5; change( & i); printf(“ % d”, i); };
A. 5
B. 10
C. 0
D. Báo lỗi khi thực hiện xây dựng chương trình
-
Câu 24:
Cho đoạn chương trình. Giá trị của c sẽ là:
char S[] = “Helen”; char * p = S; char c = * (p + 3);
A. ‘H’
B. ‘e’
C. ‘l’
D. ‘n’
-
Câu 25:
Xâu định dạng nào dưới đây dùng để in ra một số nguyên
A. “%u”
B. “%e”
C. “%d”
D. “%p”
-
Câu 26:
Kết quả của chương trình sau:
#include <stdio.h> void main() { int i = 98; printf(“ % c”, i); };
A. 98
B. B
C. b
D. Kết quả khác
-
Câu 27:
Khẳng định nào dưới đây là sai:
A. Hàm moveto(int x, int y) di chuyển vị trí hiện tại của màn hình đồ họa tới điểm có tọa độ (x,y);
B. lineto(int x, int y) là hàm vẽ đường thẳng từ vị trí con trỏ đồ họa hiện tại tới điểm có tọa độ (x,y).
C. linerel(int x, int y) vẽ đường thẳng tử gốc tọa độ tới điểm có tọa độ (x,y);
D. line(int x1, int y1, int x2, int y2) vẽ đường thẳng nối liền 2 điểm có tọa độ (x1,y1) và (x2,y2);
-
Câu 28:
Dữ liệu kí tự bao gồm
A. Các kí tự số chữ số
B. Các kí tự chữ cái
C. Các kí tự đặc biệt
D. Cả a,b và c
-
Câu 29:
Khai báo hàm đọc một text file vào một mảng các số nguyên, hãy chọn khai báo đúng
A. void Read( char* fName, int a[]);
B. void Read(char* fName, int a);
C. void Read(char* fName, int *a);
D. void Read(char* fName, int *&a, int &n);
-
Câu 30:
Lệnh nào trong các lệnh sau cho phép nhảy ra khỏi vòng lặp đến vị trí bất kì mong muốn:
A. break;
B. continue;
C. goto;
D. Không có phương án nào
-
Câu 31:
Kết quả in ra màn hình của chương trình sau:
#include <stdio.h> void main() { int i = 100; printf(“ % c”, i); };
A. “d”
B. “D”
C. “100”
D. Kết quả khác
-
Câu 32:
Kiểu dữ liệu int( kiểu số nguyên) có thể xử lí số nguyên nằm trong khoảng nào:
A. 0…255
B. -32768…32767
C. -128…127
D. 0…65535
-
Câu 33:
Giá trị lôgic của biểu thức sau là gì: !(1&&1||1&&0);
A. 1
B. 0
C. -1
D. Không câu nào đúng
-
Câu 34:
Trong các hàm sau, hàm nào là hàm không định dạng để nhập một kí tự từ bàn phím:
A. scanf();
B. getchar();
C. getch();
D. getche();
-
Câu 35:
Xem đoạn code sau. Giá trị trung bình của các trường trong biến v là gì:
typedef struct STUDENT { int d1, d2, d3; }; STUDENT v = { 2, 3, 4 }; v.d1++;
A. 3.0
B. 4.0
C. Giá trị khác
D. Có lỗi trong đoạn code
-
Câu 36:
Một biến phải bắt đầu với:
A. Một kí tự thường như các chữ cái hoặc dấu gạch dưới.
B. Một dấu gạch dưới.
C. Một kí tự kiểu số
D. Một toán tử như: +, -…
-
Câu 37:
Phát biểu nào là đúng khi nói về 2 hàm:
rectangle(int x1, int y1, int x2, int y2) và bar(int x1, int y1, int x2, int y2):
A. Cả 2 hàm đều vẽ hình chữ nhật
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
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
D. Cả hai hàm đều vẽ hình chữ nhật và tô cả màu bên trong
-
Câu 38:
Kết quả in ra màn hình của biểu thức sau là gì: -3+4%5/2
A. -1
B. -3
C. 1
D. Kết quả khác
-
Câu 39:
Xâu định dạng nào dưới đây dùng để in ra một xâu kí tự
A. “%f"
B. “%x”
C. “%s”
D. “%c”
-
Câu 40:
Cho một danh sách móc nối với các phần tử trong danh sách có kiểu S1 được định nghĩa như sau. Biết con trỏ “*head” lưu địa chỉ của phần tử đầu tiên trong danh sách. Nhóm câu lệnh nào sau đây thêm một phần tử vào đầu danh sách:
struct S1 { int info; struct S1 * next; }* head;
A. p->next=head; head=p;
B. p->next=head; head->p; head=p->next;
C. head->next=p; p=head;
D. Không có câu nào đúng
-
Câu 41:
Một cây nhị phân được gọi là đúng nếu:
A. Node gốc và tất cả các node trung gian đều có 2 node con.
B. Giá trị khóa của node gốc bao giờ cũng lớn hơn giá trị các khóa của nhánh cây con bên phải.
C. Giá trị khóa của node gốc bao giờ cũng lớn hơn giá trị các khóa của nhánh cây con bên trái.
D. Node gốc và các node trung gian đều có 2 node con và các node lá đều có mức giống nhau
-
Câu 42:
Đấu hiệu nào là đúng khi sử dụng hàm fread();
A. int fread( void *ptr, int size, FILE *f, int n);
B. int fread( FILE *f, void *ptr, int size, int n);
C. int fread( int size, void *ptr, int n, FILE *f);
D. int fread( void *ptr, int size, int n, FILE *f);
-
Câu 43:
Phát biểu nào sau đây không phài là lợi ích của việc dùng hàm:
A. Tránh dư thừa, lặp lại nhiều lần một đoạn lệnh
B. Dễ bảo trì
C. Khả năng sử dụng lại đoạn lệnh
D. Tất cả đều sai
-
Câu 44:
Kết quả của chương trình sau là gì
#include <stdio.h> void hoanvi(int * px, int * py) { int z; z = * px; * px = * py; * py = z; }; void main() { int a = 15, b = 21; hoanvi(a, b); printf(“ % d % d”, a, b); };
A. “15 21”
B. “21 15”
C. Báo lỗi khi thực hiện chương trình
D. Kết quả khác
-
Câu 45:
Có thể truy cập thành phần của cấu trúc thông qua con trỏ như( với p là con trỏ cấu trúc, a là thành phần cấu trúc):
A. (*p).a;
B. *p->a;
C. A và B đều đúng
D. A và B đều sai
-
Câu 46:
Kết quả chương trình sau là gì:
#include <stdio.h> void hoanvi(int px, int py) { int pz; pz = px; px = py; py = pz; }; void main() { int a = 15, b = 21; hoanvi(a, b); printf(“ % d % d”, a, b); };
A. “21 15”
B. “15 21”
C. Báo lỗi khi thực hiện chương trình
D. Kết quả khác
-
Câu 47:
Sử dụng cách truyền nào trong hàm sẽ không làm thay đổi giá trị của biến trong chương trình chính:
A. Truyền bằng trị
B. Truyền bằng giá trị địa chỉ của tham số
C. Cả a và b đều đúng
D. Cả a và b đều sai
-
Câu 48:
Kết quả in ra màn hình của chương trình sau
#include <stdio.h> void main() { int i = 5, j = 6; i = i - --j; printf(“ % d”, i); };
A. 5
B. 6
C. 1
D. 0
-
Câu 49:
Trong chế độ đồ họa, hàm nào sau đây xác lập kiểu chữ, cỡ chữ:
A. outtextxy(int x, int y, char far * textstring)
B. outtext(char far *textstring)
C. settextstyle(int font, int direction, int charsize)
D. Cả 3 phương án trên
-
Câu 50:
Kích thước của mảng là:
A. Số phần tử tối đa của mảng.
B. Kích thước bộ nhớ sẽ cấp phát cho mảng.
C. Cả hai câu trên đểu đúng.
D. Cả hai câu trên đều sai.