Nội dung
Khái niệm hàm
1
Cách xây dựng hàm
2
Cách thức gọi hàm
3
Nguyên tắc hoạt động hàm
4
Đệ quy
5
Đặt vấn đề
Viết chương trình tính S = a! + b! + c! với
a, b, c là 3 số nguyên dương nhập từ bàn
phím.
Chương trình
chính
Nhập
a, b, c > 0
Tính
S = a! + b! + c!
Xuất
kết quả S
Nhập
a > 0
Nhập
b > 0
Nhập
c > 0
Tính
s1=a!
Tính
s2=b!
Tính
s3=c!
Đặt vấn đề
3 đoạn lệnh nhập a, b, c > 0
do {
printf(“Nhap mot so nguyen duong: ”);
scanf(“%d”, &a);
} while (a <= 0);
do {
printf(“Nhap mot so nguyen duong: ”);
scanf(“%d”, &b);
} while (b <= 0);
do {
printf(“Nhap mot so nguyen duong: ”);
scanf(“%d”, &c);
} while (c <= 0);
Đặt vấn đề
3 đoạn lệnh tính s1 = a!, s2 = b!, s3 = c!
{ Tính s1 = a! = 1 * 2 * … * a }
s1 = 1;
for (i = 2; i <= a ; i++)
s1 = s1 * i;
{ Tính s2 = b! = 1 * 2 * … * b }
s2 = 1;
for (i = 2; i <= b ; i++)
s2 = s2 * i;
{ Tính s3 = c! = 1 * 2 * … * c }
s3 = 1;
for (i = 2; i <= c ; i++)
s3 = s3 * i;
Đặt vấn đề
Giải pháp => Viết 1 lần và sử dụng nhiều lần
Đoạn lệnh nhập tổng quát, với n = a, b, c
Đoạn lệnh tính giai thừa tổng quát, n = a, b, c
do {
printf(“Nhap mot so nguyen duong: ”);
scanf(“%d”, &n);
} while (n <= 0);
{ Tính s = n! = 1 * 2 * … * n }
s = 1;
for (i = 2; i <= n ; i++)
s = s * i;
Khái niệm Hàm
Khái niệm
Một đoạn chương trình có tên, đầu vào và
đầu ra.
Có chức năng giải quyết một số vấn đề
chuyên biệt cho chương trình chính.
Được gọi nhiều lần với các tham số khác
nhau.
Được sử dụng khi có nhu cầu:
• Tái sử dụng.
• Sửa lỗi và cải tiến.
< Kiểu dữ liệu của hàm > Tên hàm ([<kiểu tham số>
<tham số>][,<kiểu tham số><tham số>][…])
{
[Khai báo biến cục bộ và các câu lệnh thực hiện
hàm]
[return [<Biểu thức>];]
}
Cú pháp
Khái niệm Hàm
Kiểu dữ liệu của hàm: Là kiểu dữ liệu của kết
quả trả về, có thể là: int, byte, char, float, void…
Tham số: là dữ liệu đầu vào của hàm.
Kiểu tham số: Là kiểu dữ liệu của tham số.
Sử dụng câu lệnh return để trả về kết quả cho
hàm (nếu hàm có trả về giá trị)
Khái niệm Hàm
Cách xây dựng một hàm
Cần xác định các thông tin sau đây:
Tên hàm.
Hàm sẽ thực hiện công việc gì.
Các đầu vào (nếu có).
Đầu ra (nếu có).
Thuật toán
Tên hàm
Đầu vào 1
Đầu vào 2
Đầu vào n
Đầu ra (nếu có)
Các công việc
sẽ thực hiện
Ví dụ 1: Viết hàm tính tổng 2 số nguyên a,b
Tên hàm: TinhTong
Công việc: tính tổng 2 số nguyên
Đầu vào: hai số nguyên a và b
Đầu ra: tổng của 2 số (int)
Thuật toán:
• Tổng=a+b
Cách xây dựng một hàm
Ví dụ 1: Viết hàm tính tổng 2 số nguyên a,b
int TinhTong(int a, int b)
{
int kq;
kq= a+b;
return kq;
}
Tên hàm
Danh sách tham số hình
thức
Trả về kết quả cho hàm
Kiểu của kết quả trả về
Cách xây dựng một hàm
Ví dụ 2. Viết hàm tìm giá trị lớn nhất của 2 số
nguyên a,b
Tên hàm: TimGTLN
Công việc: tìm giá trị lớn nhất của 2 số nguyên a,b
Đầu vào: hai số nguyên a và b
Đầu ra: giá trị lớn nhất của 2 số a,b (kiểu trả về:
int)
Cách xây dựng một hàm
int TimGTLN(int a,int b)
{
int max;
if(a>=b) max=a;
else max=b;
return max;
}
Cách xây dựng một hàm
Thuật toán:
Nếu a> b thì max là a, ngược lại thì max là b.
Ví dụ 3. Viết hàm xuất n chữ hello
Tên hàm: Xuatloichao
Công việc: Xuất n chữ Hello
Đầu vào: số nguyên dương n (int)
Đầu ra: Không có giá trị trả về ( kiểu dữ liệu
của hàm là void)
Cách xây dựng một hàm
Thuật toán
Dùng vòng lặp for để xuất n câu Hello
void Xuatloichao(int n)
{
for(int i=1;i<=n;i++)
printf("Hello\n");
}
Cách xây dựng một hàm
Cách thức gọi hàm
Gọi tên của hàm đồng thời truyền các tham số
thực (hằng, biến, biểu thức) cho các tham số
hình thức theo đúng thứ tự đã được khai báo
trong hàm.
Các biến hoặc trị này cách nhau bằng dấu ,
Các tham số này được được đặt trong cặp dấu
ngoặc đơn ( )
<Tên hàm> (<Tham số thực 1>,… , <Tham số thực n>)
Cú pháp
Ví dụ 4: Định nghĩa hàm tính hiệu 2 số nguyên
int Tinhhieu (int a, int b)
{
return a-b;
}
Khi có nhu cầu tính hiệu 2 số nguyên m,n (m-n)
thì gọi hàm như sau:
int kq= Tinhhieu(m,n);
a,b là tham số hình thức
m,n là tham số thực
Cách thức gọi hàm
- Kiểu dữ liệu của các tham số thực phải cùng
kiểu với các tham số hình thức.
- Số lượng và thứ tự của các tham số thực
phải giống như của các tham số hình thức.
Cách thức gọi hàm
int Tinhhieu (int a, int b)
{
return a-b;
}
int kq= Tinhhieu(n,m);
Để tính hiệu n-m. Gọi hàm Tinhhieu:
Ví dụ 5: Ta có định nghĩa hàm tính lũy thừa x
y
long luythua(int x, int y)
{
long kq=1;
for(int i = 1; i <= y; i++)
kq=kq*x;
return kq;
}
Cần tính tổng: a
b
+ b
a
(với a,b là số nguyên)
long kq= luythua(a,b)+luythua(b,a);
Cách thức gọi hàm
Ví dụ 6: Định nghĩa hàm xuất n dòng chữ Hello
void Xuat_Hello(int n)
{
for (int i=1;i<=n;i++)
printf("Hello\n");
}
Cần xuất 100 dòng chữ hello
Xuat_Hello(100);
Cách thức gọi hàm
− Các tham số sẽ được gán giá trị thực tương
ứng (TH. Hàm có tham số)
− Thực hiện các câu lệnh trong thân hàm
− Khi gặp lệnh return hoặc dấu } cuối cùng trong
thân hàm 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.
Nguyên tắc hoạt động của hàm
Nguyên tắc hoạt động của hàm
//Phần định nghĩa hàm
void Xuat_loichao()
{
printf("\nXin chao\n");
}
void Xuat_sao()
{
printf("****************");
}
Nguyên tắc hoạt động của hàm
#include "stdio.h"
#include "conio.h"
void Xuat_loichao();
void Xuat_sao();
void main()
{
int n;
Xuat_sao();
Xuat_loichao();
Xuat_sao();
}
Các cách truyền tham số
Truyền tham số bằng
tham trị
Truyền tham số bằng
tham biến
−Được sử dụng khi không có
nhu cầu thay đổi giá trị của
tham số sau khi thực hiện
hàm.
Ví dụ
−Hàm tính diện tích hình chữ
nhật (chiều dài, chiều rộng là
tham số)
−Hàm tính tổng 2 số nguyên
a,b (với a,b là tham số)
−Hàm tính tiền lương (với
ngày công,đơn giá là tham
số
)
− Được sử dụng khi có nhu
cầu thay đổi giá trị của tham
số sau khi thực hiện hàm.
Ví dụ
−Hàm hoán vị 2 số a,b (với a,b
là tham số)
−Hàm nhập số nguyên dương
n (với n là tham số)