Ch
Ch
−¬
−¬
ng 2
ng 2
C
C
¸
¸
c yÕu t
c yÕu t
è
è
c
c
¬
¬
b
b
¶
¶
n
n
c
c
ñ
ñ
a ng
a ng
«
«
n ng
n ng
÷
÷
Bài ging C++. 14/10/2008
V.S.Nam. B/m KTHT, khoa CNTT, HXD
2
2.1 C
2.1 C
¸
¸
c ph
c ph
Ç
Ç
n t
n t
ö
ö
ng
ng
«
«
n ng
n ng
÷
÷
c
c
¬
¬
b
b
¶
¶
n
n
2.1.1 Tp ký t, tp t khóa và tên
– Tp kí t
• Ch cái: a-z, A-Z
– Phân bit ch thng, ch in (≠ Pascal)
• Ch s: 0-9
– Ch s bt đu bng 0
å
h 8, 0x, 0X
å
h 16.
– Ch s kt thúc bng L, l: long, U, u: unsigned.
• Kí t khác:
– ; kt thúc mt câu lnh.
– {} bt đu và kt thúc khi chng trình.
– ‘’bt đu và kt thúc hng ký t.
– “”bt đu và kt thúc hng xâu ký t.
• Nu xâu kí t dài hn mt dòng thì đt du \ trc khi xung dòng.
– …
• Kí t đc bit:
– \n: xung dòng, \b: backspace, \t: tab, \0: null, \r: cr, \f: lf,
Bài ging C++. 14/10/2008
V.S.Nam. B/m KTHT, khoa CNTT, HXD
3
2.1 C
2.1 C
¸
¸
c ph
c ph
Ç
Ç
n t
n t
ö
ö
ng
ng
«
«
n ng
n ng
÷
÷
c
c
¬
¬
b
b
¶
¶
n
n
2.1.1 Tp ký t, tp t khóa và tên
– Tp t khóa
• Kiu d liu:
– char, int, short, long, float, double, signed, unsigned, …
– void, enum, struct, union, typedef, …
• Lnh:
– if, else, switch, while, do, for, …
– break, continue, goto, return, …
• Lu tr d liu và chuyn đi ngôn ng lp trình:
– auto, const, extern, register, static, …
– asm, pascal, …
• T khóa ca C++ b sung vào C:
– new, delete, inline, operator, …
– class, public, protected, private, this, friend, virtual, …
Bài ging C++. 14/10/2008
V.S.Nam. B/m KTHT, khoa CNTT, HXD
4
2.1 C
2.1 C
¸
¸
c ph
c ph
Ç
Ç
n t
n t
ö
ö
ng
ng
«
«
n ng
n ng
÷
÷
c
c
¬
¬
b
b
¶
¶
n
n
2.1.1 Tp ký t, tp t khóa và tên
– Tên
• Ly t tp kí t ngôn ng:
– Phân bit ch cái hoa, thng.
– Không đc khai báo tên trùng t khóa.
• Quy cách đt tên:
– Cha ch cái, ch s, du gch ni ( _ ).
– Không cha du cách, du ca phép toán.
– Ký t đu tiên phi là ch cái hoc du gch ni.
– dài mc đnh là 32.
Bài ging C++. 14/10/2008
V.S.Nam. B/m KTHT, khoa CNTT, HXD
5
2.1 C
2.1 C
¸
¸
c ph
c ph
Ç
Ç
n t
n t
ö
ö
ng
ng
«
«
n ng
n ng
÷
÷
c
c
¬
¬
b
b
¶
¶
n
n
2.1.2 Các kiu d liu c s
– Kiu s nguyên
• int å 2 byte.
• Các kiu bin th ca int:
– unsigned int (int là kiu vit ngm đnh ca signed int)
– short int, vit gn là short (s khác nhau gia short và int?)
• long int, vit gn là long å 4 byte.
• Các kiu bin th ca long:
– unsigned long int, vit gn là unsigned long (long int là ngm đnh ca
signed long int)
• Phm vi biu din ? ä s byte
• Chú ý khi gán giá tr kiu nguyên:
– S dng long
å
có L hoc l cui
– S trong h c s 8 (16)
å
có 0 (0x, 0X) đu.
Bài ging C++. 14/10/2008
V.S.Nam. B/m KTHT, khoa CNTT, HXD
6
2.1 C
2.1 C
¸
¸
c ph
c ph
Ç
Ç
n t
n t
ö
ö
ng
ng
«
«
n ng
n ng
÷
÷
c
c
¬
¬
b
b
¶
¶
n
n
2.1.2 Các kiu d liu c s
– Kiu s thc (s du chm đng):
• float å 4 byte
• double å 8 byte, long double å 10 byte
• Biu din s thc trong máy tính:
– chính xác biu din ?
– Chun IEEE 754: v = s * m * 2
e
• VD: (-1)
S
* (1,f1 f2 … f23) * 2
E-127
(E: 8 bit)
• VD: (-1)
S
* (1,f1 f2 … f52) * 2
E-1023
(E: 11 bit)
– Chú ý v phm vi biu din: [-max … -min] _ [min … max]
–
å
không nên so sánh bng vi các s thc !
• Lu ý hai ký pháp vit s du chm đng:
– Kiu thông thng (dng thp phân).
– Kiu khoa hc (dng m): 1E5, 1.234E-5, 12.345e6, -123.45e-6
Bài ging C++. 14/10/2008
V.S.Nam. B/m KTHT, khoa CNTT, HXD
7
2.1 C
2.1 C
¸
¸
c ph
c ph
Ç
Ç
n t
n t
ö
ö
ng
ng
«
«
n ng
n ng
÷
÷
c
c
¬
¬
b
b
¶
¶
n
n
2.1.2 Các kiu d liu c s
– Kiu ký t
• char å 1 byte (kiu vit ngm đnh ca signed char ).
– Kiu khác : unsigned char.
• C cho phép thao tác vi ký t nh s nguyên !
– C xem hng kí t là kiu nguyên
å
kích thc 2 byte.
• VD: ‘\141’ ~ ‘a’ ä bng mã ASCII (a ~ 97 ~ 0141)
– C++ xem hng ký t là kiu char
å
kích thc 1 byte.
• Chú ý: ‘a’ ≠ “a”.
– Kiu không xác đnh (rng) : void.
– Các kiu C++ b sung vào C : bool, wchar_t.
• Kiu bool: có giá tr true và false (~ Pascal).
• Kiu wchar_t: dùng cho các tp ký t ln hn (víd Unicode).
Bài ging C++. 14/10/2008
V.S.Nam. B/m KTHT, khoa CNTT, HXD
8
2.1 C
2.1 C
¸
¸
c ph
c ph
Ç
Ç
n t
n t
ö
ö
ng
ng
«
«
n ng
n ng
÷
÷
c
c
¬
¬
b
b
¶
¶
n
n
2.1.3 Bin và hng
– Khai báo bin
• Kiu_d_liu tên_bin;
– VD: int m, n; float x, y;
• ≠ Pascal ?
– Khai báo mi ni trong chng trình (≠ ANSI C ? ≠ Pascal ?)
– Có th khi to giá tr ngay khi khai báo bin (≠ Pascal ?)
– Khai báo hng
• const tên_kiu_d_liu tên_hng = giá_tr;
– VD: const int MAX = 100;
• #define tên_hng xâu_giá_tr (hng tng trng)
– VD: #define MAX 100
• Biu din hng
– Phân bit hng theo kiu d liu (int, long int, char, float, …).
Bài ging C++. 14/10/2008
V.S.Nam. B/m KTHT, khoa CNTT, HXD
9
2.2 Bi
2.2 Bi
Ó
Ó
u th
u th
ø
ø
c
c
2.2.1 Biu thc
– Biu thc:
• Kt hp phép toán và toán hng å din đt công thc.
– Toán hng: hng, bin, biu thc con, li gi hàm, …
– Phép toán: 1 ngôi, 2 ngôi, 3 ngôi.
• Biu thc đc phân bit theo kiu giá tr: nguyên và thc.
• Mnh đ logic đc xem là có giá tr nguyên, đúng ~ giá tr khác
không (=1) và sai ~ giá tr không (=0).
– So vi Pascal:
• Pascal: đúng ~ True, sai ~ False.
• Trong C++ có th đnh ngha li:
– #define TRUE 1
– #define FALSE 0
– Tuy vy dùng quen
å
không cn thit.
• C++ đa vào nhiu quan nim mi v biu thc: biu thc gán,
biu thc điu kin…
Bài ging C++. 14/10/2008
V.S.Nam. B/m KTHT, khoa CNTT, HXD
2.2 Bi
2.2 Bi
Ó
Ó
u th
u th
ø
ø
c
c
2.2.2 Phép toán s hc, quan h, logic và thao tác bit
– Phép toán đi du (1 ngôi): -
– Các phép toán s hc ( 2 ngôi): +, -, *, /, %
• Là các phép toán cho c kiu nguyên và thc.
• Phép toán / trên kiu nguyên ~ phép toán div trên Pascal.
• Phép toán % ch dùng cho kiu nguyên ~ phép toán mod trên
Pascal.
– Các phép toán quan h ( 2 ngôi): >, >=, <, <=, ==, !=
• Chú ý 2 phép toán == (~ phép toán = trên Pascal) và != (~ phép toán <>
trên Pascal)
– Các phép toán logic: &&, || (2 ngôi), ! (1 ngôi)
• Chú ý phép ph đnh 1 ngôi !
– Các phép toán thao tác trên bit ( 2 ngôi): &, |, ^, <<, >>, ~
• Chú ý 2 phép << và >>
• Chú ý phép ~ (phép bù 1) và ^ (phép hoc loi tr)
Bài ging C++. 14/10/2008
V.S.Nam. B/m KTHT, khoa CNTT, HXD
2.2 Bi
2.2 Bi
Ó
Ó
u th
u th
ø
ø
c
c
2.2.3 Biu thc gán, biu thc điu kin và phép
toán tng, gim 1 đn v
– Biu thc gán: bin = biu thc
• Lnh gán: bin = biu thc;
• Có th s dng cùng các phép toán s hc.
– Ký pháp đc bit:
• Cho phép thc hin phép toán s hc, x lý bit gn hn
• +=, -=, *=, /=, %=, &=, |=, ^=, >>=, <<=
– Biu thc điu kin: expr1 ? expr 2 : expr 3
• Kiu ca biu thc bao trùm kiu ca expr2 và expr3.
• Có th dùng nh các biu thc khác, ví d:
• S=a>b?(a>c?a:c):(b>c?b:c);
– Phép toán tng, gim 1 đn v: ++,
• Trong mt biu thc, vic thc hin trc hay sau ph thuc vào
v trí phép toán (tin t, hu t).
Bài ging C++. 14/10/2008
V.S.Nam. B/m KTHT, khoa CNTT, HXD
2.2 Bi
2.2 Bi
Ó
Ó
u th
u th
ø
ø
c
c
2.2.4 Phép toán chuyn kiu, ly đa ch, ly kích
thc b nh và phm vi
– Chuyn kiu (ép kiu): (kiu) biu thc hoc: kiu (biu thc)
• C không cho phép s dng ký pháp th hai.
• C++ có th t đng chuyn kiu å th t: char – int – long – float
– double – long double.
– Phép toán ly đa ch: &bin
• Ch ra giá tr đa ch ca bin, không s dng cho hng, biu thc.
– Phép toán ly kích thc b nh: sizeof(bin)
• Ly kích thc theo byte
– Phép toán phm vi: ::bin (không có trong C)
• Cn ti khi s dng bin toàn cc trùng tên bin cc b.
Bài ging C++. 14/10/2008
V.S.Nam. B/m KTHT, khoa CNTT, HXD
2.2 Bi
2.2 Bi
Ó
Ó
u th
u th
ø
ø
c
c
2.2.5 Quy tc thc hin biu thc
Mc Phép toán Th t thc hinMc Phép toán Th t thc hin
1:: (phm vi, không có trong C) 9 & (phép toán và bit) Trái sang phi
2 ( ), [ ], ->, . (truy nhp thành
phn bin cu trúc)
Trái sang phi 10 (phép toán hoc bit)| Trái sang phi
3 !, ~, ++, , -, () (chuyn kiu),
* (tham chiu ni dung bin
tr), & (đa ch), sizeof
Phi sang trái 11 ^ (phép toán hoc li tr
bit
Trái sang phi
4 *, /, % (phép toán s hc) Trái sang phi 12 && (phép toán và lôgic) Trái sang phi
5 +, - (phép toán s hc) Trái sang phi 13 || (phép toán hoc lôgic) Trái sang phi
6 <<, >> (dch trái, dch phi
bit)
Trái sang phi 14 ? : (phép toán điu kin) Phi sang trái
7 <, <=, >, >= (phép toán so
sánh)
Trái sang phi 15 =, +=, -=, *=, /=, %=,
>>=, <<=, &=, |=, ^=
Phi sang trái
8 ==, != (phép toán so sánh) Trái sang phi16, (ngn cách biu thc
trong mt lnh)
Bài ging C++. 14/10/2008
V.S.Nam. B/m KTHT, khoa CNTT, HXD
2.3 V
2.3 V
µ
µ
o/ra d
o/ra d
÷
÷
li
li
Ö
Ö
u
u
2.3.1 Vào/ra vi các th vin stdio.h, conio.h
– Th vin vào/ra
• stdio.h khai báo các hàm vào/ra chun không ph thuc thit b.
• conio.h khai báo các hàm vào/ra s dng các thit b xác đnh
(bàn phím, màn hình, …) ~ th vin crt trong Pascal.
• C++ cung cp thêm th vin iostream.h gm mt s đi tng và
phép toán vào ra vi mt s đc tính mi.
– C ch vào/ra:
• S dng vùng đm (buffer) trong RAM.
– Vào: thit b vào
å
vùng đm
å
quy cách
å
giá tr
å
chng trình.
– Ra: chng trình
å
giá tr
å
vùng đm
å
quy cách
å
thit b ra.
• Vào/ra có quy cách (format): printf, scanf, …
• C++ cung cp thêm các đi tng vào/ra (cin, cout) và các phép
toán tng ng (<<, >>).
Bài ging C++. 14/10/2008
V.S.Nam. B/m KTHT, khoa CNTT, HXD
2.3 V
2.3 V
µ
µ
o/ra d
o/ra d
÷
÷
li
li
Ö
Ö
u
u
2.3.1 Vào/ra vi các th vin stdio.h, conio.h
– Mt s hàm đn gin
• clrscr å xóa màn hình
– ~ clrscr trong Pascal.
• getch å chn mt phím, hàm tr v kí t va bm (hoc đã có sn
trong buffer)
– ~ readkey / keypressed trong Pascal.
– Mt s hàm khác:
• putchar/getchar: vào ra vi ký t.
• puts/gets: vào ra vi xâu ký t.
• putch, getche, …
– c thêm tài liu tra cu v các hàm vào/ra trên.
• Chú ý: tùy vào trình dch mà các hàm vào/ra có th khác nhau !
Bài ging C++. 14/10/2008
V.S.Nam. B/m KTHT, khoa CNTT, HXD
2.3 V
2.3 V
µ
µ
o/ra d
o/ra d
÷
÷
li
li
Ö
Ö
u
u
2.3.2 Hàm printf
– Cú pháp: printf(<đnh dng> [, <tham s>]);
• Hàm tr v s kí t, li å -1
• <đnh dng>: xâu “điu khin” cha “đnh dng” (bt đu bng %)
• [, <tham s>]: danh sách các giá tr (hng, bin, biu thc, …) cn
đa ra (có th có hoc không)
• VD: printf ( “ Can bac 2 cua %d la : %f ”, x, sqrt (x) );
– Các đnh dng đn gin thng gp:
• S nguyên: %d, %i, %ld, %li, %o, %lo, %u, %x, %lx, %X, …
• S thc: %f, %lf, %e, %E, …
• S thc: %g, %G, …
• Ký t, xâu: %c, %s, …
• Khác: %p, …
Bài ging C++. 14/10/2008
V.S.Nam. B/m KTHT, khoa CNTT, HXD
2.3 V
2.3 V
µ
µ
o/ra d
o/ra d
÷
÷
li
li
Ö
Ö
u
u
2.3.2 Hàm printf
– Ghi v trí theo quy cách:
• %4d, %5.2f, %17.7e, …
• %20s, %-10s, …
• %*.5f, …
– Chú ý v con s đnh dng và kiu trình bày
• VD: printf ( “ %-4d , %5.3f ”, n, x );
• VD: printf ( “ %f , %*.2f “, x, n, y );
– Trong xâu điu khin có th:
• Cha các kí t thông thng hoc các kí t điu khin (\n, \f, …)
• Không đa ra giá tr å xâu điu khin phi là hng, không là
bin.
– c thêm tài liu tra cu v các đnh dng trên.
Bài ging C++. 14/10/2008
V.S.Nam. B/m KTHT, khoa CNTT, HXD
2.3 V
2.3 V
µ
µ
o/ra d
o/ra d
÷
÷
li
li
Ö
Ö
u
u
2.3.3 Hàm scanf
– Cú pháp: scanf(<đnh dng> [, <tham s>]);
• Hàm tr v s giá tr nhn đc
• <đnh dng>: xâu “điu khin” cha “đnh dng” (bt đu bng %)
• [, <tham s>]: danh sách các đa ch bin lu tr giá tr đc vào.
• VD: scanf ( “%d%f ”, &n, &x );
– Các đnh dng đn gin thng gp:
• S nguyên: %d, %ld, %o, %lo, %x, %lx, …
• S thc: %f, %lf, %e, %le, …
• Ký t, xâu: %c, %s, …
• Không cha s v trí nh trong printf.
Bài ging C++. 14/10/2008
V.S.Nam. B/m KTHT, khoa CNTT, HXD
2.3 V
2.3 V
µ
µ
o/ra d
o/ra d
÷
÷
li
li
Ö
Ö
u
u
2.3.3 Hàm scanf
– Chú ý khi dùng hàm scanf
• Các giá tr vào cách nhau bi du cách, tab hoc xung dòng.
– Nu không có giá tr vào, bin s gi nguyên giá tr trc khi đc.
• Khi nhp nhiu giá tr å tn ti ký t xung dòng trong b đm
– Có th s dng hàm fflush(stdin) đ b qua các kí t xung dòng.
– Cng có th dùng du * sau du %.
• Xâu đnh dng có th cha kí t khác ngoài đnh dng.
– Ngi mi hc ngôn ng C++ cha nên dùng.
– Chú ý: du cách cng là ký t khác
å
không nên có du cách trong
xâu đnh dng.
– c thêm tài liu tra cu v các đnh dng trên.
Bài ging C++. 14/10/2008
V.S.Nam. B/m KTHT, khoa CNTT, HXD
2.3 V
2.3 V
µ
µ
o/ra d
o/ra d
÷
÷
li
li
Ö
Ö
u
u
2.3.4 Vào/ra vi các đi tng cin, cout
– Th vin iostream.h (không có trong C).
• Các đi tng vào/ra: cin ~ bàn phím, cout ~ màn hình.
• S dng các phép toán << (xut) và >> (nhp).
– Ghi d liu lên thit b ra chun (màn hình).
• Lnh: cout << giá tr;
• Giá tr có th có kiu bt k: kiu d liu c s, xâu kí t, con tr.
• Nu mun đa ra con tr char *, phi chuyn kiu tng minh.
– c d liu t thit b vào chun (bàn phím).
• Lnh: cin >> giá tr;
• Giá tr, quy c, … xem phép toán <<
• Ngoài vic s dng hàm fflush(stdin) có th dùng lnh: cin.clear();
Bài ging C++. 14/10/2008
V.S.Nam. B/m KTHT, khoa CNTT, HXD
2.4 C
2.4 C
¸
¸
c l
c l
Ö
Ö
nh
nh
®
®
iÒu khi
iÒu khi
Ó
Ó
n
n
2.4.1 Câu lnh và khi lnh
– Câu lnh (lnh đn)
• Biu thc gán kt thúc bng du “;”.
• Li gi hàm kt thúc bng du “;”.
• Các câu lnh có th vit liên tip, cách nhau bng du “,”.
– Khi lnh (lnh ghép)
• Tp hp các lnh đc bao bi 2 du “{” và “}”.
• Các lnh thành phn s đc thc hin tun t.
– Chú ý: C++ cho phép khai báo bin ti v trí bt kì trong
chng trình
• C yêu cu khai báo bin trc tt c các câu lnh trong khi lnh (hay
hàm)å
khó theo dõi chng trình hn.
• Pascal thm chí yêu cu khai báo bin ngay t đu chng trình å rt
khó theo dõi chng trình.
Bài ging C++. 14/10/2008
V.S.Nam. B/m KTHT, khoa CNTT, HXD
2.4 C
2.4 C
¸
¸
c l
c l
Ö
Ö
nh
nh
®
®
iÒu khi
iÒu khi
Ó
Ó
n
n
2.4.2 Các lnh r nhánh if [else] và switch
– Lnh if [else]
if (điu kin) lnh 1
[else lnh 2]
hoc [else if (điu kin 1) lnh 3 … else lnh n]
(“lnh” đây có th là câu lnh hoc khi lnh).
– Thc hin
• Cú pháp lnh if có mt s ch khác Pascal: ngoc đn quanh biu
thc điu kin, cho phép gi hàm trong biu thc điu kin, phi
có du “;” sau câu lnh (lnh đn) cui cùng trc else.
• C++ quy c else đi theo if gn nht. Khi cn thit, có th dùng
du khi lnh “{ … }” đ ch rõ else nào tng ng if nào.
• Cách vit if (biu thc !=0) là tng đng vi if (biu thc)
– Ví d: tìm giá tr ln nht, có và không dùng else.
Bài ging C++. 14/10/2008
V.S.Nam. B/m KTHT, khoa CNTT, HXD
2.4 C
2.4 C
¸
¸
c l
c l
Ö
Ö
nh
nh
®
®
iÒu khi
iÒu khi
Ó
Ó
n
n
2.4.2 Các lnh r nhánh if [else] và switch
– Lnh switch
switch (điu kin) {
case giá tr 1: [lnh 1] [break; ]
case giá tr 2: [lnh 2] [break; ]
…
default: [lnh n] [break; ]
}
(“lnh” đây có th là câu lnh hoc khi lnh)
– Thc hin
• T khóa default là tùy chn và không cn cui. Nu b lnh
break, switch s thc hin tip các lnh tip theo.
• Giá tr sau case là s nguyên, kí t, biu thc hng, các lnh sau
du “:” (nu có) không cn du khi lnh “{ … }”.
– Ví d: hin th ngày tháng, có và không dùng break, default
Bài ging C++. 14/10/2008
V.S.Nam. B/m KTHT, khoa CNTT, HXD
2.4 C
2.4 C
¸
¸
c l
c l
Ö
Ö
nh
nh
®
®
iÒu khi
iÒu khi
Ó
Ó
n
n
2.4.3 Các lnh to vòng lp while, for và do while
– Lnh while
while (điu kin) lnh
(“lnh” đây có th là câu lnh hoc khi lnh).
– Thc hin
• Lnh while trong C++ ging lnh while do trong Pascal: trong khi
điu kin còn đúng (khác 0) thì thc hin lnh (khi lnh).
• iu kin đây đc hiu là giá tr biu thc : =0 ~ sai, ≠0 ~ đúng.
– Ví d:
• Thao tác vi các loi biu thc điu kin
• Vit câu lnh trong biu thc điu kin (#Pascal)
• Chú ý v li vòng lp vô hn
Bài ging C++. 14/10/2008
V.S.Nam. B/m KTHT, khoa CNTT, HXD
2.4 C
2.4 C
¸
¸
c l
c l
Ö
Ö
nh
nh
®
®
iÒu khi
iÒu khi
Ó
Ó
n
n
2.4.3 Các lnh to vòng lp while, for và do while
– Lnh for
for ([bt1]; [bt2]; [bt3]) lnh
(“lnh” đây có th là câu lnh hoc khi lnh).
– Thc hin
• bt1 và bt3 thng là các phép gán hoc li gi hàm, bt2 thng là
biu thc quan h hoc lôgic.
• Có th dùng bt2 nh mt phng tin xác đnh s bc lp, có th
dùng nhiu vòng for lng nhau, …
– Ví d:
• Vòng lp for th hin s ln lp xác đnh
• Các cách s dng đc bit ca vòng lp for
• Vit câu lnh trong các biu thc thuc vòng for (#Pascal)