Hàm trong C
Trang 1LẬP TRÌNH C++
§7 Hàm (function)
Trang 2I Khai báo và sử dụng hàm
1 Khái niệm
Hàm là một đoạn chương trình độc lập thực hiện trọn vẹn một công việc nhất định sau đó trả về giá trị cho chương trình gọi nó, hay nói cách khác hàm là sự chia nhỏ của chương trình
Khi có một công việc giống nhau cần thực hiện ở nhiều vị trí
Khi cần chia một chương trình lớn phức tạp thành các đơn thể nhỏ (hàm con) để chương trình được trong sáng, dễ hiểu trong việc xử lý, quản lý việc tính toán và giải quyết vấn đề
Trang 32 Khai báo hàm
<Kiểu_dữ_liệu_của_hàm> Tên hàm ([các_tham_số]);
Ví dụ :
Khai báo hàm không định kiểu :
void Tên_hàm ([danh sách các tham số])
{
Khai báo các biến cục bộ;
Các câu lệnh / khối lệnh hay lời gọi đến hàm khác;
}
Khai báo hàm có định kiểu dữ liệu:
<Kiểu dữ liệu> Tên_hàm ([danh sách các tham số])
{
<Kiểu dữ liệu> kq;
Khai báo các biến cục bộ;
Các câu lệnh / khối lệnh hay lời gọi đến hàm khác;
return kq;
}
Trang 43 Bài tập :
1 Đọc vào số tự nhiên n, tính n!=1*2*3*…*n
2 Đọc vào số thực a và số tự nhiên n, tinh an
3 Giải hệ phương trình :
4 Tính :
5 Đọc vào 3 số thực a, b, c (a có thể bằng 0)
Giải phương trình :
= +
= +
2 2
2
1 1
1
c y
b x
a
c y
b x
a
k n
k
0
ax
Trang 5II Tính đệ quy của hàm
1 Khái niệm :
lại ngay chính nó, tính chất này được gọi là tính
đệ qui của hàm
2 Bài tập :
Tính an
a1=a2=1; an=an-1+an-2 với n>2
5 Bài toán chuyển tháp (bài toán tháp Hà Nội)
Trang 6III Thạm trị và tham biến
Giả sử ta khai báo hàm sau :
void timUCBC(long a,long b, long &s, long &d)
Thì a và b được gọi là tham trị, s và d được gọi là tham biến
số, còn tham biến thì bắt buộc phải gọi bằng biến số
Khi ra khỏi hàm, giá trị của tham biến ở hàm thế nào thì ở chương trình chính cũng thế, con tham trị khi ra khỏi hàm nó lại trở về giá trị ban đầu mặt
dù trong hàm nó có thể bị thay đổi
Trang 7Ví dụ: Tìm UCLN và BCNN của 2 số nguyên a và b
#include <iostream.h>
//Hàm số tìm UCLN và BCNN
void timUCBC(long a,long b, long &s, long &d)
{
s=a*b;
while (a!=b)
if (a>b) a=a-b;
else b=b-a;
d=a;
s=s/a;
}
Trang 8// Chương trình chính :
void main()
{
long a,b,s,d;
cout<<"Cho a va b: "; cin>>a>>b;
timUCBC(a,b,s,d);
cout<<“a="<<a<<endl;
cout<<“b="<<b<<endl;
cout<<"UCLN="<<d<<endl;
cout<<"BCNN="<<s<<endl;
}
Trang 9Cách 2: a,b bị thay đổi
#include <iostream.h>
//Hàm số tìm UCLN và BCNN
void timUCBC(long &a,long &b, long &s, long &d) {
s=a*b;
while (a!=b)
if (a>b) a=a-b;
else b=b-a;
d=a;
s=s/a;
}
Trang 10// Chương trình chính :
void main()
{
long a,b,s,d;
cout<<"Cho a va b: "; cin>>a>>b;
timUCBC(a,b,s,d);
cout<<“a="<<a<<endl;
cout<<“b="<<b<<endl;
cout<<"UCLN="<<d<<endl;
cout<<"BCNN="<<s<<endl;
}
Trang 11IV Biến toàn cục và biến địa phương
Biến toàn cục là biến khai báo ở đầu chương trình ngay sau các câu lệnh #include< >, biến địa
phương là biến khai báo ở hàm con
Biến toàn cục có thể sử dụng trong toàn bộ
chương trình (cả chương trình chính và hàm con) còn biến địa phương khai báo ở hàm nào thì chỉ
sử dụng cho hàm đó
Tên biến địa phương có thể trùng với tên biến
toàn cục và ở hàm con biến đó có thể bị thay đổi giá trị nhưng khi về chương trình chính nó lại trở
về giá trị ban đầu
Trang 12Ví dụ: Tìm UCLN và BCNN của 2 số nguyên a và b
#include <iostream.h>
//Hàm số tìm UCLN và BCNN
void timUCBC(long a,long b) //Biến địa phương a,b {
s=a*b;
while (a!=b)
if (a>b) a=a-b;
else b=b-a;
d=a;
s=s/a;
}
Trang 13// Chương trình chính :
void main()
{
cout<<"Cho a va b: "; cin>>a>>b;
timUCBC(a,b);
cout<<“a="<<a<<endl;
cout<<“b="<<b<<endl;
cout<<"UCLN="<<d<<endl;
cout<<"BCNN="<<s<<endl;
}
Trang 14Cách 2: a,b bị thay đổi
#include <iostream.h>
//Hàm số tìm UCLN và BCNN
void timUCBC()
{
s=a*b;
while (a!=b)
if (a>b) a=a-b;
else b=b-a;
d=a;
s=s/a;
}
Trang 15// Chương trình chính :
void main()
{
cout<<"Cho a va b: "; cin>>a>>b;
timUCBC();
cout<<“a="<<a<<endl;
cout<<“b="<<b<<endl;
cout<<"UCLN="<<d<<endl;
cout<<"BCNN="<<s<<endl;
}