Bài giảng kỹ thuật lập trình_Chương 3: Hàm và thư viện doc - Pdf 17

© 2004, HOÀNG MINH SƠN
Chương 1
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
0101010101010101100001
0101010101010101100001
0101010100101010100101
0101010100101010100101

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
© 2005 - HMS
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
)
3.1 Hàm và lậptrìnhhướng hàm
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

—Nhậpsố nguyên thứ nhất:
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
© 2005 - HMS
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');

return N;
}
int SumInt(int a, int b) {
int Total = 0;
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?
Quá nhiềuthamsố,
Hiệunăng?
OK,
Không thể tốthơn!
9
© 2004, HOÀNG MINH SƠN
Chương 3: Hàm và thư viện
© 2005 - HMS
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,

return N;
}
int SumInt(int a, int b) {
int Total = 0;
for (int i = a; i <= b; ++i)
Total += i;
return Total;
}
OK,
Đãtốthơn!
12
© 2004, HOÀNG MINH SƠN
Chương 3: Hàm và thư viện
© 2005 - HMS
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

lớnlên?):
—Nếungườixâydựng hàm (₫ịnh nghĩahàm) ₫ưasẵntấtcả
phần khai báo vào trong mộttệptin => Header file (*.h,
*.hx, ) thì ngườisử dụng chỉ cầnbổ sung dòng lệnh
#include <filename>
—Mãchương trình không lớnlên, bởi khai báo không sinh mã!
 Mộthàmcóthể khai báo nhiềulầntùyý!
15
© 2004, HOÀNG MINH SƠN
Chương 3: Hàm và thư viện
© 2005 - HMS
Đị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, )

c
d
ee
17
© 2004, HOÀNG MINH SƠN
Chương 3: Hàm và thư viện
© 2005 - HMS
Tham biếnhìnhthức và tham số thựctế
int SumInt(int a, int b) {

}
int x = 5;
int k = SumInt(x, 10);

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

#include <iostream.h>
void ReadInt(const char* userPrompt, int N) {
cout << userPrompt;
cin >> N;
}
void main() {
int x = 5;
ReadInt("Input an integer number:", x);
cout << "Now x is " << x;

}
 Kếtquả: x không hề thay ₫ổisau₫ó.
20
© 2004, HOÀNG MINH SƠN
Chương 3: Hàm và thư viện
© 2005 - HMS
Truyềngiátrị
 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

22
© 2004, HOÀNG MINH SƠN
Chương 3: Hàm và thư viện
© 2005 - HMS
int SumInt(int p[4], int N);
// Function call
void main() {
int a[] = {1, 2, 3, 4};
int k = SumInt(a,4);

}
// Function definition
int SumInt(int p[4], int N) {
int *p2 = p + N, k = 0;
while (p < p2)
k += *p++;
return k;
}
Truyềnmảng tham số?
Bảnchấtnhư
trong ví dụ trước:
Truyền ₫ịachỉ!
23
© 2004, HOÀNG MINH SƠN
Chương 3: Hàm và thư viện
© 2005 - HMS
Thử lạivídụ₫ọctừ bàn phím
#include <iostream.h>
void ReadInt(const char* userPrompt, int* pN) {
cout << userPrompt;

#include <iostream.h>
void ReadInt(const char* userPrompt, int& N) {
cout << userPrompt;
cin >> N;
}
void main() {
int x = 5;
ReadInt("Input an integer number:", x);
cout << "Now x is " << x;

}
 Kếtquả: x thay ₫ổigiátrị sau ₫ó
3.3.3 Truyền tham chiếu (C++)


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

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