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 đề. Trang 2/3 — câu 21–40.
Danh sách câu hỏi
Đáp án đúng: "do{ statements; } while(condition) ; ". Vòng do-while chạy thân trước rồi mới kiểm điều kiện, và cả cấu trúc đó được ngôn ngữ coi là một lệnh duy nhất, nên bắt buộc phải kết thúc bằng dấu chấm phẩy ngay sau ngoặc điều kiện; thân có nhiều lệnh thì gom trong cặp ngoặc nhọn. Khuôn "do
while(condition) {
statements;
}" đặt điều kiện trước thân, thành ra do không có thân nào đi kèm còn khối phía sau trở thành một khối rời, sai hẳn trật tự của cấu trúc. Khuôn "do{ statements; } while (condition)" đúng mọi thứ trừ dấu chấm phẩy kết thúc, mà thiếu nó thì trình biên dịch coi lệnh chưa viết xong và báo lỗi cú pháp. Khuôn "do( statements;) while (condition) ; " dùng ngoặc tròn để gom lệnh, nhưng trong C chỉ cặp ngoặc nhọn mới tạo được khối lệnh, ngoặc tròn chỉ dành cho biểu thức và danh sách tham số.
#define SIZE 5
int nums[SIZE] = {5, 10, 2, -45, 6};
for (int i = SIZE - 1; i >= 0; i--)
printf("%d ", nums[i]);#include <stdio.h>
void swap(int *px, int *py)
{
int z;
z=*px;
*px=*py ;
*py=z ;
}
int main()
{
int a=15, b=21 ;
swap(&a,&b);
printf ("%d %d",a,b);
return 0;
}#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;
}#include <stdio.h>
void main()
{
int *ptr, a = 10;
ptr = &a;
*ptr += 1;
printf("%d,%d\n", *ptr, a);
}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.
doublefloatintlongint a[MAX_SIZE];
int s = 0;
for (int i = 0; i < n; i++)
s = s + a[i] * a[i];pointersvaluetypeaddress#include <stdio.h>
int main() {
int a = 4, *b = &a;
a--;
*b=*b-1;
printf("%d %d", a, *b);
return 0;
}int a[5] = {1, 2, 3};
printf("%d", a[4]);void main()
{
int const *p = 5;
printf("%d", ++(*p));
getchar();
}