Câu hỏi: PRF192 Cơ sở lập trình – Bộ ôn tập số 5
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 2/3 — câu 21–40.
Danh sách câu hỏi
#include<stdio.h>
int main()
{
int a=10,b=20,c=30;
while(a>1)
{
if(b%2!=0)
a/=10;
b--;
c*=2;
}
printf("%d ; %d ; %d",a,b,c);
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;
}Đáp án đúng: "
while (condition) {
statements;
}". Vòng while chuẩn gồm từ khoá while, điều kiện trong ngoặc tròn, rồi một câu lệnh làm thân; thân là cả khối khi bọc trong ngoặc nhọn, và mỗi câu lệnh bên trong khối phải kết thúc bằng dấu chấm phẩy. Sau ngoặc nhọn đóng không cần dấu chấm phẩy vì khối đã là một câu lệnh hoàn chỉnh. Dạng "(condition){ statements ;}" thiếu hẳn từ khoá while nên trình dịch chỉ thấy một biểu thức rồi một khối rời rạc. Dạng "
while (condition) {
statements
};" đặt dấu chấm phẩy sai chỗ: lệnh bên trong khối bị bỏ dấu kết thúc, còn dấu chấm phẩy lại nằm sau ngoặc nhọn đóng. Dạng "{ statements } while (condition); " là do while nhưng mất từ khoá do mở đầu, nên khối và phần while thành hai mảnh không gắn với nhau.
#include<stdio.h>
int main()
{
const int a=5;
if(a>3)
a++;
break;
else
a--;
printf("%d",a);
return 0;
}Đáp án đúng: "int minus (int a, int b) { return (a - b); }". Định nghĩa hàm theo lối nguyên mẫu đòi mỗi tham số mang đủ kiểu riêng, các tham số ngăn nhau bằng dấu phẩy, và thân hàm là một khối trong ngoặc nhọn; khoảng trắng thừa giữa các thành phần vô hại vì trình dịch bỏ qua. Dạng "int minus(int a; int b) { return (a - b); }" dùng dấu chấm phẩy ngăn hai tham số, thứ chỉ hợp lệ trong danh sách khai báo biến thường, nên danh sách tham số vỡ ngay. Dạng "int minus (int a, b) { return (a - b); }" để b không kiểu; chuẩn C hiện hành đã bỏ quy tắc ngầm hiểu kiểu int nên tham số thiếu kiểu bị báo lỗi. Dạng "int minus (int a, b) { return (a - b); };" mắc đúng lỗi thiếu kiểu đó, lại thêm một dấu chấm phẩy trống sau thân hàm, thứ chuẩn không cho phép ở mức tệp.
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 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>
float max(float a, float b) {
return a > b ? a : b;
}
int main() {
float x = 5.5, y = 4.5, z = 2;
printf("%f", max(max(x++, y--), ++z));
return 0;
}Đáp án đúng: "getchar() gets a string from stdin." Câu hỏi tìm phát biểu sai, và đây đúng là phát biểu sai: getchar không đọc chuỗi, nó lấy đúng một ký tự rồi trả về dưới dạng int để còn chỗ cho giá trị báo hết tệp; muốn đọc cả dòng phải dùng fgets. Câu "The getchar() function is defined in the <stdio.h> header file." là phát biểu đúng, hàm thuộc thư viện vào ra chuẩn. Câu "getchar() retrieves a single character from the standard input stream buffer without translating the input." cũng đúng: hàm lấy một ký tự từ vùng đệm của luồng vào chuẩn và không diễn dịch gì thêm. Câu "getchar() gets a character (an unsigned char) from stdin." đúng nốt, vì ký tự đọc được hiểu như unsigned char rồi nâng lên int. Ba phát biểu đúng ấy không thể là thứ câu hỏi đang tìm.
#include <stdio.h>
int main()
{
int a = 4;
int *b = &a;
a -= 1;
*b -= 1;
printf("%d %d", a, *b);
return 0;
}void input(int* a, int n);Đáp án đúng: "All the above". Phần tử thứ tư nằm ở chỉ số 3 vì chỉ số đếm từ 0, và chuẩn C định nghĩa a[3] chính là *(a + 3), nên hai lối viết khác nhau trên mặt chữ lại sinh ra cùng một phép truy cập; lấy &a[3] thì chạm tới đúng phần tử đó ở mức địa chỉ. Cả ba lệnh in đều hợp lệ và đều nói về phần tử thứ tư, nên chỉ lựa chọn gộp mới trả lời đủ. Lệnh "printf("a[3] = %d\n", a[3]);" đúng nhưng chỉ là một trong ba cách. Lệnh "printf("*(a + 3) = %d\n", *(a + 3));" cũng đúng và theo định nghĩa là cùng một thao tác với lối dùng chỉ số, nên không thể đúng một mình. Lệnh "printf("&a[3] = %p\n", (void*)&a[3]); " in địa chỉ của phần tử thứ tư, vẫn là truy cập hợp lệ tới nó, chỉ khác là lấy địa chỉ thay vì lấy giá trị.
int i=4;
int *p = &i;What is the result of the following expression: ++*p?