wayground logo

Free Printable Worksheets

Font size

S
M
L
XL
Worksheets

Câu hỏi trắc nghiệm về lập trình C++

Total questions: 99

Worksheet time: 1hrs 15mins

Name
Class
Date
1.

Chọn phát biểu ĐÚNG về hàm có tham số ngầm định trong C++

a)

Khi hàm có tham số ngầm định có prototype, thì giá trị ngầm định trong định nghĩa hàm có ý nghĩa cao hơn giá trị định nghĩa trong prototype.

b)

Khi đa năng hóa toán tử không được dùng tham số có giá trị ngầm định.

c)

Tham số ngầm định của hàm có thể nằm ở vị trí bất kỳ trong hàm có danh sách tham số nhiều hơn các tham số ngầm định.

d)

Tất cả các phát biểu trên đều sai.

2.

Trong những phát biểu sau đây về sử dụng các khoảng trắng trong phong cách lập trình, phát biểu nào ĐÚNG?

a)

Sử dụng tab thay cho space để căn lề (indentation)

b)

Sử dụng khoảng trắng để mã nguồn dễ đọc

c)

Không nên sử dụng tính năng tự động căn lề của trình soạn thảo

d)

Không cần phải căn lề do việc căn lề không làm thay đổi việc biên dịch chương trình

3.

Một biến được gọi là biến toàn cục nếu:

a)

Nó được khai báo trong tất cả các hàm, ngoại trừ hàm main().

b)

Nó được khai báo bên trong hàm main().

c)

Nó được khai báo ngoài tất cả các hàm, kể cả hàm main()

d)

Nó được khai báo bên ngoài hàm main().

4.

Một biến được gọi là một biến cục bộ nếu:

a)

Nó được khai báo bên trong các hàm ngoại trừ hàm main().

b)

Nó được khai báo bên trong hàm main().

c)

Nó được khai báo bên ngoài các hàm kể cả hàm main().

d)

Nó được khai báo bên trong các các hàm kể cả hàm main().

5.

Để hiển thị fileName và lineNumber của một file mã nguồn C bất kỳ và một dòng bất kỳ, ta dùng các macro nào sau đây:

a)

Tất cả các đáp án còn lại đều sai

b)

_ _NAME_ _ và _ _NUMBER_ _

c)

_ _FILE_ _ và _ _NUM_ _

d)

_ _FILE_ _ và _ _LINE_ _

6.

Đâu không phải là ngôn ngữ lập trình bậc cao?

a)

Python

b)

Pascal

c)

PHP

d)

Assembly

7.

Đâu không phải là một trình biên dịch của ngôn ngữ C++?

a)

Cython

b)

MSS Visual C++

c)

GNU GCC

d)

Clang

e)

Watcom C/C++

8.

Phát biểu nào sau về kỹ thuật Assertion là SAI?

a)

Assertion là một macro hay một chương trình con dùng trong quá trình phát triển ứng dụng, cho phép chương trình tự kiểm tra khi chạy.

b)

Assertion có thể dùng để kiểm tra giả thiết được đưa ra trong code và loại bỏ những điều kiện không mong đợi.

c)

Assertion là một kỹ thuật sử dụng trong lập trình phòng ngừa.

d)

Assertion là kỹ thuật để phát hiện các lỗi liên quan tới bộ nhớ trong chương trình

9.

Chọn thứ tự ưu tiên đúng của các toán tử logic trong C/C++ (Từ cao -> thấp ):

a)

NOT, OR, AND

b)

NOT, AND, OR

c)

AND, NOT, OR

d)

OR, NOT, AND

e)

NOT, AND, XOR, OR

10.

Thư viện nào giúp chương trình dừng lại ngay lập tức khi vi phạm một điều kiện nào đó?

a)

Tất cả các đáp án còn lại đều đúng

b)

exception.h

c)

assert.h

d)

fault.h

11.

Giả sử ma trận hai chiều arr được khai báo như sau: int a[1000][1000]; Xét hai số nguyên i, j (0 ≤ i, j ≤ n). Các chỉ số hàng và cột được đánh số từ 0. Hãy chỉ ra câu lệnh đúng để in ra giá trị phần tử hàng i cột j của ma trận. Nếu có nhiều đáp án đúng, hãy chọn tất cả các đáp áp đúng. Chọn ít nhất một đáp án sai sẽ không được điểm.

a)

cout << a[i][j] << endl;

b)

cout << *(a + i + 1) + j + 1 << endl;

c)

cout << *(a + j) + i << endl;

d)

cout << *(*(a + i) + j) << endl;

e)

cout << *(a + i) + j << endl;

12.

Chọn đáp án SAI trong các phát biểu sau:

a)

Biến tĩnh (static) nằm trong cùng vùng nhớ cấp phát cho biến tổng thể

b)

Dữ liệu cấp phát động và biến trỏ nằm trong vùng nhớ heap ( đáp án trong đề )

c)

Biến cục bộ và tham số của hàm nằm trong vùng nhớ stack

d)

Biến thanh ghi (register) nằm ngbay trong CPU

13.

Cho khai báo : int M[][] ={{1,2,3},{4,5},}; Hãy lựa chọn đáp án Đúng :

a)

M là mảng 2 chiều có kích thước 2 x 3

b)

M là mảng 2 chiều có kích thước 3 x 3

c)

M là mảng Không xác định

d)

Có lỗi syntax

14.

Cấu trúc dữ liệu có thứ tự truy cập phần tử theo kiểu: vào sau ra trước

a)

Queue

b)

Stack

c)

Vector

d)

Array

15.

Trong các loại sau đây, loại nào không phải là đệ quy trực tiếp

a)

Đệ quy nhị phân

b)

Đệ quy tuyến tính

c)

Đệ quy phi tuyến

d)

Đệ quy tương hỗ

16.

Khuyến nghị ĐÚNG về quy tắc đặt tên phong cách lập trình tốt là:

a)

Dùng chuỗi ký tự ngẫu nhiên để đặt tên

b)

Đặt tên có ý nghĩa để từ tên gọi có thể hiểu được vai trò của nó-

c)

Chỉ dùng các ký tự đơn để đặt tên giúp viết mã nguồn nhanh chóng

d)

Đặt tên biến càng dài càng tốt

17.

Khi truy cập lần lượt các phần tử của mảng hai chiều kích thước 30x30, cách nào thường đem lại hiệu quả tốt hơn về tốc độ?

a)

Truy cập phần tử cuối cùng rồi giảm dần chỉ số hàng, khi đến giới hạn thì gán chỉ số cột về 29 rồi giảm chỉ số cột.

b)

Truy cập phần tử cuối cùng rồi giảm dần chỉ số cột, khi đến giới hạn thì gán chỉ số cột về 29 rồi giảm chỉ số hàng.

c)

Truy cập phần tử đầu tiên rồi tăng dần chỉ số hàng, khi đến giới hạn thì gán chỉ số hàng về 0 rồi tăng chỉ số cột.

d)

Truy cập phần tử đầu tiên rồi tăng dần chỉ số cột, khi đến giới hạn thì gán chỉ số cột về 0 rồi tăng chỉ số hàng.

18.

Mô tả nào sau đây đúng với khuôn mẫu hàm (function template) trong C++:

a)

Cho phép người lập trình xây dựng các hàm tổng quát

b)

Cho phép người lập trình tạo chương trình theo mô-đun

c)

Cho phép lập trình viên viết các đoạn mã cụ thể cho một vấn đề

d)

Một tính năng không bổ sung bất kỳ sức mạnh nào cho ngôn ngữ

19.

Phương pháp nào không được dùng để khử đệ quy

a)

Khử đệ quy bằng vòng lặp

b)

Khử đệ quy đuôi

c)

Khử đệ quy bằng Stack

d)

Khử đệ quy bằng Queue

20.

Statement coverage là phương pháp đo độ bao phủ kiểm thử. Statement coverage đạt 100% có nghĩa là:

a)

Toàn bộ chức năng đã được kiểm thử

b)

Tất cả các dòng lệnh và tất cả các nhánh trong chương trình đã được kiểm tra ít nhất một lần

c)

Tất cả các dòng lệnh trong mã nguồn đã được kiểm tra ít nhất một lần

d)

Tất cả các nhánh trong chương trình đã được kiểm tra ít nhất một lần

21.

Các khai báo hàm nào dưới đây là hợp lệ:

a)

void MyFunc(int a = 7, float b = 2.0, int c = 5, int d)

b)

void MyFunc(int a, float b = 2.0, int c, int d = 4)

c)

void MyFunc(int a = 7, float b, int c = 5, int d = 4)

d)

void MyFunc(int a, float b = 2.0, int c = 5, int d = 4)

22.

Đâu là tệp mô tả các đối tượng luồng vào ra chuẩn cin, cout, cerr và clog của C++?

a)

stdlib

b)

iostream

c)

stdio

d)

fstream

23.

Cho khai báo nguyên mẫu hàm và các khai báo biến: float myfunct(int& a, float b); int x = 10; float y = 4.5; lệnh gọi hàm nào sau đây sẽ đúng về mặt cú pháp?

a)

y = myfunct(24, 4.5);

b)

y = 0.5 * myfunct(x, 4.5);

c)

myfunct(4.5, y);

d)

y = myfunct(x + 5, y);

24.

Đây là dạng đệ quy nào?

a)

Đệ quy tương hỗ

b)

Đệ quy nhị phân

c)

Đệ quy tuyến tính

d)

Đệ quy phi tuyến

25.

Chọn đáp án SAI : trong C++, vế trái của phép gán có thể là :

a)

Một mảng

b)

Một biểu thức

c)

Một biến

d)

Một Hàm

26.

Trong các cách đặt tên hàm sau đây, cách nào là cách nên dùng? Biết rằng hàm này có nhiệm vụ căn cứ vào khóa trong bảng băm để xóa đi một phần tử.

a)

void deletedKeys

b)

void xoaKhoa

c)

void xoaKey

d)

void removeB

27.

h đặt tên hàm sau đây, cách nào là cách nên dùng? Biết rằng hàm này có nhiệm vụ căn cứ vào khóa trong bảng băm để xóa đi một phần tử.

a)

void deletedKeys

b)

void xoaKhoa

c)

void xoaKey

d)

void removeByKey

28.

Chọn đáp án SAI về biến tĩnh (static variable )

a)

Biến tĩnh là biến cục bộ của 1 hàm nên được cấp phát bộ nhớ trong vùng nhớ stack

b)

Biến tĩnh được cấp phát bộ nhớ trong cùng vùng nhớ với biến tổng thể

c)

Biến tĩnh không được giải phóng khi hàm chứa nó được thực hiện xong

d)

Giá trị của biến tĩnh chỉ được khởi tạo ở lần gọi hàm đầu tiên

29.

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. Nhóm câu lệnh nào sau đây thêm một phần tử mới p vào đầu danh sách:

a)

head->next = p; p = head;

b)

p->next = head; head = p;

c)

p->next = head; head = p-> next;

d)

Không có phương án nào đúng

30.

Phát biểu nào dưới đây là chính xác về phong cách lập trình:

a)

Phong cách lập trình tốt giúp chương trình rõ ràng, đơn giản, dễ đọc , dễ hiểu

b)

Phong cách lập trình chỉ áp dụng cho ngôn ngữ lập trình C++ và Java

c)

Phong cách lập trình giúp tăng tốc độ thực thi của chương trình

d)

Phong cách lập trình chỉ bao gồm quy tắc liên quan đến các chú thích của mã nguồn

31.

Phát biểu nào SAI về các tính năng có trên các công cụ gỡ lỗi phổ biến cho C/C++ hiện nay?

a)

Thực thi từng câu lệnh sau điểm dừng

b)

Đặt điểm dừng (breakpoint) tại vị trí bất kỳ trong mã nguồn

c)

Phân tích các lỗi core-dump

d)

Kiểm tra giá trị của các biến

e)

Tất cả đều sai

32.

Chọn phát biểu ĐÚNG về hàm trong các phát biểu sau :

a)

Trong C/C++ tên hàm phải là duy nhất

b)

Hàm trong C/C++ chỉ có duy nhất 1 cách truyền tham số là truyền tham trị

c)

Lời gọi hàm trong C++ có thể có số đối số ít hơn so với số tham số trong định nghĩa hàm

d)

Trong C/C++ lời gọi hàm phải có số đối số đúng bằng và hợp tương ứng về kiểu so với tham số trong định nghĩa hàm.

33.

Để viết đoạn mã thực hiện việc đọc và in ký tự đến cuối tệp, đoạn mã nào sau đây là đúng và có phong cách viết mã tốt?

a)

Đoạn mã #1: while (c = getchar() != EOF) putchar(c);

b)

Đoạn mã #2: while ((c = getchar()) != EOF) putchar(c);

c)

Đoạn mã #3: while (c = (getchar() != EOF)) putchar(c);

d)

Đoạn mã #4: while (c ==(getchar() != EOF)) putchar(c);

34.

Giả sử mảng arr được cấp phát động như sau: arr = new int[100]; Hãy chỉ ra đâu là câu lệnh giải phóng bộ nhớ mảng arr đúng.

a)

remove(a);

b)

free(a);

c)

delete a; // xóa 1 biến đơn

d)

delete [] arr; // xóa luôn cả 1 mảng

e)

delete arr[] ;

35.

Những điều nào sau đây là ĐÚNG với tinh chỉnh mã nguồn:

a)

Chỉ thực hiện tinh chỉnh mã nguồn sau khi đã kiểm tra và gỡ rối chương trình.

b)

Tinh chỉnh mã nguồn liên quan đến việc thay đổi thiết kế ở phạm vi rộng.

c)

Tinh chỉnh mã nguồn là thay đổi toàn bộ mã nguồn đã chạy thông báo theo hướng hiệu quả hơn nữa.

d)

Không thực hiện tinh chỉnh mã nguồn sau khi đã bàn giao chương trình.

36.

Khi có 2 vòng lặp lồng nhau thì nên:

a)

Chuyển vòng lặp ngắn ra ngoài.

b)

Chuyển vòng lặp dài ra ngoài, nhưng cần lưu ý tránh làm mất ưu thế của bộ nhớ cache.

c)

Chuyển vòng lặp dài ra ngoài.

d)

Chuyển vòng lặp ngắn ra ngoài, nhưng cần lưu ý tránh làm mất ưu thế của bộ nhớ cache.

37.

Đâu không phải là một mô thức lập trình? Hãy chọn tất các các đáp án đúng. Nếu chọn ít nhất một đáp án sai sẽ không có điểm.

a)

Hướng đối tượng

b)

Hướng đệ quy

c)

Hướng logic

d)

Hướng giải thuật

e)

Hướng mệnh lệnh

38.

Trường hợp nào nên dùng vector thay vì dùng deque?

a)

Không có đáp án nào đúng

b)

Cần chèn vào phần tử ở giữa của danh sách

c)

Cần chèn ở đầu theo kiểu FIFO (đáp án trong đề)

d)

Cần chèn ở cả hai phía của danh sách

39.

Các hàm quản lý bộ nhớ động trong C thuộc thư viện nào?

a)

dynamic

b)

mem

c)

stdio

d)

stdlib

40.

Phương pháp “Lính canh” được sử dụng để làm gì?

a)

Là 1 kỹ thuật gỡ rối

b)

Là một kỹ thuật tăng hiệu năng chương trình

c)

Là 1 kỹ thuật kiểm thử

d)

Là một kỹ thuật tối ưu bộ nhớ

41.

Kỹ thuật lính canh có thể áp dụng cho:

a)

Xâu ký tự

b)

Cả 3 đáp án trên đều đúng

c)

Mảng

d)

Danh sách

42.

Lý do nào khiến một số lập trình viên ưa thích việc viết chương trình đệ quy?

a)

Sử dụng hiệu quả bộ nhớ Stack

b)

Tốc độ hoạt động của chương trình nhanh0

c)

Lập trình đơn giản, dễ hiểu và dễ bảo trì (đáp án trong đề)

d)

Không gian bộ nhớ sử dụng nhỏ gọn

43.

Chọn đáp án SAI về hàm nội tuyến (Inline function)

a)

Giúp tiết kiệm chi phí gọi hàm, cấp phát, giải phóng các biến trên stack

b)

Có thể chứa các biến tĩnh

c)

Là 1 loại hàm của C++, có từ khóa inline trước kiểu giá trị trả về của hàm

d)

Thân hàm được thay thế trực tiếp vào nơi hàm được gọi

44.

Chọn phát biểu sai: Khi định nghĩa 1 hàm với ký hiệu & ở trước tên hàm thì:

a)

Nếu là hàm định nghĩa phép toán, thì thứ tự thực hiện của phép toán đó là từ trái qua phải

b)

Hàm trả về 1 tham chiếu

c)

Hàm có thể đứng ở vế trái phép gán

d)

Tất cả các phát biểu trên đều sai

45.

Hàm nào dưới đây yêu cầu chương trình phải thoát ngay lập tức bất chấp sự đúng sai của điều kiện?

a)

abort(void);

b)

assert(int num);

c)

Tất cả đáp án còn lại đều sai

d)

exit(int num);

46.

Chọn phát biểu đúng về đa năng hoá hàm (overloading) trong C++:

a)

Các hàm dài có chứa nhiều lệnh xử lý

b)

Một hàm chứa một hoặc nhiều hàm khác bên trong nó

c)

Hai hoặc nhiều hàm có cùng tên nhưng khác số lượng tham số hoặc một số tham số tương ứng có kiểu dữ liệu khác nhau

d)

Hai hoặc nhiều hàm khác tên nhưng danh sách tham số giống nhau

47.

Hãy chỉ ra cặp từ khoá để bắt ngoại lệ trong C++

a)

try ... throw ...

b)

try ... catch ...

c)

throw ... catch ...

d)

try ... break ...

48.

Phát biểu nào sau đây là đúng về phong cách lập trình tốt?

a)

Hy sinh sự rõ ràng để chương trình hiệu quả hơn

b)

Không nên sử dụng các thủ tục đệ quy cho các cấu trúc dữ liệu đệ quy

c)

Sử dụng nhiều biến tạm, trung gian

d)

Để máy tính thực hiện các việc nặng nhọc (vd: tính toán)

49.

Trong cú pháp của lambda, toán tử nào sau đây được sử dụng để bắt tất cả các biến bên ngoài truy cập bằng tham chiếu?

a)

b)

*

c)

&

d)

&&

50.

Các kỹ thuật viết code hiệu quả là:

a)

Các kỹ thuật xây dựng thuật toán tối ưu

b)

Các kỹ thuật khử đệ quy

c)

Các kỹ thuật làm tăng tốc độ (hiệu quả) thực hiện chương trình

d)

Các kỹ thuật trình bày chương trình sao cho đơn giản, rõ ràng, dễ hiểu

51.

Liệu macro nào có thể được sử dụng để phát hiện và báo ra các vi phạm trong mã nguồn của chương trình?

a)

edom

b)

assert

c)

extern

d)

lbdl_min 1e-37

e)

exception

52.

Khi nói đến các khái niệm: (a) các dòng nhập chuẩn nói chung và nó thường là từ bàn phím; (b) các dòng xuất chuẩn nói chung và nó thường là xuất ra màn hình; (c) dòng xuất lỗi chuẩn nói chung và nó cũng thường xuất trực tiếp ra màn hình. Chúng ta đang đề cập lần lượt đến:

a)

stdout, stdin, stderr

b)

stdin, stdout, stdexp

c)

stdkey, stdcon, stderr

d)

stdin, stdout, stderr

53.

Chọn đáp án sai: Khi truy cập tới phần tử ở hàng i cột j của mảng 2 chiều M, ta có thể viết:

a)

i[M][j]

b)

*(*(M+i)+j)

c)

M[i][j]

d)

j[M][i]

54.

Chọn đáp án sai: Khi truy cập tới phần tử ở hàng i cột j của mảng 2 chiều M, ta có thể viết:

a)

i[M][j]

b)

*(*(M+i)+j)

c)

M[i][j]

d)

j[M][i]

55.

Chọn phát biểu sai: Khi đa năng hoá toán tử (overloading operator)

a)

Có thể dùng tham số có giá trị ngầm định

b)

Không được định nghĩa các toán tử mới: ví dụ @, $

c)

Không được định nghĩa toán tử điều kiện ( ?: )

d)

Phải có ít nhất 1 tham số (toán hạng) thuộc kiểu dữ liệu do người dùng định nghĩa

56.

Cho biết kết quả khi biên dịch và thực thi chương trình sau: #include using namespace std; void calc(int a, int b, int & c){ a = b * c; b = a * c;// = b*b*c c = a * b;//b*c*b*b*c = 3^5 } int main(){ int x = 2, y =3; calc(x, y, y); cout << x << " " << y; return 0; }

a)

2 27

b)

2 18

c)

2 243

d)

2 3

57.

Chọn kết quả ĐÚNG trên màn hình sau khi thực hiện chương trình sau ; #include void foo(int *a, int b, int &c) { a+=5; b+=6; c+=7; } int main() { int a=5,b=6,c=7; foo(&b,c,a); printf(“%d %d %d”,a,b,c); }

a)

12 6 7

b)

Chương trình có lỗi

c)

10 6 14

d)

5 6 14

58.

Với đoạn mã sau, nếu n=13 thì các phần tử được đưa vào (push) ngăn xếp S theo thứ tự nào? while (n!= 0){ R = n % 2; S.push(R); n /= 2; }

a)

1 , 3 , 6

b)

1 , 1 , 0 , 1

c)

6 , 3 , 1

d)

1 , 0 , 1 , 1

59.

Cho đoạn chương trình sau: void f1(int *p, int n, int k) { if(k < n) { // vị trí cần điền các lệnh } } int main() { int n = 4, i, m[4] ={3,6,7,4}; f1(m,n-1,0); } Biết rằng hàm f1 có nhiệm vụ đảo chiều mảng đầu vào (ví dụ 3,6,7,4 sẽ thành 4,7,6,3). Đoạn mã cần điền vào vị trí trống sẽ là:

a)

int temp = *(p+k-1); *(p+k-1) = *(p+n-1-k); *(p+n-1-k) = temp; f1(p,n-1,k+1);

b)

int temp = *(p+k+1); *(p+k+1) = *(p+n-k); *(p+n-k) = temp; f1(p,n-1,k+1);

c)

int temp = *(p+k+1); *(p+k+1) = *(p+n-1-k); *(p+n-1-k) = temp; f1(p,n-1,k+1);

d)

int temp = *(p+k); *(p+k) = *(p+n); *(p+n) = temp; f1(p,n-1,k+1);

60.

Cho đoạn mã định nghĩa cấu trúc Box như sau. (*) typedef struct { int capacity;} Box; Đâu là lựa chọn chính xác để định nghĩa toán tử + cho hai đối tượng Box?

a)

Box operator + (Box b1,Box b2) { Box tmp; tmp. capacity = b1. capacity + b2. capacity; return tmp; }

b)

Box operator + (Box b1,Box b2) { return b1. capacity + b2. capacity; }

c)

Toán tử + không được đa năng hoá.

d)

void operator + (Box b1,Box b2) { Box tmp; tmp. capacity = b1. capacity + b2. capacity; }

61.

Kết quả của chương trình sau là gì: #include int main() { int i,j; for (i=1;i<4;i++) j=i; printf("\n%3d",j); return 0; }

a)

4

b)

3

c)

1 2 3 4

d)

Kết quả khác

62.

#include using namespace std; void func(int x, bool state = false) { if (state== true ) { cout << "State: true, x = " <

a)

State: true, x = 60

b)

State: false, x = 60

c)

State: false, x = 120

d)

State: true, x = 120

63.

Kết quả chương trình sau là gì #include void (int * px, int * py){ int *z; z = px; px = py; py = z; } int main(){ int a=15, b=21; (&a,&b); printf("%d %d",a,b); return 0; };

a)

15 21

b)

Không có kết quả do chương trình bị lỗi

c)

21 15

d)

Kết quả khác

64.

Cho biết kết quả khi biên dịch và thực thi chương trình sau: #include using namespace std; int func(int a = 10, int b) { int c; c = a + b; return c; } int main() { cout << func(10); return 0; }

a)

0

b)

20

c)

Lỗi biên dịch chương trình

d)

10

65.

Xét đoạn chương trình sau: void superWriteVertical(int number){ if (number < 0) { cout << "-"; superWriteVertical(-number); } else if (number < 10) cout << number; else { superWriteVertical(number / 10); cout << number % 10; } } Hỏi giá trị nào của biến number được tính toán trực tiếp như trường hợp cơ sở (neo đệ quy)?

(a)  

66.

Hỏi giá trị nào của biến number được tính toán trực tiếp như trường hợp cơ sở (neo đệ quy)?

a)

number < 0

b)

number < 10

c)

number >10

d)

number >= 0 && number < 10

67.

Kết quả đầu ra của chương trình sau là gì? #include #include int main(){ int n = 12; char str[50] = ""; assert(n>=10); printf("output: %d\n",n); assert(str != NULL); printf("output: %s\n", str); }

a)

Hai dòng output: 12 và assertion error

b)

output: 12

c)

Hai dòng output: 12 và output:

d)

error

68.

Chọn kết quả đúng trên màn hình #include... inline int vd(int x, int y){ static int a = 10; return (x > a || y) ? x – a + y++ : x + y; } int main(){ int m = 5, n = 8; printf("%d",vd(m,n)); }

a)

Chương trình có lỗi

b)

13

c)

9

d)

3

69.

Cho biết kết quả in ra màn hình của CT sau : #include int main() { int i = 10, j = 0; if (i || (j = i + 10)) printf("%d", j); return 0; }

a)

1

b)

20

c)

0

d)

10

70.

Cho biết kết quả của chương trình sau : #include jy int main() { char *s; s="Ngon Ngu Lap Trinh C++"; s+=8; cout<

a)

Lap Trinh C++

b)

Ngon Ngu

c)

Ngon Ngu Lap Trinh C++8

d)

Ngon Ngu Lap Trinh C++

71.

Kết quả đầu ra của chương trình sau là gì? #include #include void main(){ int n = 11; char str[50] = “program”; assert(n >= 10); printf(“ output: %d\n”, n); assert(str != NULL); printf(“output: %s\n”, str); }

a)

output: 11

b)

Hai dòng output: 11 và output: program

c)

output: program

d)

Thông báo lỗi khác

72.

Cho biết kết quả in ra màn hình khi thực thi chương trình sau: #include using namespace std; int calc(int a, int b, int c = 1) { return (a * b * c); } float calc(float a, float b, float c = 1.0) { return (a / b / c); } int main(){ int x = 5, y = 1; float n = 5.0, m = 2.0; cout << calc(x, y, 2) <<" "; cout << calc(n, m); return 0; }

a)

10.0 5

b)

10 5.0

c)

5.0 2.5

d)

10 2.5

73.

Cho biết kết quả hiển thị ra màn hình sau khi thực hiện chương trình sau: #include using namespace std; void myprint(int a){cout<

a)

5 5

b)

5 5 5

c)

5

d)

Chương trình bị lỗi

74.

Hỏi giá trị của x và y sau khi đoạn lệnh sau được thực hiện là gì? int x = 5, y = 7; int *p = &x; int &r = x; *p += 2; y += r;

a)

x = 5, y = 7

b)

x = 7, y = 14

c)

x = 5, y = 12

d)

x = 7, y = 12

75.

Giả sử biến y và hàm fun được định nghĩa như sau: int y = 20; void fun(int x){ x += 30; } Hỏi giá trị của biến y bằng bao nhiêu sao khi thực hiện 02 lần lời gọi hàm fun(n)?

4 lines
76.

Kết quả thực hiện đoạn mã chương trình sau là gì? int arr[] = {4, 5, 6, 7}; int* p = (arr + 1); cout << *arr + 10;

4 lines
77.

Giả sử hàm f được định nghĩa như sau: inline auto f(auto x){ x += 2; return x * x; } Hãy xác định giá trị của f(f(0)).

4 lines
78.

Con trỏ p được khai báo như sau: int *p; Giả sử sau khi khai báo, con trỏ p có địa chỉ trong bộ nhớ là 219. Hỏi địa chỉ mới của p là bao nhiêu sau khi thực hiện tiếp câu lệnh sau: p += 8

4 lines
79.

Giả sử hai hàm func1 và func2 được định nghĩa như sau: int func2(int); int func1(int n){ If (n < 1) return 0; return 2 * func2(n – 1); } int func2(int n){ If (n < 1) return 1; return 1 + func1(n – 1); } Hỏi câu lệnh sau in kết quả gì ra màn hình? Printf(“%d %d”, func1(3), func2(3));

4 lines
80.

Giả sử hàm f được định nghĩa như sau: template T f(T a, T &b){ b++; a++; return a * b; } Hỏi đoạn chương trình sau in ra kết quả gì lên màn hình: int a = 1, b = 1; float c = 4.0, d = 5.0; printf(“%d

4 lines
81.

Hỏi đoạn chương trình sau in ra kết quả gì lên màn hình: int a = 1, b = 1; float c = 4.0, d = 5.0; printf(“%d %.0f”, f(f(a, b), b), f(c, d)); Yêu cầu ghi chính xác kết quả, không thừa không thiếu ký tự nào kể cả dấu cách.

(a)  

82.

Hãy xác định giá trị của f(10) nếu hàm f được định nghĩa theo kiểu đệ quy như sau: int f(int n) { if (n < 1) return 1; else return f(n/2) + f(n - 1); }

(a)  

83.

Hãy cho biết giá trị của *(a+5) nếu mảng a được khai báo như sau: Int a[] = {69, 16, 54, 40, 35, 2, 6, 10, 20};

(a)  

84.

Hãy chỉ ra mỗi ngôn ngữ lập trình sau sử dụng chương trình biên dịch (compiler) hay thông dịch (interpreter) C/C++ :Biên dịch Python: Thông dịch Matlab: Thông dịch Pascal: Biên dịch

4 lines
85.

Hãy chỉ ra những ngôn ngữ lập trình sau tương ứng với mô thức lập trình nào Pascal: hướng cấu trúc Java: hướng đối tượng Prolog: hướng logic Lisp: hướng chức năng

4 lines
86.

Hãy chỉ ra mỗi lệnh dưới đây, đâu là lệnh cấp phát bộ nhớ, đâu là lệnh giải phóng bộ nhớ, đâu là lệnh không liên quan tới cấp phát và giải phóng bộ nhớ? remove: Không liên quan realloc: Cấp phát bộ nhớ calloc: Cấp phát bộ nhớ malloc: Cấp phát bộ nhớ delete: Giải phóng bộ nhớ free: Giải phóng bộ nhớ new: Cấp phát bộ nhớ

4 lines
87.

Cho đoạn code: int f3(int *p, int n, int k) { int s; if (k

a)

*(p+k) != *(p+n-1-k)

b)

*(p+k) != *(p+n-k)

c)

*(p+k) != *(p+n)

d)

*(p+k+1) != *(p+n-1-k)

88.

Chọn phát biểu Đúng về truyền tham chiếu khi xây dựng hàm:

a)

Các thay đổi đối với giá trị tham số trong hàm cũng ảnh hưởng đến các đối số ban đầu

b)

Bản sao giá trị của các đối số được chuyển cho hàm để thao tác với chúng

c)

Vị trí của biến trong bộ nhớ được chuyển cho hàm làm cho xử lý bị chậm và gây tốn kém lưu trữ

d)

Tất cả các phương án còn lại đều đúng

89.

Các mô tả nào sau đây đúng với hàm và cơ chế truyền tham số trong C++:

a)

Có thể sử dụng cơ chế truyền tham trị hoặc tham chiếu

b)

Chỉ có thể sử dụng cơ chế truyền tham trị (kể cả dùng địa chỉ)

c)

Tên hàm không phải là duy nhất

d)

Tên hàm phải là duy nhất

90.

Cho mảng 2 chiều matrix kiểu float gổm 10000 hàng và 3 cột cùng đoạn code sau: sum = 0.0; for (int c = 0; c<3; c++) for (int r = 0; r < 10000; r++) sum += matrix[r][c]; Hãy chọn giải pháp tinh chỉnh ĐÚNG và TỐI ƯU NHẤT trong các giải pháp sau

a)

float *p = & matrix[0][0]; sum = 0.0; for (int i=0; i<30000; i++) sum += *(p+i);

b)

sum = 0.0; for (int r = 0; r < 10000; r++) for (int c = 0; c<3; c++) sum += matrix[r][c];

c)

Giữ nguyên giải pháp ban đầu vì đã áp dụng kỹ thuật “Đưa các vòng lặp lớn vào trong”

d)

sum = 0.0; for (int i=0; i<30000; i++) sum += *(matrix+i);

91.

Tại sao trong C++ ta không thể sử dụng “xử lý ngoại lệ” để hoàn toàn thay thế cho việc dùng assert?

a)

Vì C++ không dễ dàng gọi được các hàm try/catch/throw

b)

Không có đáp án nào đúng

c)

Vì C++ không hỗ trợ xử lý ngoại lệ

d)

Vì hai cách này có mục đích khác nhau

92.

Cho khai báo int M[][] = {1,2,3};

a)

M là mảng hai chiều có kích thước 1x3 và giá trị các phần tử tương ứng là 1,2,3

b)

Có lỗi syntax vì trình dịch không xác định được kích thước mảng

c)

M là mảng hai chiều có kích thước 3x1 và giá trị các phần tử tương ứng là 1,2,3

d)

M là mảng một chiều có kích thước = 3 và giá

93.

Khi đổi một số nguyên từ hệ thập phân sang hệ nhị phân thì người ta dùng phép chia liên tiếp cho 2 và lấy các số dư (là các chữ số nhị phân) theo chiều ngược lại. Cơ chế sắp xếp này chính là cơ chế hoạt động của cấu trúc dữ liệu nào?

a)

Cây nhị phân

b)

Mảng

c)

Hàng đợi

d)

Ngăn xếp

94.

Giả sử bạn cần cấp phát động cho một mảng arr có kích thước mxn với m hàng và n cột. Hãy chọn đoạn chương trình thực hiện đúng việc cấp phát trong các đoạn chương trình sau đây.

a)

int **arr; arr = new int**[n]; for (int i = 0; i< n; i++) arr[i] = new int*[m];

b)

int *arr; arr = new int[n]; for (int i = 0; i< m; i++) arr[i] = new int[m];

c)

int **arr; arr = new int*[m]; for (int i = 0; i< m; i++) arr[i] = new int [n];

d)

int **arr; arr = new int*[n]; for (int i = 0; i< m; i++) arr[i] = new int[m];

e)

int *arr; arr = new int[m]; for (int i = 0; i< n; i++) arr[i] = new int[n];

95.

Kết quả thực hiện đoạn chương trình sau là gì? Yêu cầu ghi chính xác kết quả, không thừa không thiếu ký tự nào kể cả dấu cách. int x,y, *p, *q; x= 5; y=10; p = q = &x; *p = *q = y; printf(“%d %d \n”, x, y);

a)

10 10

b)

5 10

c)

10 5

d)

5 5

96.

Giá trị các phần tử của mảng A sau khi thực hiện đoạn lệnh dưới đây là: int A[] = {2, 5, 6, 1}; int *p = A; *p++; *p+=2; p += 2; *p+=2;

a)

5, 5, 8, 1

b)

3, 7, 6, 3

c)

2, 5, 6, 3

d)

2, 7, 6, 3

97.

Hỏi câu lệnh sau sẽ in ra kết quả gì ra màn hình? print(3); Yêu cầu ghi chính xác kết quả, không thừa không thiếu ký tự nào kể cả dấu cách.

4 lines
98.

Phát biểu nào sau đây là sai về xử lý ngoại lệ

a)

Khi chương trình đã được hoàn thành, xử lý ngoại lệ giúp chương trình gửi các báo cáo nhanh nhất có thể đến đội phát triển

b)

Xử lý ngoại lệ giúp chương trình in ra được điểm đầu tiên xảy ra lỗi

c)

Xử lý ngoại lệ giúp chương trình dừng ngay lập tức khi xảy ra lỗi

d)

Xử lý ngoại lệ có hiệu quả hơn hẳn assert trong việc phát hiện ra các vi phạm của mã nguồn

99.

Trong những phát biểu sau về phong cách chú thích (comment), phát biểu nào là SAI?

a)

Chú thích theo đoạn (paragraph), không chú thích theo dòng (line)

b)

Chú thích của hàm cần mô tả hàm thực hiện thế nào

c)

Không cần chú thích khi mã nguồn rõ ràng

d)

Chú thích phải tương ứng với mã nguồn