Functions, parameters, and return values · Hàm, tham số và giá trị trả về
Why functions
- A function is a named piece of work. You write it once and call it whenever you need it.
- Functions keep programs short and clear, and let you build big jobs from small ones.
- You have already used
printf— a function from<stdio.h>. Now you write your own.
Tại sao cần hàm
- Một hàm là một khối công việc có tên. Bạn viết nó một lần và gọi nó bất cứ khi nào cần.
- Hàm giúp chương trình ngắn gọn, rõ ràng hơn, và cho phép bạn xây dựng các tác vụ lớn từ những tác vụ nhỏ.
- Bạn đã từng sử dụng
printf— một hàm thuộc thư viện<stdio.h>. Bây giờ bạn sẽ tự viết hàm của mình.
Parameters and return values
- The values you pass in are the parameters. The value you hand back is the return value.
int max2(int a, int b)takes twointparameters and returns oneint.return x;ends the function right away and givesxback to the caller.
Tham số và giá trị trả về
- Các giá trị bạn truyền vào là tham số. Giá trị bạn trả lại là giá trị trả về.
int max2(int a, int b)nhận hai tham sốintvà trả về mộtint.return x;kết thúc hàm ngay lập tức và gửi lạixcho người gọi.
void functions, and building big from small
- A function that returns nothing has the return type
void. It does work but hands back no value. - One function can call another.
max3can callmax2twice to do its job. - Small functions that each do one thing are easier to read and to fix.
hàm rỗng, và xây dựng cái lớn từ cái nhỏ
- Một hàm không trả về giá trị nào có kiểu trả về là
void. Nó vẫn thực thi công việc nhưng không trả lại giá trị. - Một hàm có thể gọi một hàm khác.
max3có thể gọimax2hai lần để hoàn thành nhiệm vụ của nó. - Các hàm nhỏ mà mỗi hàm chỉ làm một việc thì dễ đọc hơn và dễ sửa lỗi hơn.
C copies your arguments
- When you call a function, C gives it a copy of each argument.
- So changing a parameter inside the function does not change the caller's variable.
- Keep this in mind — in a later lesson, pointers let a function reach the original.
C sao chép các tham số của bạn
- Khi bạn gọi một hàm, C cung cấp cho nó một bản sao của từng tham số.
- Vì vậy, việc thay đổi tham số bên trong hàm sẽ không làm thay đổi biến của người gọi.
- Hãy nhớ điều này — trong một bài học sau, conype (pointers) cho phép hàm truy cập vào giá trị gốc.
#include <stdio.h>
void try_double(int x) {
x = x * 2; // changes only the COPY
}
int main(void) {
int n = 5;
try_double(n);
printf("%d\n", n); // still 5 — the original did not change
return 0;
}
Common mistakes
- A function used before it is defined needs a prototype above
main. - Arguments pass by value — pass a pointer to change the caller's variable.
Lỗi thường gặp
- Một hàm được sử dụng trước khi định nghĩa cần có bản mẫu ở trên
main. - Tham số được truyền theo giá trị — hãy truyền conype để thay đổi biến của người gọi.
Now you try
- Write each function with the exact name and parameters shown, and
returnthe right value. - You may call one of your functions from another.
- Do not write a
main— the checker provides one.
Bây giờ bạn thử
- Viết mỗi hàm với đúng tên và tham số được hiển thị, và trả về
returngiá trị đúng. - Bạn có thể gọi một trong các hàm của mình từ một hàm khác.
- Không viết một
main— trình kiểm tra sẽ cung cấp cho bạn một cái.
Functions: call and return · Hàm: gọi và trả về
A call pushes a frame with its parameters; return pops it. · Một lần gọi đẩy một khung với các tham số của nó vào; return sẽ xóa khung đó đi.
Write int max2(int a, int b) returning the larger of two numbers, and int max3(int a, int b, int c) returning the largest of three. Make max3 call max2. Do not write a main. · Viết int max2(int a, int b) trả về số lớn hơn trong hai số, và int max3(int a, int b, int c) trả về số lớn nhất trong ba số. Hãy để max3 gọi max2. Đừng viết một main.
Click Run to see the output here. · Nhấn Chạy để xem kết quả ở đây.
Complete int power(int base, int exp) so it returns base raised to exp (assume exp >= 0). Use a loop. power(2, 10) is 1024. Do not write a main. · Hoàn thiện int power(int base, int exp) sao cho trả về base mũ exp (giả sử exp >= 0). Dùng vòng lặp. power(2, 10) là 1024. Đừng viết một main.
Click Run to see the output here. · Nhấn Chạy để xem kết quả ở đây.
Complete int clamp(int x, int lo, int hi) so it keeps x within [lo, hi]: return lo if x is below lo, hi if x is above hi, otherwise x. Do not write a main. · Hoàn thiện int clamp(int x, int lo, int hi) sao cho giữ x trong giới hạn [lo, hi]: trả về lo nếu x thấp hơn lo, trả về hi nếu x cao hơn hi, ngược lại trả về x. Đừng viết một main.
Click Run to see the output here. · Nhấn Chạy để xem kết quả ở đây.