Tài liệu Kỹ thuật lập trình - Chương 3: Hàm và thư viện - Pdf 97

© 2004, HOÀNG MINH SƠN
Chươn
g
1
Kỹ thuật lập trình
Phần II: Lập trình có cấu trúc
0101010101010101100001
0101010101010101100001
0101010101010101100001
0101010100101010100101
0101010100101010100101
0101010100101010100101
1010011000110010010010
1010011000110010010010
1010011000110010010010
1100101100100010000010
1100101100100010000010
1100101100100010000010
0101010101010101100001
0101010101010101100001
0101010101010101100001
0101010100101010100101
0101010100101010100101
0101010100101010100101
1010011000110010010010
1010011000110010010010
1010011000110010010010
1100101100100010000010
1100101100100010000010
1100101100100010000010
0101010101010101100001

3.6 Làm việcvớitệptin sử dụng thư việnC++
3.7 Nạpchồng tên hàm C++
3.8 Hàm inline trong C++
3
© 2004, HOÀNG MINH SƠN
Chương 3: Hàm và thư viện
3.1 Hàm và lậptrìnhhướng hàm
Lậptrìnhcócấutrúccóthể dựatrênmộttronghaiphương pháp:
 Lậptrìnhhướng hàm (
function-oriented
), còn gọilàhướng nhiệm
vụ (
task-oriented
), hướng thủ tục(
procedure-oriented
)
 Lậptrìnhhướng dữ liệu(
data-oriented
)
Nhiệmvụ
NV 1
NV 2
NV 3
NV 1a NV 1b
NV 2a NV 2b
NV 2c
NV 3
DL 1
DL 2
DL 3

z Yêu cầungườisử dụng nhập
z Nhậpsố vào mộtbiến
—Nhậpsố nguyên thứ hai
z Yêu cầungườisử dụng nhập
z Nhậpsố vào mộtbiến
—Tínhtổng vớivònglặp
—Hiểnthị kếtquả ra màn hình
6
© 2004, HOÀNG MINH SƠN
Chương 3: Hàm và thư viện
Phương án 4 trong 1
#include <iostream.h>
void main() {
int a, b;
char c;
do {
cout << "Enter the first integer number: ";
cin >> a;
cout << "Enter the second integer number: ";
cin >> b;
int Total = 0;
for (int i = a; i <= b; ++i)
Total += i;
cout << "The sum from " << a << " to " << b
<< " is " << Total << endl;
cout << "Do you want to continue? (Y/N):";
cin >> c;
} while (c == 'y' || c == 'Y');
}
7

for (int i = a; i <= b; ++i)
Total += i;
return Total;
}
void WriteResult(int a, int b, int kq) {
cout << "The sum from " << a << " to " << b
<< " is " << kq << endl;
}
Không có tham số,
Giá trị sử dụng lại?
OK,
Không thể tốthơn!
Quá nhiềuthamsố,
Hiệunăng?
9
© 2004, HOÀNG MINH SƠN
Chương 3: Hàm và thư viện
Phương án phân hoạch hàm (1)
 Chương trình dễ₫ọchơn => dễ phát hiệnlỗi
 Chương trình dễ mở rộng hơn
 HàmSumIntcóthể sử dụng lạitốt
 Mã nguồndàihơn
 Mã chạylớnhơn
 Chạychậmhơn
 Không phảicứ phân hoạch thành nhiềuhàmlàtốt,
mà vấn ₫ề nằm ở cách phân hoạch và thiếtkế hàm
làm sao cho tối ưu!
10
© 2004, HOÀNG MINH SƠN
Chương 3: Hàm và thư viện

}
OK,
Đãtốthơn!
12
© 2004, HOÀNG MINH SƠN
Chương 3: Hàm và thư viện
3.2 Khai báo và ₫ịnh nghĩahàm
 Định nghĩahàm: tạomãthựcthihàm
int SumInt(int a, int b) {
int Total = 0;
for (int i = a; i <= b; ++i)
Total += i;
return Total;
}
 Khai báo hàm thuần túy: không tạomãhàm
int SumInt(int a, int b);
 Tại sao và khi nào cần khai báo hàm?
Tên hàm Kiểuthambiến
Kiểutrả về
Tên hàm Tham biến (hình thức)Kiểutrả về
13
© 2004, HOÀNG MINH SƠN
Chương 3: Hàm và thư viện
Khai báo hàm và lờigọihàm
 Ý nghĩacủa khai báo hàm:
—Khicầnsử dụng hàm (gọihàm)
—Trìnhbiêndịch cầnlờikhaibáohàm₫ể kiểmtralờigọihàm
₫úng hay sai về cú pháp, về số lượng các tham số, kiểucác
tham số và cách sử dụng giá trị trả về.
int SumInt(int a, int b);

Định nghĩahàmở₫âu?
 Ở phạm vi toàn cục(ngoàibấtcứ hàm nào)
 Có thể₫ịnh nghĩa trong cùng tệptin vớimãchương trình chính,
hoặctáchramộttệp tin riêng. Trong Visual C++:
*.c => C compiler,
*.cpp => C++ compiler
 Mộthàm₫ãcólờigọithìphải ₫ược ₫ịnh nghĩa chính xác 1 lần
trong toàn bộ (dự án) chương trình, trướckhigọitrìnhliênkết
(lệnh Build trong Visual C++)
 Đưatệptin mãnguồnvàodự án, không nên:
#include “xxx.cpp”
 Mộthàmcó₫ược ₫ịnh nghĩabằng C, C++, hợpngữ hoặcbằng
mộtngônngữ khác và dùng trong C/C++ => Sử dụng hàm
không cầnmãnguồn!
 Mộtthư viện cho C/C++ bao gồm:
— Header file (thường ₫uôi *.h, *.hxx, , nhưng không bắtbuộc)
—Tệptin mãnguồn(*.c, *.cpp, *.cxx, ) hoặcmã₫ích
(*.obj, *.o, *.lib, *.dll, )
16
© 2004, HOÀNG MINH SƠN
Chương 3: Hàm và thư viện
3.3 Truyềnthamsố và trả về kếtquả
 Truyềnthamsố và trả về kếtquả là phương pháp cơ bản ₫ể tổ
chứcquanhệ giữacáchàm(giữacácchứcnăng trong hệ thống)
 Ngoài ra, còn có các cách khác:
—Sử dụng biếntoàncục: nói chung là không nên!
—Sử dụng các tệp tin, streams: dù sao vẫnphảisử dụng tham số₫ể
nói rõ tệp tin nào, streams nào
—Cáccơ chế giao tiếphệ thống khác (phụ thuộcvàohệ₫iều hành,
nềntảng và giao thứctruyền thông) => nói chung vẫncần các tham

int a = 2;
k = SumInt(a,x);
Tham biến
(hình thức)
Tham số
(thựctế)
SumInt
a
b
x
5
k
Tham biến
Kếtquả trả về
(không tên)
Biến ₫ượcgán
kếtquả trả về
18
© 2004, HOÀNG MINH SƠN
Chương 3: Hàm và thư viện
3.3.1 Truyềngiátrị
int SumInt(int, int);
// Function call
void main() {
int x = 5;
int k = SumInt(x, 10);

}
// Function definition
int SumInt(int a, int b) {

 Truyềngiátrị là cách thông thường trong C
 Tham biếnchỉ nhận ₫ượcbảnsaocủabiến ₫ầuvào
(tham số thựctế)
 Thay ₫ổithambiếnchỉ làm thay ₫ổivùngnhớ cụcbộ,
không làm thay ₫ổibiến ₫ầuvào
 Tham biếnchỉ có thể mang tham số₫ầu vào, không
chứa ₫ượckếtquả (tham số ra)
 Truyềngiátrị khá an toàn, tránh ₫ượcmộtsố hiệu
ứng phụ
 Truyềngiátrị trong nhiề
utrường hợpkémhiệuquả
do mất công sao chép dữ liệu
21
© 2004, HOÀNG MINH SƠN
Chương 3: Hàm và thư viện
3.3.2 Truyền ₫ịachỉ
int SumInt(int* p, int N);
// Function call
void main() {
int a[] = {1, 2, 3, 4};
int k = SumInt(a,4);

}
// Function definition
int SumInt(int* p, int N) {
int *p2 = p + N, k = 0;
while (p < p2)
k += *p++;
return k;
}

}
Bảnchấtnhư
trongvídụ trước:
Truyền ₫ịachỉ!
23
© 2004, HOÀNG MINH SƠN
Chương 3: Hàm và thư viện
Thử lạivídụ₫ọctừ bàn phím
#include <iostream.h>
void ReadInt(const char* userPrompt, int* pN) {
cout << userPrompt;
cin >> *pN;
}
void main() {
int x = 5;
ReadInt("Input an integer number:", &x);
cout << "Now x is " << x;

}
 Kếtquả: x thay ₫ổigiátrị sau ₫ó(cũng là lý do tạisaohàm
scanf() lạiyêucầukiểuthambiếnlàcon trỏ!)
24
© 2004, HOÀNG MINH SƠN
Chương 3: Hàm và thư viện
Khi nào sử dụng truyền ₫ịachỉ?
 Khi cầnthay₫ổi"biến ₫ầuvào" (truynhậptrựctiếp
vào ô nhớ, không qua bảnsao)
 Khi kích cỡ kiểudữ liệulớn=> tránhsaochépdữ liệu
vào ngănxếp
 Truyềnthamsố là mộtmảng => bắtbuộctruyền ₫ịa


Nhờ tải bản gốc
Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status