Lý Thuyết
Ưu điểm khi sử dụng hàm.
+ Sử dụng chương trình con khiến code của bạn trông sáng sủa hơn và gọn gàng, người đọc code sẽ dễ hiểu hơn bằng cách nhìn vào từng hàm con ta có thể dễ dàng xác định vai trò của nó trong chương trình.
+ Dễ dàng quản lý, nâng cấp và tìm lỗi chương trình. Bởi vì bạn biết rõ hàm nào đang làm gì, nếu mà chẳng may gặp lỗi thì bạn cũng nhanh chóng xác định lỗi đó của hàm nào thay vì phải dò từng dòng trong hàm main
+ Viết 1 lần và gọi được ở nhiều nơi: Khi bạn dùng hàm thì bạn chỉ phải viết một lần và gọi tới nó bất cứ khi nào bạn muốn. Bạn cũng có thể đóng gói các hàm đó để sử dụng cho các chương trình khác
Cách hoạt động của hàm trong C.
1. Chương trình của bạn sẽ nhảy tới nơi định nghĩa hàm đó và thực thi các lệnh từ trên xuống dưới ở trong hàm đó..
2. Khi hàm thực hiện xong, chương trình tiếp tục quay về thực hiện các lệnh phía sau lời gọi hàm.
Các loại hàm trong C
1. Hàm không có tham số, không có giá trị trả về
#include < stdio.h >
int main() {
test(); // gọi hàm
return 0;
}
void test(); // khai báo hàm
void test() { // định nghĩa hàm
printf("Xin chào các bạn !");
}
Như bạn thấy, hàm test() không có tham số đầu vào, bản thân nó tự thực hiện nhận giá trị từ bàn phím, kiểm tra và sau đó cũng in ra kết quả luôn. Vì là nó không trả về giá trị nên chúng ta dùng kiểu void, bạn sẽ học nó ở bài tiếp theo.
2. Hàm không có tham số, có trả về giá trị
#include < stdio.h >
int main() {
int n;
n = getInteger();
for(int i = 1; i <= n; i ++) {
printf("%d ", i);
}
return 0;
}
int getInteger(); // khai báo hàm
int getInteger() { // định nghĩa hàm
int n;
printf("nhap n");
scanf("%d", &n);
return n;
}
Trong đoạn code trên, hàm getInteger() nhập 1 số từ bàn phím và trả ra cho chúng ta giá trị đó. Như vậy, hàm getInteger() chỉ thực hiện 1 chức năng => ok. Nhưng hàm main vẫn phải đảm nhiệm công việc in ra các số từ 1 đến n.
Khi chạy đoạn code trên sẽ như vậy:
Input: nhap n 4
Output: 1 2 3 4
3. Hàm có tham số, không trả về giá trị
#include < stdio.h >
int main() {
int n;
printf("nhap vao n");
scanf("%d", &n);
So_chan(n);
return 0;
}
void So_chan(int n); // khai báo hàm
void So_chan(int n) { // định nghĩa hàm
if (n % 2 == 0) {
printf("n là số chẵn");
} else {
printf("n là số lẻ");
}
}
Nhận thấy, hàm So_chan() nhận vào là một số cần kiểm tra, sau đó thực hiện kiểm tra và in ra kết quả.
+ Hàm So_chan() đang làm 2 việc 1 lúc => cách viết hàm tốt thì 1 hàm chỉ làm 1 việc thôi.
+ Lần này hàm main đảm nhiệm việc nhập (tốt) => Hàm main nên đảm nhận việc nhận input và xuất output.
4. Hàm có tham số, có trả về giá trị
#include < stdio.h >
int main() {
int n, temp;
printf("nhap vao n");
scanf("%d", &n);
temp = So_chan(n);
if (temp == 1) {
printf("n là số chẵn");
} else {
printf("n là số lẻ");
}
return 0;
}
int So_chan(int n); // khai báo hàm
int So_chan(int n) { // định nghĩa hàm
if (n % 2 == 0) {
return 1;
}
return 0;
}
Ở trường hợp lần này, hàm So_chan() chỉ nhận nhiệm vụ nhận vào 1 số và kiểm tra xem số đó có phải là số chẵn hay không.
+ Hàm main đảm nhận nhiệm vụ lấy đầu vào, xuất kết quả => Tuyệt vời.
+ Hàm con So_chan() chỉ làm 1 việc duy nhất => Tuyệt vời.
Đọc tới đây bạn đã biết cách sử dụng sử dụng hàm rồi chứ ?, hãy qua phần video xem thêm 1 số ví dụ nữa nhé.