CHƯƠNG 4. HÀM CON
TRẦN MINH THÁI
Email:
Website: www.minhthai.edu.vn
1
1
Cấu trúc chương trình
Khai báo thư viện hàm
Khai báo
Khai báo hàm
CHƯƠNG TRÌNH C
Khai báo hằng số …
Cài đặt tất cả những hàm con
Cài đặt hàm
đã được khai báo
Gọi thực hiện các hàm theo
Hàm main()
yêu cầu của bài toán
2
Ví dụ
Xét chương trình nhập vào số ngun dương n, in ra màn hình các số ngun tố nhỏ
hơn n
Ví dụ:
Nhập n = 10
Kết quả in ra màn hình là: 2, 3, 5, 7
3
void main()
{
int n;
cout<<"Nhap so nguyen duong: ";
cin>>n;
cout<<"Cac so nguyen to nho hon "<
for(int so=2; so
{
int d=0;
for(int i=1; i<=so; i++)
Kiểm tra xem giá trị của so có
{
if(so%i==0)
phải là số nguyên tố?
d++;
}
if(d==2)
cout<
}
}
4
void main()
{
int n;
printf("Nhap so nguyen duong: ");
scanf("%d", &n);
printf("Cac so nguyen to nho hon %d la:\n", n);
for (int so = 2; so < n; so++)
{
int d = 0;
for (int i = 1; i <= so; i++)
{
if (so%i == 0)
d++;
Kiểm tra xem giá trị của so
có phải là số nguyên tố?
}
if (d == 2)
printf("%d\t", so);
}
}
5
void main()
{
int n;
cout<<"Cac
nguyen dương
to nho hon
Nhập sốsonguyên
n "<
//printf(“Cac so nguyen to nho hon %d la:\n”);
for(int so=2; so
{
}
}
Kiểm tra xem so có phải là số ngun tố khơng? Nếu là số nguyên tố thì in
so ra màn hình
6
void NhapSoNguyen(int &n)
{
cout<<"Nhap so nguyen duong: ";
cin>>n;
}
Tham số
bool LaSNT(int k)
{
int d=0;
for(int i=1; i<=k; i++)
{
if(k%i==0)
d++;
}
return d==2;
}
7
void main()
{
int n;
Gọi hàm
NhapSoNguyen(n);
Truyền đối số
cout<<"Cac so nguyen to nho hon "<
for(int so=2; so
{
if(LaSNT(so)==true)
cout<
Gọi hàm
Truyền đối số
}
}
8
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 và
trả về kết quả cho chương trình gọi nó.
Khi nào sử dụng hàm?
• 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 nhỏ chương trình để dễ quản lý.
9
9
Mẫu hàm
<KDL trả về của hàm> TênHàm([ds tham số]);
Kiểu dữ liệu trả về của hàm (kết quả của hàm/ đầu ra), gồm:
• void: Khơng trả về giá trị
• float / int / long / char */ kiểu cấu trúc / … : Trả về kết quả tính được với KDL tương ứng
10
• TênHàm: Đặt tên theo qui ước sao cho phản ánh đúng chức năng thực hiện của hàm
• Danh sách các tham số (nếu có): đầu vào của hàm (trong một số trường hợp có thể là
đầu vào và đầu ra của hàm nếu kết quả đầu ra có nhiều giá trị - Tham số này gọi là
tham chiếu)
11
Hàm không trả về giá trị
Cài đặt
void TênHà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.
}
Gọi hàm
TênHàm(danh sách tên các đối số);
Những phương thức loại này thường rơi vào những nhóm chức năng: Nhập / xuất dữ liệu , thống kê,
sắp xếp, liệt kê
12
Ví dụ
Viết chương trình nhập số ngun dương n và in ra màn hình các ước số của n
Phân tích bài tốn:
•
Input: n (Để xác định tham số)
KDL: số ngun dương (int).
•
Output: In ra các ước số của n (Để xác định KDL trả về của hàm)
Xuất ra màn hình Không trả về giá trị KDL của hàm là void .
•
Xác định tên hàm: Hàm này dùng in ra các ước số của n nên có thể đặt là LietKeUocSo
void LietKeUocSo(int n);
13
#include <iostream.h>
void LietKeUocSo(int n);
void LietKeUocSo(int n)
Có dấu chấm phẩy
Khơng dấu chấm phẩy
{
for (int i = 1; i <= n; i++)
{
if (n % i == 0)
cout<
}
}
void main()
{
int n;
cout<<"Nhap so nguyen duong n: ";
cin>>n;
cout<<"Cac uoc so cua “<
14
Hàm có trả về giá trị
Cài đặt
<Kiểu dữ liệu trả về> TênHàm([danh sách các tham số])
{
<Kiểu dữ liệu trả về> 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;
}
Gọi hàm
<Kiểu dữ liệu trả về của hàm> Tên biến = TênHàm (danh sách tên các đối số);
Những hàm này thường rơi vào các nhóm: Tính tổng, tích, trung bình, đếm, kiểm tra, tìm
kiếm
15
Ví dụ
Viết chương trình nhập số ngun dương n và tính tởng
Sn = 1 + 2 + 3 + + n
;n > 0
Phân tích bài tốn:
Input: n (Để xác định tham số)
KDL: số nguyên dương (int).
Output: Tổng S (Để xác định KDL phương thức)
Trả về giá trị của S.
S là tổng các số nguyên dương nên S cũng là số nguyên dương KDL trả về của hàm là
int (hoặc long).
TênHàm: Dùng tính tởng S nên có thể đặt là TongS
int TongS(int n);
16
#include <iostream.h>
int TongS(int n);
int TongS(int n)
{
int kq = 0;
for (int i = 1; i <= n; i++)
kq + = i;
return kq;
}
void main()
{
int n, S;
cout<<"Nhap vao so nguyen n: ";
cin>>n;
S = TongS(n);
cout<<"Tong tu 1 den n: " <
}
17
Tầm vực của biến
• Phạm vi khối
• Phạm vi hàm
• Phạm vi tập tin
• Phạm vi chương trình
18
Phạm vi khối
• Mợt khối được giới hạn bởi ngoặc {}.
• Biến khai báo trong khối đó có phạm vi khối, nghĩa là nó chỉ hoạt động trong khối
đó mà thơi. Phạm vi này cịn gọi là cục bợ, và biến đưọc gọi là biến cục bộ.
19
Phạm vi khối (tt)
void main()
{
int i=20;
{
int i=10;
cout<<"Gia tri i ben trong khoi: "<
}
cout<<"Gia tri i ben ngoai khoi: "<
}
Kết quả
Gia tri i ben trong khoi: 10
Gia tri i ben ngoai khoi: 20
20
Phạm vi hàm
Hoạt động từ đầu đến cuối một hàm, chỉ có tác dụng trong hàm
void main()
{
int k;
float m;
double x;
//Các lệnh khác
//…
}
21
Phạm vi tập tin
Biến được khai báo toàn cục và có kèm từ khóa static
int x = 0;
static int y = 0;
static float z = 0.0;
void main()
{
int i;
//Các lệnh
.
.
}
22
Phạm vi chương trình
int a, b;
void Nhap()
{
• Được khai báo bên ngồi các hàm – cịn
được gọi là biến tồn cục
• Khơng
nên khai báo sử dụng nhiều nếu
cout<<"Nhap a: ";
cin>>a;
cout<<"Nhap b: ";
cin>>b;
}
khơng thực sự cần thiết, vì nó sẽ gây trở ngại
void main()
cho q trình dị tìm lỗi khi debug chương
{
trình
int c;
Nhap();
c=a+b;
cout<<"Tong = "<
}
23
Tham số là tham chiếu
• Tham số làm kết quả đầu ra
• Tham số vừa làm đầu vào và đầu ra
• Dùng dấu & phía trước tên tham số khi cài đặt hàm
24
Ví dụ
Xét chương trình hốn vị 2 số ngun a, b cho trước
Viết chương trình với 2 trường hợp
• Trường hợp khơng dùng tham chiếu
• Trường hợp dùng tham chiếu
25