Bài giảng Tin học đại cương - Bài 11: Hàm - Đỗ Bá Lâm

11.1.1. Khái niệm chương trình con

• Khái niệm

– Là một chương trình nằm trong một chương

trình lớn hơn nhằm thực hiện một nhiệm vụ

cụ thể

• Vai trò

– Chia nhỏ chương trình ra thành từng phần để

quản lý => Phương pháp lập trình có cấu trúc

– Có thể sử dụng lại nhiều lần: printf, scanf

– Chương trình dễ dàng đọc và bảo trì hơn

pdf 23 trang yennguyen 4960
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Tin học đại cương - Bài 11: Hàm - Đỗ Bá Lâm", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Tin học đại cương - Bài 11: Hàm - Đỗ Bá Lâm

Bài giảng Tin học đại cương - Bài 11: Hàm - Đỗ Bá Lâm
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
Đỗ Bá Lâm
lamdb@soict.hut.edu.vn
TIN HỌC ĐẠI CƯƠNG
Bài 11. Hàm
Nội dung
11.1. Khái niệm hàm
11.2. Khai báo và sử dụng hàm
11.3. Phạm vi của biến
2
Nội dung
11.1. Khái niệm hàm
11.1.1. Khái niệm chương trình con
11.1.2. Phân loại chương trình con
11.2. Khai báo và sử dụng hàm
11.3. Phạm vi của biến
3
11.1.1. Khái niệm chương trình con
• Khái niệm 
– Là một chương trình nằm trong một chương 
trình lớn hơn nhằm thực hiện một nhiệm vụ 
cụ thể
• Vai trò
– Chia nhỏ chương trình ra thành từng phần để 
quản lý => Phương pháp lập trình có cấu trúc
– Có thể sử dụng lại nhiều lần: printf, scanf
– Chương trình dễ dàng đọc và bảo trì hơn
4
• Phân loại
• Hàm: trả về giá trị trong khi thủ tục thì không
• Trong C: 
– Chỉ cho phép khai báo chương trình con là hàm.
– Sử dụng kiểu “void” với ý nghĩa “không là kiểu dữ liệu 
nào cả” để chuyển thủ tục về dạng hàm
Thủ tục
(procedure)
Chương trình con
Hàm
(function)
11.1.2. Phân loại chương trình con
5
• Phân loại hàm
Hàm tự viết
(Người dùng định nghĩa)
HÀM
Hàm chuẩn
(Có trong thư viện)
11.1.2. Phân loại chương trình con
6
11.2. Khai báo và sử dụng hàm
11.2.1. Khai báo hàm
11.2.2. Sử dụng hàm
7
11.2.1. Khai báo hàm
• Ví dụ:
– Chương trình in ra bình phương của các số 
tự nhiên từ 1 đến 10
– Gồm 2 hàm: 
• Hàm binhphuong(int x): trả về bình phương 
của x
• Hàm main(): với mỗi số nguyên từ 1 đến 
10, gọi hàm binhphuong với một giá trị đầu 
vào và hiển thị kết quả.
8
#include
#include
int binhphuong(int x){
int y;
y = x * x;
return y;
}
main(){
int i;
for (i=0; i<= 10; i++)
printf(“%d ”, binhphuong(i));
getch(); 
}
Khai báo hàm
Gọi hàm
11.2.1. Khai báo hàm
9
• Dòng đầu hàm 
– Là thông tin trao đổi giữa các hàm. Phân biệt 
giữa các hàm với nhau.
– Kiểu giá trị trả về: kiểu dữ liệu bất kì, không 
được là kiểu dữ liệu mảng.
– Tên hàm: là tên hợp lệ, trong C tên hàm là 
duy nhất
[] tên_hàm ([danh_sách_tham_số])
{
[]
[]
}
11.2.1. Khai báo hàm
10
– Tham số
• Cho biết những tham số giả định cung cấp hoạt 
động cho hàm => các tham số hình thức
• Tham số cung cấp dữ liệu cho hàm lúc hoạt động: 
tham số thực
– Ví dụ: int max(int a, int b, int c)
• Thân hàm
– return 
• Gọi hàm thông qua tên hàm và các tham số thực 
cung cấp cho hàm.
• Sau khi thực hiện xong, trở về điểm mà hàm được 
gọi thông qua câu lệnh return hoặc kết thúc hàm.
• Cú pháp chung: return biểu_thức;
11.2.1. Khai báo hàm
11
11.2.1. Khai báo hàm
#include
#include
int binhphuong(int x);
main(){
int i;
for (i=0; i<= 10; i++)
printf(“%d ”, 
binhphuong(i));
getch(); 
}
int binhphuong(int x){
int y; y = x * x; return y;
}
Nguyên mẫu hàm
(function prototype)
Định nghĩa hàm
• Ý nghĩa của nguyên mẫu hàm
– Cho phép định nghĩa sau khi sử dụng. Nhưng 
phải khai báo trước
– Cho phép đưa ra lời gọi đến một hàm mà 
không cần biết định nghĩa
• Ví dụ: khi gọi printf, scanf chúng ta chỉ cần quan 
tâm các tham số truyền cho hàm
• Tệp stdio.h chứa nguyên mẫu hàm của printf và 
scanf
11.2.1. Khai báo hàm
• Các hàm thư viện
• Ngôn ngữ C cung cấp một số hàm thư 
viện như: xử lý vào ra, hàm toán học, hàm 
xử lý xâu
• Để sử dụng các hàm này chúng ta chỉ 
cần khai báo nguyên mẫu của chúng 
trước khi sử dụng. 
– Khai báo thông qua chỉ thị 
#include
– tệp_tiêu_đề (.h) đã chứa các nguyên mẫu 
hàm
11.2.1. Khai báo hàm
11.2.2. Sử dụng hàm
• Cú pháp:
tên_hàm (danh_sách_tham_số);
• Ví dụ: binhphuong(0), binhphuong(1)
• Lưu ý:
– Nếu hàm nhận nhiều tham số thì các tham số ngăn 
cách nhau bởi dấu phẩy
– Luôn luôn cần cặp dấu ngoặc đơn sau tên hàm
– Các tham số của hàm sẽ nhận các giá trị từ tham số 
truyền vào
– Thực hiện lần lượt các lệnh cho đến khi gặp lệnh 
return/kết thúc chương trình
15
11.3. Phạm vi của biến
• 11.3.1. Phạm vi của biến
• 11.3.2. Phân loại biến
• 11.3.3. Câu lệnh static và register
16
• Phạm vi: khối lệnh, chương 
trình con, chương trình 
chính
• Biến khai báo trong phạm vi 
nào thì sử dụng trong phạm 
vi đó
• Trong cùng một phạm vi các 
biến có tên khác nhau.
• Tình huống
– Trong hai phạm vi khác 
nhau có hai biến cùng tên. 
Trong đó một phạm vi này 
nằm trong phạm vi kia?
#include
#include
int i;
int binhphuong(int x){
int y;
y = x * x;
return y;
}
main(){
int y;
for (i=0; i<= 10; i++){
y = binhphuong(i);
printf(“%d ”, y);
} 
}
11.3.1. Phạm vi của biến
17
• Phân loại biến
– Biến toàn cục: biến được khai báo ngoài mọi 
hàm, được sử dụng ở các hàm đứng sau nó
– Biến cục bộ: biến được khai báo trong lệnh 
khối hoặc chương trình con, được đặt trước 
các câu lệnh.
• Ghi nhớ
– Hàm main() cũng là một chương trình con 
nhưng là nơi chương trình được bắt đầu cũng 
như kết thúc
– Biến khai báo trong hàm main() cũng là biến 
cục bộ, chỉ có phạm vi trong hàm main().
11.3.2. Phân loại biến
18
• Biến static
– Xuất phát: biến cục bộ ra khỏi phạm vi thì bộ 
nhớ dành cho biến được giải phóng
– Yêu cầu lưu trữ giá trị của biến cục bộ một 
cách lâu dài => sử dụng từ khóa static
– So sánh với biến toàn cục?
– Cú pháp:
static tên_biến;
11.3.3. Câu lệnh static và register
19
# include 
# include 
void fct() {
static int count = 1;
printf("\n Day la lan goi ham fct lan thu 
%2d", count++);
}
main(){
int i;
for(i = 0; i < 10; i++) fct();
getch();
}
11.3.3. Câu lệnh static và register
20
11.3.3. Câu lệnh static và register
Day la lan goi ham fct lan thu 1
Day la lan goi ham fct lan thu 2
Day la lan goi ham fct lan thu 3
Day la lan goi ham fct lan thu 4
Day la lan goi ham fct lan thu 5
Day la lan goi ham fct lan thu 6
Day la lan goi ham fct lan thu 7
Day la lan goi ham fct lan thu 8
Day la lan goi ham fct lan thu 9
Day la lan goi ham fct lan thu 10
21
11.3.3. Câu lệnh static, register
• Biến register
– Thanh ghi có tốc độ truy cập nhanh hơn RAM, 
bộ nhớ ngoài
– Lưu biến trong thanh ghi sẽ tăng tốc độ thực 
hiện chương trình
– Cú pháp
register tên_biến;
– Lưu ý: số lượng biến register không nhiều và 
thường chỉ với kiểu dữ liệu nhỏ như int, char
22
Thảo luận
23

File đính kèm:

  • pdfbai_giang_tin_hoc_dai_cuong_bai_11_ham_do_ba_lam.pdf