ự
ọ
ộ
Trường Đ i h c Khoa h c T nhiên ạ ọ ệ Khoa Công ngh thông tin ọ B môn Tin h c c
ơ sở
TIN H C CỌ Ơ S AỞ
ặ
ương Đ ng Bình Ph dbphuong@fit.hcmuns.edu.vn
HÀM (FUNCTION)
1
&
VC
ộ
N i dung
BB
Khái niệm và Cú pháp
1
Tầm vực
2
Tham số và lời gọi hàm
3
Đệ quy
4
22
Tin h c cọ
ở ơ s A
Đặng Bình Phương
&
VC
ề
ặ ấ Đ t v n đ
BB
ế Vi ng trình tính S = a! + b! + c! v i a, b, c
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!
33
Tin h c cọ
ở ơ s A
Đặng Bình Phương
t ch ố ươ ậ ừ ươ là 3 s nguyên d ớ bàn phím. ng nh p t
&
VC
ề
ặ ấ Đ t v n đ
BB
ạ ệ ậ 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);
44
Tin h c cọ
ở ơ s A
Đặng Bình Phương
&
VC
ề
ặ ấ Đ t v n đ
BB
ạ ệ 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;
55
Tin h c cọ
ở ơ s A
Đặng Bình Phương
&
VC
Đ t v n
ặ ấ đề
BB
ả Gi Vi
i pháp => ạ ệ ề ầ ử ụ ầ ế 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 ớ ậ ổ
do {
printf(“Nhap mot so nguyen duong: ”); scanf(“%d”, &n);
} while (n <= 0);
ừ ổ ạ ệ Đo n l nh tính giai th a t ng quát, n = a, b, c
{ Tính s = n! = 1 * 2 * … * n } s = 1; for (i = 2; i <= n ; i++)
s = s * i;
66
Tin h c cọ
ở ơ s A
Đặng Bình Phương
&
VC
Hàm
BB
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 ệ t cho ch chuyên bi ề ầ ọ ớ i quy t m t s v n ươ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.
77
Tin h c cọ
ở ơ s A
Đặng Bình Phương
ử ụ ử ụ
&
VC
Hàm
BB
Cú pháp
([danh sách tham số])
{
[return ;]
} Trong đó
ể
char, int, long,
ấ ỳ ủ ả ề
ả ề ế
•
void.
ố
ố
ả ề
ệ
ị
•
88
Tin h c cọ
ở ơ s A
Đặng Bình Phương
&
VC
ế
Các bước vi
t hàm
BB
định các thông tin sau đây:
ệ
Đầu vào 1
Tên hàm
Đầu vào 2
Đầu ra (nếu có)
Đầu vào n
Các công việc sẽ thực hiện
99
Tin h c cọ
ở ơ s A
Đặng Bình Phương
ầ C n xác ầ 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ó). ế
&
VC
Hàm
BB
Ví d 1ụ
ấ ổ ố
ố
Tên hàm: XuatTong Công vi c: ệ tính và xu t t ng 2 s nguyên Đ u vào: ầ hai s nguyên x và y Đ u ra: ầ không có
void XuatTong(int x, int y) {
int s; s = x + y; printf(“%d cong %d bang %d”, x, y, s);
}
1010
Tin h c cọ
ở ơ s A
Đặng Bình Phương
&
VC
Hàm
BB
Ví d 2ụ
ả ề ổ ố
ị Tên hàm: TinhTong Công vi c: ệ tính và tr v t ng 2 s nguyên Đ u vào: ố ầ hai s nguyên x và y Đ u ra: ộ ố ầ m t s nguyên có giá tr x + y
int TinhTong(int x, int y) {
int s; s = x + y; return s;
}
1111
Tin h c cọ
ở ơ s A
Đặng Bình Phương
&
VC
Chương trình con Function
BB
Ví d 3ụ
ấ ổ ậ ố
không có
Tên hàm: NhapXuatTong Công vi c: ệ nh p và xu t t ng 2 s nguyên Đ u vào: ầ Đ u ra: ầ không có
void NhapXuatTong() {
int x, y; printf(“Nhap 2 so nguyen: ”); scanf(“%d%d”, &x, &y); printf(“%d cong %d bang %d”, x, y, x + y);
}
1212
Tin h c cọ
ở ơ s A
Đặng Bình Phương
&
VC
ự
ầ
T m v c
BB
Khái ni mệ ạ ả ủ ế ệ
ấ ả
• Toàn c c: ụ khai báo trong ngoài t
ộ
ụ
ể t c các hàm (k ương
ặ
ả c hàm main) và có tác d ng lên toàn b ch trình. • C c b : ụ
ặ
ộ ẽ ị
ố
ế
ộ khai báo trong hàm ho c kh i { } và ch có ỉ ố ể ả ố đó (k c ụ ả tác d ng trong b n thân hàm ho c kh i ớ ỏ ộ ụ ế kh i con nó). Bi n c c b s b xóa kh i b nh ố khi k t thúc kh i khai báo nó.
1313
Tin h c cọ
ở ơ s A
Đặng Bình Phương
Là ph m vi hi u qu c a bi n và hàm. Bi n:ế
&
VC
ự
ầ
T m v c
BB
int a;
int Ham1() {
int a1;
}
int Ham2() {
int a2; {
int a21;
}
}
void main() {
int a3;
}
1414
Tin h c cọ
ở ơ s A
Đặng Bình Phương
&
VC
M t s l
ộ ố ưu ý
BB
ầ đề
ẫ Thông thường người ta thường đặt ph n tiêu prototype) trên hàm
hàm/nguyên m u hàm ( main và ph n ầ định nghĩa hàm dưới hàm main.
void XuatTong(int x, int y);
// prototype
void main() {
…
}
void XuatTong(int x, int y) {
printf(“%d cong %d bang %d”, x, y, x + y);
}
1515
Tin h c cọ
ở ơ s A
Đặng Bình Phương
&
VC
ề
ố
Các cách truy n tham s
BB
ề
ố d ng giá tr
ở ạ ể ứ ể ằ ưng
ậ Truy n Giá tr (Call by Value) ị Truy n ề đối s cho hàm ị. Có th truy n h ng, bi n, bi u th c nh ế ề ị. hàm ch s nh n giá tr
đổi
ầ ệ ị ủ không có nhu c u thay ự ố sau khi th c hi n hàm. ỉ ẽ Được s d ng khi ử ụ giá tr c a tham s
void TruyenGiaTri(int x) {
… x++;
}
1616
Tin h c cọ
ở ơ s A
Đặng Bình Phương
&
VC
ề
ố
Các cách truy n tham s
BB
ề ị
ở ạ Truy n Đ a ch (Call by Address) ỉ Truy n ề đối s cho hàm ố d ng địa chỉ (con
tr ).ỏ
ề ố ị cho tham s này.
đổi giá tr ị
Không được truy n giá tr Được s d ng khi có ử ụ ủ c a tham s ầ nhu c u thay ệ ự ố sau khi th c hi n hàm.
void TruyenDiaChi(int *x) {
… *x++;
}
1717
Tin h c cọ
ở ơ s A
Đặng Bình Phương
&
VC
ề
ố
Các cách truy n tham s
BB
ề ế Truy n Tham chi u (Call by Reference) (
ố ở ạ C++) địa chỉ (con
tr ). Đỏ
ố d ng & trong khai báo. ị cho tham s này.
Truy n ề đối s cho hàm ược b t ắ đầu b ng ằ Không được truy n giá tr ề Được s d ng khi ử ụ đổi giá trị
ủ c a tham s ầ có nhu c u thay ệ ự ố sau khi th c hi n hàm.
void TruyenThamChieu(int &x) {
… x++;
}
1818
Tin h c cọ
ở ơ s A
Đặng Bình Phương
&
VC
ề
ố
Các cách truy n tham s
BB
Lưu ý
ể ề ố Trong m t hàm, các tham s có th truy n
ộ ề theo nhi u cách.
void HonHop(int x, int &y) {
… x++; y++;
}
1919
Tin h c cọ
ở ơ s A
Đặng Bình Phương
&
VC
ề
ố
Các cách truy n tham s
BB
Lưu ý
ộ ả ề để tr v giá
S d ng ử ụ ị tr cho ch ế tham chi u là m t cách ương trình.
int TinhTong(int x, int y) {
return x + y;
} void TinhTong(int x, int y, int &tong) {
tong = x + y;
} void TinhTongHieu(int x, int y, int &tong, int &hieu) {
tong = x + y; hieu = x – y;
2020
Tin h c cọ
ở ơ s A
Đặng Bình Phương
}
&
VC
ờ ọ
L i g i hàm
BB
ự
ờ ề đồng th i truy n các G i tên c a hàm
ọ ằ ứ ể
ặ ằ
ặ ố ị được được đặt trong c p d u
Cách th c hi n ệ đối s ố ủ ố ế (h ng, bi n, bi u th c) cho các tham s theo ứ ự đã được khai báo trong hàm. đúng th t Các bi n ho c tr này cách nhau b ng d u ấ , ế Các đối s này ấ ngo c ặ đơn ( )
2121
Tin h c cọ
ở ơ s A
Đặng Bình Phương
&
VC
ờ ọ
L i g i hàm
BB
2222
Tin h c cọ
ở ơ s A
Đặng Bình Phương
Ví dụ
&
VC
ờ ọ
L i g i ch
ương trình con
BB
2323
Tin h c cọ
ở ơ s A
Đặng Bình Phương
Ví dụ
&
VC
ệ
Đ quy
BB
ể ọ ộ Khái ni mệ M t chộ ương trình con có th g i m t ch ương
ọ
ố ầ ọ ừ trình con khác. N u ế g i chính nó ọ S l n g i này ph i có gi ự đệ quy. thì được g i là s ể ớ ạ (đi m d ng) ả i h n
Ví dụ
ấ
ẽ đi tính S(n1)
2424
Tin h c cọ
ở ơ s A
Đặng Bình Phương
ự Tính S(n) = n! = 1*2*…*(n1)*n Ta th y S(n) = S(n1)*n V y thay vì tính S(n) ta s ậ Tương t tính S(n2), …, S(2), S(1), S(0) = 1
&
VC
ệ
Đ quy
BB
Ví dụ
int GiaiThua(int n) {
if (n == 0)
return 1;
else
return GiaiThua(n – 1) * n;
} int GiaiThua(int n) {
if (n > 0)
return GiaiThua(n – 1) * n;
else
return 1;
}
2525
Tin h c cọ
ở ơ s A
Đặng Bình Phương
&
VC
ự
ậ
Bài t p th c hành
BB
5. Bài 4, 5, 6, 7, 8 trang 140141 chương 8 (Câu l nh ệ
ẽ
ự
ự ường. th hoa sang ký t ấ ương trình b c nh t. ương trình b c hai. i ph i ph
ộ đổi m t ký t ả ả ả ề ậ ậ ấ ủ ế ế ế ế ỏ ề đi u ki n và r nhánh) a. Vi b. Vi c. Vi d. Vi ệ t hàm ủ ụ t th t c gi ủ ụ t th t c gi ố ị t hàm tr v giá tr nh nh t c a 4 s
nguyên.
2626
Tin h c cọ
ở ơ s A
Đặng Bình Phương
ế ế ủ ụ ủ ụ ố ố ắ e. Vi f. Vi ị t th t c hoán v hai s nguyên. ế t th t c s p x p 4 s nguyên t ăng d n.ầ
&
VC
ự
ậ
Bài t p th c hành
BB
ậ ặ 6. Bài t p 3 trang 155 ch
ự ệ ậ ệ ương 9 (Câu l nh l p). Hàm ương n và th c hi n:
ủ ố đó.
ứ
ương. ố .
.
.
2727
Tin h c cọ
ở ơ s A
Đặng Bình Phương
ổ ổ ổ ộ ố nh n vào m t s nguyên d ả ề ố đảo c a s a. Tr v s ả ả ề ố đối x ng (Tr v True/False) b. Có ph i là s ả ố c. Có ph i là s chính ph ố ả d. Có ph i là s nguyên t ữ ố ẻ e. T ng các ch s l ữ ố f. T ng các ch s nguyên t ữ ố g. T ng các ch s chính ph ố ương.
&
VC
ự
ậ
Bài t p th c hành
BB
ậ ặ 7. Bài t p 4 trang 156 ch
ự ệ ậ ệ ương 9 (Câu l nh l p). Hàm ương n và th c hi n:
ộ ố nh n vào m t s nguyên d a. S = 1 + 2 + … + n b. S = 12 + 22 + … + n2 c. S = 1 + 1/2 + … + 1/n d. S = 1 * 2 * … * n e. S = 1! + 2! + … + n! ủ ả ề ố
2828
Tin h c cọ
ở ơ s A
Đặng Bình Phương
ầ ử ủ 7. Hàm tr v USCLN c a 2 s nguyên. 8. c a dãy Fibonacy. In ra n ph n t

