Bài giảng Tin học đại cương - Bài 11: Hàm - Đỗ Bá Lâm
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
23 trang |
Chia sẻ: huongthu9 | Lượt xem: 538 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Bài giảng Tin học đại cương - Bài 11: Hàm - Đỗ Bá Lâm, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
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
Các file đính kèm theo tài liệu này:
- bai_giang_tin_hoc_dai_cuong_bai_11_ham_do_ba_lam.pdf