ạo hàm (function) trong C - Học lập trình C căn bản & nâng cao
Trong bài này chúng ta sẽ tìm hiểu về function trong ngôn ngữ C, giúp bạn hiểu rõ function là gì và tại sao nên sử dụng nó khi lập trình. Ở những bài trước chúng ta cũng có sử dụng function rồi đấy, đó là hai function scanf và printf nằm trong thư viện stdio.sh. Hai function này có công dụng xử ...
Trong bài này chúng ta sẽ tìm hiểu về function trong ngôn ngữ C, giúp bạn hiểu rõ function là gì và tại sao nên sử dụng nó khi lập trình.
Ở những bài trước chúng ta cũng có sử dụng function rồi đấy, đó là hai function scanf
và printf
nằm trong thư viện stdio.sh. Hai function này có công dụng xử lý dữ liệu nhập xuất.
1. Function là gì?
Function hay còn gọi là hàm, là tập hợp một nhóm lệnh dùng để xử lý một chức năng nào đó, được đặt dưới một cái tên và khi nào cần thì chỉ cần gọi đến tên là được.
Ví dụ function scanf dùng để nhập thông tin từ bàn phím, ta chỉ cần gọi và sử dụng chứ không cần quan tâm bên trong nó là gì, chỉ cần biết công dụng và cách dùng của nó là được.
Có hai nhóm function như sau:
- Function có sẵn trong thư viện C, là những function có sẵn trong ngôn ngữ C, khi cần sử dụng bạn chỉ cần gọi đến là được.
- Function do người dùng định nghĩa, là những function do chính bạn tự tạo ra để thực hiện một công việc nào đó.
2. Hàm main trong C là gì?
Hàm main trong C thực chất cũng là một function nhé các bạn, mà nó là function đặc biệt được dùng để chạy chương trình chính.
Ví dụ trong file abc.c
bạn có 10 function thì trình biên dịch sẽ không biết bắt đầu biên dịch từ đâu, và nếu có hàm main thì nó sẽ hiểu là phải bắt đầu từ hàm này. Vì vậy những function mà bạn định nghĩa thường được sử dụng trong hàm main.
Bạn có thể tự tạo function ở vị trí trên hàm main, trong hàm main đều được nhé. Chi tiết thì ta sẽ tìm hiểu ở những phần tiếp theo.
2. Cách tạo function trong C
Để tạo function thì ta thực hiện theo cú pháp sau:
void functionName() { ... .. ... ... .. ... }
Trong đó void là kiểu dữ liệu trả về (void = không trả về gì cả), còn functionName là tê ncủa function mà bạn muốn đặt. Quy tắt khi đặt tên hàm sẽ giống với đặt tên biến, và nó phải là duy nhất nhé.
Ví dụ: Viết function hiển thị số lớn nhất trong ba số nhập vào từ bàn phím.
#include <stdio.h> void findMax(){ int a, b, c, max; printf("Nhap vao so thu 1:"); scanf("%d", &a); printf("Nhap vao so thu 2:"); scanf("%d", &b); printf("Nhap vao so thu 3:"); scanf("%d", &c); max = a; if (a < b){ max = b; } if (a < c){ max = c; } printf("So lon nhat la %d ", max); } int main() { findMax(); return 0; }
Trong hàm main mình đã gọi đến function findMax() để sử dụng một lần. Nếu bạn muốn sử dụng nhiều lần thì chỉ cần thêm là được.
int main() { findMax(); findMax(); findMax(); // ... return 0; }
Nếu viết function chỉ để gom thành một nhóm như vậy thì quá đơn giản. Vấn đề to lớn tiếp theo đó là:
Giả sử mình muốn viết một function trả về giá trị lớn nhất thì lam thế nào? Tức không sử dụng mấy hàm printf và scanf trong hàm.
Được thôi, chẳng qua là bạn chưa học đến mà thôi. Ta sẽ sử dụng đến hai khái niệm đó là tham số của function và giá trị trả về của function.
Tham số của function
Tham số chính là dữ liệu mà bạn muốn truyền vào function, sẽ được đặt trong cặp dấu ngoặc nhọn nhé.
void functionName(int var1, char var2, ...){ // Code }
Như bạn thấy, tham sô truyền vào cũng phải khai báo kiểu giá trị cho nó.
Mình sẽ viết lại ví dụ ở trên bằng cách sử dụng tham số nhé.
#include <stdio.h> void findMax(int a, int b, int c){ int max; max = a; if (a < b){ max = b; } if (a < c){ max = c; } printf("So lon nhat la %d ", max); } int main() { int a, b, c; printf("Nhap vao so thu 1:"); scanf("%d", &a); printf("Nhap vao so thu 2:"); scanf("%d", &b); printf("Nhap vao so thu 3:"); scanf("%d", &c); findMax(a, b, c); return 0; }
Như bạn thấy, đoạn code nhập dữ liệu sẽ nằm ở hàm main, và ba giá trị a, b, c sẽ truyền vào hàm thông qua các tham số.
Bấy nhiêu là chưa đủ, giả sử mình muốn lấy giá trị lớn nhất đó để thực hiện thêm một thao tác khác ở hàm main thì làm thế nào? Rất đơn giản, hãy tìm hiểu qua phần giá trị trả về (return).
Giá trị trả về của hàm (return)
Trong hàm main mình có một đoạn code return 0;
, và đó chính là giá trị trả về của hàm main.
Nếu mình muốn bỏ dòng đó thì phải thay thế kiểu trả về là void
thay vì là int
.
// Khong tra ve gi ca void main() { } // Tra ve kieu int void main() { } // Tra ve kieu char void main() { }
Như vậy, ở hàm mà bạn tự định nghĩa cũng áp dụng cách này nhé.
Quay lại ví dụ trên, mình sẽ viết lại hàm findMax
trả về số lớn nhất (kiểu int).
#include <stdio.h> int findMax(int a, int b, int c){ int max; max = a; if (a < b){ max = b; } if (a < c){ max = c; } return max; } void main() { int a, b, c, max; printf("Nhap vao so thu 1:"); scanf("%d", &a); printf("Nhap vao so thu 2:"); scanf("%d", &b); printf("Nhap vao so thu 3:"); scanf("%d", &c); // Lay gia tri lon nhat max = findMax(a, b, c); printf("So lon nhat la : %d", max); return 0; }
Như bạn thấy, trong hàm main mình đã gọi đến hàm findMax
và gán nó vào biến max
để lấy số lớn nhất max = findMax(a, b, c);
. Lúc này biến max chính là số lớn nhất trong ba số a, b, c.
Lý thuyết tạo hàm - function trong C rất đơn giản, bạn chỉ cần nắm vững một số khái niệm sau: Các tạo hàm, tham số truyền vào, giá trị trả về, cách gọi làm là được nhé. Bài này mình sẽ dừng ở đây, hẹn gặp lại bạn ở các bài tiếp theo.