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. Trang 2/2 — câu 21–22.

Danh sách câu hỏi

22/22 câuHết danh sách
Aint minus(int a; int b) {return (a - b);}
Bint minus (int a, b) {return (a - b);};
Cint minus (int a, int b) {return (a - b);}
Dint minus (int a, b) {return (a - b);}
Lời giải

Đá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.

Mở trang câu hỏi này →
22What does the following program print?4 lựa chọncó code
Đề bài
#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;
}
A5.5
B5.500000
C4.500000
DAn error will be raised.
Lời giải
Đáp án đúng: "5.500000". Hàm max dùng toán tử ba toán hạng để trả về số lớn hơn. Lời gọi trong cùng là max(x++, y--): cả hai phép tăng giảm đều ở dạng hậu tố nên truyền sang hàm giá trị cũ, tức 5.5 và 4.5, và hàm cho 5.5; sau đó x thành 6.5, y thành 3.5 nhưng không còn ai đọc. Lời gọi ngoài so 5.5 với ++z, dạng tiền tố nên z tăng trước rồi truyền sang 3.0, kết quả vẫn là 5.5. Đặc tả %f in số thực với sáu chữ số thập phân mặc định, nên màn hình hiện 5.500000. Dòng "5.5" là cách con người viết số đó, không phải cách printf in với %f. Dòng "4.500000" là giá trị cũ của y, thứ bị loại ngay ở lời gọi trong cùng. Kết luận "An error will be raised." sai vì tham số float, phép tăng giảm trên số thực và việc lồng hai lời gọi đều hợp lệ.
Mở trang câu hỏi này →