Professional Documents
Culture Documents
HDTHTuan 1
HDTHTuan 1
Mục tiêu
Giới thiệu sơ lược về nhập xuất trong C++, tìm hiểu một số khái niệm cơ bản như hàm
toán tử và function template, thống nhất một số chuẩn và quy ước trong lập trình.
Nội dung
- Hàm toán tử.
- Function Template.
- Các chuẩn và quy ước lập trình.
Yêu cầu
Nắm vững phương pháp lập trình cấu trúc trong C++ và biết cách sử dụng môi trường lập
trình Visual Studio 2010
1
Hướng dẫn thực hành tuần 1 Hàm toán tử
Mục lục
1. Hàm toán tử ................................................................................................................. 3
Bài tập: ............................................................................................................................ 4
2. Function Template ....................................................................................................... 5
Khai niệm ........................................................................................................................ 5
Nhận xét .......................................................................................................................... 6
Bài tập ............................................................................................................................. 6
3. Các chuẩn và quy ước lập trình ................................................................................... 7
Quy ước đặt tên hằng ...................................................................................................... 7
Quy ước đặt tên biến ....................................................................................................... 7
Quy ước đặt tên kiểu dữ liệu tự định nghĩa .................................................................... 8
Quy ước đặt tên hàm ....................................................................................................... 8
Quy ước viết câu lệnh ..................................................................................................... 9
Quy ước cách khoảng ................................................................................................... 10
Quy ước viết chú thích .................................................................................................. 11
2
Hướng dẫn thực hành tuần 1 Hàm toán tử
1. Hàm toán tử
Trong C++, chúng ta được phép dùng các toán tử (+, -, *, /, >, <, =,…) để đặt tên hàm
nhưng với điều kiện kèm theo từ khóa “operator” phía trước. Để hiểu rõ hơn về hàm toán
tử trong C++, chúng ta cùng xây dựng chương trình cho phép thực hiện phép toán + và so
sánh > trên phân số.
Bước 2: thêm vào đầu chương trình dòng sau “#include <iostream>” và “using
namespace std;” để sử dụng thư viện “iostream”.
Bước 3: xây dựng struct PhanSo để lưu thông tin phân số.
struct PhanSo
{
int iTuSo; // Tu so cua phan so.
int iMauSo; // Mau so cua phan so.
};
Bước 4: xây dựng các hàm toán tử cho phép thực hiện các phép toán trên phân số.
Toán tử + hai phân số
PhanSo operator +(const PhanSo &a, const PhanSo &b)
{
PhanSo c;
return c;
}
if (lMauSoQuyDong > 0)
return lTuSoQuyDongA > lTuSoQuyDongB;
3
Hướng dẫn thực hành tuần 1 Hàm toán tử
void main()
{
PhanSo a, b, c;
if (a > b)
cout << "a lon hon b";
else
cout << "a nho hon b";
c = a + b;
Với các hàm toán tử đã xây dựng, chúng ta có thể thực hiện các phép toán + và so sánh >
giữa hai phân số một cách rất tự nhiên như giữa các kiểu dữ liệu cơ bản.
Bài tập:
1. Xây dựng chương trình cho phép thực hiện các phép toán +, -, *, /, so sánh >, <, ==
trên phân số.
2. Xây dựng chương trình cho phép thực hiện các phép toán +, -, *, /, so sánh >, <, ==
trên số phức (biểu diễn dưới dạng a + bi, với a, b R ).
4
Hướng dẫn thực hành tuần 1 Function Template
2. Function Template
Khai niệm
Xét ví dụ hàm tìm Min giữa 2 số cho nhiều kiểu dữ liệu khác nhau:
// min for ints.
int min(int a, int b)
{
return (a < b) ? a : b;
}
Với mỗi kiểu dữ liệu khác nhau (int, float, char…) chúng ta phải viết hàm tìm Min tương
ứng với kiểu dữ liệu đó (overload). Điều này gây ra sự dư thừa không đáng có trong
chương trình. Và hơn nữa các hàm trên vẫn không đủ dùng trong mọi trường hợp.
Function Template là hàm tổng quát cho phép dùng nhiều kiểu dữ liệu khác nhau cho
tham số và kết quả trả về của nó. Chúng ta không phải viết nhiều hàm cho từng kiểu dữ
liệu cụ thể.
Tất cả các function template được định nghĩa bắt đầu với từ khóa template theo sau là
một danh sách các tham số hình thức vây quanh trong cặp dấu (< và >). Mỗi tham số hình
thức được đặt trước bởi từ khóa class và được phân cách bởi dấu phẩy:
Lúc này các hàm tìm Min có thể được thay thế bởi một hàm Function Template duy nhất:
template <class T>
T min(T a, T b)
5
Hướng dẫn thực hành tuần 1 Function Template
{
return (a < b) ? a : b;
}
Nhận xét
- Dùng function template chúng ta chỉ cần viết một hàm duy nhất cho nhiều kiểu dữ
liệu khác nhau thay vì phải viết nhiều hàm cho từng kiểu dữ liệu cụ thể.
- Dùng function template giúp giảm được kích thước và tăng tính linh động của
chương trình.
Bài tập
Áp dụng function template để giải các bài tập sau:
1. Tìm min, max giữa 2 phần tử kiểu T (int, float, PhanSo, …).
2. Tìm phần tử dương lớn nhất trong mảng kiểu T (int, float, PhanSo, …).
3. Sắp xếp tăng dần mảng kiểu T (int, float, PhanSo, ...).
6
Hướng dẫn thực hành tuần 1 Các chuẩn và quy ước lập trình
ii) Tên hằng được viết hoa toàn bộ và các từ trong tên cách nhau bằng ký tự “_”.
ii) Tên biến được viết hoa các ký tự đầu mỗi từ trong tên, các ký tự còn lại viết
thường.
iii) Tên biến có phần tiếp đầu ngữ (prefix) thể hiện kiểu dữ liệu của biến (phong
cách Hungarian):
Kiểu dữ liệu số
char – c char cKyTu;
short – s short sSoNguyenNgan;
int – i int iSoNguyen;
long – l long lSoNguyenDai;
float – f float fSoThuc;
double – d double dSoThucDai;
int nSo;
ii) Tên kiểu dữ liệu tự định nghĩa được viết hoa các ký tự đầu mỗi từ trong tên,
các ký tự còn lại viết thường.
ii) Tên hàm được viết hoa các ký tự đầu mỗi từ trong tên, các ký tự còn lại viết
thường.
8
Hướng dẫn thực hành tuần 1 Các chuẩn và quy ước lập trình
// Sai.
x = 3; y = 5;
// Dung.
x = 3;
y = 5;
// Sai.
if (a > b) cout << "a lon hon b";
else cout << "a nho hon b";
// Dung.
if (a > b)
cout << "a lon hon b";
else
out << "a nho hon b";
// Sai.
for (int i = 0; i < n; i++) x = x + 5;
// Dung.
for (int i = 0; i < n; i++)
x = x + 5;
ii) Viết các dấu “{“ “}” riêng trên một dòng.
// Sai. // Dung.
void Swap(int &a, int &b) { void Swap(int &a, int &b)
int c = a; {
a = b; int c = a;
b = c; a = b;
} b = c;
}
void Swap(int &a, int &b)
{ int c = a;
a = b;
b = c;
}
9
Hướng dẫn thực hành tuần 1 Các chuẩn và quy ước lập trình
iii) Viết các câu lệnh if, while, for riêng trên một đoạn.
// Sai. // Dung.
if (a > b) if (a > b)
cout << "a lon hon b"; cout << "a lon hon b";
for (int i = 0; i < n; i++)
x = x + 5; for (int i = 0; i < n; i++)
k = k * x; x = x + 5;
k = k * x;
iv) Viết các câu lệnh cùng thực hiện một công việc riêng trên một đoạn.
// Sai. // Dung.
int c = a; int c = a;
a = b; a = b;
b = c; b = c;
k = k * a;
x = b + c; k = k * a;
x = b + c;
// Sai. // Dung.
void Swap(int &a, int &b) void Swap(int &a, int &b)
{ {
int c = a; int c = a;
a = b; a = b;
b = c; b = c;
} }
ii) Viết cách vào một khoảng tab đối với câu lệnh ngay sau if, else, while, for.
// Sai. // Dung.
if (a > b) if (a > b)
cout << "a lon hon b"; cout << "a lon hon b";
else else
cout << "a nho hon b"; cout << "a nho hon b";
iii) Viết cách một khoảng trắng xung quanh các toán tử 2 ngôi.
10
Hướng dẫn thực hành tuần 1 Các chuẩn và quy ước lập trình
x=x+5*a-c; // Sai.
x = x + 5 * a - c; // Dung.
if (a>=b) // Sai.
if (a >= b) // Dung.
iv) Viết cách một khoảng trắng sau các dấu “,” “;”.
i) Chú thích phải rõ ràng, dễ hiểu và diễn giải được ý nghĩa của đoạn lệnh.
m = (l + r) / 2;
if (l < m)
msort(a, n, l, m, b);
if (m + 1 < r)
msort(a, n, m + 1, r, b);
11
Hướng dẫn thực hành tuần 1 Các chuẩn và quy ước lập trình
ii) Dùng dấu “//” thay cho “/*” “*/” khi viết chú thích.
// Sai. // Dung.
/* void Swap(int &a, int &b) //void Swap(int &a, int &b)
{ //{
int c = a; // int c = a;
a = b; // a = b;
b = c; // b = c;
} */ //}
12