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  #include   Các l nh b t đ u b ng d u  ắ ầ ệ lý (preprocessor)

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: charintlongfloatdouble, 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: doublefloatlongintchar, 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<<

Hằng ký tự đặc biệt

Hằng ký tự đặc biệt: Ví dụ

#include void main(void) { cout <<"Items:\n"; cout <<”\tItem1\n”; cout <<”\tItem2\n”; cout <<”\tItem3\n”; }

62

2. Hàm nh pậ

▫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

ướ

ế

ươ

Các b

c vi

t ch

ng trình

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

ế T ng k t

• 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ình