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
Đá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.
#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;
}#include <stdio.h>
int x = 9;
void someFunction() {
int x = 8;
printf("%d ", x);
}
int main() {
someFunction();
printf("%d", x);
return 0;
}#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;
}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?
Đá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.
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)?
#include <stdio.h>
int change(int a)
{
a =10;
return a;
}
void main()
{
int i=5;
i = change(i);
printf("%d",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?
#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;
}Đá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.
#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;
}Đá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.
voidintfloatchar