Ngân hàng câu hỏi của chương

Câu hỏi: PRF192 - Phần 4: Mô-đun hoá và hàm

22 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 theo thứ tự nhập vào ngân hàng.

Danh sách câu hỏi

20/22 câuCòn 2
AA module performs a single, specific task.
BA module performs multiple unrelated tasks.
CA module shares data with many other modules
DA module can be used in multiple programs.
Lời giải
Đáp án đúng: "A module performs a single, specific task." Kết dính cao nghĩa là mọi phần bên trong một mô đun cùng phục vụ một nhiệm vụ rõ ràng; nhờ vậy mô đun dễ đặt tên, dễ kiểm thử riêng, và khi yêu cầu đổi thì chỉ phải chạm một chỗ. "A module performs multiple unrelated tasks." tả đúng tình trạng kết dính thấp, thứ cần tránh, vì sửa một việc dễ làm vỡ việc khác nằm chung mô đun. "A module shares data with many other modules" nói về mức liên kết giữa các mô đun, lại theo chiều chặt, đó là tiêu chí khác và cần giảm chứ không cần tăng. "A module can be used in multiple programs." nói về khả năng tái dùng; đó thường là hệ quả tốt của kết dính cao chứ không phải định nghĩa của nó.
Mở trang câu hỏi này →
Aint average( double, double);
Bdouble average( double, double);
Cchar average( double, double);
Dvoid average( double, double);
Lời giải

Đáp án đúng: "double average( double, double);". Trung bình của hai số thực nói chung vẫn là số thực, chẳng hạn trung bình của 1.0 và 2.0 là 1.5, nên kiểu trả về phải giữ được phần thập phân; double là kiểu thực chuẩn của C và cùng kiểu với hai tham số nên không mất mát khi tính. "int average( double, double);" sai vì kiểu nguyên cắt bỏ phần thập phân lúc trả về, 1.5 thành 1. "char average( double, double);" sai vì char chỉ một byte, dành cho ký tự hoặc số nguyên rất nhỏ, không chứa nổi một giá trị thực. "void average( double, double); " sai vì void nghĩa là không trả về gì, hàm sẽ không có cách nào đưa kết quả ra ngoài bằng lệnh return.

Mở trang câu hỏi này →
Đề bài
#include <stdio.h>
int num(int a, int b){
    int sum;
    sum = a + b;
    return sum;
}

int main()
{
    int a, b, result;
    a = 10;
    b= 12;
    result = num(a, b);
    printf("%d", result);
    return 0;
}
A22
B10
C12
D21
Lời giải
Đáp án đúng: "22". Hàm num nhận hai tham số rồi trả về tổng của chúng; main gọi num(a, b) với a bằng 10 và b bằng 12 nên a + b bằng 22, giá trị đó đi ra ngoài qua lệnh return, được gán cho result rồi in. Tham số trong C truyền theo giá trị nên hàm làm việc trên bản sao và không đổi được a hay b ở main, nhưng kết quả vẫn ra ngoài được nhờ return. "10" chỉ là giá trị của a, ứng với việc hiểu hàm trả về tham số thứ nhất. "12" chỉ là giá trị của b, ứng với việc hiểu hàm trả về tham số còn lại. "21" không khớp phép cộng nào của hai số này, nó lệch một đơn vị so với tổng thật.
Mở trang câu hỏi này →
Đề bài
#include <stdio.h>
int x = 9;
void someFunction() {
    int x = 8;
    printf("%d ", x);
}
int main() {
    someFunction();
    printf("%d", x);
    return 0;
}
A8 9
B9 8
C8 8
D9 9
Lời giải
Đáp án đúng: "8 9". Hàm someFunction khai báo một biến cục bộ tên x bằng 8; tên cục bộ che tên toàn cục trong suốt thân hàm nên lệnh in trong hàm cho ra 8. Khi hàm trả về, biến cục bộ hết phạm vi, tên x trong main lại chỉ về biến toàn cục bằng 9 nên lệnh in sau cho ra 9; thứ tự thực thi là gọi hàm trước rồi mới in, vì vậy màn hình hiện 8 9. Cần công bố khuyết điểm: bản khoá in kèm ghi 9 8, thứ tự đó chỉ đúng nếu hai lệnh in đổi chỗ cho nhau, nên "9 8" sai. "8 8" sai vì sau khi ra khỏi hàm không còn biến cục bộ nào, không ai gán 8 cho biến toàn cục. "9 9" sai vì trong thân hàm biến cục bộ đã che biến toàn cục nên lệnh in ở đó không thể thấy giá trị 9.
Mở trang câu hỏi này →
AReturn type, function name, parameters, and function body.
BReturn type, function name, return value, and function body
CReturn type, function name, parameters, and return value
DReturn value, function name, parameters, and function body
Lời giải
Đáp án đúng: "Return type, function name, parameters, and function body.". Một định nghĩa hàm trong C được viết theo đúng trật tự mà trình biên dịch cần để biết cách gọi và cách nhận kết quả: trước hết là kiểu trả về, rồi tên hàm, rồi danh sách tham số trong cặp ngoặc đơn, cuối cùng là thân hàm trong cặp ngoặc nhọn. Ba thành phần đầu hợp thành tiêu đề hàm, cũng chính là phần được lặp lại khi khai báo nguyên mẫu, còn thân hàm mới chứa các lệnh thực thi. Ý "Return type, function name, return value, and function body" sai vì giá trị trả về không phải một thành phần cú pháp nằm trong tiêu đề, nó do lệnh return bên trong thân hàm sinh ra lúc chạy. Ý "Return type, function name, parameters, and return value" sai vì bỏ mất thân hàm, mà thiếu thân thì chỉ còn là một nguyên mẫu, không phải định nghĩa. Ý "Return value, function name, parameters, and function body" sai vì chỗ mở đầu buộc phải là một kiểu dữ liệu, không phải một giá trị cụ thể.
Mở trang câu hỏi này →
Đề bài
#include<stdio.h>

int isTriangle(float a, float b, float c)
{
    if ((a>0)&&(b>0)&&(c>0)&&(a<b+c)&&(b<c+a)&&(c<a+b))
        return 1;
    else
        return 0;
}

int main()
{
    float a = 1, b = 1, c = 1.25;
    if (isTriangle(a, b, c))
        printf("%.2f, %.2f, %.2f: a triangle.\n", a, b, c);
    else
        printf("%.2f, %.2f, %.2f: not a triangle.\n", a, b, c);
    return 0;
}
Aa, b, c: a triangle
B1.00, 1.00, 1.25: a triangle
C1, 1, 1.25: a triangle
D1.00, 1.00, 1.25: not a triangle
Lời giải
Đáp án đúng: "1.00, 1.00, 1.25: a triangle". Hàm isTriangle kiểm ba cạnh dương và ba bất đẳng thức tam giác: với a bằng 1, b bằng 1 và c bằng 1.25 thì 1 nhỏ hơn 2.25, 1 nhỏ hơn 2.25 và 1.25 nhỏ hơn 2, nên cả chuỗi phép và cho kết quả đúng và hàm trả về 1. Giá trị khác không được lệnh if trong main coi là điều kiện đúng nên nhánh in a triangle được chạy. Đặc tả %.2f buộc in số thực với đúng hai chữ số sau dấu chấm, vì thế 1 hiện ra thành 1.00 còn 1.25 giữ nguyên. Ý "a, b, c: a triangle" sai vì chuỗi định dạng dùng %.2f nên chỗ đó in giá trị, không in tên biến. Ý "1, 1, 1.25: a triangle" sai vì %.2f không bao giờ bỏ các chữ số thập phân thừa, muốn ra dạng gọn như vậy phải dùng đặc tả khác. Ý "1.00, 1.00, 1.25: not a triangle" sai vì điều kiện tam giác đã thoả nên nhánh else không được chạy.
Mở trang câu hỏi này →
7Assume we have a function such as:4 lựa chọncó code
Đề bài
void swap(int a, int b){
    int t = a;
    a=b;
    b=t;
}

What is the problem with a and b after executing the swap (a, b) function?

Aa and b do not change values.
Bcannot execute the swap(a,b) function.
Ca has the old value of b, and b has the new value of t.
Da and b change values for each other;
Lời giải

Đáp án đúng: "a and b do not change values.". C truyền tham số theo giá trị: lúc gọi hàm, hai đối số được sao chép vào hai biến cục bộ trùng tên bên trong swap. Mọi phép đổi chỗ sau đó chỉ xáo trộn bản sao, và khi hàm kết thúc các bản sao biến mất, hai biến ở chỗ gọi vẫn nguyên như trước. Muốn đổi thật thì tham số phải là con trỏ và thân hàm phải làm việc qua phép lấy nội dung. Ý "cannot execute the swap(a,b) function." sai vì hàm hoàn toàn hợp lệ, nó dịch được và chạy được, chỉ là không có tác dụng ra bên ngoài. Ý "a has the old value of b, and b has the new value of t." sai vì điều đó chỉ đúng với hai bản sao cục bộ và chỉ tới thời điểm trước khi hàm trả về. Ý "a and b change values for each other; " sai vì đó chính là ngộ nhận mà câu hỏi muốn phá: việc đổi chỗ có xảy ra nhưng không chạm tới ô nhớ của hai biến gốc.

Mở trang câu hỏi này →
AA module performs its tasks independently.
BA module shares performance with other modules.
CA module accesses global data.
DA module depends on many other modules.
Lời giải
Đáp án đúng: "A module performs its tasks independently.". Mức liên kết giữa các mô đun đo xem một mô đun phải biết và phải dựa vào bao nhiêu thứ bên ngoài để làm xong việc của nó. Liên kết thấp nghĩa là mô đun nhận dữ liệu qua tham số, trả kết quả qua giá trị trả về và tự lo phần việc của mình, nhờ vậy sửa hay thay nó không kéo theo sửa chỗ khác. Ý "A module shares performance with other modules." sai vì chia sẻ phần xử lý với nhiều mô đun khác làm tăng số đường phụ thuộc, đó là liên kết cao. Ý "A module accesses global data." sai vì dữ liệu toàn cục là kênh ngầm giữa các mô đun, ai cũng sửa được nên không ai dám đoán trạng thái, đây là dạng liên kết đặc biệt khó tháo. Ý "A module depends on many other modules." sai vì nó chính là định nghĩa của liên kết cao, trái hẳn điều câu hỏi đang hỏi.
Mở trang câu hỏi này →
9Which is a function in C language?6 lựa chọn
Ais_prime()
B#include()
Cint()
Dif()
Ereturn()
F2ndElement()
Lời giải
Đáp án đúng: "is_prime()". Hàm trong C là khối mã có tên do người lập trình đặt theo luật định danh: mở đầu bằng chữ cái hoặc dấu gạch dưới, tiếp theo là chữ, số hoặc gạch dưới, và không được trùng từ khoá; is_prime thoả hết nên là tên hàm hợp lệ, kiểu tên quen dùng cho hàm kiểm tra số nguyên tố. Dòng "#include()" không phải hàm mà là chỉ thị tiền xử lý, được xử lý trước khi biên dịch và chỉ để chèn nội dung một tệp tiêu đề. Tên "int()" lấy đúng từ khoá kiểu int làm tên, trình biên dịch không cho phép. Tên "if()" cũng là từ khoá, đó là lệnh rẽ nhánh của ngôn ngữ chứ không phải lời gọi hàm. Tên "return()" là từ khoá trả về giá trị, thêm cặp ngoặc cũng không biến nó thành hàm. Tên "2ndElement()" mở đầu bằng chữ số nên vi phạm luật định danh ngay ở ký tự đầu tiên.
Mở trang câu hỏi này →
10Suppose there is a function in C as follows:4 lựa chọncó code
Đề bài
double g (double x, double y){
    return (x - 2)*(x - 2) + y*y;
}

What is the value of z after executing the statement z=g(2,0)?

A0
B4
C2
D8
Lời giải
Đáp án đúng: "0". Hàm g nhận hai số thực và trả về giá trị của biểu thức (x - 2)*(x - 2) + y*y. Thay x bằng 2 thì x - 2 cho 0 nên tích thứ nhất bằng 0; thay y bằng 0 thì y*y cũng bằng 0; tổng hai phần là 0, và vì kiểu trả về là double nên z nhận 0 ở dạng số thực. Hai đối số viết dưới dạng hằng nguyên nhưng được chuyển ngầm sang double khi truyền vào, nhờ nguyên mẫu hàm đã khai rõ kiểu tham số. Giá trị "4" là kết quả nếu bỏ sót phép trừ, tức tính x*x với x bằng 2. Giá trị "2" chỉ là chính đối số thứ nhất, không phải giá trị của biểu thức. Giá trị "8" không khớp với bất cứ cách thay số nào: với x bằng 2 thì số hạng đầu luôn triệt tiêu và y bằng 0 làm số hạng sau cũng triệt tiêu, muốn có 8 thì biểu thức phải có thêm số hạng khác. Lời gọi hàm chỉ thay giá trị vào tham số rồi tính, không có bước nào khác.
Mở trang câu hỏi này →
11What is the output of the following code snippet?4 lựa chọncó code
Đề bài
#include <stdio.h>
int change(int a)
{
    a =10;
    return a;
}
void main()
{
    int i=5;
    i = change(i);
    printf("%d",i);
}
A10
B5
C15
DCompiler error
Lời giải
Đáp án đúng: "10". Tham số của hàm trong C là một bản sao: lời gọi change(i) đẩy giá trị 5 vào biến cục bộ a, trong thân hàm a bị đặt lại thành 10 rồi trả về 10, còn biến i của hàm chính không hề bị hàm đụng tới. Thứ làm i đổi giá trị là phép gán ở ngoài, vì i = change(i) ghi giá trị trả về vào i, nên lệnh in xuất ra 10. Giá trị "5" là kết quả nếu bỏ phép gán và chỉ gọi change(i) rồi in i, vì khi đó mọi thay đổi chết theo bản sao lúc hàm kết thúc. Giá trị "15" cần một phép cộng dồn, trong khi hàm gán thẳng 10 cho tham số. Kết luận "Compiler error" không đúng: hàm có đầy đủ kiểu trả về và kiểu tham số, giá trị trả về khớp kiểu của i; riêng việc viết void cho hàm chính là không chuẩn nhưng các trình biên dịch quen dùng chỉ cảnh báo chứ vẫn dịch được.
Mở trang câu hỏi này →
12Given 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 →
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
#include <stdio.h>

int f(int a, int b, int c) {
    int t = 2*(a+b-c)/5;
    return t;
}

int main() {
    int x = 5, y = 6, z = 7;
    int t = 3*f(y,x,z);
    printf("%d", t);
    return 0;
}
A3
B1
C8
D2
Lời giải
Đáp án đúng: "3". Thứ tự đối số là chỗ cần bám: lời gọi f(y,x,z) gán a bằng 6, b bằng 5, c bằng 7. Trong hàm, a cộng b trừ c cho 4, nhân 2 thành 8, rồi 8 chia 5 là phép chia giữa hai số nguyên nên C cắt phần thập phân cho ra 1, không làm tròn lên 2. Hàm trả về 1, main nhân 3 và in 3. Lựa chọn "1" là giá trị hàm trả về, bỏ quên phép nhân 3 ở main. Lựa chọn "8" là tử số 2 nhân với 4, tức dừng lại trước khi chia cho 5. Lựa chọn "2" ứng với cách hiểu 8 chia 5 bằng 1.6 rồi làm tròn thành 2, nhưng chia nguyên trong C luôn cắt về phía 0, và ngay cả khi làm tròn thì kết quả cuối vẫn còn phải nhân 3 nữa.
Mở trang câu hỏi này →
Avoid printSum(int* a, int b);
Bint printSum(int* a, int b);
Cint printSum(int a, b);
Dint* printSum(int* a, int b);
Lời giải

Đáp án đúng: "int printSum(int a, b);". Trong nguyên mẫu hàm, mỗi tham số phải tự mang kiểu của mình; không có chuyện viết một kiểu rồi dùng chung cho các tên phía sau như khi khai báo biến. Ở dòng này b không có kiểu, trình dịch cũng không được suy ra int ngầm trong nguyên mẫu, nên nó báo lỗi; muốn đúng phải viết int printSum(int a, int b). Dòng "void printSum(int* a, int b); " hợp lệ: hàm không trả về gì, nhận một con trỏ int và một int. Dòng "int printSum(int* a, int b);" cũng hợp lệ và là cách thường dùng khi muốn hàm sửa được biến gốc qua con trỏ rồi vẫn trả về mã kết quả. Dòng "int* printSum(int* a, int b);" hợp lệ nữa, chỉ khác ở chỗ hàm trả về một con trỏ int; dấu sao gắn vào kiểu trả về là cú pháp bình thường.

Mở trang câu hỏi này →
APass by value
BPass by reference
CPass by address
DPass by pointer
Lời giải
Đáp án đúng: "Pass by value". C chỉ có một cơ chế truyền tham số duy nhất là truyền theo giá trị: đối số được sao vào tham số hình thức, nên hàm làm việc trên bản sao và mọi phép gán bên trong không chạm tới biến gốc của nơi gọi. Lựa chọn "Pass by reference" không tồn tại trong C vì ngôn ngữ này không có kiểu tham chiếu; kiểu đó thuộc C++ và nó cho hàm sửa trực tiếp biến gốc, trái với yêu cầu của câu hỏi. Lựa chọn "Pass by address" là cách người ta mô phỏng hiệu ứng tham chiếu bằng cách truyền địa chỉ, khi đó hàm sửa được biến gốc qua phép lấy nội dung con trỏ, đúng điều đề muốn tránh. Lựa chọn "Pass by pointer" là tên gọi khác của cùng kỹ thuật ấy: bản thân con trỏ vẫn được sao, nhưng bản sao trỏ tới cùng ô nhớ nên biến gốc vẫn bị thay đổi.
Mở trang câu hỏi này →
Đề bài
#include <stdio.h>

double average(int a, int b, int c) {
    double result;
    result = (a+b+c)/3.0;
    return result;
}

int main() {
    printf("%.6f", average(5, 8, 7));
    return 0;
}
A6.666667
B6.000000
C20.000000
D6
Lời giải
Đáp án đúng: "6.666667". Tổng ba đối số là 20, và chia cho 3.0 là phép chia có một toán hạng thực nên C nâng 20 lên double rồi chia thực, cho 6.666 và còn lặp mãi, khác hẳn việc chia cho hằng nguyên. Giá trị ấy được trả về qua kiểu double, còn đặc tả yêu cầu in sáu chữ số sau dấu thập phân kèm làm tròn chữ số cuối, nên màn hình hiện 6.666667. Lựa chọn "6.000000" là kết quả nếu mẫu số viết là hằng nguyên 3, khi đó chia nguyên cắt phần thập phân trước cả lúc gán vào biến double. Lựa chọn "20.000000" là tổng chưa chia. Lựa chọn "6" sai về dạng in vì đặc tả này luôn kéo đủ sáu chữ số thập phân chứ không rút ngắn, và cũng sai về giá trị vì phần thập phân bị bỏ mất.
Mở trang câu hỏi này →
AThroughout the entire program
BOnly within the function where it's declared
COnly within the block where it's declared
DWithin the structure where it's defined
Lời giải

Đáp án đúng: "Throughout the entire program". Biến khai báo ngoài mọi hàm có phạm vi tệp và thời gian sống tĩnh: nó được cấp chỗ một lần khi chương trình nạp và tồn tại tới lúc kết thúc, nên mọi hàm viết sau khai báo đều thấy nó, và tệp nguồn khác cũng dùng được qua khai báo extern; đó chính là nghĩa của cả chương trình. Mô tả "Only within the function where it's declared" ứng với biến cục bộ, thứ sinh ra trên khung ngăn xếp mỗi lần gọi hàm rồi mất đi khi hàm trả về. Mô tả "Only within the block where it's declared" là phạm vi khối, áp cho biến khai báo trong cặp ngoặc nhọn của thân vòng lặp hay nhánh rẽ. Mô tả "Within the structure where it's defined" nhầm biến với trường của struct; trường chỉ là thành phần của một kiểu, chạm tới qua tên biến struct chứ không phải một biến toàn cục.

Mở trang câu hỏi này →
Avoid
Bint
Cfloat
Dchar
Lời giải
Đáp án đúng: "void". Từ khoá void ở vị trí kiểu trả về nói với trình dịch rằng hàm không mang giá trị nào về cho nơi gọi, nên trong thân hàm lệnh return chỉ được viết trơ một mình để kết thúc sớm, và lời gọi hàm không dùng được làm toán hạng của biểu thức hay vế phải của phép gán. Kiểu "int" trả về số nguyên, bắt buộc với main và là mặc định của các trình dịch rất cũ, nhưng khai báo kiểu này rồi không trả giá trị là hành vi không xác định khi nơi gọi đọc kết quả. Kiểu "float" trả về số thực độ chính xác đơn, vẫn là một giá trị cụ thể. Kiểu "char" trả về một ký tự, tức một byte, cũng là một giá trị. Cả ba đều buộc hàm phải có giá trị để mang về, trái với điều câu hỏi nêu.
Mở trang câu hỏi này →
ALocal variables within a function are declared and initialized each time the function is called.
BLocal variables within a function can be accessed from any other function in the program.
CLocal variables within a function retain their value between different function calls.
DLocal variables within a function can be declared outside the function and still maintain local scope.
Lời giải
Đáp án đúng: "Local variables within a function are declared and initialized each time the function is called." Biến cục bộ mặc định có lớp lưu trữ tự động: chỗ cho nó được dành trên khung ngăn xếp lúc vào hàm và mất đi lúc ra hàm, nên mỗi lần gọi là một bản mới, và nếu khai báo kèm giá trị khởi tạo thì phép khởi tạo chạy lại từng lần. Câu "Local variables within a function can be accessed from any other function in the program." sai vì tên biến cục bộ chỉ thấy được trong khối khai báo nó; hàm khác muốn chạm vào phải nhận địa chỉ qua tham số. Câu "Local variables within a function retain their value between different function calls." là tính chất của biến thêm từ khoá static, thứ sống suốt chương trình. Câu "Local variables within a function can be declared outside the function and still maintain local scope." tự mâu thuẫn: khai báo ngoài hàm là có phạm vi tệp, không còn cục bộ.
Mở trang câu hỏi này →