You are on page 1of 11

Module 02

ĐỊNH NGHĨA VÀ SỬ DỤNG HÀM

Design by Minh An Email: anvanminh.haui@gmail.com

Nội dung

1. Khái niệm hàm


2. Cấu trúc của hàm
3. Vị trí định nghĩa hàm trong chương trình
4. Phân loại hàm
5. Định nghĩa và sử dụng hàm
6. Truyền tham số cho hàm
7. Phạm vi của các loại biến

Design by Minh An

1
1. Khái niệm hàm

Dữ liệu
Dữ liệu

Hàm main()

Hàm main()
(Mã lệnh)
Hàm_1() … Hàm_n()

Chương trình không


dùng hàm Chương trình chia
thành các hàm

Design by Minh An

Khái niệm hàm (tt)

• Hàm là một đoạn chương trình thực hiện một tác vụ


được định nghĩa cụ thể.
• Các hàm được sử dụng để rút gọn cho một chuỗi các
chỉ thị được thực hiện nhiều lần.
• Việc gỡ lỗi chương trình trở nên dễ dàng hơn khi cấu
trúc của chương trình rõ ràng.
• Chương trình cấu tạo từ các hàm cũng dễ dàng bảo trì,
bởi vì sự sửa đổi khi có yêu cầu được giới hạn trong
từng hàm của chương trình.

Design by Minh An

2
2. Cấu trúc của hàm

• Cấu trúc của một hàm trong C như sau:

<kiểu_trả_về> <tên_hàm>(các đối của hàm)


{
//Thân hàm Nguyên mẫu hàm
}

• <kiểu_trả_về>: xác định kiểu dữ liệu của giá trị mà


hàm sẽ trả về.
• <tên_hàm>: Là một định danh.

• (các đối của hàm) xuất hiện trong cặp dấu ngoặc
() biểu diễn cho dữ liệu vào/ra của hàm.

Design by Minh An

3. Vị trí định nghĩa hàm trong chương trình


• Khai báo nguyên mẫu các hàm trước hàm main().
• Định nghĩa hàm sau hàm main().
int F1(int a, int b); //Nguyên mẫu của hàm F1
void F2(float a, char C);
int main() {
// Thân hàm main
}
//Định nghĩa hàm F1 và hàm F2
int F1(int a, int b) {
//Thân hàm F1
}
void F2(float a, char C) {
//Thân hàm F2
}

Design by Minh An

3
Vị trí định nghĩa hàm trong chương trình (tt)
• Khai báo và định nghĩa các hàm trước hàm main().

int F1(int a, int b) {


//Thân hàm F1
}
void F2(float a, char C) {
//Thân hàm F2
}
int main() {
// Thân hàm main
}

Design by Minh An

4. Phân loại hàm


• Theo giá trị trả về
✓ Hàm định kiểu: Hàm có giá trị trả về.

int binh_phuong(int a) {
int t;
t = a * a;
return t;
}

✓ Hàm không định kiểu: Hàm không có giá trị trả về.

void hien_thi(char ten[]) {


printf("Ten ban la %s", ten);
}

Design by Minh An

4
Phân loại hàm
• Theo đối của hàm
✓ Hàm có đối:

int tong(int a, int b) {


int t;
t = a + b;
return t;
}

✓ Hàm không đối.

void thong_bao() {
printf("Bai tiep theo la CTDK");
}

Design by Minh An

5. Định nghĩa hàm

Các bước định nghĩa hàm

1. Phân tích yêu cầu mà hàm phải thể hiện


✓ Xác định dữ liệu vào, dữ liệu ra
✓ Xây dựng thuật toán
2. Xác định kiểu trả về của hàm (DL ra)
3. Đặt tên hàm (theo yêu cầu)
4. Xác định các đối của hàm (DL vào, ra)
5. Định nghĩa thân hàm (thuật toán)

Design by Minh An

5
Xây dựng hàm – Ví dụ

1. Định nghĩa hàm hiển thị ra màn hình bài thơ Cảnh
khuya.
2. Định nghĩa hàm nhận vào độ dài 3 cạnh của một tam
giác, tính và trả về giá trị diện tích của tam giác đó.
3. Định nghĩa hàm nhận vào 1 ký tự, trả về mã ascii của
ký tự đó.
4. Định nghĩa hàm nhận vào 3 số thực, tìm và trả về số
lớn nhất.
5. Định nghĩa hàm thực hiện yêu cầu: nhập vào độ dài
các cạnh của một hình hộp chữ nhật, tính và hiển thị
ra màn hình diện tích xung quanh và thể tích của
hình hộp chữ nhật đó.

Design by Minh An

6. Sử dụng hàm
• Lời gọi hàm:
<Tên_hàm> <([Danh sách tham số])>
• Chú ý
✓ Cặp dấu ngoặc () là bắt buộc theo sau tên hàm.
✓ Số lượng tham số phải bằng số lượng đối của hàm.
✓ Kiểu của các tham số phải tương ứng với các đối.
✓ Nếu hàm có giá trị trả về thì lời gọi hàm được sử dụng như
một biểu thức.
✓ Nếu hàm không có giá trị trả về thì lời gọi hàm là một lệnh,
chỉ thị.
• Ví dụ:
ngam_tho();
s = dien_tich(4, 5, 3);

Design by Minh An

6
7. Truyền tham số cho hàm

Truyền tham trị

Truyền tham chiếu

Design by Minh An

Truyền tham trị

• Các tham số được truyền đến hàm thông qua các đối,
giá trị của tham số được gán cho các đối tương ứng.

• Các thao tác bên trong hàm chỉ được thực hiện trên
các đối.

• Giá trị chứa trong các tham số (các biến) được truyền
đến hàm không bị thay đổi.

Design by Minh An

7
Truyền tham trị (tt)

int min(int a, int b, int c)


{
x y z
int m = a;
m = (m > b)? m : b; 5 7 -4
m = (m > c)? m : c;
return m;
}
int main()
{ a b c
int x = 5, y = 7, z = -4;
5 7 -4
int m = min(x, y, z);
printf("min = %d", m);
}

Design by Minh An

Truyền tham chiếu

• Các đối của hàm tham chiếu đến địa chỉ của các
tham số (biến) truyền vào hàm.

• Các thao tác bên trong hàm được thực hiện trực tiếp
trên các biến được truyền đến hàm.

• Giá trị của các biến được truyền đến hàm có thể bị
thay đổi (thường sẽ thay đổi).

Design by Minh An

8
Truyền tham chiếu với C

void dao_gia_tri(int *a, int *b)


{
int tg = *a; x y
*a = *b; 5 7
*b = tg;
} a b
int main()
{
int x = 5, y = 7;
dao_gia_tri(&x, &y); x y
printf("%d va %d", x, y); 7 5
}

//Ở đây a, b gọi là các biến con trỏ

Design by Minh An

Truyền tham chiếu với C++

void dao_gia_tri(int &a, int &b)


{
int tg = a; x y
a = b; 5 7
b = tg;
} a b
int main()
{
int x = 5, y = 7;
dao_gia_tri(x, y); x y
cout<<x<<" va "<<y; 7 5
}

//Ở đây a, b gọi là tham chiếu

Design by Minh An

9
8. Phạm vi của các loại biến

• Biến cục bộ
✓ Được khai báo bên trong một hàm
✓ Được tạo ra tại điểm vào của một hàm và bị hủy tại
điểm ra khỏi hàm đó.
• Các đối số của hàm
✓ Được khai báo trong định nghĩa hàm như là các biến.
✓ Hoạt động như một biến cục bộ bên trong một hàm.
• Biến toàn cục
✓ Được khai báo bên ngoài tất cả các hàm.
✓ Lưu các giá trị tồn tại suốt thời gian thực thi của
chương trình.

Design by Minh An

Phạm vi của các loại biến


• Ví dụ: Chương trình nhập 3 số, tính tổng và trung
bình cộng của 3 số.

Design by Minh An

10
Bài tập

Bài tập

Design by Minh An

11

You might also like