Font size
WorksheetsCâu hỏi trắc nghiệm về lập trình C++
Total questions: 99
Worksheet time: 1hrs 15mins
Chọn phát biểu ĐÚNG về hàm có tham số ngầm định trong C++
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.
Khi đa năng hóa toán tử không được dùng tham số có giá trị ngầm định.
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.
Tất cả các phát biểu trên đều sai.
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?
Sử dụng tab thay cho space để căn lề (indentation)
Sử dụng khoảng trắng để mã nguồn dễ đọ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
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
Một biến được gọi là biến toàn cục nếu:
Nó được khai báo trong tất cả các hàm, ngoại trừ hàm main().
Nó được khai báo bên trong hàm main().
Nó được khai báo ngoài tất cả các hàm, kể cả hàm main()
Nó được khai báo bên ngoài hàm main().
Một biến được gọi là một biến cục bộ nếu:
Nó được khai báo bên trong các hàm ngoại trừ hàm main().
Nó được khai báo bên trong hàm main().
Nó được khai báo bên ngoài các hàm kể cả hàm main().
Nó được khai báo bên trong các các hàm kể cả hàm main().
Để 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:
Tất cả các đáp án còn lại đều sai
_ _NAME_ _ và _ _NUMBER_ _
_ _FILE_ _ và _ _NUM_ _
_ _FILE_ _ và _ _LINE_ _
Đâu không phải là ngôn ngữ lập trình bậc cao?
Python
Pascal
PHP
Assembly
Đâu không phải là một trình biên dịch của ngôn ngữ C++?
Cython
MSS Visual C++
GNU GCC
Clang
Watcom C/C++
Phát biểu nào sau về kỹ thuật Assertion là SAI?
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.
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.
Assertion là một kỹ thuật sử dụng trong lập trình phòng ngừa.
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
Chọn thứ tự ưu tiên đúng của các toán tử logic trong C/C++ (Từ cao -> thấp ):
NOT, OR, AND
NOT, AND, OR
AND, NOT, OR
OR, NOT, AND
NOT, AND, XOR, OR
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 đó?
Tất cả các đáp án còn lại đều đúng
exception.h
assert.h
fault.h
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.
cout << a[i][j] << endl;
cout << *(a + i + 1) + j + 1 << endl;
cout << *(a + j) + i << endl;
cout << *(*(a + i) + j) << endl;
cout << *(a + i) + j << endl;
Chọn đáp án SAI trong các phát biểu sau:
Biến tĩnh (static) nằm trong cùng vùng nhớ cấp phát cho biến tổng thể
Dữ liệu cấp phát động và biến trỏ nằm trong vùng nhớ heap ( đáp án trong đề )
Biến cục bộ và tham số của hàm nằm trong vùng nhớ stack
Biến thanh ghi (register) nằm ngbay trong CPU
Cho khai báo : int M[][] ={{1,2,3},{4,5},}; Hãy lựa chọn đáp án Đúng :
M là mảng 2 chiều có kích thước 2 x 3
M là mảng 2 chiều có kích thước 3 x 3
M là mảng Không xác định
Có lỗi syntax
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
Queue
Stack
Vector
Array
Trong các loại sau đây, loại nào không phải là đệ quy trực tiếp
Đệ quy nhị phân
Đệ quy tuyến tính
Đệ quy phi tuyến
Đệ quy tương hỗ
Khuyến nghị ĐÚNG về quy tắc đặt tên phong cách lập trình tốt là:
Dùng chuỗi ký tự ngẫu nhiên để đặt tên
Đặt tên có ý nghĩa để từ tên gọi có thể hiểu được vai trò của nó-
Chỉ dùng các ký tự đơn để đặt tên giúp viết mã nguồn nhanh chóng
Đặt tên biến càng dài càng tốt
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 độ?
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.
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.
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.
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.
Mô tả nào sau đây đúng với khuôn mẫu hàm (function template) trong C++:
Cho phép người lập trình xây dựng các hàm tổng quát
Cho phép người lập trình tạo chương trình theo mô-đun
Cho phép lập trình viên viết các đoạn mã cụ thể cho một vấn đề
Một tính năng không bổ sung bất kỳ sức mạnh nào cho ngôn ngữ
Phương pháp nào không được dùng để khử đệ quy
Khử đệ quy bằng vòng lặp
Khử đệ quy đuôi
Khử đệ quy bằng Stack
Khử đệ quy bằng Queue
Statement coverage là phương pháp đo độ bao phủ kiểm thử. Statement coverage đạt 100% có nghĩa là:
Toàn bộ chức năng đã được kiểm thử
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
Tất cả các dòng lệnh trong mã nguồn đã được kiểm tra ít nhất một lần
Tất cả các nhánh trong chương trình đã được kiểm tra ít nhất một lần
Các khai báo hàm nào dưới đây là hợp lệ:
void MyFunc(int a = 7, float b = 2.0, int c = 5, int d)
void MyFunc(int a, float b = 2.0, int c, int d = 4)
void MyFunc(int a = 7, float b, int c = 5, int d = 4)
void MyFunc(int a, float b = 2.0, int c = 5, int d = 4)
Đâ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++?
stdlib
iostream
stdio
fstream
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?
y = myfunct(24, 4.5);
y = 0.5 * myfunct(x, 4.5);
myfunct(4.5, y);
y = myfunct(x + 5, y);
Đây là dạng đệ quy nào?
Đệ quy tương hỗ
Đệ quy nhị phân
Đệ quy tuyến tính
Đệ quy phi tuyến
Chọn đáp án SAI : trong C++, vế trái của phép gán có thể là :
Một mảng
Một biểu thức
Một biến
Một Hàm
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ử.
void deletedKeys
void xoaKhoa
void xoaKey
void removeB
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ử.
void deletedKeys
void xoaKhoa
void xoaKey
void removeByKey
Chọn đáp án SAI về biến tĩnh (static variable )
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
Biến tĩnh được cấp phát bộ nhớ trong cùng vùng nhớ với biến tổng thể
Biến tĩnh không được giải phóng khi hàm chứa nó được thực hiện xong
Giá trị của biến tĩnh chỉ được khởi tạo ở lần gọi hàm đầu tiên
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:
head->next = p; p = head;
p->next = head; head = p;
p->next = head; head = p-> next;
Không có phương án nào đúng
Phát biểu nào dưới đây là chính xác về phong cách lập trình:
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
Phong cách lập trình chỉ áp dụng cho ngôn ngữ lập trình C++ và Java
Phong cách lập trình giúp tăng tốc độ thực thi của chương trình
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
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?
Thực thi từng câu lệnh sau điểm dừng
Đặt điểm dừng (breakpoint) tại vị trí bất kỳ trong mã nguồn
Phân tích các lỗi core-dump
Kiểm tra giá trị của các biến
Tất cả đều sai
Chọn phát biểu ĐÚNG về hàm trong các phát biểu sau :
Trong C/C++ tên hàm phải là duy nhất
Hàm trong C/C++ chỉ có duy nhất 1 cách truyền tham số là truyền tham trị
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
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.
Để 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?
Đoạn mã #1: while (c = getchar() != EOF) putchar(c);
Đoạn mã #2: while ((c = getchar()) != EOF) putchar(c);
Đoạn mã #3: while (c = (getchar() != EOF)) putchar(c);
Đoạn mã #4: while (c ==(getchar() != EOF)) putchar(c);
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.
remove(a);
free(a);
delete a; // xóa 1 biến đơn
delete [] arr; // xóa luôn cả 1 mảng
delete arr[] ;
Những điều nào sau đây là ĐÚNG với tinh chỉnh mã nguồn:
Chỉ thực hiện tinh chỉnh mã nguồn sau khi đã kiểm tra và gỡ rối chương trình.
Tinh chỉnh mã nguồn liên quan đến việc thay đổi thiết kế ở phạm vi rộng.
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.
Không thực hiện tinh chỉnh mã nguồn sau khi đã bàn giao chương trình.
Khi có 2 vòng lặp lồng nhau thì nên:
Chuyển vòng lặp ngắn ra ngoài.
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.
Chuyển vòng lặp dài ra ngoài.
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.
Đâ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.
Hướng đối tượng
Hướng đệ quy
Hướng logic
Hướng giải thuật
Hướng mệnh lệnh
Trường hợp nào nên dùng vector thay vì dùng deque?
Không có đáp án nào đúng
Cần chèn vào phần tử ở giữa của danh sách
Cần chèn ở đầu theo kiểu FIFO (đáp án trong đề)
Cần chèn ở cả hai phía của danh sách
Các hàm quản lý bộ nhớ động trong C thuộc thư viện nào?
dynamic
mem
stdio
stdlib
Phương pháp “Lính canh” được sử dụng để làm gì?
Là 1 kỹ thuật gỡ rối
Là một kỹ thuật tăng hiệu năng chương trình
Là 1 kỹ thuật kiểm thử
Là một kỹ thuật tối ưu bộ nhớ
Kỹ thuật lính canh có thể áp dụng cho:
Xâu ký tự
Cả 3 đáp án trên đều đúng
Mảng
Danh sách
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?
Sử dụng hiệu quả bộ nhớ Stack
Tốc độ hoạt động của chương trình nhanh0
Lập trình đơn giản, dễ hiểu và dễ bảo trì (đáp án trong đề)
Không gian bộ nhớ sử dụng nhỏ gọn
Chọn đáp án SAI về hàm nội tuyến (Inline function)
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
Có thể chứa các biến tĩnh
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
Thân hàm được thay thế trực tiếp vào nơi hàm được gọi
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ì:
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
Hàm trả về 1 tham chiếu
Hàm có thể đứng ở vế trái phép gán
Tất cả các phát biểu trên đều sai
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?
abort(void);
assert(int num);
Tất cả đáp án còn lại đều sai
exit(int num);
Chọn phát biểu đúng về đa năng hoá hàm (overloading) trong C++:
Các hàm dài có chứa nhiều lệnh xử lý
Một hàm chứa một hoặc nhiều hàm khác bên trong nó
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
Hai hoặc nhiều hàm khác tên nhưng danh sách tham số giống nhau
Hãy chỉ ra cặp từ khoá để bắt ngoại lệ trong C++
try ... throw ...
try ... catch ...
throw ... catch ...
try ... break ...
Phát biểu nào sau đây là đúng về phong cách lập trình tốt?
Hy sinh sự rõ ràng để chương trình hiệu quả hơn
Không nên sử dụng các thủ tục đệ quy cho các cấu trúc dữ liệu đệ quy
Sử dụng nhiều biến tạm, trung gian
Để máy tính thực hiện các việc nặng nhọc (vd: tính toán)
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?
–
*
&
&&
Các kỹ thuật viết code hiệu quả là:
Các kỹ thuật xây dựng thuật toán tối ưu
Các kỹ thuật khử đệ quy
Các kỹ thuật làm tăng tốc độ (hiệu quả) thực hiện chương trình
Các kỹ thuật trình bày chương trình sao cho đơn giản, rõ ràng, dễ hiểu
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?
edom
assert
extern
lbdl_min 1e-37
exception
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:
stdout, stdin, stderr
stdin, stdout, stdexp
stdkey, stdcon, stderr
stdin, stdout, stderr
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:
i[M][j]
*(*(M+i)+j)
M[i][j]
j[M][i]
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:
i[M][j]
*(*(M+i)+j)
M[i][j]
j[M][i]
Chọn phát biểu sai: Khi đa năng hoá toán tử (overloading operator)
Có thể dùng tham số có giá trị ngầm định
Không được định nghĩa các toán tử mới: ví dụ @, $
Không được định nghĩa toán tử điều kiện ( ?: )
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
Cho biết kết quả khi biên dịch và thực thi chương trình sau:
#include
2 27
2 18
2 243
2 3
Chọn kết quả ĐÚNG trên màn hình sau khi thực hiện chương trình sau ;
#include
12 6 7
Chương trình có lỗi
10 6 14
5 6 14
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; }
1 , 3 , 6
1 , 1 , 0 , 1
6 , 3 , 1
1 , 0 , 1 , 1
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à:
int temp = *(p+k-1); *(p+k-1) = *(p+n-1-k); *(p+n-1-k) = temp; f1(p,n-1,k+1);
int temp = *(p+k+1); *(p+k+1) = *(p+n-k); *(p+n-k) = temp; f1(p,n-1,k+1);
int temp = *(p+k+1); *(p+k+1) = *(p+n-1-k); *(p+n-1-k) = temp; f1(p,n-1,k+1);
int temp = *(p+k); *(p+k) = *(p+n); *(p+n) = temp; f1(p,n-1,k+1);
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?
Box operator + (Box b1,Box b2) { Box tmp; tmp. capacity = b1. capacity + b2. capacity; return tmp; }
Box operator + (Box b1,Box b2) { return b1. capacity + b2. capacity; }
Toán tử + không được đa năng hoá.
void operator + (Box b1,Box b2) { Box tmp; tmp. capacity = b1. capacity + b2. capacity; }
Kết quả của chương trình sau là gì:
#include
4
3
1 2 3 4
Kết quả khác
#include State: true, x = 60 State: false, x = 60 State: false, x = 120 State: true, x = 120
Kết quả chương trình sau là gì
#include
15 21
Không có kết quả do chương trình bị lỗi
21 15
Kết quả khác
Cho biết kết quả khi biên dịch và thực thi chương trình sau:
#include
0
20
Lỗi biên dịch chương trình
10
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)
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)?
number < 0
number < 10
number >10
number >= 0 && number < 10
Kết quả đầu ra của chương trình sau là gì?
#include
Hai dòng output: 12 và assertion error
output: 12
Hai dòng output: 12 và output:
error
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)); }
Chương trình có lỗi
13
9
3
Cho biết kết quả in ra màn hình của CT sau :
#include
1
20
0
10
Cho biết kết quả của chương trình sau :
#include
Lap Trinh C++
Ngon Ngu
Ngon Ngu Lap Trinh C++8
Ngon Ngu Lap Trinh C++
Kết quả đầu ra của chương trình sau là gì?
#include
output: 11
Hai dòng output: 11 và output: program
output: program
Thông báo lỗi khác
Cho biết kết quả in ra màn hình khi thực thi chương trình sau:
#include
10.0 5
10 5.0
5.0 2.5
10 2.5
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;
x = 5, y = 7
x = 7, y = 14
x = 5, y = 12
x = 7, y = 12
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)?
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;
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)).
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
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));
Giả sử hàm f được định nghĩa như sau:
template
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)
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)
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)
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
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
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ớ
Cho đoạn code:
int f3(int *p, int n, int k)
{
int s;
if (k
*(p+k) != *(p+n-1-k)
*(p+k) != *(p+n-k)
*(p+k) != *(p+n)
*(p+k+1) != *(p+n-1-k)
Chọn phát biểu Đúng về truyền tham chiếu khi xây dựng hàm:
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ản sao giá trị của các đối số được chuyển cho hàm để thao tác với chúng
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ữ
Tất cả các phương án còn lại đều đúng
Các mô tả nào sau đây đúng với hàm và cơ chế truyền tham số trong C++:
Có thể sử dụng cơ chế truyền tham trị hoặc tham chiếu
Chỉ có thể sử dụng cơ chế truyền tham trị (kể cả dùng địa chỉ)
Tên hàm không phải là duy nhất
Tên hàm phải là duy nhất
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
float *p = & matrix[0][0]; sum = 0.0; for (int i=0; i<30000; i++) sum += *(p+i);
sum = 0.0; for (int r = 0; r < 10000; r++) for (int c = 0; c<3; c++) sum += matrix[r][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”
sum = 0.0; for (int i=0; i<30000; i++) sum += *(matrix+i);
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?
Vì C++ không dễ dàng gọi được các hàm try/catch/throw
Không có đáp án nào đúng
Vì C++ không hỗ trợ xử lý ngoại lệ
Vì hai cách này có mục đích khác nhau
Cho khai báo int M[][] = {1,2,3};
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
Có lỗi syntax vì trình dịch không xác định được kích thước mảng
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
M là mảng một chiều có kích thước = 3 và giá
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?
Cây nhị phân
Mảng
Hàng đợi
Ngăn xếp
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.
int **arr; arr = new int**[n]; for (int i = 0; i< n; i++) arr[i] = new int*[m];
int *arr; arr = new int[n]; for (int i = 0; i< m; i++) arr[i] = new int[m];
int **arr; arr = new int*[m]; for (int i = 0; i< m; i++) arr[i] = new int [n];
int **arr; arr = new int*[n]; for (int i = 0; i< m; i++) arr[i] = new int[m];
int *arr; arr = new int[m]; for (int i = 0; i< n; i++) arr[i] = new int[n];
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);
10 10
5 10
10 5
5 5
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;
5, 5, 8, 1
3, 7, 6, 3
2, 5, 6, 3
2, 7, 6, 3
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.
Phát biểu nào sau đây là sai về xử lý ngoại lệ
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
Xử lý ngoại lệ giúp chương trình in ra được điểm đầu tiên xảy ra lỗi
Xử lý ngoại lệ giúp chương trình dừng ngay lập tức khi xảy ra lỗi
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
Trong những phát biểu sau về phong cách chú thích (comment), phát biểu nào là SAI?
Chú thích theo đoạn (paragraph), không chú thích theo dòng (line)
Chú thích của hàm cần mô tả hàm thực hiện thế nào
Không cần chú thích khi mã nguồn rõ ràng
Chú thích phải tương ứng với mã nguồn
