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ố 3

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
A120
B121
C122
D123
Lời giải
Đáp án đúng: "123". Mỗi vị trí trong hệ hai mang trọng số là một luỹ thừa của 2, tính từ phải sang trái lần lượt là 1, 2, 4, 8, 16, 32, 64, 128. Dãy 0111 1011 bật các bit trọng số 64, 32, 16, 8, 2 và 1, còn bit trọng số 4 và bit trọng số 128 đều tắt, nên cộng lại được 64 cộng 32 cộng 16 cộng 8 cộng 2 cộng 1 là 123. Giá trị "120" ứng với dãy 0111 1000, tức bỏ sót hai bit thấp nhất đang bật. Giá trị "121" ứng với 0111 1001, chỉ nhận một trong hai bit thấp đó. Giá trị "122" ứng với 0111 1010, nhận bit trọng số 2 mà bỏ bit trọng số 1. Có một cách loại nhanh: bit cuối cùng của dãy đang bật nên số cần tìm phải là số lẻ, vì thế mọi đáp số chẵn đều bị gạt ngay từ đầu.
Mở trang câu hỏi này →
AAssign value to n
BPrint n
CRead an integer input
DDeclare n
Lời giải
Đáp án đúng: "Read an integer input". Lời gọi này đọc một số nguyên từ dòng nhập chuẩn: đặc tả %d bỏ qua khoảng trắng dẫn đầu, gom các chữ số thành một số nguyên, rồi ghi số đó vào ô nhớ mà toán tử lấy địa chỉ đã chỉ ra, bởi scanf phải có địa chỉ mới ghi được ra ngoài phạm vi của chính nó. Mô tả "Assign value to n" bỏ mất phần quan trọng nhất là nguồn dữ liệu: giá trị không do chương trình ấn định mà do người dùng nhập, và việc ghi xảy ra qua con trỏ chứ không bằng toán tử gán. Mô tả "Print n" nói ngược chiều dữ liệu, đưa nội dung ra màn hình là việc của printf hoặc puts. Mô tả "Declare n" sai loại câu lệnh: khai báo là dòng nêu tên và kiểu của biến, phải có trước lời gọi này, còn scanf chỉ dùng biến đã tồn tại.
Mở trang câu hỏi này →
A13
B14
C15
D16
Lời giải
Đáp án đúng: "15". Chuỗi trong C không mang theo độ dài, thư viện nhận ra chỗ hết chuỗi nhờ một ký tự có mã 0 đặt ngay sau ký tự cuối, và ký tự đó cũng chiếm trọn một ô của mảng. Mảng khai 16 ô nên nhiều nhất 15 ô dành cho nội dung, ô còn lại để dành cho dấu kết thúc. Giá trị "16" là tổng số ô; dùng hết cho nội dung thì không còn chỗ cho dấu kết thúc, và các hàm như strlen hay printf sẽ đọc tràn sang bộ nhớ bên cạnh. Giá trị "14" trừ đi hai ô, tức đếm thừa một dấu kết thúc, trong khi chuẩn chỉ đòi đúng một ô cho dấu đó. Giá trị "13" trừ ba ô, không khớp với cách tính nào của ngôn ngữ. Chính quy ước này là lý do các hàm như strncpy hay snprintf luôn phải tính thêm một byte cho dấu kết thúc.
Mở trang câu hỏi này →
A1
B0
C-1
D32
Lời giải
Đáp án đúng: "0". Ký tự kết thúc chuỗi, viết trong mã nguồn bằng một dấu thoát đi kèm chữ số 0, có mã số đúng bằng 0 trong bảng mã; nhờ giá trị này mà vòng lặp duyệt chuỗi viết được theo kiểu chạy cho tới khi gặp giá trị sai, vì 0 là giá trị sai duy nhất của một byte. Giá trị "1" là mã của một ký tự điều khiển khác, không mang vai trò kết thúc chuỗi. Giá trị "-1" không phải mã ký tự hợp lệ của bảng mã bảy bit, con số âm này hay bị nhớ lẫn với hằng báo hết tệp mà các hàm đọc trả về. Giá trị "32" là mã của dấu cách, một ký tự hiển thị được và hoàn toàn hợp lệ giữa chuỗi, coi nó là dấu kết thúc thì mọi câu có khoảng trắng đều bị cắt ngắn. Cũng cần phân biệt ký tự mã 0 với chữ số 0, vì chữ số 0 có mã 48.
Mở trang câu hỏi này →
5Given 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 →
A1 byte
B2 bytes
C4 bytes
DIt depends on the system
Lời giải
Đáp án đúng: "1 byte". Chuẩn C định nghĩa byte là đơn vị nhớ nhỏ nhất đánh địa chỉ được, rồi quy định kích thước của kiểu char luôn bằng 1 theo đúng nghĩa đó; mọi kích thước khác trong ngôn ngữ đều đo bằng số lần kích thước của char, nên con số 1 không phụ thuộc máy. Giá trị "2 bytes" ứng với kiểu ký tự rộng dùng cho bảng mã nhiều byte trên một số nền tảng, không phải char. Giá trị "4 bytes" là kích thước quen thuộc của int trên máy hiện nay, không liên quan tới ký tự. Mô tả "It depends on the system" nghe có lý vì int hay long thật sự đổi kích thước theo nền tảng, nhưng với char thì không: thứ đổi theo máy là số bit trong một byte, tối thiểu là 8 và có thể hơn trên phần cứng đặc biệt, còn kích thước tính theo byte của char vẫn luôn bằng 1.
Mở trang câu hỏi này →
7What 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 →
8What does this code do?4 lựa chọncó code
Đề bài
char names[10][31];
gets(names[0]);
ATakes a line of input into names[0]
BTakes input into all 10 strings
CFails to compile
DOnly stores 1 character
Lời giải
Đáp án đúng: "Takes a line of input into names[0]". Khai báo names là mảng hai chiều gồm 10 hàng, mỗi hàng 31 ô ký tự, nên names[0] là hàng đầu tiên và khi dùng trong biểu thức nó suy biến thành con trỏ tới ký tự đầu của hàng ấy. Hàm gets đọc một dòng từ dòng nhập chuẩn, bỏ ký tự xuống dòng rồi đặt dấu kết thúc chuỗi, nên nội dung người dùng nhập nằm trong hàng đầu. Mô tả "Takes input into all 10 strings" cần một vòng lặp gọi mười lần, còn một lời gọi chỉ ghi vào đúng hàng được truyền. Mô tả "Fails to compile" không đúng về cú pháp: dòng mã hợp lệ và kiểu đối số khớp, dù phải biết rằng gets đã bị loại khỏi chuẩn từ bản năm 2011 vì không chặn được tràn khi dòng nhập dài hơn 30 ký tự. Mô tả "Only stores 1 character" lẫn chỉ số hàng với số ký tự: số 0 là chỉ số hàng, còn mỗi hàng chứa được tới 30 ký tự cùng dấu kết thúc.
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 →
A(x < 10 || x > 20)
B(x > 10 && x < 20)
C(x < 10 && x > 20)
D!(x >= 10 || x <= 20)
Lời giải
Đáp án đúng: "(x < 10 || x > 20)". Luật De Morgan nói phủ định của một phép và chuyển thành phép hoặc của hai phủ định, nên phủ định của mệnh đề x lớn hơn hoặc bằng 10 và x nhỏ hơn hoặc bằng 20 là x nhỏ hơn 10 hoặc x lớn hơn 20; từng phép so sánh cũng phải đảo cho đúng, vì phủ định của lớn hơn hoặc bằng là nhỏ hơn hẳn. Biểu thức "(x > 10 && x < 20)" vẫn giữ phép và, nó chỉ thu hẹp khoảng cũ chứ không phủ định: với x bằng 15 thì cả nó lẫn mệnh đề gốc đều đúng, trong khi phủ định phải cho giá trị ngược nhau. Biểu thức "(x < 10 && x > 20)" cũng giữ phép và nên không bao giờ đúng, không số nào vừa nhỏ hơn 10 vừa lớn hơn 20. Biểu thức "!(x >= 10 || x <= 20)" đổi phép và thành phép hoặc rồi mới phủ định cả khối, làm sai cả hai bước; phần trong ngoặc đúng với mọi x nên cả biểu thức luôn sai.
Mở trang câu hỏi này →
Afor (initialization, condition, increment) { statements; }
Bfor { initialization; condition; increment; } (statements;)
Cfor (initialization; condition; increment) { statements; }
Dfor: (initialization; condition; increment) { statements; }
Lời giải

Đáp án đúng: "

Lời giải
for (initialization; condition; increment) {
  statements;
}

". Vòng for trong C có ba phần đặt trong một cặp ngoặc tròn và phân cách bằng đúng hai dấu chấm phẩy: khởi tạo chạy một lần, điều kiện kiểm trước mỗi lượt, phần cập nhật chạy sau mỗi lượt; thân vốn là một lệnh, muốn nhiều lệnh thì gom trong cặp ngoặc nhọn. Khuôn "

Lời giải
for (initialization, condition, increment) {
  statements;
}

" dùng dấu phẩy nên cả ngoặc thành một biểu thức duy nhất và vòng lặp mất chỗ kiểm điều kiện. Khuôn "

Lời giải
for {
  initialization;
  condition;
  increment;
}

(statements;)" đảo vai hai loại ngoặc: phần điều khiển phải nằm trong ngoặc tròn còn thân phải nằm trong ngoặc nhọn. Khuôn "

Lời giải
for: (initialization; condition; increment) {
  statements;
}

" thêm dấu hai chấm sau từ khoá, mà dấu hai chấm trong C chỉ dùng cho nhãn, và nhãn thì không được trùng từ khoá.

Mở trang câu hỏi này →
AAll variables must be declared before we use them in C program.
BTo declare a variable you specify its name and data type it can store.
CAll variable are always stored on the stack.
DReading a value from keyboard or other device with a OUT statement
EThe scope of a variable is the range of program statements that can't access that variable.
Lời giải
Đáp án đúng: "To declare a variable you specify its name and data type it can store.". Câu hỏi đòi mô tả cách khai báo, và một khai báo trong C đúng là gồm tên kiểu rồi tên biến, nhờ đó trình biên dịch biết dành bao nhiêu byte cùng cách diễn giải byte ấy. Câu "All variables must be declared before we use them in C program." nói một điều đúng về ngôn ngữ, nhưng nó nêu nghĩa vụ phải khai trước khi dùng chứ không nói cách khai, nên không trả lời câu hỏi. Câu "All variable are always stored on the stack." sai: biến toàn cục và biến static nằm ở vùng dữ liệu tĩnh suốt đời chương trình, chỉ biến cục bộ tự động mới nằm trên ngăn xếp. Câu "Reading a value from keyboard or other device with a OUT statement" mô tả việc nhập dữ liệu và còn nhắc một lệnh không tồn tại trong C. Câu "The scope of a variable is the range of program statements that can't access that variable." định nghĩa ngược, vì phạm vi là vùng mã nhìn thấy được biến.
Mở trang câu hỏi này →
13What will be the output of the following C code?4 lựa chọncó code
Đề bài
#include <stdio.h>
void main()
{
    int x = 0;
    if (x == 0)
        printf("Hi");
    else
        printf("How are you");
        printf("Hello");
}
AHi
BHow are you
CHello
DHiHello
Lời giải
Đáp án đúng: "HiHello". Nhánh if và nhánh else khi không có ngoặc nhọn chỉ ôm đúng một lệnh ngay sau nó, nên nhánh else chỉ nhận lệnh in How are you; lệnh in Hello nằm ngoài cả hai nhánh dù được thụt vào cho giống thân else, bởi phạm vi khối trong C do ngoặc nhọn quyết định, không do thụt lề. x bằng 0 nên điều kiện x == 0 đúng, chương trình in Hi, bỏ qua nhánh else, rồi chạy tiếp lệnh in Hello; printf không tự xuống dòng nên hai chuỗi dính liền thành một dòng. "Hi" sai vì bỏ sót lệnh in nằm ngoài khối, lệnh đó luôn chạy. "How are you" sai vì nhánh else không chạy khi điều kiện đã đúng. "Hello" sai vì lệnh in Hi vẫn chạy trước đó.
Mở trang câu hỏi này →
A#define is a preprocessor command often used to introduce named constants
Bdouble and goto are keyword for declaring data type.
Creturn 0; is normally the last statement in main()
DThe file stdio.h is the library where the compiler finds scanf().
Lời giải

Đáp án đúng: "double and goto are keyword for declaring data type.". Trong C, double đúng là từ khoá của một kiểu số thực, nhưng goto là lệnh nhảy tới một nhãn trong cùng hàm và không khai báo kiểu gì cả, nên câu này sai và chính nó là thứ đề bài cần tìm. Câu "#define is a preprocessor command often used to introduce named constants" đúng: chỉ thị này do bộ tiền xử lý xử lý và hay dùng để đặt tên cho hằng số. Câu "return 0; is normally the last statement in main()" đúng với lệ thường, giá trị 0 báo cho hệ điều hành biết chương trình kết thúc bình thường. Câu "The file stdio.h is the library where the compiler finds scanf()" đúng về chỗ khai báo: tệp tiêu đề này cung cấp nguyên mẫu của scanf cùng nhóm hàm vào ra, nhờ đó trình biên dịch kiểm được kiểu các đối số.

Mở trang câu hỏi này →
15What does this code print?4 lựa chọncó code
Đề bài
int n = 30, m = 5;
float x = 3.5F, y = 8.12F;
printf("%d, %d\n", (n < m || x >= y), !(x > y));
A1, 0
B0, 1
C1, 1
D0, 0
Lời giải
Đáp án đúng: "0, 1". Hai biểu thức trong printf đều là biểu thức luận lý, nên mỗi cái chỉ cho ra số nguyên 0 hoặc 1. Với n bằng 30 và m bằng 5 thì n nhỏ hơn m là sai; với x bằng 3.5 và y bằng 8.12 thì x lớn hơn hoặc bằng y cũng sai, nên phép hoặc của hai điều sai cho 0. Biểu thức thứ hai: x lớn hơn y là sai, tức giá trị 0, nên phủ định nó cho 1. Vậy chương trình in 0, 1. Lựa chọn "1, 0" đảo ngược hai kết quả, chỉ đúng nếu 30 nhỏ hơn 5 hoặc 3.5 lớn hơn 8.12. Lựa chọn "1, 1" đòi phép hoặc phải có ít nhất một vế đúng, điều không xảy ra ở đây vì cả hai vế đều sai. Lựa chọn "0, 0" đòi x lớn hơn y là đúng để phủ định cho ra 0, nhưng 3.5 nhỏ hơn 8.12 nên phủ định phải cho 1.
Mở trang câu hỏi này →
16What is the output of the following code?4 lựa chọncó code
Đề bài
int a = 10, b = 20;
printf("%d", (a > 5 && b < 25));
A0
B1
C10
D20
Lời giải
Đáp án đúng: "1". Phép và luận lý trong C trả về một giá trị int: 1 khi cả hai vế đúng, 0 khi có vế sai. Ở đây a bằng 10 nên a lớn hơn 5 là đúng, b bằng 20 nên b nhỏ hơn 25 cũng đúng, vì vậy cả biểu thức cho 1 và đặc tả số nguyên in ra 1. Cần nhớ C không có kiểu luận lý riêng: mọi phép so sánh đều cho ra số nguyên 0 hoặc 1, và ngược lại mọi giá trị khác 0 đều được coi là đúng khi xét điều kiện. Lựa chọn "0" chỉ xuất hiện khi ít nhất một vế sai, chẳng hạn nếu b bằng 30. Lựa chọn "10" là giá trị của a, nhưng phép và luận lý không trả lại toán hạng như một số ngôn ngữ khác, nó chuẩn hoá kết quả về 0 hoặc 1. Lựa chọn "20" tương tự là giá trị của b, cũng không phải kết quả của một phép so sánh.
Mở trang câu hỏi này →
17What will the following program print?4 lựa chọncó code
Đề bài
#include <stdio.h>

int main()
{
    int x = 5, y = 10;

    while(x++ < y--)
    {
        printf("%d %d\n", x, y);
    }

    return 0;
}
A2 5 3 4 4 3
B6 9 7 8 8 7
C5 10 7 8 8 7
D6 9 2 2 8 7
Lời giải
Đáp án đúng: "6 9 7 8 8 7". Then chốt nằm ở dạng hậu tố của x++ và y--: điều kiện được so trên giá trị cũ, nhưng ngay khi việc so sánh xong thì hai biến đã mang giá trị mới, nên printf trong thân vòng lặp luôn thấy giá trị đã tăng giảm. Lượt một so 5 với 10, x thành 6 và y thành 9, in 6 9. Lượt hai so 6 với 9, x thành 7 và y thành 8, in 7 8. Lượt ba so 7 với 8, x thành 8 và y thành 7, in 8 7. Lượt bốn so 8 với 7 nên điều kiện sai và vòng lặp dừng, dù x cùng y vẫn kịp đổi thành 9 và 6. Lựa chọn mở đầu bằng "5 10" coi như printf thấy giá trị trước khi tăng giảm, tức hiểu sai dạng hậu tố. Lựa chọn mở đầu bằng "2 5" không khớp bước nào vì x chỉ tăng còn y chỉ giảm. Lựa chọn chứa dòng "2 2" đòi hai biến gặp nhau ở 2, nhưng chúng gặp nhau quanh 8 và 7 rồi vòng lặp kết thúc.
Mở trang câu hỏi này →
ATo carry out a specific function and may be used alone or combined with other modules to create a program
BTo store data in a database
CTo handle user input exclusively
DTo perform arithmetic calculations only
Lời giải
Đáp án đúng: "To carry out a specific function and may be used alone or combined with other modules to create a program". Mô-đun là đơn vị chương trình được tách ra để lo một nhiệm vụ xác định, có đầu vào và đầu ra rõ ràng, nhờ vậy nó vừa chạy độc lập được vừa ghép với mô-đun khác thành chương trình lớn. Trong C, mô-đun thường hiện ra dưới dạng hàm hoặc cặp tệp nguồn kèm tệp tiêu đề, và lợi ích chính là chia nhỏ độ phức tạp, tái dùng, kiểm thử riêng từng phần. Lựa chọn "To store data in a database" tả vai trò của hệ quản trị cơ sở dữ liệu. Lựa chọn "To handle user input exclusively" bó mô-đun vào một việc duy nhất là đọc dữ liệu người dùng, trong khi mô-đun có thể lo tính toán hay xuất kết quả. Lựa chọn "To perform arithmetic calculations only" cũng thu hẹp sai như vậy, vì tính toán số học chỉ là một trong vô số nhiệm vụ mà mô-đun đảm nhận.
Mở trang câu hỏi này →
Đề bài
double result;
char op = '*';
int num1 = 5, num2 = 4;
switch (op) {
    case '+': result = num1 + num2; break;
    case '-': result = num1 - num2; break;
    case '*': result = num1 * num2; break;
    case '/': if (num2 != 0) result = num1 / num2; break;
    default: printf("Invalid Operator");
}
printf("%d", result);
A20
B9
C1.25
D0
Lời giải
Đáp án đúng: "20". Biến op mang hằng ký tự dấu nhân, nên switch rẽ vào đúng nhãn khớp với ký tự đó và thực hiện result bằng num1 nhân num2, tức 5 nhân 4 bằng 20, rồi break thoát switch. Cần công bố một khuyết điểm của đề: result khai báo kiểu double nhưng lại in bằng đặc tả số nguyên, đây là sai khớp định dạng nên con số hiện trên màn hình không được bảo đảm; câu hỏi chỉ xét giá trị mà switch tính ra, và giá trị đó là 20. Lựa chọn "9" là kết quả của nhánh cộng, chỉ chạy nếu op mang dấu cộng. Lựa chọn "1.25" là 5 chia 4 theo nghĩa thực, nhưng nhánh chia không được chọn, và hơn nữa num1 chia num2 giữa hai số nguyên sẽ cho 1 chứ không phải 1.25. Lựa chọn "0" ứng với trường hợp result chưa bao giờ được gán, tức op không khớp nhãn nào và chỉ nhánh mặc định chạy.
Mở trang câu hỏi này →
AIt can only be used with integer or character type expressions.
BIt can be used with any data type.
CIt can only be used in functions.
DIt can only have one case statement inside.
Lời giải
Đáp án đúng: "It can only be used with integer or character type expressions.". Chuẩn C đòi biểu thức điều khiển của switch phải có kiểu nguyên, và mỗi nhãn case phải là hằng nguyên tính được lúc dịch; ký tự thoả yêu cầu này vì char được nâng lên int và hằng ký tự chính là một số nguyên. Lý do nằm ở cách dịch: trình dịch cần so sánh bằng chính xác hoặc dựng bảng nhảy, điều không làm được với số thực hay chuỗi. Lựa chọn "It can be used with any data type." sai vì float, double hay mảng ký tự đều bị từ chối, muốn phân nhánh theo chúng phải dùng chuỗi if else. Lựa chọn "It can only be used in functions." không nói lên điều gì riêng của switch, bởi mọi câu lệnh thực thi trong C đều nằm trong thân hàm. Lựa chọn "It can only have one case statement inside." sai vì switch mang bao nhiêu nhãn case cũng được, đó chính là lý do người ta chọn nó.
Mở trang câu hỏi này →