BASIC
CONTROL STATEMENTS
DATA TYPE
FUNCTIONS
FILE I/O
THAM KHẢO
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

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.

test php

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.

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

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.

Bài viết này được đăng tại [free tuts .net]

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ác hàm xử lý ngày tháng (datetime.h) trong C/C++

Các hàm xử lý ngày tháng (datetime.h) trong C/C++

Các hàm xử lý số thực (float.h) trong C/C++

Các hàm xử lý số thực (float.h) trong C/C++

Các hàm xử lý số nguyên lớn (bigint.h) trong C/C++

Các hàm xử lý số nguyên lớn (bigint.h) trong C/C++

Các hàm xử lý thời gian (time.h) trong C

Các hàm xử lý thời gian (time.h) trong C

Các hàm xử lý chuỗi (string.h) trong C/C++

Các hàm xử lý chuỗi (string.h) trong C/C++

Thread Pools và Parallel Algorithms trong C++

Thread Pools và Parallel Algorithms trong C++

Tạo và quản lý các Multithreading trong C++

Tạo và quản lý các Multithreading trong C++

Xử lý ngoại lệ khi làm việc với Memory Allocation trong C++

Xử lý ngoại lệ khi làm việc với Memory Allocation trong C++

Try, Catch, và Throw của Exception Handling trong C++

Try, Catch, và Throw của Exception Handling trong C++

Cách sử dụng Lambda Expressions trong C++

Cách sử dụng Lambda Expressions trong C++

Sử dụng weak_ptr trong C++

Sử dụng weak_ptr trong C++

Sử dụng shared_ptr trong C++

Sử dụng shared_ptr trong C++

Sử dụng unique_ptr trong C++

Sử dụng unique_ptr trong C++

Tổng quan về Smart Pointers trong C++

Tổng quan về Smart Pointers trong C++

Sử dụng Iterators trong STL của C++

Sử dụng Iterators trong STL của C++

[Iterator] Sử dụng Vector trong C++

[Iterator] Sử dụng Vector trong C++

[Iterator] Sử dụng trong List trong C++

[Iterator] Sử dụng trong List trong C++

[STL] Sử dụng Vector trong C++

[STL] Sử dụng Vector trong C++

Tổng quan về Iterators trong C++

Tổng quan về Iterators trong C++

[STL] Các hàm thường dùng của lớp Vector trong C++

[STL] Các hàm thường dùng của lớp Vector trong C++

Top