1
ƯƠ ƯƠ
Ậ Ậ
PH PH
NG PHÁP L P TRÌNH NG PHÁP L P TRÌNH
2
ộ
Các n i dung chính
• Các hệ thống số và quy tắc chuyển đổi • Tổng quan về ngôn ngữ lập trình C/C++ • Kiểu dữ liệu, định danh, biến, hằng, toán tử gán • Các toán tử • Các hàm nhập, xuất
3
4
Các hệ thống số
• Thập phân • Nhị phân • Bát phân • Thập lục phân
5
1. Lịch sử của ngôn ngữ lập trình C/C++ 2. Phương pháp giải quyết bài toán 3. Các bước trong chu trình phát triển 4. Khảo sát 1 chương trình C/C++ đơn giản 5. Cấu trúc chung của 1 chương trình C/C++ 6. Các tập tin thư viện thông dụng
6
ử ủ
ữ
ị
1. L ch s c a ngôn ng C/C++
ượ ạ ở • C đ c t o b i Dennis Ritchie Bell Telephone
ở Laboratories vào năm 1972
ữ ậ ộ ướ ố ượ ng đ i t ng,
ữ • C++ là m t ngôn ng l p trình h ả nó bao hàm c ngôn ng C
7
ươ
ả
ế
2. Ph
ng pháp gi
i quy t bài toán
• Các b ồ c g m:
ầ
ủ
ư
ồ
ặ ư , ho c l u đ )
ng trình
ứ
ệ
ể
▫Xác đ nh yêu c u c a bài toán ▫Đ a ra thu t toán (dùng mã gi ả ậ ▫Cài đ t (vi ế ặ t) ch ▫Th c hi n ch ươ ự
ươ ng trình và ki m ch ng
ướ ị
8
c trong chu trình
ướ ể
ươ
3.Các b phát tri n ch
ng trình
9
c trong chu trình
ướ ể
ươ
3.Các b phát tri n ch
ng trình
ở ộ ầ với ph n m r ng
1. Soạn thảo mã nguồn (source code), lưu tập tin .cpp 2. Mã nguồn được biên dịch (compile) để tạo tập
tin đối tượng (object file) ế ợ ố ượ 3. T p tin đ i t ố ượ k t h p v i mã đ i t
ng ư ệ ậ ng ể ể ạ t p tin có th
ế
ậ
ớ ậ ủ c a các hàm th vi n đ t o ự th c thi (executable file)
ẽ ượ ậ ạ c s đ ệ
i cho đ n khi t p ầ
tin th c thi th c hi n đúng yêu c u bài toán
4. Thực thi (run) chương trình Quá trình 4 b ướ c l p l ự ự
10
ươ
ng trình C/C++
ơ
ả
ả 4. Kh o sát ch đ n gi n
// my first program in C/C++
#include
#include
int main()
{
cout<< "Hello World!"; //Output “Hello World!”
getche();
return 0;
}
11
ươ
ng trình C/C++
ơ
ả
ả 4. Kh o sát ch đ n gi n
ấ //) ủ
ắ ầ ế
ưở
ả
ươ
dòng chú thích (b t đ u b ng d u không nh h
ằ ạ ộ ng đ n ho t đ ng c a ch
ng trình
ằ
ị ề
ọ
ỉ
ử ấ # g i là ch th ti n x
// my first program in C/C++
Câu lệnh #include báo cho trình biên dịch biết cần
phải gộp thư viện vào chương trình
#include
12
ộ
ươ
ng trình C/C++
ơ
ả 4. Kh o sát m t ch ả đ n gi n
ồ ạ
ả
ươ
ng trình C/C++ ph i luôn t n t
i hàm
int main(): khai báo hàm main
main
ộ
ượ
ự
ệ
c th c hi n
ươ
ượ
đ u tiên khi ch
ng trình đ
main luôn đ ự c th c thi
ủ
ộ
ặ
ấ
ằ
main n m trong c p d u { }
Ch N i dung trong hàm ầ N i dung c a hàm ầ ế ti p sau ph n khai báo hàm
ệ ả ấ ố ỗ Cu i m i dòng l nh trong C/C++ ph i có d u ;
13
ộ
ươ
ng trình C/C++
ơ
ả 4. Kh o sát m t ch ả đ n gi n
ượ
ị c đ nh
ẩ ấ ư ệ iostream.h ự
ượ
ữ Hello
c th c thi thì ch
ộ nghĩa trong th vi n Khi dòng l nh này đ ượ
ệ
ệ c hi n ra màn hình
Word! đ
ể
ậ
ờ
ộ
cout<< “Hello World!”; cout là m t dòng xu t chu n C/C++ đ
ự ừ t
bàn
phím
getch(); Đây là hàm dùng đ ch nh p m t ký t
ệ
ụ
ế
L nh này có tác d ng k t thúc hàm main
return 0;
14
ươ
ng trình C/C++
ơ
ả
ả 4. Kh o sát ch đ n gi n
// my first program in C/C++
#include
#include
void main()
{
cout<< "Hello World!"; //Output “Hello World!”
getch();
}
15
Chú thích
ả • Chú thích đ
ượ ầ ươ ử ụ ủ trong các ph n c a ch ể c s d ng đ ghi chú hay mô t ng trình
ặ
ấ
ề
ố
▫Chú thích dòng: dùng c p d u // ▫Chú thích kh i (chú thích trên nhi u dòng)
ặ
ấ
dùng c p d u /* */
ể • Có hai cách đ chú thích:
16
ấ
ủ
ộ
ươ
ng
5. C u trúc chung c a m t ch trình C/C++
17
ấ
ủ
ộ
ươ
ng
5. C u trúc chung c a m t ch trình C/C++
18
ư ệ
ộ ố ậ 6. M t s t p tin th vi n thông d ngụ
ả ử ụ ươ ậ ẵ ủ • Khi l p trình C/C++, c n ph i s d ng các hàm ầ ể ế có s n c a C/C++ đ vi ng trình t ch
ụ
ử ụ ậ ượ ạ
• Tùy theo m c tiêu s d ng chung, các hàm này c nhóm vào các t p tin khác nhau t o thành ậ ư ệ đ các t p tin th vi n
ươ ử ụ • Khi ch
ư ệ
ậ
#include
ư ệ ậ ớ ố ng trình mu n s d ng t p tin th vi n ả nào thì ph i khai báo v i FileName.h là tên t p tin th vi n
19
ư ệ
ộ ố ậ 6. M t s t p tin th vi n thông d ngụ
ị
ụ ồ • M t s t p tin th vi n thông d ng g m: ư ệ
bàn phím: getc()
ị ự ừ t
ự
ự ừ t
bàm phím: gets()
hàm vào ra chu nẩ các hàm xu t d li u: printf()), cout ấ ữ ệ nh p giá tr cho bi n: scanf()), cin ế ậ nh n ký t ậ in ký t ra màn hình: putc() nh p m t chu i ký t ỗ ộ ậ xu t chu i ký t ự ỗ ấ
ra màn hình: puts()
ộ ố ậ ▫stdio.h (C), iostream.h (C++): đ nh nghĩa các
20
ư ệ
ộ ố ậ 6. M t s t p tin th vi n thông d ngụ
▫conio.h: đ nh nghĩa các hàm vào ra trong ch ế
ộ
đ DOS nh
ị ư clrscr(), getch(), …
ị
ọ
▫math.h: Đ nh nghĩa các hàm toán h c nh : ư abs(), sqrt(), log(), log10(), sin(), cos(), tan(), acos(), asin(), atan(), pow(), exp(), …
ị
ấ
ấ
ồ
▫alloc.h: đ nh nghĩa các hàm vào ra c p th p g m các hàm open(), _open(), read(), _read(), close(), _close(), creat(), _creat(), creatnew(), eof(), filelength(), lock(), …
21
1. Các kiểu dữ liệu 2. Định danh 3. Biến và khai báo biến 4. Hằng và khai báo hằng 5. Toán tử gán
22
1. Các kiểu dữ liệu (Data types)
▫char (Ký tự) ▫int (Số nguyên) ▫float (Số thực) ▫double (Số thực) ▫void (Kiểu vô định)
• Có 5 kiểu dữ liệu cơ sở:
• Ngoại trừ kiểu void, các kiểu cơ sở có thể có
signed, unsigned, long, short đứng trước
• Kích thước và phạm vi của chúng có thể thay
đổi tùy theo loại CPU và trình biên dịch
23
1. Các kiểu dữ liệu (Data types)
24
ị
2. Đ nh danh
(Identifier name)
▫Có thể có 1 hoặc nhiều ký tự ▫Ký tự đầu tiên phải là một chữ cái hoặc dấu _ ▫Những ký tự theo sau phải là chữ cái, chữ số,
hoặc dấu _
▫Không được chứa ký tự khoảng trắng ▫Không được trùng với từ khóa (keyword) ▫Không nên trùng tên với các hàm thư viện
• Định danh: là tên của biến, hằng, hàm • Quy tắc đặt định danh:
• C/C++ phân biệt ký tự HOA và thường
25
ị
ụ
2. Đ nh danh: Ví d
• Tên đúng :
_abc, Delta_1, BETA, Beta
• Tên sai :
1xyz Diem anh van
A#B X-1
26
ừ
T khóa (keyword)
• Là những từ được dành riêng bởi ngôn ngữ lập
trình cho những mục đích riêng của nó
• Tất cả các từ khóa trong C/C++ đều là chữ
thường
• Danh sách các từ khóa trong C/C++
27
ế
ế
3. Bi n và khai báo bi n
• Biến (variable): là định danh của một vùng nhớ,
dùng để giữ một giá trị mà có thể được thay đổi bởi chương trình
• Biến phải được khai báo trước khi sử dụng • Cách khai báo:
Data_Type variable_Name;
▫Data_Type : là một trong các kiểu dữ liệu hợp lệ ▫variable_Name : định danh (tên biến), nếu có nhiều
biến thì các biến phân cách nhau bởi dấu phẩy
• Ví dụ:
int x, y; char ch;
28
ế
ế
3. Bi n và khai báo bi n
• Trong cùng một phạm vi, các biến không được
trùng tên nhau
• (GT 15) Khi khai báo biến, nếu không cung cấp giá trị ban đầu cho biến thì giá trị của biến là không xác định không sử dụng được
• Có thể vừa khai báo vừa khởi tạo giá trị ban đầu
cho biến, cú pháp:
Data_Type variable_Name = value;
▫Ví dụ:
int tich = 1; float mark1, mark2, mark3, average = 0;
29
ế
ế
3. Bi n và khai báo bi n
▫Bên trong hàm biến cục bộ
▫Trong định nghĩa tham số hàm tham số hình
thức
▫Bên ngoài tất cả các hàm biến toàn cục
• Biến có thể được khai báo tại ở:
30
ủ
ế
ạ
Ph m vi c a bi n
▫Là những biến được khai báo bên trong một hàm
▫Các biến cục bộ chỉ có tác dụng bên trong khối
(block) có khai báo biến
Một khối được đặt trong cặp dấu { }
▫Biến cục bộ chỉ tồn tại trong khi khối chứa nó
đang thực thi và bị hủy khi khối chứa nó thực thi xong
• Biến cục bộ (local variables)
31
ế
ạ
ụ
ủ Ph m vi c a bi n: Ví d
int x = 10;
void func1() {
}
int x = -199;
void func2() {
}
32
ủ
ế
ạ
Ph m vi c a bi n
▫Là các biến được khai báo trong tiêu đề hàm ▫Được sử dụng giống như các biến cục bộ ▫Ví dụ:
int sum(int from, int to) {
int total=0; for(int i=from; i<=to; i++)
total +=i; return total; }
• Tham số hình thức (formal parameters)
33
ủ
ế
ạ
Ph m vi c a bi n
▫Là biến được khai báo bên ngoài tất cả các hàm
▫Biến toàn cục có phạm vi sử dụng trong toàn bộ
chương trình
Tất cả các lệnh có trong chương trình đều có thể
tham chiếu đến biến toàn cục
• Biến toàn cục (global variables)
ế
ạ
ụ
ủ Ph m vi c a bi n: Ví d
// biến toàn cục
#include
int gVar = 100;
void increase() {
gVar = gVar + 1;
Value of gVar= 100 After increased, gVar= 101; After decreased, gVar= 100;
} void decrease() { gVar = gVar -1;
} void main() { cout << “Value of gVar= “<< gVar; increase(); cout << “After increased, gVar= “<< gVar;
decrease();
cout << “After decreased, gVar= “<< gVar; }
35
ằ
ằ
4. H ng và khai báo h ng
• Hằng (constant) là những giá trị cố định mà
chương trình không thể thay đổi
• Khai báo hằng:
const Data_Type CONST_NAME = value; ▫Thông thường dùng chữ HOA để đặt tên cho
hằng
▫Ví dụ: const int MAX = 200;
36
gán
(assignment
ử 5. Toán t operator) • Cú pháp:
▫variableName : Tên biến ▫expression : Biểu thức
variableName = expression;
total = 10; // gán giá trị cho biến total bằng 10 total = a; // gán giá trị biến a cho biến total total = total + b + c + d // gán tổng giá trị của các
biến total, b, c, d cho biến total
• Ví dụ:
37
gán
(assignment
ử 5. Toán t operator) • Mỗi kiểu dữ liệu có cách gán giá trị tương ứng
Ví dụ: char kt1=‘a’, kt2=‘%’
▫Số nguyên (int) là số không có phần thập phân
Ví dụ: int x=9;
▫Số thực (float, double) là số có phần thập phân
Ví dụ: float x=123.45;
▫Chuỗi ký tự là một tập các ký tự đặt trong cặp
nháy kép “” Ví dụ: s="This is a string“;
st=“a”;
(GT 17) ▫Ký tự (char) được đặt trong cặp nháy đơn ‘’
38
ổ ể
ể
ệ
Chuy n đ i ki u trong câu l nh gán
• Đối với câu lệnh gán, giá trị của biểu thức bên phải dấu = được tự động chuyển thành kiểu dữ liệu của biến bên trái dấu =
int i=100; double d=123.456; ▫Nếu viết i = d; thì i=123 chuyển đổi kiểu mất
mát thông tin
▫Nếu viết lệnh d = i; thì d=100.0 chuyển đổi
kiểu không mất mát thông tin
• Ví dụ:
39
ổ ể
ể
ệ
Chuy n đ i ki u trong câu l nh gán
• Khi chuyển đổi từ kiểu dữ liệu có miền giá trị nhỏ sang kiểu dữ liệu có miền giá trị lớn hơn: charintlongfloatdouble, thì việc chuyển đổi kiểu này không làm mất mát thông tin
• Khi chuyển đổi từ kiểu dữ liệu có miền giá trị lớn sang kiểu dữ liệu có miền giá trị nhỏ hơn: doublefloatlongintchar, thì việc chuyển đổi kiểu này làm mất mát thông tin
Ép ki u ể (casting)
• Casting dùng để ép một biểu thức thành một
(type)expression hoặc type(expression)
kiểu theo ý muốn của người lập trình
Result = 3
Result = 3.5
• Cú pháp: • Ví dụ
41
1. Toán tử số học 2. Toán tử ++ và – 3. Toán tử quan hệ 4. Toán tử luận lý 5. Toán tử ? 6. Toán tử sizeof 7. Toán tử dấu phẩy
42
1. Toán tử số học (arithmetic operators)
• GT 22
Toán tử
Tên
Ví dụ
Cộng
+
12+4.9
// kết quả 16.9
Trừ
-
3.98-4
// kết quả -0.02
Nhân
*
2*3.4
// kết quả 6.8
Chia
/
9/2.0
// kết quả 4.5
%
13%3
// kết quả 1
ụ
)
Lấy phần dư (ch áp d ng ỉ ớ ố v i s nguyên
43
2. Toán tử ++ và – (increment and decrement operators)
• (GT 23) Toán tử tăng (++) và toán tử giảm (--) có tác dụng làm tăng hoặc giảm 1 giá trị lưu trong biến
a++;
//tương đương với a=a+1
a--;
//tương đương với a=a-1
• Ví dụ:
44
2. Toán tử ++ và – (increment and decrement operators)
▫Tiền tố (prefix):
Toán tử ++/-- đặt trước toán hạng Hành động tăng/giảm trên toán hạng được thực
hiện trước khi tính biểu thức
Ví dụ: B=3; A=++B; Kết quả: A chứa giá trị 4, B chứa giá trị 4
• Toán tử tăng/giảm có 2 dạng:
45
2. Toán tử ++ và – (increment and decrement operators)
▫Hậu tố (postfix):
Toán tử ++/-- đặt sau toán hạng Hành động tăng/giảm trên toán hạng được thực
hiện sau khi tính biểu thức
Ví dụ: B=3; A=B++; Kết quả: A chứa giá trị 3, B chứa giá trị 4
• Toán tử tăng/giảm có 2 dạng:
46
2. Toán tử ++ và – (increment and decrement operators)
int x = 100; int n, m; n = ++x + 1; // n sẽ có giá trị là 102 n = x++ + 1; // n sẽ có giá trị là 101 m = --x + 1; // m sẽ có giá trị là 100 m = x-- + 1; // m sẽ có giá trị 101
(1) (2) (3) (4)
Ví dụ:
• Sau lệnh (1), (2) thì x có giá trị là 101 • Sau lệnh (3), (4) thì x có giá trị là 99
47
ử
ệ
quan h
3. Toán t (relational operators)
Ví dụ
To án tử == So sánh bằng
5 == 5 // kết quả 1
!=
So sánh không bằng
5 != 5 // kết quả 0
<
So sánh nhỏ hơn
5 < 5.5 // kết quả 1
<= So sánh nhỏ hơn hoặc
5 <= 5 // kết quả 1
bằng
>
So sánh lớn hơn
5 > 5.5 // kết quả 0
>= So sánh lớn hơn hoặc
bằng
6.3 >= 5 //kết quả 1
• Được định trị là true (1) hoặc false (0) Tê n
48
ử ậ
lu n lý 4. Toán t (logical operators)
• Được định trị là true (1) hoặc false (0)
Operator
Action
Ví dụ
ế
ả
!
not
!(5 == 5) // k t qu là 0 ả
ế
&&
and
5 < 6 && 6 < 6// k t qu là 0
ế
ả
||
or
5 < 6 || 6 < 5 // k t qu là 1
P 0 0 1 1
Q 0 1 0 1
P&&Q 0 0 0 1
P||Q 0 1 1 1
!P 1 1 0 0
49
ử ậ
lu n lý 4. Toán t (logical operators)
• Độ ưu tiên của toán tử quan hệ và luận lý
Toán tử ! > >= < <= == != && || ộ ư Đ u tiên 1 2 3 4 5
50
ử ậ
lu n lý 4. Toán t (logical operators)
Ví dụ biểu thức:
(10>9 && 8!=7) || (6<=5 || 5>4)
Được định trị như sau:
51
5. Toán t
? ử (? operator)
• Toán tử ? là một toán tử ba ngôi do đó phải có
ba toán hạng
▫Exp1, Exp2, và Exp3 là các biểu thức ▫Nếu Exp1 đúng thì Exp2 được định trị và nó trở
thành giá trị của biểu thức
▫Ngược lại, nếu Exp1 sai thì Exp3 được định trị và
trở thành giá trị của biểu thức
Exp1 ? Exp2 : Exp3; • Cú pháp:
52
5. Toán t
? ử (? operator)
• Ví dụ 1: X = 10; Y = X > 9 ? 100*X : 200*X; •Ví dụ 2: int m = 1, n = 2, p =3; int min=(m < n ? (m < p ? m : p) : (n < p ? n : p)); •Ví dụ 3: m = (a>b) ? a : b
53
ử
6. Toán t
sizeof
• sizeof là toán tử trả về số byte của kiểu dữ liệu
chiếm trong bộ nhớ
• Tùy môi trường (hệ điều hành, loại CPU,...) mà
mỗi kiểu dữ liệu có số byte khác nhau
sizeof(operand)
▫operand: có thể là tên kiểu dữ liệu, biến, biểu
thức
• Cú pháp:
54
ử ấ
ẩ (c o mma
d u ph y
(exp_1, exp_2, ..., exp_n)
7. To án t o pe rato r) • Cú pháp: • Các biểu thức được định trị từ trái sang phải, biểu thức cuối cùng (exp_n) được định trị và trở thành giá trị của toàn bộ biểu thức
• Ví dụ:
x = (y=3, y+1); Y được gán giá trị 3, sau đó x được gán giá trị y+1 là 4
55
ứ
ể
Bi u th c (GT 29)
• Biểu thức là sự kết hợp của các thành phần:
toán tử, hằng, biến, và hàm có trả về giá trị
• Thứ tự định trị của biểu thức tùy thuộc vào độ
ưu tiên của các toán tử
• Trong một biểu thức, nếu các hằng và biến thuộc các kiểu khác nhau thì giá trị của chúng phải được chuyển thành cùng kiểu trước khi thực hiện các phép toán giữa chúng
• Trình biên dịch sẽ thực hiện việc chuyển đổi kiểu tự động đến kiểu của toán hạng có kiểu lớn hơn
56
ứ
ể
Bi u th c (GT 29)
char ch; int i; float f; double d;
• Ví dụ:
57
ạ
ế ắ ủ ệ
D ng vi
t c a l nh gán (GT 31)
t t
• Dạng viết tắt của lệnh gán với các toán tử số
học gồm: +=, -=, *=, /=, %=
ươ ươ T ớ ng v i
To án Tử += Ví dụ n += 25 ng đ n = n + 25
-= n -= 25 n = n – 25
*= n *= 25 n = n * 25
/= n /= 25 n = n / 25
%= n %= 25 n = n % 25
58
1. Hàm xuất 2. Hàm nhập
59
1. Hàm xu tấ
▫Dùng để xuất thông tin ra màn hình
▫Thuộc thư viện iostream
#include
▫Ví dụ 1:
cout<<“Chao ban”;
cout< // xuất chữ Chao ban
// xuất giá trị của biến xyz ▫Ví dụ 2: int x=3, y=5;
cout<<“Tong cua”< • cout<< #include 62 ▫Dùng để lấy dữ liệu nhập từ bàn phím ▫Thuộc thư viện iostream #include ▫Ví dụ: int xyz; cin>>xyz; // lấy giá trị nhập đưa vào biến xyz • cin>> 63 1. Từ yêu cầu bài toán, xác định các dữ liệu phải
nhập (input) và kiểu của chúng khai báo các
biến tương ứng 2. Cho nhập (hoặc gán) giá trị cho các biến 3. Xử lý, tính toán dữ liệu nhập theo yêu cầu bài toán 4. Xuất (output) kết quả theo yêu cầu bài toán 64 • Cấu trúc của một chương trình C/C++
• Biến và khai báo biến
• Biến cục bộ, biến toàn cục
• Các toán tử: gán, tăng/giảm, ba ngôi
• Ép kiểu
• Dạng viết tắt của câu lệnh gán
• Các bước viết chương trìnhHằng ký tự đặc biệt
Hằng ký tự đặc biệt: Ví dụ
2. Hàm nh pậ
ướ
ế
ươ
Các b
c vi
t ch
ng trình
ổ
ế
T ng k t