Câu hỏi: PRF192 Cơ sở lập trình – Bộ ôn tập số 1
50 câu trắc nghiệm kèm lời giải của môn PRF192 - Cơ sở lập trình, xếp đúng thứ tự trong đề. Trang 3/3 — câu 41–50.
Danh sách câu hỏi
50/50 câuHết danh sách
ABubble sort
BSelection sort
CBinary sort
DNone of the others
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Bubble sort". Thuật toán nổi bọt đi qua danh sách nhiều lượt, mỗi lượt so từng cặp phần tử kề nhau và đổi chỗ nếu sai thứ tự, nhờ vậy sau mỗi lượt phần tử lớn nhất trong phần chưa sắp nổi về cuối; nó dừng khi một lượt không còn phép đổi chỗ nào. "Selection sort" làm khác: mỗi lượt tìm phần tử nhỏ nhất của phần chưa sắp rồi đổi chỗ đúng một lần, phép so sánh không giới hạn ở các cặp kề nhau. "Binary sort" không phải tên thuật toán sắp xếp trong chương trình môn học; chữ nhị phân gắn với tìm kiếm nhị phân, một phép tìm trên dãy đã sắp. "None of the others" sai vì danh sách đã có đúng tên thuật toán nổi bọt.
A
free()B
malloc()C
calloc()D
realloc()Lời giải
Mở trang câu hỏi này →Đáp án đúng: "free()". Bộ nhớ cấp phát động nằm trên vùng heap và chỉ được trả lại khi chương trình gọi free với chính con trỏ mà hàm cấp phát đã trả về; không gọi thì vùng đó vẫn bị giữ tới khi tiến trình kết thúc, đó là rò rỉ bộ nhớ. "malloc()" làm việc ngược lại, nó xin một khối byte rồi trả về con trỏ, nội dung chưa được đặt giá trị. "calloc()" cũng là hàm xin bộ nhớ, khác malloc ở chỗ nhận số phần tử cùng kích thước mỗi phần tử và xoá vùng nhớ về 0. "realloc()" thay đổi kích thước một khối đã có, nó có thể chuyển khối sang chỗ khác và trả con trỏ mới, nhưng không phải hàm dùng để giải phóng.
43What is the purpose of "rb" in fopen() function used below in the code?4 lựa chọncó code
FILE *fp;
fp = fopen("demo.txt", "rb");AOpen "demo.txt" in binary mode for reading
BCreate a new file "demo.txt" for reading and writing
COpen "demo.txt" in binary mode for reading and writing
DNone of these
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Open "demo.txt" in binary mode for reading". Chuỗi chế độ của fopen đọc theo từng chữ: r nghĩa là mở để đọc và đòi tệp phải tồn tại, nếu không có thì hàm trả về NULL; b nghĩa là chế độ nhị phân, hệ thống không chuyển đổi ký tự xuống dòng và không diễn giải nội dung, byte đọc ra đúng như byte trong tệp. Vì chuỗi không có dấu cộng nên không được phép ghi. "Create a new file "demo.txt" for reading and writing" là việc của chế độ w+, chế độ đó còn xoá trắng tệp cũ, trong khi r không tạo tệp mới. "Open "demo.txt" in binary mode for reading and writing" là chế độ r+b, phải có thêm dấu cộng mới được ghi. "None of these" sai vì cách đọc r cùng b đã khớp đúng một lựa chọn có sẵn.
44How can you initialize a character array in C?4 lựa chọn
Achar arr[] = "Hello";
Bchar arr[] = ['H', 'e', 'l', 'l', 'o','/e'];
CChar[] arr = "Hello";
DChar[] arr = {'H', 'e', 'l', 'l', 'o','/0'};
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "char arr[] = "Hello";". Hằng chuỗi trong dấu nháy kép đã mang sẵn ký tự rỗng kết thúc, nên khai báo này tạo mảng sáu phần tử gồm năm chữ và một ký tự kết thúc, kích thước do trình biên dịch tự đếm vì cặp ngoặc vuông để trống. "char arr[] = ['H', 'e', 'l', 'l', 'o','/e'];" sai hai chỗ: danh sách khởi tạo phải nằm trong ngoặc nhọn chứ không phải ngoặc vuông, và ký tự kết thúc viết bằng dấu chéo ngược với số 0, không phải dấu chéo xuôi với chữ e. "Char[] arr = "Hello";" sai vì C phân biệt chữ hoa chữ thường nên không có kiểu tên Char, lại đặt cặp ngoặc vuông sai chỗ, trong C nó đi sau tên biến. "Char[] arr = {'H', 'e', 'l', 'l', 'o','/0'};" mắc đúng hai lỗi vừa nêu, thêm nữa dấu chéo xuôi với 0 chỉ là hai ký tự thường, không phải ký tự rỗng.
A"w+" truncates existing files, "a+" preserves them.
B"a+" can only append data, while "w+" can only write from the beginning.
C"a+" opens binary files, while "w+" opens text files.
D"a+" allows reading only, while "w+" allows both reading and writing.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "w+" truncates existing files, "a+" preserves them. Khác biệt gốc nằm ở lúc mở một tệp đã có: chế độ w+ cắt tệp về rỗng ngay khi mở nên dữ liệu cũ mất sạch, còn a+ giữ nguyên nội dung cũ và mọi phép ghi luôn được đẩy xuống cuối tệp bất kể con trỏ đọc đang ở đâu; cả hai đều tạo tệp mới nếu tệp chưa tồn tại và cả hai đều cho cả đọc lẫn ghi nhờ dấu cộng. Câu "a+" can only append data, while "w+" can only write from the beginning. sai vì dấu cộng ở cả hai chế độ đều mở thêm quyền đọc. Câu "a+" opens binary files, while "w+" opens text files. sai vì chế độ nhị phân do chữ b quyết định, hai chuỗi này đều là chế độ văn bản. Câu "a+" allows reading only, while "w+" allows both reading and writing. sai vì a+ cho ghi, chỉ khác là ghi luôn vào cuối tệp.
A
fprintfB
fwritefC
fsendfD
fputsLời giải
Mở trang câu hỏi này →Đáp án đúng: "fprintf". Hàm fprintf dùng y như printf nhưng thêm tham số đầu là con trỏ tệp, nên nó nhận chuỗi định dạng cùng các đối số rồi ghi kết quả đã định dạng vào tệp thay vì ra màn hình; thực chất printf chỉ là fprintf gắn sẵn với dòng xuất chuẩn. "fwritef" không tồn tại trong thư viện chuẩn, người học thường nhầm nó với fwrite dùng cho dữ liệu nhị phân. "fsendf" cũng không có trong thư viện chuẩn C, gọi tới sẽ lỗi ở khâu liên kết. "fputs" có thật nhưng chỉ ghi một chuỗi đã có sẵn, nó không nhận chuỗi định dạng nên không chèn được giá trị số hay ký tự vào văn bản.
47Consider the following code snippet that writes text to a file named "output.txt":4 lựa chọncó code
#include <stdio.h>
int main() {
FILE *file_ptr;
file_ptr = fopen("output.txt", "w");
if (file_ptr == NULL) {
printf("Unable to open the file.\n");
return 1;
}
fprintf(file_ptr, "Hello, World!\nThis is a test.");
fclose(file_ptr);
return 0;
}Assuming the code is executed successfully, what will be the content of the "output.txt" file?
AHello, World!
This is a test.
BHello, World! This is a test.
CHello, World!
DThis is a test.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Hello, World!
This is a test." Chuỗi định dạng truyền cho fprintf chứa dãy thoát xuống dòng ở giữa, nên khi ghi ra tệp nó trở thành một ký tự xuống dòng thật, chia nội dung thành hai dòng; fprintf ghi đúng những gì chuỗi định dạng mô tả, không tự thêm hay bớt ký tự nào, và chế độ w tạo tệp mới hoặc xoá trắng tệp cũ trước khi ghi, còn fclose đẩy hết bộ đệm xuống đĩa nên nội dung chắc chắn được lưu đủ. "Hello, World! This is a test." sai vì nó thay ký tự xuống dòng bằng một khoảng trắng, chuyện đó không xảy ra. "Hello, World!" sai vì nó chỉ lấy phần trước dấu xuống dòng, trong khi một lần gọi fprintf ghi trọn chuỗi. "This is a test." sai vì nó bỏ phần đầu của chuỗi, mà không có lệnh nào ghi đè phần đó.
A
fprintf()B
fwrite()C
fputc()D
fprintb()Lời giải
Mở trang câu hỏi này →Đáp án đúng: "fwrite()". Hàm fwrite nhận địa chỉ vùng dữ liệu, kích thước một phần tử, số phần tử và con trỏ tệp, rồi sao nguyên từng byte trong bộ nhớ ra tệp, nên nó ghi được cả cấu trúc hay mảng số mà không đổi sang dạng chữ; hàm đi cặp với nó khi đọc lại là fread. "fprintf()" ghi văn bản đã định dạng, số 1000 sẽ thành bốn ký tự chữ số chứ không phải các byte nguyên của một int. "fputc()" chỉ ghi đúng một ký tự mỗi lần gọi, không mô tả được kích thước phần tử nên không phù hợp để đổ cả khối dữ liệu. "fprintb()" không tồn tại trong thư viện chuẩn C, gọi tới sẽ lỗi ở khâu liên kết.
49What is the rewind () function used for?4 lựa chọn
ATo reset the file pointer to the beginning of the file.
BTo read the entire file into memory.
CTo close the file.
DTo move the file pointer to the end of the file.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "To reset the file pointer to the beginning of the file." Hàm rewind đặt vị trí đọc ghi của dòng tệp về byte đầu tiên, đồng thời xoá cờ lỗi và cờ kết thúc tệp, nên sau khi đã đọc hết tệp vẫn có thể đọc lại từ đầu; nó tương đương fseek về mốc 0 kèm việc dọn cờ. "To read the entire file into memory." sai vì hàm không chuyển một byte nội dung nào, nó chỉ dịch con trỏ vị trí trong cấu trúc dòng tệp. "To close the file." sai vì đóng tệp là việc của fclose, sau rewind thì tệp vẫn đang mở và dùng tiếp được. "To move the file pointer to the end of the file." sai vì đó là việc của fseek với mốc cuối tệp, ngược hẳn chiều với rewind.
50What is the purpose of this function?4 lựa chọncó code
void get_a_line(char line[], int max) {
int n = 0;
char c;
while ('\n' != (c = getchar()))
if (n < max)
line[n++] = c;
line[n] = '\0';
}AReads a line of input safely
BWrites a string to file
CCompares strings
DReverses string
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Reads a line of input safely". Hàm đọc từng ký tự bằng getchar cho tới khi gặp ký tự xuống dòng, chỉ ghi vào mảng khi n còn nhỏ hơn max nên không bao giờ viết quá chỗ đã có, rồi đặt ký tự rỗng kết thúc chuỗi; chính phép kiểm tra n < max là thứ làm nó an toàn hơn cách đọc không giới hạn. Hàm vẫn còn điểm yếu đáng biết: phần dư của dòng nhập dài hơn max bị bỏ, và nếu luồng nhập kết thúc mà chưa có ký tự xuống dòng thì vòng lặp không gặp mốc dừng. "Writes a string to file" sai vì không có con trỏ tệp nào và cũng không gọi hàm ghi tệp. "Compares strings" sai vì hàm chỉ có một mảng và không có phép so sánh nào giữa hai chuỗi. "Reverses string" sai vì chỉ số n luôn tăng, các ký tự được đặt theo đúng thứ tự nhập.