.c
om
ng
th
an
co
ng
NGƠN NGỮ LẬP TRÌNH
C/C++
cu
u
du
o
Vũ Song Tùng
1
CuuDuongThanCong.com
/>
.c
om
NỘI DUNG
3
co
5
an
Các thành phần cơ bản
ng
Đặc điểm của C/C++
Biểu thức và toán tử
ng
th
22
45
Kiểu dữ liệu trừu tượng
77
Các cấu trúc dữ liệu cơ bản
123
cu
u
du
o
Hàm, mảng và con trỏ
2
CuuDuongThanCong.com
/>
I. Đặc điểm của C/C++
cu
u
du
o
ng
th
an
co
ng
.c
om
• Ngơn ngữ lập trình hàm
• Linh hoạt trong việc sử dụng các kiểu biến
• Truy cập trực tiếp bộ nhớ thơng qua các con
trỏ
• Định nghĩa các kiểu biến mới bằng các
struct
• Có thể chia nhỏ chương trình thành nhiều
mơ-đun
3
CuuDuongThanCong.com
/>
I. Đặc điểm của C/C++
u
du
o
ng
th
an
co
ng
.c
om
Kế thừa các đặc điểm của C
Đa hình bằng kỹ thuật xếp chồng (overload)
Hướng đối tượng bằng các lớp (class)
Sử dụng lại các mã bằng kỹ thuật kế thừa
(inheritance)
cu
•
•
•
•
4
CuuDuongThanCong.com
/>
.c
om
II. Các thành phần cơ bản
ng
Bộ ký tự
ng
th
an
co
Chú thích
Định danh
cu
u
du
o
Hằng
Biến
Vào/ra
5
CuuDuongThanCong.com
/>
II. Các thành phần cơ bản
co
ng
.c
om
Chữ cái thường : a – z
Chữ cái hoa : A – Z
Chữ số : 0 – 9
Phần lớn các dấu (trừ @ và $)
an
•
•
•
•
du
o
#include <iostream>
ng
th
Ví dụ
cu
u
void main()
{
int Arr[] = { 1, 2, 3, 4 };
for (int i = 0; i < 4; i++)
std::cout << Arr[i] << '\t';
}
6
CuuDuongThanCong.com
/>
II. Các thành phần cơ bản
co
Mơ tả hàm
Có thể dùng để bỏ tạm thời một
đoạn chương trình
cu
u
du
o
ng
th
an
// Hàm tính x^n
// x - số thực, n - số nguyên dương
double power(double x, int n)
{
/*
double g = 1;
for (int i = 0; i < n; i++)
g *= x;
return g;
*/
if (n == 0)
return 1; // x^0 = 1
return x * power(x, n - 1);
}
ng
.c
om
• Dùng để mơ tả một hàm hay một đoạn
chương trình
Làm rõ nghĩa
7
CuuDuongThanCong.com
/>
II. Các thành phần cơ bản
.c
om
• Tên được đặt cho các hàm, các biến, các kiểu dữ liệu
v.v…
• Các quy tắc định danh
ng
th
an
co
ng
– Chỉ được dùng các chữ cái, chữ số hoặc dấu gạch nối
– Ký tự đầu tiên không là chữ số
– Khơng được phép trùng từ khóa
Chú ý. Ngôn ngữ C/C++ phân biệt chữ cái hoa và chữ cái
thường
du
o
Ví dụ
// đúng quy cách
cu
u
void _foo()
{
int so nguyen;
int soNguyen;
}
// sai vì có chứa dấu cách
// đúng quy cách
8
CuuDuongThanCong.com
/>
II. Các thành phần cơ bản
ng
.c
om
• Các giá trị cụ thể trong chương trình
• Có thể là số ngun, số thực, ký tự hoặc xâu ký
tự
du
o
ng
th
an
số nguyên kiểu int
số nguyên biểu diễn trong hệ 8
số nguyên biểu diễn trong hệ 16
U hoặc u – số nguyên kiểu unsigned
L hoặc l – số nguyên kiểu long
số nguyên kiểu double
ký tự có giá trị số (mã ASCII) bằng 53
ký tự có giá trị số (mã ASCII) bằng 65
xâu ký tự gồm ký tự '5' và ký tự NULL
u
//
//
//
//
//
//
//
//
//
cu
5
05
0x5
5u
5l
5.0
'5'
'A'
"5"
co
Ví dụ
9
CuuDuongThanCong.com
/>
II. Các thành phần cơ bản
.c
om
Bảng 2.1. Các ký tự đặc biệt
Mô tả
\t
TAB
\n
ENTER
\’
Nháy đơn
\”
Nháy kép
\\
\
\0
Ký tự NULL (giá trị bằng 0)
cu
u
du
o
ng
th
an
co
ng
Ký tự
10
CuuDuongThanCong.com
/>
II. Các thành phần cơ bản
th
cu
u
du
o
ng
• Biến đơn
• Biến mảng
• Biến con trỏ
an
co
ng
.c
om
• Là một vùng trong bộ nhớ RAM dùng để lưu
trữ tạm thời các giá trị được xác định bằng
một tên biến
• Phân loại
11
CuuDuongThanCong.com
/>
II. Các thành phần cơ bản
kiểu tên_biến;
kiểu tên_biến = biểu_thức_khởi_tạo;
ng
Cú pháp
.c
om
• Cần khai báo biến trước khi sử dụng
// Khai báo biến đơn
// Khai báo biến mảng
// Khai báo biến con trỏ
cu
u
du
o
int a, b = 1;
double A[10];
int *pa = &a;
ng
th
an
co
Ví dụ
12
CuuDuongThanCong.com
/>
II. Các thành phần cơ bản
Vùng giá trị
char
1
-128 … 127
short
2
int
4
–2,147,483,648 … 2,147,483,647
4
0 … 4,294,967,295
4
–2,147,483,648 … 2,147,483,647
8
–9,223,372,036,854,775,808 …
9,223,372,036,854,775,807
4
±3.4E±38
double
8
±1.7E±308
long double
8
±1.7E±308
ng
long
u
cu
float
co
an
th
unsigned
long long
Số thực
.c
om
Kích thước
(byte)
ng
Kiểu
du
o
Số nguyên
Bảng 2.2. Các kiểu biến
–32,768 … 32,767
13
CuuDuongThanCong.com
/>
II. Các thành phần cơ bản
.c
om
• Một vài chú ý
Ví dụ
co
ng
void main()
{
int x = 10, y;
// Các biểu thức
th
an
Trong một khối ,…-, các tên biến phải khác nhau
cu
u
du
o
ng
for (int i = 0; i < 4; i++)
{
Cùng một tên biến có thể khai báo trong các khối ,…int x = 5;
khác nhau
// Các biểu thức
}
int y;
error C2086: 'int y' : redefinition
}
14
CuuDuongThanCong.com
/>
II. Các thành phần cơ bản
.c
om
• Một vài chú ý
ng
th
an
co
ng
• Kích thước của các kiểu phụ thuộc vào hệ thống mà
chương trình được biên dịch
• Dùng tốn tử sizeof(...) để lấy kích thước của
một kiểu, một hằng hay một biến
du
o
// Chương trình Win32 Console Application
cu
u
int sz;
sz = sizeof(sz);
// sz = 4
sz = sizeof(long long); // sz = 8
sz = sizeof("12345");
// sz = 6
15
CuuDuongThanCong.com
/>
II. Các thành phần cơ bản
.c
om
• Kiểu liệt kê
ng
• Dùng để định danh cho các giá trị kiểu int
an
co
enum tên_kiểu { danh sách tên };
ng
th
Ví dụ
u
du
o
enum Boolean { False, True };
// False = 0, True = 1
cu
enum Keys { Enter = 13, Escape = 27, A = 65, B, C };
// B = 66, C = 67
16
CuuDuongThanCong.com
/>
II. Các thành phần cơ bản
.c
om
Dùng các chuẩn vào/ra trong thư viện iostream để
làm việc với màn hình và bàn phím
co
ng
– Chuẩn vào (cin) sử dụng tốn tử luồng vào (>>)
– Các chuẩn ra (cout, cerr) sử dụng toán tử luồng ra (<<)
an
Ví dụ
cu
u
du
o
ng
th
double a, b, c;
cout << "Nhap a, b, c: ";
cin >> a >> b >> c; // Dùng dấu cách, TAB hoặc ENTER để phân biệt các luồng
if (a != 0)
{
cout << "delta = " << b*b - 4*a*c << '\n';
// Các biểu thức
}
else
cerr << "a phai khac 0.\n";
17
CuuDuongThanCong.com
/>
II. Các thành phần cơ bản
.c
om
u cầu bài tốn
ng
• Nhập các hệ số a, b, c từ bàn phím
• Nếu a ≠ 0 thì
th
an
co
– Tính
– In kết quả ra màn hình với các trường hợp
cu
u
du
o
ng
• > 0 X1 = …, X2 = …
• = 0 X1 = X2 = …
• < 0 Vo nghiem.
18
CuuDuongThanCong.com
/>
II. Các thành phần cơ bản
// thư viện vào/ra
// nơi khai báo các thành phần chuẩn
ng
#include <iostream>
using namespace std;
.c
om
PhuongTrinhBac2.cpp
cu
u
du
o
ng
th
an
co
void main()
{
double a, b, c;
cout << "Nhap a, b, c: "; cin >> a >> b >> c;
if (a != 0) {
// Đoạn biểu thức giải và biện luận phương trình //
}
else
cerr << "He so a phai khac 0.";
cout << endl;
system("pause");
// in ký tự xuống dịng
// tạm dừng màn hình
}
19
CuuDuongThanCong.com
/>
II. Các thành phần cơ bản
.c
om
PhuongTrinhBac2.cpp
cu
u
du
o
ng
th
an
co
ng
// Giải và biện luận phương trình
double d = b*b - 4*a*c;
if (d >= 0)
{
if (d > 0)
{
cout << "X1 = " << (-b - sqrt(d)) / (2 * a) << ", X2 = "
<< (b - sqrt(d))/(2 * a);
}
else
cout << "X1 = X2 = " << -b / (2 * a);
} // if (d >= 0)
else
cout << "Vo nghiem.";
20
CuuDuongThanCong.com
/>
II. Các thành phần cơ bản
ng
co
an
du
o
ng
th
– a = 1, b = 2, c = 1
– a = 1, b = 2, c = 3
– a = 1, b = 3, c = 2
.c
om
• Tạo project PhuongTrinhBac2 trên Visual
Studio .NET và kiểm tra với các hệ số:
• Tối ưu đoạn mã giải phương trình bậc 2
cu
u
Gợi ý. Giảm số lượng các biểu thức 2 * a và sqrt(d)
21
CuuDuongThanCong.com
/>
.c
om
III. Biểu thức và toán tử
ng
Biểu thức
th
an
co
Các toán tử đơn
cu
u
du
o
ng
Các tốn tử có cấu trúc
22
CuuDuongThanCong.com
/>
III. Biểu thức và tốn tử
th
an
co
ng
.c
om
• Tập hợp của các tốn hạng và tốn tử
• Kết thúc bằng dấu chấm phảy
• Có thể rỗng
cu
u
du
o
ng
Ví dụ
(-b – sqrt(d)) / (2 * a)
Các toán tử: () - / *
Các toán hạng:
Biến: a, b, d
Hằng: 2
Hàm: sqrt
23
CuuDuongThanCong.com
/>
III. Biểu thức và toán tử
Gán
=
Số học
+
Tăng/Giảm
++
--
So sánh
==
!=
Kiểm tra
?:
Logic
&&
Các loại khác
cu
Truy cập thành viên
u
~
&
*
new
{}
()
>=
<=
Có thể kết hợp với =
^
Cho giá trị 0 hoặc 1
Cho giá trị 0 hoặc 1
!
|
.
<
an
>
||
::
%
co
/
ng
Con trỏ
*
Ghi chú
&
du
o
Xử lý bit
-
.c
om
Các tốn tử
ng
Nhóm
th
Bảng 3.1. Phân loại các tốn tử đơn
<<
>>
Có thể kết hợp với =
delete
->
[]
,
Thứ tự ưu tiên các toán tử tham khảo tại
/>24
CuuDuongThanCong.com
/>
III. Biểu thức và tốn tử
.c
om
• Tốn tử gán:
lvalue = rvalue
Cú pháp
ng
lvalue – tên_biến, rvalue – một biểu thức
// gán 5 vào a
// tương đương: c = 5; b = c; a = b;
// tương đương: c = 5; a = b + c;
cu
u
du
o
a = 5;
a = b = c = 5;
a = b + (c = 5);
ng
th
an
co
Ví dụ
25
CuuDuongThanCong.com
/>