Danh sách câu hỏi của đề

Câu hỏi: PRF192 Cơ sở lập trình – Bộ ôn tập số 4

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 đề.

Danh sách câu hỏi

20/50 câuCòn 30
1What is an algorithm?4 lựa chọn
AA program executed using a computer
BA procedure used for solving a problem or performing a computation.
CA sequence of steps to solve a problem
DA description of hidden information
Lời giải
Đáp án đúng: "A procedure used for solving a problem or performing a computation.". Đây là định nghĩa gọn của thuật toán: một quy trình xác định dùng để giải một bài toán hoặc thực hiện một phép tính, gồm hữu hạn bước rõ nghĩa, có đầu vào đầu ra xác định và phải dừng. Thuật toán tồn tại độc lập với ngôn ngữ và máy móc, nên cùng một thuật toán viết được bằng nhiều ngôn ngữ khác nhau. Lựa chọn "A program executed using a computer" lẫn thuật toán với chương trình: chương trình chỉ là một cách hiện thực thuật toán trên máy. Lựa chọn "A sequence of steps to solve a problem" nghe gần đúng nhưng lỏng: một dãy bước mơ hồ hoặc không bao giờ dừng thì không phải thuật toán, và cách nói ấy cũng bỏ mất mảng thực hiện phép tính. Lựa chọn "A description of hidden information" không liên quan gì tới khái niệm thuật toán.
Mở trang câu hỏi này →
2What is the incorrect definition?4 lựa chọn
AAlgorithm: a way to find out a solution
BData: Values are used to describe information. So, information can be called as the mean of data
CSolution: A situation in which something is hidden
DInformation: Knowledge about something
Lời giải
Đáp án đúng: "Solution: A situation in which something is hidden". Câu này tả một tình huống có thứ gì bị che giấu, tức là mô tả của một vấn đề hay một câu đố, chứ không phải của giải pháp; giải pháp là cách làm cụ thể đưa bài toán từ dữ liệu đầu vào tới kết quả mong muốn, nên định nghĩa này sai. "Algorithm: a way to find out a solution" đúng, vì thuật toán chính là dãy bước hữu hạn dùng để tìm ra giải pháp. "Data: Values are used to describe information. So, information can be called as the mean of data" đúng theo cách môn học phân biệt hai khái niệm: dữ liệu là các giá trị thô, còn thông tin là nghĩa rút ra từ những giá trị đó. "Information: Knowledge about something" đúng, vì thông tin là hiểu biết về một đối tượng, kết quả của việc diễn giải dữ liệu.
Mở trang câu hỏi này →
Acompilation errors
Bruntime errors
Clogic or semantic errors
Dinterpreter errors
Lời giải
Đáp án đúng: "logic or semantic errors". Trình biên dịch chỉ kiểm được những gì thuộc hình thức: từ khoá, dấu câu, kiểu dữ liệu, khai báo. Nó không biết chương trình đáng lẽ phải làm gì, nên một công thức viết sai dấu, một vòng lặp chạy thiếu một lượt hay một điều kiện so sánh ngược đều dịch trơn tru rồi cho ra số liệu sai. Đó chính là lỗi tư duy, lỗi về ngữ nghĩa. Ý "compilation errors" sai vì mâu thuẫn với chính đề bài, đã dịch không lỗi thì không còn lỗi biên dịch nào sót lại. Ý "runtime errors" sai vì lỗi lúc chạy biểu hiện bằng việc chương trình dừng bất thường hoặc rơi vào hành vi không xác định như chia cho không, truy cập ngoài vùng nhớ, chứ không phải chạy xong êm ả rồi trả lời sai. Ý "interpreter errors" sai vì mã nguồn ở đây được biên dịch thành mã máy, không có bộ thông dịch nào tham gia.
Mở trang câu hỏi này →
ACompilation involves converting source code to machine code, while interpretation involves executing code line by line.
BCompilation and interpretation are two terms that are used interchangeably.
CAlgorithm is another term for interpretation in programming languages.
DIDE tools are responsible for both compilation and interpretation processes.
Lời giải
Đáp án đúng: "Compilation involves converting source code to machine code, while interpretation involves executing code line by line.". Khác biệt cốt lõi nằm ở thời điểm dịch: trình biên dịch đọc trọn mã nguồn, kiểm tra rồi sinh ra mã máy thành tệp thực thi, sau đó máy chạy trực tiếp tệp ấy mà không cần mã nguồn nữa; bộ thông dịch thì vừa đọc vừa thực hiện từng câu lệnh ở mỗi lần chạy. Ngôn ngữ C thuộc nhóm biên dịch, đó là lý do tệp nguồn phải dịch xong mới có chương trình để chạy. Ý "Compilation and interpretation are two terms that are used interchangeably." sai vì hai cơ chế khác nhau cả về sản phẩm trung gian lẫn cách báo lỗi. Ý "Algorithm is another term for interpretation in programming languages." sai vì thuật toán là trình tự các bước giải một bài toán, không phải một cách thực thi mã. Ý "IDE tools are responsible for both compilation and interpretation processes." sai vì môi trường phát triển chỉ gọi tới trình biên dịch, bản thân nó không làm việc dịch.
Mở trang câu hỏi này →
AA compiler
BA text editor
CA file
DA program
Lời giải
Đáp án đúng: "A compiler". Máy chỉ hiểu được mã máy, còn tệp nguồn là văn bản viết theo quy tắc của ngôn ngữ, nên cần một chương trình chuyên trách đọc văn bản ấy, kiểm tra cú pháp và kiểu, rồi sinh ra các chỉ thị máy; chương trình chuyên trách đó là trình biên dịch. Ý "A text editor" sai vì bộ soạn thảo chỉ giúp gõ và lưu văn bản mã nguồn, nó không hiểu ngữ nghĩa của ngôn ngữ và không sinh ra mã máy. Ý "A file" sai vì tệp là nơi chứa dữ liệu, bản thân nó không thực hiện việc dịch nào. Ý "A program" sai vì nói chung chung như thế thì không phân biệt được gì: trình biên dịch đúng là một chương trình, nhưng đề hỏi cái gì đảm nhiệm việc dịch nên câu trả lời phải nêu đúng loại chương trình làm việc đó.
Mở trang câu hỏi này →
6What will the following code output?4 lựa chọncó code
Đề bài
#include <stdio.h>
int main() {
    int a = 7;
    printf("%d", (a << 2) | 1);
    return 0;
}
A28
B29
C15
D30
Lời giải
Đáp án đúng: "29". Biến a bằng 7 có dạng bit là 111. Phép dịch trái hai nhịp đẩy cả ba bit đó sang trái và lấp hai bit 0 vào cuối, thành 11100, tức là 28; đây cũng là lý do dịch trái n nhịp tương đương nhân với 2 lũy thừa n. Tiếp đó phép hoặc trên bit với 1 chỉ chạm vào bit thấp nhất, bit này đang là 0 nên nó được bật lên, cho 11101 là 29. Ý "28" sai vì nó dừng ở kết quả dịch trái, bỏ quên phép hoặc bit đứng sau. Ý "15" sai vì nó ứng với việc chỉ dịch trái một nhịp, ra 14 rồi bật bit thấp nhất thành 15. Ý "30" sai vì muốn ra 30 thì phải bật bit thứ hai tính từ phải, nghĩa là hoặc với 2, còn mặt nạ trong mã là 1; cũng cần nhớ đây là phép hoặc bit chứ không phải phép cộng, nên 28 không tự cộng thêm 2.
Mở trang câu hỏi này →
7Given the following code snippet:4 lựa chọncó code
Đề bài
#include <stdio.h>
int main() {
    int a = 5;
    {
        int b = 10;
        printf("%d ", a);
    }
    // Uncommenting the line of code below will be a compilation error.
    // printf("%d", b);
    return 0;
}

Which of the following best describes the scope of a variable declared inside a block in C?

AThe variable b can be accessed only inside the inner block where it's declared.
BThe variable b can be accessed anywhere within main() after its declaration.
CBoth variables a and b can be accessed inside the inner block.
DThe variable b can be accessed globally throughout the program.
Lời giải
Đáp án đúng: "The variable b can be accessed only inside the inner block where it's declared.". Biến khai trong một cặp ngoặc nhọn có phạm vi khối: tên của nó chỉ nhìn thấy được từ chỗ khai báo cho tới dấu ngoặc đóng của khối ấy, và vùng nhớ cũng chỉ sống trong khoảng đó nếu biến không có lớp lưu trữ static. Vì vậy b dùng được bên trong khối nhỏ, còn dòng in nằm sau khối thì không còn tên b nào để tham chiếu nên không dịch được. Mô tả "The variable b can be accessed anywhere within main() after its declaration." nhầm phạm vi khối với phạm vi hàm, trong khi biên thật là dấu ngoặc đóng của khối nhỏ. Mô tả "Both variables a and b can be accessed inside the inner block." nêu một điều đúng về chiều nhìn ra ngoài, nhưng câu hỏi đòi mô tả phạm vi của biến khai trong khối nên nó không trả lời đúng chỗ. Mô tả "The variable b can be accessed globally throughout the program." chỉ đúng với biến khai ở mức tệp, nằm ngoài mọi hàm.
Mở trang câu hỏi này →
8What will be the output of the following C code?4 lựa chọncó code
Đề bài
#include <stdio.h>
void main()
{
    int i = 10, j = 3, k = 3;
    printf("%d %d ", i, j, k);
}
ACompile time error
B10 3 3
C10 3
D10 3 somegarbage value
Lời giải
Đáp án đúng: "10 3". Hàm printf nhận số đối số thay đổi nên nó không kiểm tra số lượng lúc dịch; chính chuỗi định dạng quyết định lấy ra bao nhiêu giá trị. Ở đây chuỗi chỉ có hai đặc tả nên printf lấy i và j, in 10 rồi 3 kèm khoảng trắng, còn k vẫn được tính nhưng bị bỏ qua hoàn toàn. Chuẩn C cho phép truyền thừa đối số; chỉ truyền thiếu mới là hành vi không xác định. Lựa chọn "Compile time error" sai vì thừa đối số nhiều lắm chỉ bị cảnh báo, và dạng main trả về void dù phi chuẩn vẫn được nhiều trình dịch nhận. Lựa chọn "10 3 3" đòi chuỗi định dạng phải có ba đặc tả. Lựa chọn "10 3 somegarbage value" hiểu sai cơ chế: đối số thừa không bị in ra dưới dạng rác, nó chỉ nằm lại trong vùng tham số và không ai đọc tới.
Mở trang câu hỏi này →
9What does the following program display?4 lựa chọncó code
Đề bài
#include <stdio.h>
int main()
{
    int x[] = {1, 2, 3, 4, 5};
    int y = 1;
    printf("%d", x[y]);

    return 0;
}
A2
B3
C4
DAn error will be raised.
Lời giải
Đáp án đúng: "2". Mảng x được khởi tạo với năm giá trị và chỉ số đếm từ 0, nên x[0] là 1, x[1] là 2, x[2] là 3 rồi tiếp tục như thế; biến y bằng 1 nên x[y] chính là x[1], tức giá trị 2, và đặc tả %d in ra số nguyên đó. Bản chất của phép truy cập mảng là cộng địa chỉ: tên mảng cho địa chỉ ô đầu, chỉ số được nhân với kích thước một phần tử rồi cộng vào, vì vậy chỉ số 1 trỏ tới ô thứ hai. Giá trị "3" là x[2], tức cách đọc theo kiểu đếm từ 1 mà C không dùng. Giá trị "4" là x[3], lệch hai ô so với chỉ số đang dùng. Kết luận "An error will be raised." không đúng: mảng có năm ô nên chỉ số 1 nằm gọn trong dải hợp lệ; mà ngay cả khi chỉ số vượt biên thật, C cũng không báo lỗi mà lặng lẽ đọc vùng nhớ bên cạnh.
Mở trang câu hỏi này →
10What is the output?4 lựa chọncó code
Đề bài
int arr[] = {1, 2, 3, 4};
printf("%d", *(arr + 2));
A1
B2
C3
D4
Lời giải
Đáp án đúng: "3". Tên mảng dùng trong biểu thức suy biến thành địa chỉ phần tử đầu, và số học con trỏ đếm theo phần tử chứ không theo byte, nên cộng 2 vào tên mảng cho ra địa chỉ của phần tử có chỉ số 2. Dấu sao lấy nội dung tại địa chỉ đó nên in ra 3. Đây đúng là nghĩa gốc của phép viết chỉ số: ngôn ngữ định nghĩa truy cập mảng chính là phép lấy nội dung của địa chỉ đầu cộng độ lệch. Lựa chọn "1" là phần tử ở chỉ số 0, tức kết quả nếu không cộng độ lệch nào. Lựa chọn "2" là phần tử ở chỉ số 1, ứng với cách đếm bắt đầu từ 1 thay vì từ 0. Lựa chọn "4" là phần tử ở chỉ số 3, sẽ đúng nếu độ lệch viết là 3.
Mở trang câu hỏi này →
11What is the output of the following program?4 lựa chọncó code
Đề bài
#include <stdio.h>
#include <string.h>
int main() {
    char s1[] = "FPTU";
    char s2[] = "fpt";
    char s3[] = "FPTU";
    printf("%d %d %d", strcmp(s1,s2), strcmp(s1,s3), strcmp(s2,s3));
    return 0;
}
A-1 0 1
B2 0 -2
C1 0 2
D1 0 -1
Lời giải
Đáp án đúng: "-1 0 1". Hàm strcmp so hai chuỗi theo mã ký tự tại vị trí lệch đầu tiên và chỉ cam kết dấu của giá trị trả về. So chuỗi viết hoa với chuỗi viết thường thì cặp lệch đầu tiên nằm ngay ký tự đầu: mã chữ hoa nhỏ hơn mã chữ thường nên kết quả âm. So chuỗi viết hoa với chuỗi giống hệt nó cho 0. So chuỗi viết thường với chuỗi viết hoa cho giá trị dương vì đảo chiều của phép so đầu. Thư viện của Visual Studio chuẩn hoá về -1, 0 và 1 nên dãy in ra khớp lựa chọn này; cần biết thư viện khác có thể trả về đúng chênh lệch 32 đơn vị, chỉ dấu là bất biến. Lựa chọn "2 0 -2" sai dấu ở cả hai đầu. Lựa chọn "1 0 2" cho kết quả dương ở phép so đầu, trái với việc chữ hoa đứng trước chữ thường trong bảng mã. Lựa chọn "1 0 -1" đảo dấu cả hai phép so khác 0.
Mở trang câu hỏi này →
AThe null terminator in C strings
BA whitespace character
CA printable character
DA NULL pointer value
Lời giải
Đáp án đúng: "The null terminator in C strings". Chuỗi trong C là dãy ký tự nằm liền nhau và kết thúc bằng một byte giá trị 0; chính byte đó cho mọi hàm chuỗi biết chỗ dừng, thiếu nó thì strlen hay printf cứ đọc tiếp sang vùng nhớ bên cạnh. Mô tả "A whitespace character" sai: nhóm ký tự trắng gồm dấu cách, dấu tab, ký tự xuống dòng và vài ký tự nữa, còn hàm isspace trả về 0 cho byte giá trị 0. Mô tả "A printable character" cũng sai, byte này không in ra hình gì và không nằm trong dải ký tự hiển thị bắt đầu từ mã 32. Mô tả "A NULL pointer value" lẫn hai khái niệm khác hẳn nhau: đây là một ký tự giá trị 0 nằm trong mảng, còn con trỏ rỗng là giá trị của một biến con trỏ không trỏ vào đâu; hai thứ khác kiểu, khác kích thước và dùng ở hai chỗ khác nhau.
Mở trang câu hỏi này →
Aa >= b
Ba == b
Ca != b
Da := b
Lời giải
Đáp án đúng: "a := b". C không có toán tử gồm dấu hai chấm kèm dấu bằng; cách viết đó là phép gán của Pascal, đưa vào mã C sẽ bị báo lỗi cú pháp. Trong C, gán là một dấu bằng, so sánh bằng là hai dấu bằng, và đây cũng là nguồn lỗi kinh điển khi người viết gõ thiếu một dấu bằng trong câu điều kiện: phép gán vẫn là biểu thức hợp lệ nên trình dịch không nhất thiết báo gì. Lựa chọn "a >= b" là phép so sánh lớn hơn hoặc bằng, hoàn toàn hợp lệ. Lựa chọn "a == b" là phép so sánh bằng đúng chuẩn, trả về 1 hoặc 0. Lựa chọn "a != b" là phép so sánh khác, cũng hợp lệ và cũng trả về số nguyên 1 hoặc 0.
Mở trang câu hỏi này →
AIt is a bitwise operator OR
BIt is a logical operator AND
CIt is a bitwise operator AND
DIt is a logical operator OR
Lời giải
Đáp án đúng: "It is a bitwise operator OR". Dấu gạch dọc đơn làm việc ở mức từng bit: nó lấy hai toán hạng nguyên, so từng cặp bit cùng vị trí và cho bit kết quả bằng 1 nếu có ít nhất một bit bằng 1, nên kết quả là một số nguyên chứ không phải một giá trị đúng sai. Chính vì thế nó hay được dùng để bật cờ trong một mặt nạ bit. Ý "It is a logical operator AND" sai vì phép và luận lý phải viết bằng hai dấu và, nó chỉ cho 0 hoặc 1 và còn tính tắt, bỏ hẳn toán hạng bên phải khi bên trái đã sai. Ý "It is a bitwise operator AND" sai vì phép và trên bit viết bằng một dấu và đơn, cho bit 1 chỉ khi cả hai bit đều là 1. Ý "It is a logical operator OR" sai vì phép hoặc luận lý phải viết bằng hai dấu gạch dọc và cũng chỉ trả về 0 hoặc 1.
Mở trang câu hỏi này →
ATo track variable changes and program output
BTo automatically compile and optimize the source code for better performance.
CTo generate comprehensive documentation and user manuals for the entire project
DTo convert high-level pseudocode into machine-readable assembly language instructions
Lời giải
Đáp án đúng: "To track variable changes and program output". Dò bước là việc người viết tự chạy chương trình trên giấy: lần theo từng câu lệnh, ghi lại giá trị mới của từng biến sau mỗi bước và ghi lại những gì chương trình xuất ra, nhờ đó phát hiện chỗ lệch giữa điều mình nghĩ và điều mã thực sự làm, kể cả khi mã dịch được và không báo lỗi nào. Lựa chọn "To automatically compile and optimize the source code for better performance." là việc của trình dịch, một bước tự động, trong khi dò bước là thao tác tay của con người. Lựa chọn "To generate comprehensive documentation and user manuals for the entire project" là việc của công cụ sinh tài liệu, không nhằm theo dõi giá trị biến. Lựa chọn "To convert high-level pseudocode into machine-readable assembly language instructions" tả quá trình dịch sang hợp ngữ, cũng không phải mục đích của dò bước.
Mở trang câu hỏi này →
Aint i = (double)123.5;
Bdouble t = double(2);
Cdouble t = (double) 2;
Ddouble t = (int) 2.7;
Lời giải
Đáp án đúng: "int i = (double)123.5;". Hằng 123.5 vốn đã mang kiểu double nên phép ép kiểu viết ra ở đây không làm gì cả; việc thật sự xảy ra là phép chuyển ngầm khi gán một giá trị double cho biến int, và chính phép chuyển ngầm đó cắt phần thập phân để i nhận 123. Đó là mẫu chuyển kiểu ngầm thu hẹp kinh điển mà câu hỏi nhắm tới. Lựa chọn "double t = double(2);" không phải cú pháp của C, cách gọi kiểu như hàm chỉ có trong C++. Lựa chọn "double t = (double) 2;" đã nói rõ ý định bằng phép ép kiểu tường minh, sau đó không còn phép chuyển nào nữa vì hai bên đã cùng kiểu. Lựa chọn "double t = (int) 2.7;" cũng có một bước ngầm từ int lên double, nhưng bước ấy giữ nguyên giá trị, còn thay đổi đáng kể là cắt 2.7 xuống 2 thì đã do phép ép kiểu tường minh làm, nên dòng này tiêu biểu cho chuyển kiểu tường minh.
Mở trang câu hỏi này →
AA "for" loop is used for iterating over a sequence of elements, while a "while" loop is used to execute a block of code repeatedly as long as a condition is true.
BA "for" loop is primarily used for conditional statements, while a "while" loop is designed for sequential processing.
CThe use of "for" and "while" loops is interchangeable; there is no substantial difference between them.
DA "for" loop is exclusively used with arrays, while a "while" loop is used with numerical calculations.
Lời giải
Đáp án đúng: "A "for" loop is used for iterating over a sequence of elements, while a "while" loop is used to execute a block of code repeatedly as long as a condition is true." Hai cấu trúc đều là vòng lặp và về lý thuyết thay nhau được, nhưng khuôn dạng quyết định chỗ dùng tự nhiên: vòng for gom khởi tạo, kiểm tra và cập nhật vào một dòng nên hợp với việc duyệt một dãy có số bước biết trước; vòng while chỉ có điều kiện nên hợp với việc lặp tới khi một điều kiện đổi, chẳng hạn chờ người dùng nhập đúng. "A "for" loop is primarily used for conditional statements, while a "while" loop is designed for sequential processing." sai vì câu điều kiện là việc của if và switch, vòng for không phải cấu trúc rẽ nhánh. Nhận định rằng hai khuôn lặp dùng thay nhau được và "there is no substantial difference between them" sai ở chỗ phủ nhận khác biệt, trong khi khác biệt về cú pháp và thói quen dùng là có thật. "A "for" loop is exclusively used with arrays, while a "while" loop is used with numerical calculations." sai vì vòng for chạy được với mọi biến đếm, không giới hạn ở mảng.
Mở trang câu hỏi này →
18What is the output?4 lựa chọncó code
Đề bài
int x = 0, y = 5;
printf("%d", (x && y));
A1
B5
C-1
D0
Lời giải
Đáp án đúng: "0". Phép và luận lý trong C cho ra kết quả thuộc kiểu int và chỉ nhận một trong hai giá trị 0 hoặc 1, nó không trả lại chính toán hạng. Thêm nữa nó tính tắt: thấy toán hạng bên trái bằng 0, nghĩa là sai, thì cả biểu thức đã chắc chắn sai nên y không cần đọc tới. Vì vậy đặc tả %d in ra 0. Ý "1" sai vì 1 chỉ xuất hiện khi cả hai toán hạng đều khác 0. Ý "5" sai vì nó tưởng phép và trả về giá trị của toán hạng cuối, đó là cách làm của một số ngôn ngữ khác chứ không phải của C. Ý "-1" sai vì chuẩn quy định kết quả của các phép luận lý chỉ là 0 hoặc 1, không bao giờ là số âm.
Mở trang câu hỏi này →
Đề bài
#include <stdio.h>
void main()
{
    int i = 0;
    while (i < 5)
    {
        i++;
        printf("Hi-");
        while (i < 4)
        {
            i++;
            printf("Hello-");
        }
    }
}
AHi-Hi-Hi-Hi-Hello-Hello-Hello-Hi-
BHi-Hi-Hi-Hi-Hi-Hello-Hello-Hello-
CHi-Hello-Hello-Hello-Hello-Hi-
DHi-Hello-Hello-Hello-Hi-
Lời giải
Đáp án đúng: "Hi-Hello-Hello-Hello-Hi-". Hai vòng lặp dùng chung biến i nên vòng trong ăn luôn phần đếm của vòng ngoài. Vào vòng ngoài lần đầu với i bằng 0: i tăng thành 1 rồi in Hi-; vòng trong chạy khi i còn nhỏ hơn 4, lần lượt đưa i lên 2, 3, 4 và in Hello- ba lần. Quay lại vòng ngoài, i bằng 4 vẫn nhỏ hơn 5 nên i thành 5 và in Hi- lần thứ hai; lúc này điều kiện vòng trong đã sai nên không in thêm Hello-. Vòng ngoài kiểm tra lại, i bằng 5 nên dừng. Lựa chọn "Hi-Hi-Hi-Hi-Hello-Hello-Hello-Hi-" giả định vòng ngoài chạy nhiều lượt trước khi vòng trong vào việc, trái với thứ tự lồng nhau. Lựa chọn "Hi-Hi-Hi-Hi-Hi-Hello-Hello-Hello-" tách hẳn hai vòng thành hai giai đoạn rời. Lựa chọn "Hi-Hello-Hello-Hello-Hello-Hi-" đếm bốn lần Hello-, nhưng i đã là 1 khi vào vòng trong nên chỉ còn ba bước để tới 4.
Mở trang câu hỏi này →
20What is the output of the following code?4 lựa chọncó code
Đề bài
for (int i = 0; i < 5; i++) {
    if (i == 2) continue;
    printf("%d ", i);
}
A0 1 3 4
B0 1 2 3 4
C0 1
D2 3 4
Lời giải
Đáp án đúng: "0 1 3 4". Lệnh continue không thoát vòng lặp, nó chỉ bỏ phần thân còn lại của lượt đang chạy rồi nhảy tới bước cập nhật và kiểm tra điều kiện. Với i bằng 0 và 1 thì điều kiện trong không thoả nên printf chạy; tới i bằng 2, continue cắt ngang trước printf nên số 2 không được in, nhưng i vẫn tăng bình thường; các lượt i bằng 3 và 4 lại in như thường. Lựa chọn "0 1 2 3 4" là kết quả nếu bỏ hẳn câu điều kiện, tức không bỏ qua lượt nào. Lựa chọn "0 1" là kết quả nếu dùng break, vì break mới kết thúc cả vòng lặp tại i bằng 2. Lựa chọn "2 3 4" làm ngược lại ý nghĩa của câu điều kiện, như thể chỉ bắt đầu in từ lúc i đạt 2.
Mở trang câu hỏi này →