BASIC
CONTROL STATEMENTS
DATA TYPE
FUNCTIONS
FILE I/O
THAM KHẢO
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
Dự án mới của mình là gamehow.net, mời anh em ghé thăm và góp ý ạ.

Tạo hàm (function) trong C

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 scanfprintf 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.

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

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 \n", 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 \n", 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.

Cùng chuyên mục:

Cách nhân hai số trong ngôn ngữ C

Cách nhân hai số trong ngôn ngữ C

Cách cộng hai số nguyên trong C

Cách cộng hai số nguyên trong C

Tổng hợp hơn 1000 bài tập C / C++ có lời giải

Tổng hợp hơn 1000 bài tập C / C++ có lời giải

Bài này sẽ tổng hợp hơn 1000 bài tập C / C++ có lời giải…

Các hàm trong thư viện ctime C / C++

Các hàm trong thư viện ctime C / C++

Các hàm trong thư viện cstdio C / C++

Các hàm trong thư viện cstdio C / C++

Các hàm trong thư viện cctype C / C++

Các hàm trong thư viện cctype C / C++

Các hàm trong thư viện cstring C / C++

Các hàm trong thư viện cstring C / C++

Các hàm trong thư viện cstdlib C/C++

Các hàm trong thư viện cstdlib C/C++

Các hàm nhập xuất IO (iostream) trong C / C++

Các hàm nhập xuất IO (iostream) trong C / C++

Các hàm toán học (math) trong C / C++

Các hàm toán học (math) trong C / C++

Nếu bạn đang học C++ căn bản thì phải biết công dụng của những hàm…

Bài tập vòng lặp while và do while trong C++

Bài tập vòng lặp while và do while trong C++

Nếu một bài toán được giải bằng vòng lặp while thì bạn hoàn toàn có…

Bài tập vòng lặp for trong C++ có lời giải

Bài tập vòng lặp for trong C++ có lời giải

Vòng lặp for C++ rất quan trọng, nó được sử dụng rất nhiều khi xử…

Bài tập if else trong C++ (có đổi sang switch case)

Bài tập if else trong C++ (có đổi sang switch case)

Để thành thạo hai lệnh rẻ nhánh if else và switch case thì bạn phải…

Tìm hiểu cấu trúc mảng (array) trong C++

Tìm hiểu cấu trúc mảng (array) trong C++

Toán tử ba ngôi trong C++

Toán tử ba ngôi trong C++

Toán tử ba ngôi thực ra là cách rút gọn code của lệnh if else,…

Các toán tử trong C++

Các toán tử trong C++

Toán tử đóng vai trò rất quan trọng trong lập trình, nó giúp chúng ta…

Ngôn ngữ C++ là gì? Dùng làm gì trong công nghệ thông tin?

Ngôn ngữ C++ là gì? Dùng làm gì trong công nghệ thông tin?

C++ là một ngôn ngữ lập trình phổ biến và mạnh mẽ có kiểu dữ…

Đọc ghi file trong C

Đọc ghi file trong C

Đa số sinh viên Việt Nam học lập trình C là để luyện tư duy…

Kiểu Union trong C

Kiểu Union trong C

Union có cách khai báo giống như struct, nhưng kích thước của nó sẽ lấy…

Hàm đệ quy trong ngôn ngữ C

Hàm đệ quy trong ngôn ngữ C

Giải thuật đệ quy nói chung và trong ngôn ngữ C nói riêng thì hàm…

Top