Tin học đại cương - Phần 2: Lập trình bằng ngôn ngữ C - Bài 5: Hàm (function)
Khai báo và sử dụng hàm
5.3. Phạm vi biến
5.4. Nguyên mẫu hàm
Nội dung tài liệu Tin học đại cương - Phần 2: Lập trình bằng ngôn ngữ C - Bài 5: Hàm (function), để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
11
PHẦN 2: LẬP TRÌNH BẰNG NGÔN NGỮ C
BÀI 5: HÀM (FUNCTION)
Nguyễn Hữu Nam Dương
Email: duongnnhn-fit@mail.hut.edu.vn
TIN HỌC ĐẠI CƯƠNG
2
BÀI 5: HÀM (FUNTION)
5.1. Giới thiệu về hàm (function)
5.2. Khai báo và sử dụng hàm
5.3. Phạm vi biến
5.4. Nguyên mẫu hàm
23
5.1. Giới thiệu về hàm
Một trong những tư tưởng chính của lập
trình cấu trúc:
Chia nhỏ một chương trình thành các chương
trình con đảm nhận những công việc nhỏ.
Viết thành hàm (function) để khi cần chỉ cần
gọi ra chứ không phải viết lại toàn bộ.
Ví dụ:
Các hàm toán học: sin(x), pow(x,y), sqrt(x),...
Các hàm do người dùng viết ra.
4
Giới thiệu về hàm(tiếp)
Đầu vào của hàm:
Các tham số
Hàm có thể có nhận vào các tham số đầu
vào hoặc không.
Đầu ra của hàm:
Giá trị của hàm
Sự thay đổi giá trị của các tham số.
Hàm có thể trả về giá trị hoặc không trả về
giá trị
35
BÀI 5: HÀM
5.1. Giới thiệu về hàm (function)
5.2. Khai báo và sử dụng hàm
5.3. Phạm vi biến
5.4. Nguyên mẫu hàm
6
5.2.1. Khai báo hàm (tiếp)
Tên hàm
Có thể là bất kì một định danh hợp
lệ nào.
Thường mang nghĩa gợi ý chức
năng công việc mà hàm thực hiện.
Các hàm không được đặt tên trùng
nhau.
47
5.2.1. Khai báo hàm (tiếp)
Kiểu dữ liệu trả về của hàm:
Kiểu dữ liệu của giá trị tính toán mà
hàm trả về sau khi thực hiện.
Hàm có thể có giá trị trả về hoặc không
có giá trị trả về.
Nếu có giá trị trả về, trong thân hàm có ít
nhất một lệnh return.
Nếu không có giá trị trả về cần khai báo
cho hàm đó có kiểu trả về là void.
8
5.2.1. Khai báo hàm (tiếp)
Tham số của hàm:
Tham số chứa dữ liệu vào cung cấp
cho hàm. (đầu vào)
Tham số chứa dữ liệu ra mà hàm
tính toán được.
Một hàm có thể không có tham số,
hoặc có nhiều tham số.
59
5.2.1. Khai báo hàm
Cách khai báo và sử dụng
Cách 1:
Khai báo hàm
Viết mã lệnh hoàn chỉnh cho hàm.
Sử dụng hàm.
10
5.2.1. Khai báo hàm
Cách 2:
Khai báo hàm nguyên mẫu
Sử dụng các hàm đã khai báo
Viết mã lệnh hoàn chỉnh cho các
hàm nguyên mẫu đã khai báo.
611
5.2.1. Khai báo hàm
Cách 1:
Cú pháp:
kieu_gia_tri_tra_ve
ten_ham(danh_sach_tham_so)
{
//Than ham` bao gồm:
//Các khai bao biến
...
//Các câu lệnh
}
12
5.2.1. Khai báo hàm (tiếp)
Ví dụ:
int giai_thua(int a)
{
int ket_qua;
int i;
ket_qua = 1;
for(i = 1;i<a;i++)
ket_qua = ket_qua * i;
if(a < 0) ket_qua = -1;
if(a == 0) ket_qua = 1;
return ket_qua;
}
Dong dau ham
Cac khai bao
Cac cau lenh
713
Ví dụ
#include
#include
int max(int x, int y, int z)
{
int max1;
max1 = x>y?x:y;
max1 = max1>z?max1:z;
return max1;// max(x,y,z) = max1;
}
14
void main()
{
int a,b,c; clrscr();
printf("\n Nhap gia tri cho 3 so nguyen a,
b, c: ");
scanf("%d %d %d",&a,&b,&c);
printf("\n Gia tri cac so vua nhap: ");
printf(" a = %-5d b = %-5d c = %-5d");
printf("\n Gia tri lon nhat trong 3 so la
%d",max(a,b,c));
getch();
}
815
5.2.1. Khai báo hàm (tiếp)
Lệnh return
Cú pháp:
return bieu_thuc;
Khi gặp lệnh này, chương trình sẽ tính toán
giá trị của bieu_thuc, lấy kết quả tính toán
được làm giá trị trả về cho lời gọi hàm rồi kết
thúc việc thực hiện hàm, trở về chương trình
đã gọi nó.
Nếu thiếu bieu_thuc Kết thúc việc thực
hiện hàm mà không trả về giá trị nào cả.
16
5.2.2. Sử dụng hàm
Sử dụng hàm hay gọi hàm Cú pháp:
Ten_ham([danh_sach_tham_so])
Tham số được cung cấp cho hàm trong
quá trình thực hiện được gọi là tham số
thực.
Kiểu dữ liệu của tham số hình thức và
tham số thực phải giống nhau.
917
Quá trình thực hiện một hàm
Khi hàm được gọi, quá trình diễn ra như sau:
Nếu hàm có tham số, trước tiên các tham số sẽ được
gán giá trị thực tương ứng.
Chương trình sẽ thực hiện tiếp các câu lệnh trong
thân hàm bắt đầu từ lệnh đầu tiên đến câu lệnh cuối
cùng.
Khi gặp lệnh return hoặc dấu } cuối cùng trong
thân hàm, chương trình sẽ thoát khỏi hàm để trở về
chương trình gọi nó và thực hiện tiếp tục những câu
lệnh của chương trình này.
18
BÀI 5: HÀM
5.1. Khái niệm hàm
5.2. Khai báo và sử dụng hàm
5.3. Phạm vi biến
5.4. Nguyên mẫu hàm
10
19
5.3. Phạm vi biến
Biến địa phương (Local Variable):
Là các biến được khai báo trong lệnh khối
hoặc trong thân chương trình con.
Biến toàn cục (Global Variable):
Vị trí khai báo của biến toàn cục là sau phần
khai báo tệp tiêu đề và khai báo hàm nguyên
mẫu
20
5.3. Phạm vi biến (tiếp)
Ví dụ 1:
#include
void main()
{
{ int a = 1;
printf(“\n a1 = %d”,a);
{ int a = 2;
printf(“\n a2 = %d”,a);
}
printf(“\n a3 = %d”,a);
}
{ int a = 3;
printf(“\n a4 = %d”,a);
}
}
11
21
Ví dụ 2
#include
#include
int a, b, c;
int tich()
{
printf("\n Gia tri cac bien tong the
a, b, c: ");
printf(" a = %-5d b = %-5d c = %-
5d“,a,b,c);
return a*b*c;
}
22
void main()
{
clrscr();
printf("\n Nhap gia tri cho 3
so nguyen a, b, c: ");
scanf("%d %d %d",&a,&b,&c);
printf("\n Tich cua 3 so la
%d",tich());
getch();
}
12
23
24
Biến register
Thanh ghi có tốc độ truy nhập nhanh hơn so với các loại
bộ nhớ khác (RAM, bộ nhớ ngoài).
Nếu một biến thường xuyên sử dụng được lưu vào trong
thanh ghi thì tốc độ thực hiện của chương trình sẽ được
tăng lên.
Để làm điều này ta đặt từ khóa register trước khai
báo của biến đó.
Ví dụ: register int a;
Số lượng và kích thước các thanh ghi có hạn Số
lượng biến khai báo register sẽ không nhiều và
thường chỉ áp dụng với những biến có kích thước nhỏ
như kiểu char, int.
13
25
Biến static
Một biến cục bộ khi ra khỏi phạm vi của biến đó
thì bộ nhớ dành để lưu trữ biến đó sẽ được giải
phóng.
Nếu cần lưu giá trị của các biến cục bộ này, cần
khai báo biến với từ khóa static.
Ví dụ: static int a;
Biến static là biến tĩnh, nghĩa là nó sẽ được
cấp phát một vùng nhớ thường xuyên từ lúc khai
báo và chỉ giải phóng khi chương trình chính kết
thúc.
26
Ví dụ
# include
# include
void fct()
{
static int count = 1;
printf("\n Day la lan goi ham fct lan thu%2d", count++);
}
void main()
{
int i;
for(i = 0; i < 10; i++)
fct();
getch();
}
14
27
BÀI 5: HÀM
5.1. Khái niệm hàm
5.2. Khai báo và sử dụng hàm
5.3. Phạm vi biến
5.4. Nguyên mẫu hàm
28
Nguyên mẫu hàm – Ví dụ
#include
#include
int max(int, int, int);
// khai bao nguyen mau ham
void main()
{
int a,b,c;
clrscr();
printf("\n Nhap gia tri cho 3 so nguyen a, b, c: ");
scanf("%d %d %d",&a,&b,&c);
printf("\n Gia tri cac so vua nhap: ");
printf(" a = %-5d b = %-5d c = %-5d");
printf("\n Gia tri lon nhat trong 3 so la %d",max(a,b,c));
getch();
}
15
29
int max(int x, int y, int z)
{
int max;
max = x>y?x:y;
max = max>z?max:z;
return max;
}
30
Nguyên mẫu hàm
Nếu muốn đặt phần khai báo hàm nằm sau hàm
main() Cần khai báo nguyên mẫu của hàm
Để báo cho chương trình dịch biết có một hàm có
dòng đầu hàm giống như trong phần nguyên mẫu này.
Chương trình dịch có thể kiểm tra được là các lời gọi
hàm trong chương trình chính có đúng hay không
Có phù hợp về kiểu dữ liệu trả về hay không
Các tham số thực có kiểu dữ liệu có phù hợp với kiểu dữ liệu
đã khai báo hay không.
Trong hàm nguyên mẫu có thể không cần nêu
tên các tham số hình thức, nhưng trong phần
khai báo hàm ta cần phải có các tham số hình
thức.
16
31
Câu hỏi?
Các file đính kèm theo tài liệu này:
- hdc_phan2_bai_5_9959.pdf