Tải bản đầy đủ (.pdf) (65 trang)

Bài 1 : Cấu Trúc Của Một Chương Trình C++ ppsx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (395.36 KB, 65 trang )

Bài 1 : C u Trúc C a M t Ch ng Trình C++ấ ủ ộ ươ
Có l m t trong nh ng cách t t nh t đ b t đ u h c m t ngôn ng l p trình là b ngẽ ộ ữ ố ấ ể ắ ầ ọ ộ ữ ậ ằ
m t ch ng trình. V y đây là ch ng trình đ u tiên c a chúng ta :ộ ươ ậ ươ ầ ủ
// my first program in C++

#include <iostream.h>

int main ()
{
cout << "Hello World!";
return 0;
}
Hello World!
Ch ng trình trên đây là ch ng trình đ u tiên mà h u h t nh ng ng i h c ngh l pươ ươ ầ ầ ế ữ ườ ọ ề ậ
trình vi t đ u tiên và k t qu c a nó là vi t câu "Hello, World" lên màn hình. Đây làế ầ ế ả ủ ế
m t trong nh ng ch ng trình đ n gi n nh t có th vi t b ng C++ nh ng nó đã baoộ ữ ươ ơ ả ấ ể ế ằ ư
g m nh ng ph n c b n mà m i ch ng trình C++ có. Hãy cùng xem xét t ng dòngồ ữ ầ ơ ả ọ ươ ừ
m t :ộ
// my first program in C++
Đây là dòng chú thích. T t c các dòng b t đ u b ng hai d u s (//) đ c coi là chútấ ả ắ ầ ằ ấ ổ ượ
thích mà chúng không có b t kì m t nh h ng nào đ n ho t đ ng c a ch ng trình.ấ ộ ả ưở ế ạ ộ ủ ươ
Chúng có th đ c các l p trình viên dùng đ gi i thích hay bình ph m bên trong mãể ượ ậ ể ả ẩ
ngu n c a ch ng trình. Trong tr ng h p này, dòng chú thích là m t gi i thích ng nồ ủ ươ ườ ợ ộ ả ắ
g n nh ng gì mà ch ng trình chúng ta làm.ọ ữ ươ
#include <iostream.h>
Các câu b t đ u b ng d u (#) đ c dùng cho preprocessor (ai d ch h tôi t này v i).ắ ầ ằ ấ ượ ị ộ ừ ớ
Chúng không ph i là nh ng dòng mã th c hi n nh ng đ c dùng đ báo hi u cho trìnhả ữ ự ệ ư ượ ể ệ
d ch. đây câu l nh ị Ở ệ #include <iostream.h> báo cho trình d ch bi t c n ph iị ế ầ ả
"include" th vi n ư ệ iostream. Đây là m t th vi n vào ra c b n trong C++ và nó ph iộ ư ệ ơ ả ả
đ c "include" vì nó s đ c dùng trong ch ng trình. Đây là cách c đi n đ sượ ẽ ượ ươ ổ ể ể ử
d ng th vi n ụ ư ệ iostream


int main ()
Dòng này t ng ng v i ph n b t đ u khai báo hàm ươ ứ ớ ầ ắ ầ main. Hàm main là đi m mà t tể ấ
c các ch ng trình C++ b t đ u th c hi n. Nó không ph thu c vào v trí c a hàmả ươ ắ ầ ự ệ ụ ộ ị ủ
này ( đ u, cu i hay gi a c a mã ngu n) mà n i dung c a nó luôn đ c th c hi nở ầ ố ở ữ ủ ồ ộ ủ ượ ự ệ
đ u tiên khi ch ng trình b t đ u. Thêm vào đó, do nguyên nhân nói trên, m i ch ngầ ươ ắ ầ ọ ươ
trình C++ đ u ph i t n t i m t hàm ề ả ồ ạ ộ main.
Theo sau main là m t c p ngo c đ n b i vì nó là m t hàm. Trong C++, t t c các hàmộ ặ ặ ơ ở ộ ấ ả
mà sau đó là m t c p ngo c đ n () thì có nghĩa là nó có th có ho c không có tham sộ ặ ặ ơ ể ặ ố
(không b t bu c). N i dung c a hàm main ti p ngay sau ph n khai báo chính th cắ ộ ộ ủ ế ầ ứ
đ c bao trong các ngo c nh n ( ượ ặ ọ { } ) nh trong ví d c a chúng taư ụ ủ
cout << "Hello World";
Dòng l nh này làm vi c quan tr ng nh t c a ch ng trình. ệ ệ ọ ấ ủ ươ cout là m t dòng (stream)ộ
output chu n trong C++ đ c đ nh nghĩa trong th vi n ẩ ượ ị ư ệ iostream và nh ng gì mà dòngữ
l nh này làm là g i chu i kí t ệ ử ỗ ự "Hello World" ra màn hình.
Chú ý r ng dòng này k t thúc b ng d u ch m ph y ( ; ). Kí t này đ c dùng đ k tằ ế ằ ấ ấ ẩ ự ượ ể ế
thúc m t l nh và b t bu c ph i có sau m i l nh trong ch ng trình C++ c a b n (m tộ ệ ắ ộ ả ỗ ệ ươ ủ ạ ộ
trong nh ng l i ph bi n nh t c a nh ng l p trình viên C++ là quên m t d u ch mữ ỗ ổ ế ấ ủ ữ ậ ấ ấ ấ
ph y).ẩ
return 0;
L nh ệ return k t thúc hàm main và tr v mã đi sau nó, trong tr ng h p này là 0. Đâyế ả ề ườ ợ
là m t k t thúc bình th ng c a m t ch ng trình không có m t l i nào trong quá trìnhộ ế ườ ủ ộ ươ ộ ỗ
th c hi n. Nh b n s th y trong các ví d ti p theo, đây là m t cách ph bi n nh tự ệ ư ạ ẽ ấ ụ ế ộ ổ ế ấ
đ k t thúc m t ch ng trình C++. ể ế ộ ươ
Ch ng trình đ c c u trúc thành nh ng dòng khác nhau đ nó tr nên d đ c h nươ ượ ấ ữ ể ở ễ ọ ơ
nh ng hoàn toàn không ph i b t bu c ph i làm v y. Ví d , thay vì vi t ư ả ắ ộ ả ậ ụ ế
int main ()
{
cout << " Hello World ";
return 0;
}

ta có th vi t ể ế
int main () { cout << " Hello World "; return 0; }
cũng cho m t k t qu chính xác nh nhau. ộ ế ả ư
Trong C++, các dòng l nh đ c phân cách b ng d u ch m ph y ( ;). Vi c chia ch ngệ ượ ằ ấ ấ ẩ ệ ươ
trình thành các dòng ch nh m đ cho nó d đ c h n mà thôi. ỉ ằ ể ễ ọ ơ
Các chú thích.
Các chú thích đ c các l p trình viên s d ng đ ghi chú hay mô t trong các ph n c aượ ậ ử ụ ể ả ầ ủ
ch ng trình. Trong C++ có hai cách đ chú thíchươ ể
// Chú thích theo dòng
/* Chú thích theo kh i */ố
Chú thích theo dòng b t đ u t c p d u x (//) cho đ n cu i dòng. Chú thích theo kh iắ ầ ừ ặ ấ ổ ế ố ố
b t đ u b ng ắ ầ ằ /* và k t thúc b ng ế ằ */ và có th bao g m nhi u dòng. Chúng ta s thêmể ồ ề ẽ
các chú thích cho ch ng trình : ươ
/* my second program in C++ Hello World! I'm a C++ program
with more comments */

#include <iostream.h>

int main ()
{
cout << "Hello World! ";
// says Hello World!
cout << "I'm a C++ program";
// says I'm a C++ program
return 0;
}
N u b n vi t các chú thích trong ch ng trình mà không s d ng các d u //, /* hay */,ế ạ ế ươ ử ụ ấ
trình d ch s coi chúng nh là các l nh C++ và s hi n th các l i. ị ẽ ư ệ ẽ ể ị ỗ

Bài 1 : C u Trúc C a M t Ch ng Trình C++ấ ủ ộ ươ

Có l m t trong nh ng cách t t nh t đ b t đ u h c m t ngôn ng l p trình là b ngẽ ộ ữ ố ấ ể ắ ầ ọ ộ ữ ậ ằ
m t ch ng trình. V y đây là ch ng trình đ u tiên c a chúng ta :ộ ươ ậ ươ ầ ủ
// my first program in C++

#include <iostream.h>

int main ()
{
cout << "Hello World!";
return 0;
}
Hello World!
Ch ng trình trên đây là ch ng trình đ u tiên mà h u h t nh ng ng i h c ngh l pươ ươ ầ ầ ế ữ ườ ọ ề ậ
trình vi t đ u tiên và k t qu c a nó là vi t câu "Hello, World" lên màn hình. Đây làế ầ ế ả ủ ế
m t trong nh ng ch ng trình đ n gi n nh t có th vi t b ng C++ nh ng nó đã baoộ ữ ươ ơ ả ấ ể ế ằ ư
g m nh ng ph n c b n mà m i ch ng trình C++ có. Hãy cùng xem xét t ng dòngồ ữ ầ ơ ả ọ ươ ừ
m t :ộ
// my first program in C++
Đây là dòng chú thích. T t c các dòng b t đ u b ng hai d u s (//) đ c coi là chútấ ả ắ ầ ằ ấ ổ ượ
thích mà chúng không có b t kì m t nh h ng nào đ n ho t đ ng c a ch ng trình.ấ ộ ả ưở ế ạ ộ ủ ươ
Chúng có th đ c các l p trình viên dùng đ gi i thích hay bình ph m bên trong mãể ượ ậ ể ả ẩ
ngu n c a ch ng trình. Trong tr ng h p này, dòng chú thích là m t gi i thích ng nồ ủ ươ ườ ợ ộ ả ắ
g n nh ng gì mà ch ng trình chúng ta làm.ọ ữ ươ
#include <iostream.h>
Các câu b t đ u b ng d u (#) đ c dùng cho preprocessor (ai d ch h tôi t này v i).ắ ầ ằ ấ ượ ị ộ ừ ớ
Chúng không ph i là nh ng dòng mã th c hi n nh ng đ c dùng đ báo hi u cho trìnhả ữ ự ệ ư ượ ể ệ
d ch. đây câu l nh ị Ở ệ #include <iostream.h> báo cho trình d ch bi t c n ph iị ế ầ ả
"include" th vi n ư ệ iostream. Đây là m t th vi n vào ra c b n trong C++ và nó ph iộ ư ệ ơ ả ả
đ c "include" vì nó s đ c dùng trong ch ng trình. Đây là cách c đi n đ sượ ẽ ượ ươ ổ ể ể ử
d ng th vi n ụ ư ệ iostream

int main ()
Dòng này t ng ng v i ph n b t đ u khai báo hàm ươ ứ ớ ầ ắ ầ main. Hàm main là đi m mà t tể ấ
c các ch ng trình C++ b t đ u th c hi n. Nó không ph thu c vào v trí c a hàmả ươ ắ ầ ự ệ ụ ộ ị ủ
này ( đ u, cu i hay gi a c a mã ngu n) mà n i dung c a nó luôn đ c th c hi nở ầ ố ở ữ ủ ồ ộ ủ ượ ự ệ
đ u tiên khi ch ng trình b t đ u. Thêm vào đó, do nguyên nhân nói trên, m i ch ngầ ươ ắ ầ ọ ươ
trình C++ đ u ph i t n t i m t hàm ề ả ồ ạ ộ main.
Theo sau main là m t c p ngo c đ n b i vì nó là m t hàm. Trong C++, t t c các hàmộ ặ ặ ơ ở ộ ấ ả
mà sau đó là m t c p ngo c đ n () thì có nghĩa là nó có th có ho c không có tham sộ ặ ặ ơ ể ặ ố
(không b t bu c). N i dung c a hàm main ti p ngay sau ph n khai báo chính th cắ ộ ộ ủ ế ầ ứ
đ c bao trong các ngo c nh n ( ượ ặ ọ { } ) nh trong ví d c a chúng taư ụ ủ
cout << "Hello World";
Dòng l nh này làm vi c quan tr ng nh t c a ch ng trình. ệ ệ ọ ấ ủ ươ cout là m t dòng (stream)ộ
output chu n trong C++ đ c đ nh nghĩa trong th vi n ẩ ượ ị ư ệ iostream và nh ng gì mà dòngữ
l nh này làm là g i chu i kí t ệ ử ỗ ự "Hello World" ra màn hình.
Chú ý r ng dòng này k t thúc b ng d u ch m ph y ( ; ). Kí t này đ c dùng đ k tằ ế ằ ấ ấ ẩ ự ượ ể ế
thúc m t l nh và b t bu c ph i có sau m i l nh trong ch ng trình C++ c a b n (m tộ ệ ắ ộ ả ỗ ệ ươ ủ ạ ộ
trong nh ng l i ph bi n nh t c a nh ng l p trình viên C++ là quên m t d u ch mữ ỗ ổ ế ấ ủ ữ ậ ấ ấ ấ
ph y).ẩ
return 0;
L nh ệ return k t thúc hàm main và tr v mã đi sau nó, trong tr ng h p này là 0. Đâyế ả ề ườ ợ
là m t k t thúc bình th ng c a m t ch ng trình không có m t l i nào trong quá trìnhộ ế ườ ủ ộ ươ ộ ỗ
th c hi n. Nh b n s th y trong các ví d ti p theo, đây là m t cách ph bi n nh tự ệ ư ạ ẽ ấ ụ ế ộ ổ ế ấ
đ k t thúc m t ch ng trình C++. ể ế ộ ươ
Ch ng trình đ c c u trúc thành nh ng dòng khác nhau đ nó tr nên d đ c h nươ ượ ấ ữ ể ở ễ ọ ơ
nh ng hoàn toàn không ph i b t bu c ph i làm v y. Ví d , thay vì vi t ư ả ắ ộ ả ậ ụ ế
int main ()
{
cout << " Hello World ";
return 0;
}

ta có th vi t ể ế
int main () { cout << " Hello World "; return 0; }
cũng cho m t k t qu chính xác nh nhau. ộ ế ả ư
Trong C++, các dòng l nh đ c phân cách b ng d u ch m ph y ( ;). Vi c chia ch ngệ ượ ằ ấ ấ ẩ ệ ươ
trình thành các dòng ch nh m đ cho nó d đ c h n mà thôi. ỉ ằ ể ễ ọ ơ
Các chú thích.
Các chú thích đ c các l p trình viên s d ng đ ghi chú hay mô t trong các ph n c aượ ậ ử ụ ể ả ầ ủ
ch ng trình. Trong C++ có hai cách đ chú thíchươ ể
// Chú thích theo dòng
/* Chú thích theo kh i */ố
Chú thích theo dòng b t đ u t c p d u x (//) cho đ n cu i dòng. Chú thích theo kh iắ ầ ừ ặ ấ ổ ế ố ố
b t đ u b ng ắ ầ ằ /* và k t thúc b ng ế ằ */ và có th bao g m nhi u dòng. Chúng ta s thêmể ồ ề ẽ
các chú thích cho ch ng trình : ươ
/* my second program in C++
with more comments */

#include <iostream.h>

int main ()
{
cout << "Hello World! ";
// says Hello World!
cout << "I'm a C++ program";
// says I'm a C++ program
return 0;
}
Hello World! I'm a C++ program
N u b n vi t các chú thích trong ch ng trình mà không s d ng các d u //, /* hay */,ế ạ ế ươ ử ụ ấ
trình d ch s coi chúng nh là các l nh C++ và s hi n th các l i. ị ẽ ư ệ ẽ ể ị ỗ


Bài 3 : Các Toán Tử
Qua bài tr c chúng ta đã bi t đ n s t n t i c a các bi n và các h ng. Trong C++, đướ ế ế ự ồ ạ ủ ế ằ ể
thao tác v i chúng ta s d ng các toán t , đó là các t khoá và các d u không có trongớ ử ụ ử ừ ấ
b ng ch cái nh ng l i có trên h u h t các bàn phím trên th gi i. Hi u bi t v chúngả ữ ư ạ ầ ế ế ớ ể ế ề
là r t quan tr ng vì đây là m t trong nh ng thành ph n c b n c a ngôn ng C++.ấ ọ ộ ữ ầ ơ ả ủ ữ
Toán t gán (ử =).
Toán t gán dùng đ gán m t giá tr nào đó cho m t bi n ử ể ộ ị ộ ế
a = 5;
gán giá tr nguyên 5 cho bi n ị ế a. V trái b t bu c ph i là m t bi n còn v ph iế ắ ộ ả ộ ế ế ả
có th là b t kì h ng, bi n hay k t qu c a m t bi u th c.ể ấ ằ ế ế ả ủ ộ ể ứ
C n ph i nh n m nh r ng toán t gán luôn đ c th c hi n t trái sangầ ả ấ ạ ằ ử ượ ự ệ ừ
ph i và không bao gi đ o ng c ả ờ ả ượ
a = b;
gán giá tr c a bi n ị ủ ế a b ng giá tr đang ch a trong bi n ằ ị ứ ế b. Chú ý r ngằ
chúng ta ch gán ỉ giá trị c a ủ b cho a và s thay đ i c a ự ổ ủ b sau đó s khôngẽ
nh h ng đ n giá tr c a ả ưở ế ị ủ a.
M t thu c tính c a toán t gán trong C++ góp ph n giúp nó v t lên cácộ ộ ủ ử ầ ượ
ngôn ng l p trình khác là vi c cho phép v ph i có th ch a các phépữ ậ ệ ế ả ể ứ
gán khác. Ví d : ụ
a = 2 + (b = 5);
t ng đ ng v i ươ ươ ớ
b = 5;
a = 2 + b;
Vì v y bi u th c sau cũng h p l trong C++ậ ể ứ ợ ệ
a = b = c = 5;
gán giá tr 5 cho c ba bi n ị ả ế a, b và c
Các toán t s h c (ử ố ọ +, -, *, /, % )
Năm toán t s h c đ c h tr b i ngôn ng là:ử ố ọ ượ ỗ ợ ở ữ

+ c ngộ

- trừ
* nhân
/ chia
% l y ph n d (trong phép chia)ấ ầ ư
Th t th c hi n các toán t này cũng gi ng nh chúng đ c th c hi n trongứ ự ự ệ ử ố ư ượ ự ệ
toán h c. Đi u duy nh t có v h i l đ i v i b n là phép l y ph n d , ký hi uọ ề ấ ẻ ơ ạ ố ớ ạ ấ ầ ư ệ
b ng d u ph n trăm (%). Đây chính là phép toán l y ph n d trong phép chiaằ ấ ầ ấ ầ ư
hai s nguyên v i nhau. Ví d , n u ố ớ ụ ế a = 11 % 3;, bi n ế a s mang giá tr 2 vì 11ẽ ị
= 3*3 +2.
Các toán t gán ph c h p (ử ứ ợ +=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=)
M t đ c tính c a ngôn ng C++ làm cho nó n i ti ng là m t ngôn ng súc tíchộ ặ ủ ữ ổ ế ộ ữ
chính là các toán t gán ph c h p cho phép ch nh s a giá tr c a m t bi n v iử ứ ợ ỉ ử ị ủ ộ ế ớ
m t trong nh ng toán t c b n sau:ộ ữ ử ơ ả

value += increase; t ng đ ng v i ươ ươ ớ value = value +
increase;
a -= 5; t ng đ ng v i ươ ươ ớ a = a - 5;
a /= b; t ng đ ng v i ươ ươ ớ a = a / b;
price *= units + 1; t ng đ ng v i ươ ươ ớ price = price *
(units + 1);
và t ng t cho t t c các toán t khác.ươ ự ấ ả ử
Tăng và gi m.ả
M t ví d khác c a vi c ti t ki m khi vi t mã l nh là toán t tăng (++) vàộ ụ ủ ệ ế ệ ế ệ ử
gi m ( ). Chúng tăng ho c gi m giá tr ch a trong m t bi n đi 1. Chúng t ngả ặ ả ị ứ ộ ế ươ
đ ng v i ươ ớ +=1 ho c ặ -=1. Vì v y, các dòng sau là t ng đ ng:ậ ươ ươ

a++;
a+=1;
a=a+1;
M t tính ch t c a toán t này là nó có th là ộ ấ ủ ử ể ti n tề ố ho c ặ h u tậ ố, có nghĩa là có

th vi t tr c tên bi n (ể ế ướ ế ++a) ho c sau (ặ a++) và m c dù trong hai bi u th c r tặ ể ứ ấ
đ n gi n đó nó có cùng ý nghĩa nh ng trong các thao tác khác khi mà k t quơ ả ư ế ả
c a vi c tăng hay gi m đ c s d ng trong m t bi u th c thì chúng có th cóủ ệ ả ượ ử ụ ộ ể ứ ể
m t khác bi t quan tr ng v ý nghĩa: Trong tr ng h p toán t đ c s d ngộ ệ ọ ề ườ ợ ử ượ ử ụ
nh là m t ti n t (ư ộ ề ố ++a) giá tr đ c tăng tr c khi bi u th c đ c tính và giáị ượ ướ ể ứ ượ
tr đã tăng đ c s d ng trong bi u th c; trong tr ng h p ng c l i (ị ượ ử ụ ể ứ ườ ợ ượ ạ a++) giá
tr trong bi n a đ c tăng sau khi đã tính toán. Hãy chú ý s khác bi t : ị ế ượ ự ệ
Ví d 1ụ Ví d 2ụ
B=3;
A=++B;
// A is 4, B is 4
B=3;
A=B++;
// A is 3, B is 4

Các toán t quan h ( ử ệ ==, !=, >, <, >=, <= )
Đ có th so sánh hai bi u th c v i nhau chúng ta có th s d ng các toán tể ể ể ứ ớ ể ử ụ ử
quan h . Theo chu n ANSI-C++ thì giá tr c a thao tác quan h ch có th là giáệ ẩ ị ủ ệ ỉ ể
tr logic - chúng ch có th có giá tr ị ỉ ể ị true ho c ặ false, tuỳ theo bi u th c k tể ứ ế
qu là đúng hay sai.ả

Sau đây là các toán t quan h b n có th s d ng trong C++ử ệ ạ ể ử ụ
==
B ngằ
!=
Khác
>
L n h nớ ơ
<
Nh h nỏ ơ

> =
L n h n ho c b ngớ ơ ặ ằ
< =
Nh h n ho cỏ ơ ặ
b ngằ
Ví d :ụ
(7 == 5)
s tr giá tr ẽ ả ị false
(6 >= 6)
s tr giá tr ẽ ả ị true
t t nhiên thay vì s d ng các s , chúng ta có th s d ng b t c bi uấ ử ụ ố ể ử ụ ấ ứ ể
th c nào. Cho ứ a=2, b=3 và c=6
(a*b >= c)
s tr giá tr ẽ ả ị true.
(b+4 < a*c)
s tr giá tr ẽ ả ị false

C n chú ý r ng = (m t d u b ng) lf hoàn toàn khác v i == (hai d u b ng). D uầ ằ ộ ấ ằ ớ ấ ằ ấ
đ u tiên là m t toán t gán ( gán giá tr c a bi u th c bên ph i cho bi n bênầ ộ ử ị ủ ể ứ ả ế ở
trái) và d u còn l i (==) là m t toán t quan h nh m so sánh xem hai bi uấ ạ ộ ử ệ ằ ể
th c có b ng nhau hay không.ứ ằ

Trong nhi u trình d ch có tr c chu n ANSI-C++ cũng nh trong ngôn ng C, cácề ị ướ ẩ ư ữ
toán t quan h không tr v giá tr logic ử ệ ả ề ị true ho c ặ false mà tr v giá tr ả ề ị int v i ớ 0
t ng ng v i ươ ứ ớ false còn giá tr khác 0 (th ng là 1) thì t ng ng v i ị ườ ươ ứ ớ true.

Các toán t logic ( ử !, &&, || ).
Toán t ử ! t ng đ ng v i toán t logic NOT, nó ch có m t đ i s phía bênươ ươ ớ ử ỉ ộ ố ố ở
ph i và vi c duy nh t mà nó làm là đ i ng c giá tr c a đ i s t ả ệ ấ ổ ượ ị ủ ố ố ừ true sang
false ho c ng c l i. Ví d :ặ ượ ạ ụ

!(5 == 5)
tr v ả ề false vì bi u th c bên ph i ể ứ ả (5 == 5) có giá
trịtrue.
!(6 <= 4)
tr v ả ề true vì (6 <= 4)có giá tr ị false.
!true
tr v ả ề false.
!false
tr v ả ề true.
Toán t logic ử && và || đ c s d ng khi tính toán hai bi u th c đ l y ra m tượ ử ụ ể ứ ể ấ ộ
k t qu duy nh t. Chúng t ng ng v i các toán t logic ế ả ấ ươ ứ ớ ử AND và OR. K t quế ả
c a chúng ph thu c vào m i quan h c a hai đ i s :ủ ụ ộ ố ệ ủ ố ố
Đ i s thố ố ứ
nh tấ
a
Đ i s th haiố ố ứ
b
K t quế ả
a && b
K t quế ả
a || b
true true true true
true false false true
false true false true
false false false false
Ví d : ụ
( (5 == 5) && (3 > 6) ) tr v ả ề false ( true && false ).
( (5 == 5) || (3 > 6)) tr v ả ề true ( true || false ).
Toán t đi u ki n ( ử ề ệ ? ).
Toán t đi u ki n tính toán m t bi u th c và tr v m t giá tr khác tuỳ thu cử ề ệ ộ ể ứ ả ề ộ ị ộ

vào bi u th c đó là đúng hay sai. C u trúc c a nó nh sau:ể ứ ấ ủ ư
condition ? result1 : result2
N u ế condition là true thì giá tr tr v s là ị ả ề ẽ result1, n u không giá tr tr vế ị ả ề
là result2.
7==5 ? 4 : 3
tr v ả ề 3 vì 7 không b ng ằ 5.
7==5+2 ? 4 : 3
tr v ả ề 4 vì 7 b ng ằ 5+2.
5>3 ? a : b
tr v ả ề a, vì 5 l n h n ớ ơ 3.
a>b ? a : b
tr v giá tr l n h n, ả ề ị ớ ơ a ho cặ
b.

Các toán t thao tác bit ( ử &, |, ^, ~, <<, >> ).
Các toán t thao tác bit thay đ i các bit bi u di n m t bi n, có nghĩa là thay đ iử ổ ể ễ ộ ế ổ
bi u di n nh phân c a chúngể ễ ị ủ
toán tử asm Mô tả
& AND Logical AND
| OR Logical OR
^ XOR Logical exclusive OR
~ NOT Đ o ng c bitả ượ
<< SHL D ch bit sang tráiị
>> SHR D ch bit sang ph iị ả

Các toán t chuy n đ i ki uử ể ổ ể
Các toán t chuy n đ i ki u cho phép b n chuy n đ i d li u t ki u này sangử ể ổ ể ạ ể ổ ữ ệ ừ ể
ki u khác. Có vài cách đ làm vi c này trong C++, cách c b n nh t đ c th aể ể ệ ơ ả ấ ượ ừ
k t ngôn ng C là đ t tr c bi u th c c n chuy n đ i tên ki u d li u đ cế ừ ữ ặ ướ ể ứ ầ ể ổ ể ữ ệ ượ
b c trong c p ngo c đ n ọ ặ ặ ơ (), ví d :ụ

int i;
float f = 3.14;
i = (int) f;
Đo n mã trên chuy n s th p phân 3.14 sang m t s nguyên (3). đây, toán tạ ể ố ậ ộ ố Ở ử
chuy n đ i ki u là (int). M t cách khác đ làm đi u này trong C++ là s d ngể ổ ể ộ ể ề ử ụ
các constructors ( m t s sách thu t ng này đ c d ch là ở ộ ố ậ ữ ượ ị c u t ấ ử nh ng tôiư
th y nó có v không xuôi tai l m) thay vì dùng các toán t : đ t tr c bi u th cấ ẻ ắ ử ặ ướ ể ứ
c n chuy n đ i ki uầ ể ổ ể tên ki u m i và bao b c ể ớ ọ bi u th cể ứ gi a m t c p ngo cữ ộ ặ ặ
đ n. ơ
i = int ( f );
C hai cách chuy n đ i ki u đ u h p l trong C++. Thêm vào đó ANSI-C++ả ể ổ ể ề ợ ệ
còn có nh ng toán t chuy n đ i ki u m i đ c tr ng cho l p trình h ng đ iữ ử ể ổ ể ớ ặ ư ậ ướ ố
t ng.ượ

sizeof()
Toán t này có m t tham s , đó có th là m t ki u d li u hay là m t bi n vàử ộ ố ể ộ ể ữ ệ ộ ế
tr v kích c b ng byte c a ki u hay đ i t ng đó.ả ề ỡ ằ ủ ể ố ượ
a = sizeof (char);
a s mang giá tr 1 vì ki u ẽ ị ể char luôn có kích c 1 byte trên m i h th ng. Giá trỡ ọ ệ ố ị
tr v c a ả ề ủ sizeof là m t h ng s vì v y nó luôn luôn đ c tính tr c khiộ ằ ố ậ ượ ướ
ch ng trình th c hi n.ươ ự ệ

Các toán t khácử
Trong C++ còn có m t s các toán t khác, nh các toán t liên quan đ n conộ ố ử ư ử ế
tr hay l p trình h ng đ i t ng. Chúng s đ c nói đ n c th trong cácỏ ậ ướ ố ượ ẽ ượ ế ụ ể
ph n t ng ng.ầ ươ ứ
Th t u tiên c a các toán tứ ự ư ủ ử
Khi vi t các bi u th c ph c t p v i nhi u toán h ng các b n có th t h i toán h ngế ể ứ ứ ạ ớ ề ạ ạ ể ự ỏ ạ
nào đ c tính tr c, toán h ng nào đ c tính sau. Ví d nh trong bi u th c sau: ượ ướ ạ ượ ụ ư ể ứ
a = 5 + 7 % 2

có th có hai cách hi u sau: ể ể
a = 5 + (7 % 2) v i k t qu là ớ ế ả 6, ho cặ
a = (5 + 7) % 2 v i k t qu là ớ ế ả 0
Câu tr l i đúng là bi u th c đ u tiên. Vì nguyên nhân nói trên, ngôn ng C++ đã thi tả ờ ể ứ ầ ữ ế
l p m t th t u tiên gi a các toán t , không ch riêng các toán t s h c mà t t cậ ộ ứ ự ư ữ ử ỉ ử ố ọ ấ ả
các toán t có th xu t hi n trong C++. Th t u tiên c a chúng đ c li t kê trongử ể ấ ệ ứ ự ư ủ ượ ệ
b ng sau theo th t t cao xu ng th p.ả ứ ự ừ ố ấ

Thứ
tự
Toán tử Mô tả Associativity
1
::
scope Trái
2
() [ ] -> . sizeof
Trái
3
++
tăng/gi mả
Ph iả
~
Đ o ng c bitả ượ
!
NOT
& *
Toán t con trử ỏ
(type)
Chuy n đ i ki uể ổ ể
+ -

D ng ho c âmươ ặ
4
* / %
Toán t s h cử ố ọ Trái
5
+ -
Toán t s h cử ố ọ Trái
6
<< >>
D ch bitị Trái
7
< <= > >=
Toán t quan hử ệ Trái
8
== !=
Toán t quan hử ệ Trái
9
& ^ |
Toán t thao tác bitử Trái
10
&& ||
Toán t logicử Trái
11
?:
Toán t đi u ki nử ề ệ Ph iả
12
= += -= *= /= %=
>>= <<= &= ^= |=
Toán t gánử Ph iả
13

,
D u ph yấ ẩ Trái
Associativity đ nh nghĩa trong tr ng h p có m t vài toán t có cùng th t u tiên thìị ườ ợ ộ ử ứ ự ư
cái nào s đ c tính tr c, toán t phía xa nh t bên ph i hay là xa nh t bên trái.ẽ ượ ướ ử ở ấ ả ấ
N u b n mu n vi t m t bi u th c ph c t p mà l i không ch c l m v th t u tiênế ạ ố ế ộ ể ứ ứ ạ ạ ắ ắ ề ứ ự ư
c a các toán t thì nên s d ng các ngo c đ n. Các b n nênủ ử ử ụ ặ ơ ạ th c hi n đi u này vì nóự ệ ề
s giúp ch ng trình d đ c h n.ẽ ươ ễ ọ ơ
Bài 4 : Các C u Trúc Đi u Khi nấ ề ể
M t ch ng trình th ng không ch bao g m các l nh tu n t n i ti p nhau. Trongộ ươ ườ ỉ ồ ệ ầ ự ố ế
quá trình ch y nó có th r nhánh hay l p l i m t đo n mã nào đó. Đ làm đi u nàyạ ể ẽ ặ ạ ộ ạ ể ề
chúng ta s d ng các c u trúc đi u khi n. ử ụ ấ ề ể
Cùng v i vi c gi i thi u các c u trúc đi u khi n chúng ta cũng s ph i bi t t i m tớ ệ ớ ệ ấ ề ể ẽ ả ế ớ ộ
khái ni m m i: ệ ớ kh i l nhố ệ , đó là m t nhóm các l nh đ c ngăn cách b i d u ch mộ ệ ượ ở ấ ấ
ph yẩ (;) nh ng đ c g p trong m t kh i gi i h n b i m t c p ngo c nh n: ư ượ ộ ộ ố ớ ạ ở ộ ặ ặ ọ { và }.
H u h t các c u trúc đi u khi n mà chúng ta s xem xét trong ch ng này cho phép sầ ế ấ ề ể ẽ ươ ử
d ng m t l nh đ n hay m t kh i l nh làm tham s , tuỳ thu c vào chúng ta có đ t nóụ ộ ệ ơ ộ ố ệ ố ộ ặ
trong c p ngo c nh n hay không.ặ ặ ọ
C u trúc đi u ki n: ấ ề ệ if và else
C u trúc này đ c dùng khi m t l nh hay m t kh i l nh ch đ c th c hi n khi m tấ ượ ộ ệ ộ ố ệ ỉ ượ ự ệ ộ
đi u ki n nào đó tho mãn. D ng c a nó nh sau: ề ệ ả ạ ủ ư
if (condition) statement
trong đó condition là bi u th c s đ c tính toán. N u đi u ki n đó là ể ứ ẽ ượ ế ề ệ true,
statement đ c th c hi n. N u không ượ ự ệ ế statement b b qua (không th c hi n) vàị ỏ ự ệ
ch ng trình ti p t c th c hi n l nh ti p sau c u trúc đi u ki n. ươ ế ụ ự ệ ệ ế ấ ề ệ
Ví d , đo n mã sau đây s vi t ụ ạ ẽ ế x is 100 ch khi bi nỉ ế x ch a giá tr 100: ứ ị
if (x == 100)
cout << "x is 100";
N u chúng ta mu n có h n m t l nh đ c th c hi n trong tr ng h p ế ố ơ ộ ệ ượ ự ệ ườ ợ condition là
true chúng ta có th ch đ nh m t ể ỉ ị ộ kh i l nh ố ệ b ng cách s d ng m t c p ngo c nh n ằ ử ụ ộ ặ ặ ọ {
}:

if (x == 100)
{
cout << "x is ";
cout << x;
}
Chúng ta cũng có th ch đ nh đi u gì s x y ra n u đi u ki n không đ c tho mãnể ỉ ị ề ẽ ả ế ề ệ ượ ả
b ng cách s u d ng t khoá ằ ử ụ ừ else. Nó đ c s d ng cùng v i ượ ử ụ ớ if nh sau: ư
if (condition) statement1 else statement2
Ví d : ụ
if (x == 100)
cout << "x is 100";
else
cout << "x is not 100";
C u trúc ấ if + else có th đ c móc n i đ ki m tra nhi u giá tr . Ví d sau đây sể ượ ố ể ể ề ị ụ ẽ
ki m tra xem giá tr ch a trong bi n ể ị ứ ế x là d ng, âm hay b ng không.ươ ằ
if (x > 0)
cout << "x is positive";
else if (x < 0)
cout << "x is negative";
else
cout << "x is 0";
Các c u trúc l pấ ặ
M c đích c a các vòng l p là l p l i m t thao tác v i m t s l n nh t đ nh ho c trongụ ủ ặ ặ ạ ộ ớ ộ ố ầ ấ ị ặ
khi m t đi u ki n nào đó còn tho mãn. ộ ề ệ ả
Vòng l p ặ while .
D ng c a nó nh sau:ạ ủ ư
while (expression) statement
và ch c năng c a nó đ n gi n ch là l p l i ứ ủ ơ ả ỉ ặ ạ statement khi đi u ki nề ệ
expression còn tho mãn. ả
Ví d , chúng ta s vi t m t ch ng trình đ m ng c s d ng vào l p ụ ẽ ế ộ ươ ế ượ ử ụ ặ while:

// custom countdown using while
#include <iostream.h>
int main ()
{
int n;
cout << "Enter the starting
number > ";
cin >> n;
while (n>0) {
cout << n << ", ";
n;
}
cout << "FIRE!";
return 0;
}
Enter the starting number > 8
8, 7, 6, 5, 4, 3, 2, 1, FIRE!
Khi ch ng trình ch y ng i s d ng đ c yêu c u nh p vào m t s đ đ mươ ạ ườ ử ụ ượ ầ ậ ộ ố ể ế
ng c. Sau đó, khi vòng l p ượ ặ while b t đ u n u s mà ng i dùng nh p vàoắ ầ ế ố ườ ậ
tho mãn đi u ki n đi u ki n ả ề ệ ề ệ n>0 kh i l nh s đ c th c hi n m t s l nố ệ ẽ ượ ự ệ ộ ố ầ
không xác đ nh ch ng nào đi u ki n ị ừ ề ệ (n>0) còn đ c tho mãn.ượ ả
Chúng ta c n ph i nh r ng vòng l p ph i k t thúc m t đi m nào đó,ầ ả ớ ằ ặ ả ế ở ộ ể
vì v y bên trong vòng l p chúng ta ph i cung c p m t ph ng th c nàoậ ặ ả ấ ộ ươ ứ
đó đ bu c ể ộ condition tr thành sai n u không thì nó s l p l i mãi mãi.ở ế ẽ ặ ạ
Trong ví d trên vòng l p ph i có l nh ụ ặ ả ệ n; đ làm cho ể condition trở
thành sai sau m t s l n l p.ộ ố ầ ặ
Vòng l p ặ do-while
D ng th c:ạ ứ
do statement while (condition);
Ch c năng c a nó là hoàn toàn gi ng vòng l p ứ ủ ố ặ while ch tr có m t đi u là đi uỉ ừ ộ ề ề

ki n đi u khi n vòng l p đ c tính toán ệ ề ể ặ ượ sau khi statement đ c th c hi n, vìượ ự ệ
v y ậ statement s đ c th c hi n ít nh t m t l n ngay c khi ẽ ượ ự ệ ấ ộ ầ ả condition
không bao gi đ c tho mãn. Ví d , ch ng trình d i đây s vi t ra b t kìờ ượ ả ụ ươ ướ ẽ ế ấ
s nào mà b n nh p vào cho đ n khi b n nh p s 0.ố ạ ậ ế ạ ậ ố
// number echoer
#include <iostream.h>
int main ()
{
unsigned long n;
Enter number (0 to end): 12345
You entered: 12345
Enter number (0 to end): 160277
You entered: 160277
Enter number (0 to end): 0
do {
cout << "Enter number (0 to
end): ";
cin >> n;
cout << "You entered: " << n
<< "\n";
} while (n != 0);
return 0;
}
You entered: 0
Vòng l p ặ do-while th ng đ c dùng khi đi u ki n đ k t thúc vòng l p n mườ ượ ề ệ ể ế ặ ằ
trong vòng l p, nh trong ví d trên, s mà ng i dùng nh p vào là đi u ki nặ ư ụ ố ườ ậ ề ệ
ki m tra đ k t thúc vòng l p. N u b n không nh p s 0 trong ví d trên thìể ể ế ặ ế ạ ậ ố ụ
vòng l p s không bao gi ch m d t.ặ ẽ ờ ấ ứ
Vòng l p ặ for .
D ng th c:ạ ứ

for (initialization; condition; increase) statement;
và ch c năng chính c a nó là l p l i ứ ủ ặ ạ statement ch ng nào ừ condition còn
mang giá tr đúng, nh trong vòng l p ị ư ặ while. Nh ng thêm vào đó, ư for cung c pấ
ch dành cho l nh kh i t o và l nh tăng. Vì v y vòng l p này đ c thi t kỗ ệ ở ạ ệ ậ ặ ượ ế ế
đ c bi t l p l i m t hành đ ng v i m t s l n xác đ nh. ặ ệ ặ ạ ộ ộ ớ ộ ố ầ ị
Cách th c ho t đ ng c a nó nh sau: ứ ạ ộ ủ ư
1, initialization đ c th c hi n. Nói chung nó đ t m t giá khí banượ ự ệ ặ ộ
đ u cho bi n đi u khi n. L nh này đ c th c hi n ầ ế ề ể ệ ượ ự ệ ch m t l nỉ ộ ầ .
2, condition đ c ki m tra, n u nó là đúng vòng l p ti p t c còn n uượ ể ế ặ ế ụ ế
không vòng l p k t thúc và ặ ế statement đ c b qua.ượ ỏ
3, statement đ c th c hi n. Nó có th là m t l nh đ n ho c là m tượ ự ệ ể ộ ệ ơ ặ ộ
kh i l nh đ c bao trong m t c p ngo c nh n.ố ệ ượ ộ ặ ặ ọ
4, Cu i cùng, ố increase đ c th c hi n đ tăng bi n đi u khi n vàượ ự ệ ể ế ề ể
vòng l p quay tr l i b c 2.ặ ở ạ ướ
Sau đây là m t ví d đ m ng c s d ng vòng ộ ụ ế ượ ử ụ for.
// countdown using a for loop
#include <iostream.h>
int main ()
{
for (int n=10; n>0; n ) {
cout << n << ", ";
}
cout << "FIRE!";
return 0;
}
10, 9, 8, 7, 6, 5, 4, 3, 2, 1,
FIRE!
Ph n kh i t o và l nh tăng không b t bu c ph i có. Chúng có th đ c b quaầ ở ạ ệ ắ ộ ả ể ượ ỏ
nh ng v n ph i có d u ch m ph y ngăn cách gi a các ph n. Vì v y, chúng taư ẫ ả ấ ấ ẩ ữ ầ ậ
có th vi t ể ế for (;n<10;) ho c ặ for (;n<10;n++).

B ng cách s d ng d u ph y, chúng ta có th dùng nhi u l nh trongằ ử ụ ấ ẩ ể ề ệ
b t kì tr ng nào trong vòng ấ ườ for, nh là trong ph n kh i t o. Ví dư ầ ở ạ ụ
chúng ta có th kh i t o m t lúc nhi u bi n trong vòng l p: ể ở ạ ộ ề ế ặ
for ( n=0, i=100 ; n!=i ; n++, i )
{
// cái gì đây cũng đ c ở ượ
}
Vòng l p này s th c hi n 50 l n n u nh n và i không b thay đ i trongặ ẽ ự ệ ầ ế ư ị ổ
thân vòng l p: ặ
Các l nh r nhánh và l nh nh yệ ẽ ệ ả
L nh ệ break.
S d ng ử ụ break chúng ta có th thoát kh i vòng l p ngay c khi đi u ki n đ nóể ỏ ặ ả ề ệ ể
k t thúc ch a đ c tho mãn. L nh này có th đ c dùng đ k t thúc m tế ư ượ ả ệ ể ượ ể ế ộ
vòng l p không xác đ nh hay bu c nó ph i k t thúc gi a ch ng thay vì k t thúcặ ị ộ ả ế ữ ừ ế
m t cách bình th ng. Ví d , chúng ta s d ng vi c đ m ng c tr c khi nóộ ườ ụ ẽ ừ ệ ế ượ ướ
k t thúc: ế
// break loop example
#include <iostream.h>
int main ()
{
int n;
for (n=10; n>0; n ) {
cout << n << ", ";
if (n==3)
{
cout << "countdown
aborted!";
break;
}
}

return 0;
}
10, 9, 8, 7, 6, 5, 4, countdown
aborted!
L nh ệ continue.
L nh ệ continue làm cho ch ng trình b qua ph n còn l i c a vòng l p và nh yươ ỏ ầ ạ ủ ặ ả
sang l n l p ti p theo. Ví d chúng ta s b qua s 5 trong ph n đ m ng c:ầ ặ ế ụ ẽ ỏ ố ầ ế ượ
// break loop example
#include <iostream.h>
int main ()
{
for (int n=10; n>0; n ) {
if (n==5) continue;
cout << n << ", ";
}
cout << "FIRE!";
return 0;
}
10, 9, 8, 7, 6, 4, 3, 2, 1,
FIRE!
L nh ệ goto.
L nh này cho phép nh y vô đi u ki n t i b t kì đi m nào trong ch ng trình.ệ ả ề ệ ớ ấ ể ươ
Nói chung b n nên tránh dùng nó trong ch ng trình C++. Tuy nhiên chúng taạ ươ
v n có m t ví d dùng l nh ẫ ộ ụ ệ goto đ đ m ng c: ể ế ượ
// goto loop example
#include <iostream.h>
int main ()
{
int n=10;
loop: ;

cout << n << ", ";
n ;
if (n>0) goto loop;
cout << "FIRE!";
return 0;
}
10, 9, 8, 7, 6, 5, 4, 3, 2, 1,
FIRE!
Hàm exit.
M c đích c a exitụ ủ là k t thúc ch ng trình và tr v m t mã xác đ nh. D ngế ươ ả ề ộ ị ạ
th c c a nó nh sau ứ ủ ư
void exit (int exit code);
exit code đ c dùng b i m t s h đi u hành ho c có th đ c dùng b i cácượ ở ộ ố ệ ề ặ ể ượ ở
ch ng trình g i. Theo quy c, mã tr v 0 có nghĩa là ch ng trình k t thúcươ ọ ướ ả ề ươ ế
bình th ng còn các giá tr khác 0 có nghĩa là có l i.ườ ị ỗ
C u trúc l a ch n: ấ ự ọ switch.
Cú pháp c a l nh ủ ệ switch h i đ c bi t m t chút. M c đích c a nó là ki m tra m t vàiơ ặ ệ ộ ụ ủ ể ộ
giá tr h ng cho m t bi u th c, t ng t v i nh ng gì chúng ta làm đ u bài này khiị ằ ộ ể ứ ươ ự ớ ữ ở ầ
liên k t m t vài l nh ế ộ ệ if và else if v i nhau. D ng th c c a nó nh sau: ớ ạ ứ ủ ư
switch (expression) {
case constant1:
block of instructions 1
break;
case constant2:
block of instructions 2
break;
.
.
.
default:

default block of instructions
}
Nó ho t đ ng theo cách sau: ạ ộ switch tính bi u th c và ki m tra xem nó có b ngể ứ ể ằ
constant1 hay không, n u đúng thì nó th c hi n ế ự ệ block of instructions 1 cho đ nế
khi tìm th y t khoá ấ ừ break, sau đó nh y đ n ph n cu i c a c u trúc l a ch n ả ế ầ ố ủ ấ ự ọ switch.
Còn n u không, switch s ki m tra xem bi u th c có b ng ế ẽ ể ể ứ ằ constant2 hay không. N uế
đúng nó s th c hi n ẽ ự ệ block of instructions 2 cho đ n khi tìm th y t khoá ế ấ ừ break.
Cu i cùng, n u giá tr bi u th c không b ng b t kì h ng nào đ c ch đ nh trên (b nố ế ị ể ứ ằ ấ ằ ượ ỉ ị ở ạ
có th ch đ nh bao nhiêu câu l nh ể ỉ ị ệ case tuỳ thích), ch ng trình s th c hi n các l nhươ ẽ ự ệ ệ
trong ph n ầ default: n u nó t n t i vì ph n này không b t bu c ph i có. ế ồ ạ ầ ắ ộ ả
Hai đo n mã sau là t ng đ ng:ạ ươ ươ
ví d switchụ if-else t ng đ ngươ ươ
switch (x) {
case 1:
cout << "x is 1";
break;
case 2:
cout << "x is 2";
break;
default:
cout << "value of x
unknown";
}
if (x == 1) {
cout << "x is 1";
}
else if (x == 2) {
cout << "x is 2";
}
else {

cout << "value of x unknown";
}
Tôi đã nói trên r ng c u trúc c a l nh ở ằ ấ ủ ệ switch h i đ c bi t. Chú ý s t n t i c a l nhơ ặ ệ ự ồ ạ ủ ệ
break cu i m i kh i l nh. Đi u này là c n thi t vì n u không thì sau khi th c hi nở ố ỗ ố ệ ề ầ ế ế ự ệ
block of instructions 1 ch ng trình s không nh y đ n cu i c a l nh switch màươ ẽ ả ế ố ủ ệ
s th c hi n các kh i l nh ti p theo cho đ n khi nó tìm th y l nh ẽ ự ệ ố ệ ế ế ấ ệ break đ u tiên.ầ
Đi u này khi n cho vi c đ t c p ngo c nh n ề ế ệ ặ ặ ặ ọ { } trong m i tr ng h p là không c nỗ ườ ợ ầ
thi t và có th đ c dùng khi b n mu n th c hi n m t kh i l nh cho nhi u tr ngế ể ượ ạ ố ự ệ ộ ố ệ ề ườ
h p khác nhau, ví d :ợ ụ
switch (x) {
case 1:
case 2:
case 3:
cout << "x is 1, 2 or 3";
break;
default:
cout << "x is not 1, 2 nor 3";
}
Chú ý r ng l nh ằ ệ switch ch có th đ c dùng đ so sánh m t bi u th c v i các ỉ ể ượ ể ộ ể ứ ớ h ngằ .
Vì v y chúng ta không th đ t các bi n (ậ ể ặ ế case (n*2):) hay các kho ng (ả case
(1 3):) vì chúng không ph i là các h ng h p l . ả ằ ợ ệ
style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP:
medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT:
medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 3pt solid">
N u b n c n ki m tra các kho ng hay nhi u giá tr không ph i là h ng s hãy k t h pế ạ ầ ể ả ề ị ả ằ ố ế ợ
các l nh ệ if và else if
Bài 5 : Hàm (I)
Hàm là m t kh i l nh đ c th c hi n khi nó đ c g i t m t đi m khác c a ch ngộ ố ệ ượ ự ệ ượ ọ ừ ộ ể ủ ươ
trình. D ng th c c a nó nh sau: ạ ứ ủ ư
type name ( argument1, argument2, ) statement

trong đó:
type là ki u d li u đ c tr v c a hàmể ữ ệ ượ ả ề ủ
name là tên g i c a hàm.ọ ủ
arguments là các tham s (có nhi u bao nhiêu cũng đ c tuỳ theo nhu c u). M t thamố ề ượ ầ ộ
s bao g m tên ki u d li u sau đó là tên c a tham s gi ng nh khi khai báo bi n (víố ồ ể ữ ệ ủ ố ố ư ế
d ụ int x) và đóng vai trò bên trong hàm nh b t kì bi n nào khác. Chúng dùng đư ấ ế ể
truy n tham s cho hàm khi nó đ c g i. Các tham s khác nhau đ c ngăn cách b iề ố ượ ọ ố ượ ở
các d u ph yấ ẩ .
statement là thân c a hàm. Nó có th là m t l nh đ n hay m t kh i l nh. ủ ể ộ ệ ơ ộ ố ệ
D i đây là ví d đ u tiên v hàm:ướ ụ ầ ề
// function example
#include <iostream.h>

int addition (int a, int b)
{
int r;
r=a+b;
return (r);
The result is 8
}

int main ()
{
int z;
z = addition (5,3);
cout << "The result is " << z;
return 0;
}
Đ có th hi u đ c đo n mã này, tr c h t hãy nh l i nh ng đi u đã nói bài đ uể ể ể ượ ạ ướ ế ớ ạ ữ ề ở ầ
tiên: m t ch ng trình C++ luôn b t đ u th c hi n t hàm ộ ươ ắ ầ ự ệ ừ main. Vì v y chúng ta b tậ ắ

đ u t đây.ầ ừ
Chúng ta có th th y hàm ể ấ main b t đ u b ng vi c khai báo bi n z ki u ắ ầ ằ ệ ế ể int. Ngay sau
đó là m t l i g i t i hàm ộ ờ ọ ớ addition. N u đ ý chúng ta s th y s t ng t gi a c uế ể ẽ ấ ự ươ ự ữ ấ
trúc c a l i g i hàm v i khai báo c a hàm: ủ ờ ọ ớ ủ
Các tham s có vai trò th t rõ ràng. Bên trong hàm ố ậ main chúng ta g i hàm ọ addition và
truy n hai giá tr : ề ị 5 và 3 t ng ng v i hai tham s ươ ứ ớ ố int a và int b đ c khai báo choượ
hàm addition.
Vào th i đi m hàm đ c g i t ờ ể ượ ọ ừ main, quy n đi u khi n đ c chuy n sang cho hàmề ề ể ượ ể
addition. Giá tr c a c hai tham s (ị ủ ố 5 và 3) đ c copy sang hai bi n c c b ượ ế ụ ộ int a và
int b bên trong hàm.
Dòng l nh sau: ệ
return (r);
k t thúc hàm ế addition, và tr l i quy n đi u khi n cho hàm nào đã g i nó (ả ạ ề ề ể ọ main) và
ti p t c ch ng trình cái đi m mà nó b ng t b i l i g i đ n ế ụ ươ ở ể ị ắ ở ờ ọ ế addition. Nh ng thêmư
vào đó, giá tr đ c dùng v i l nh ị ượ ớ ệ return (r) chính là giá tr đ c tr v c a hàm.\ ị ượ ả ề ủ
Giá tr tr v b i m t hàm chính là giá tr c a hàm khi nó đ c tính toán. Vì v y bi n ị ả ề ở ộ ị ủ ượ ậ ế z
s có có giá tr đ c tr v b i ẽ ị ượ ả ề ở addition (5, 3), đó là 8.

Ph m vi ho t đ ng c a các bi nạ ạ ộ ủ ế [nh c l i]ắ ạ
B n c n nh r ng ph m vi ho t đ ng c a các bi n khai báo trong m t hàm hay b t kìạ ầ ớ ằ ạ ạ ộ ủ ế ộ ấ
m t kh i l nh nào khác ch là hàm đó hay kh i l nh đó và không th s d ng bên ngoàiộ ố ệ ỉ ố ệ ể ử ụ
chúng. Ví d , trong ch ng trình ví d trên, b n không th s d ng tr c ti p các bi nụ ươ ụ ạ ể ử ụ ự ế ế
a, b hay r trong hàm main vì chúng là các bi n c c b c a hàm ế ụ ộ ủ addition. Thêm vào đó
b n cũng không th s d ng bi n ạ ể ử ụ ế z tr c ti p bên trong hàm ự ế addition vì nó làm bi nế
c c b c a hàm ụ ộ ủ main.
Tuy nhiên b n có th khai báo các bi n toàn c c đ có th s d ng chúng b t kì đâu,ạ ể ế ụ ể ể ử ụ ở ấ
bên trong hay bên ngoài b t kì hàm nào. Đ làm vi c này b n c n khai báo chúng bênấ ể ệ ạ ầ
ngoài m i hàm hay các kh i l nh, có nghĩa là ngay trong thân ch ng trình.ọ ố ệ ươ
Đây là m t ví d khác v hàm:ộ ụ ề
// function example

#include <iostream.h>

int subtraction (int a, int b)
{
int r;
r=a-b;
return (r);
}

int main ()
{
int x=5, y=3, z;
z = subtraction (7,2);
cout << "The first result is " <<
z << '\n';
cout << "The second result is " <<
subtraction (7,2) << '\n';
cout << "The third result is " <<
subtraction (x,y) << '\n';
z= 4 + subtraction (x,y);
cout << "The fourth result is " <<
z << '\n';
return 0;
}
The first result is 5
The second result is 5
The third result is 2
The fourth result is 6
Trong tr ng h p này chúng ta t o ra hàm ườ ợ ạ subtraction. Ch c năng c a hàm này làứ ủ
l y hi u c a hai tham s r i tr v k t qu . ấ ệ ủ ố ồ ả ề ế ả

Tuy nhiên, n u phân tích hàm ế main các b n s th y ch ng trình đã vài l n g i đ nạ ẽ ấ ươ ầ ọ ế
hàm subtraction. Tôi đã s d ng vài cách g i khác nhau đ các b n th y các cáchử ụ ọ ể ạ ấ
khác nhau mà m t hàm có th đ c g i.ộ ể ượ ọ
Đ có hi u c n k ví d này b n c n nh r ng m t l i g i đ n m t hàm có th hoànể ể ặ ẽ ụ ạ ầ ớ ằ ộ ờ ọ ế ộ ể
toàn đ c thay th b i giá tr c a nó. Ví d trong l nh g i hàm đ u tiên : ượ ế ở ị ủ ụ ệ ọ ầ
z = subtraction (7,2);
cout << "The first result is " << z;
N u chúng ta thay l i g i hàm b ng giá tr c a nó (đó là ế ờ ọ ằ ị ủ 5), chúng ta s có: ẽ
z = 5;
cout << "The first result is " << z;
T ng t nh v y ươ ự ư ậ
cout << "The second result is " << subtraction (7,2);
cũng cho k t qu gi ng nh hai dòng l nh trên nh ng trong tr ng h p này chúng taế ả ố ư ệ ư ườ ợ
g i hàm ọ subtraction tr c ti p nh là m t tham s c a ự ế ư ộ ố ủ cout. Chúng ta cũng có thể
vi t: ế
cout << "The second result is " << 5;
vì 5 là k t qu c a ế ả ủ subtraction (7,2).
Còn v i l nh ớ ệ
cout << "The third result is " << subtraction (x,y);
Đi u m i m duy nh t đây là các tham s c a ề ớ ẻ ấ ở ố ủ subtraction là các bi n thay vì cácế
h ng. Đi u này là hoàn toàn h p l . Trong tr ng h p này giá tr đ c truy n cho hàmằ ề ợ ệ ườ ợ ị ượ ề
subtraction là giá trị c a ủ x and y.
Tr ng h p th t cũng hoàn toàn t ng t . Thay vì vi t ườ ợ ứ ư ươ ự ế
z = 4 + subtraction (x,y);
chúng ta có th vi t: ể ế
z = subtraction (x,y) + 4;
cũng hoàn toàn cho k t qu t ng đ ng. Chú ý r ng d u ch m ph y đ c đ t ế ả ươ ươ ằ ấ ấ ẩ ượ ặ ở
cu i bi u th c ch không c n thi t ph i đ t ngay sau l i g i hàm. ố ể ứ ứ ầ ế ả ặ ờ ọ
Các hàm không ki u. Cách s d ng ể ử ụ void.
N u b n còn nh cú pháp c a m t l i khai báo hàm: ế ạ ớ ủ ộ ờ

type name ( argument1, argument2 ) statement
b n s th y rõ ràng r ng nó b t đ u v i m t tên ki u, đó là ki u d li u s đ c hàmạ ẽ ấ ằ ắ ầ ớ ộ ể ể ữ ệ ẽ ượ
tr v b i l nh ả ề ở ệ return. Nh ng n u chúng ta không mu n tr v giá tr nào thì sao ?ư ế ố ả ề ị
Hãy t ng t ng r ng chúng ta mu n t o ra m t hàm ch đ hi n th m t thông báoưở ượ ằ ố ạ ộ ỉ ể ể ị ộ
lên màn hình. Nó không c n tr v m t giá tr nào c , h n n a cũng không c n nh nầ ả ề ộ ị ả ơ ữ ầ ậ
tham s nào h t. Vì v y ng i ta đã nghĩ ra ki u d li u ố ế ậ ườ ể ữ ệ void trong ngôn ng C. Hãyữ
xem xét ch ng trình sau: ươ
// void function example
#include <iostream.h>

void dummyfunction (void)
{
cout << "I'm a function!";
}

int main ()
{
dummyfunction ();
return 0;
}
I'm a function!
T khoá ừ void trong ph n danh sách tham s có nghĩa là hàm này không nh n m t thamầ ố ậ ộ
s nào. Tuy nhiên trong C++ không c n thi t ph i s d ng ố ầ ế ả ử ụ void đ làm đi u này. B nể ề ạ
ch đ n gi n s d ng c p ngo c đ n ( ) là xong.ỉ ơ ả ử ụ ặ ặ ơ
B i vì hàm c a chúng ta không có m t tham s nào, vì v y l i g i hàm ở ủ ộ ố ậ ờ ọ dummyfunction
s là : ẽ
dummyfunction ();
style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP:
medium none; PADDING-LEFT: 0in; PADDING-BOTTOM: 0in; BORDER-LEFT:
medium none; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 3pt solid">

Hai d u ngo c đ n là c n thi t đ cho trình d ch hi u đó là m t l i g i hàm chấ ặ ơ ầ ế ể ị ể ộ ờ ọ ứ
không ph i là m t tên bi n hay b t kì d u hi u nào khác.ả ộ ế ấ ấ ệ
Bài 6 : Hàm (II)
Truy n tham s theo ề ố tham s giá trố ị hay tham s bi n.ố ế
Cho đ n nay, trong t t c các hàm chúng ta đã bi t, t t c các tham s truy n cho hàmế ấ ả ế ấ ả ố ề
đ u đ c truy n theo ề ượ ề giá trị. Đi u này có nghĩa là khi chúng ta g i hàm v i các thamề ọ ớ
s , nh ng gì chúng ta truy n cho hàm là các ố ữ ề giá tr ị ch không ph i b n thân các bi n.ứ ả ả ế
Ví d , gi s chúng ta g i hàm ụ ả ử ọ addition nh sau: ư
int x=5, y=3, z;
z = addition ( x , y );
Trong tr ng h p này khi chúng ta g i hàm ườ ợ ọ addition thì các giá tr ị 5 and 3 đ cượ
truy n cho hàm, không ph i là b n thân các bi n. ề ả ả ế
Đ n đây các b n có th h i tôi: Nh v y thì sao, có nh h ng gì đâu ? Đi u đáng nóiế ạ ể ỏ ư ậ ả ưở ề
đây là khi các b n thay đ i giá tr c a các bi n ở ạ ổ ị ủ ế a hay b bên trong hàm thì các bi n ế x
và y v n không thay đ i vì chúng đâu có đ c truy n cho hàm ch có ẫ ổ ượ ề ỉ giá trị c a chúngủ
đ c truy n mà thôi.ượ ề
Hãy xét tr ng h p b n c n thao tác v i m t bi n ngoài bên trong m t hàm. Vì v yườ ợ ạ ầ ớ ộ ế ở ộ ậ
b n s ph i truy n tham s d i d ng tham s bi n nh trong hàm ạ ẽ ả ề ố ướ ạ ố ế ư ở duplicate trong
ví d d i đây:ụ ướ
// passing parameters by reference
#include <iostream.h>

void duplicate (int& a, int& b, int&
c)
{
a*=2;
b*=2;
c*=2;
}


int main ()
{
int x=1, y=3, z=7;
duplicate (x, y, z);
cout << "x=" << x << ", y=" << y
<< ", z=" << z;
return 0;
}
x=2, y=6, z=14
Đi u đ u tiên làm b n chú ý là trong khai báo c a ề ầ ạ ủ duplicate theo sau tên ki u c aể ủ
m i tham s đ u là d u và (ỗ ố ề ấ &), đ báo hi u r ng các tham s này đ c truy n theoể ệ ằ ố ượ ề
tham s bi n ch không ph i tham s giá tr .ố ế ứ ả ố ị
Khi truy n tham s d i d ng tham s bi n chúng ta đang truy n b n thân bi n đó vàề ố ướ ạ ố ế ề ả ế
b t kì s thay đ i nào mà chúng ta th c hi n v i tham s đó bên trong hàm s nhấ ự ổ ự ệ ớ ố ẽ ả
h ng tr c ti p đ n bi n đó. ưở ự ế ế ế
Trong ví d trên, chúng ta đã liên k t ụ ế a, b và c v i các tham s khi g i hàm (ớ ố ọ x, y và z)
và m i s thay đ i v i ọ ự ổ ớ a bên trong hàm s nh h ng đ n giá tr c a ẽ ả ưở ế ị ủ x và hoàn toàn
t ng t v i ươ ự ớ b và y, c và z.
Ki u khai báo tham s theo d ng tham s bi n s d ng ể ố ạ ố ế ử ụ d u vàấ (&) ch có trong C++.ỉ
Trong ngôn ng C chúng ta ph i s d ng con tr đ làm vi c t ng t nh th .ữ ả ử ụ ỏ ể ệ ươ ự ư ế
Truy n tham s d i d ng tham s bi n cho phép m t hàm tr v nhi u h n m t giáề ố ướ ạ ố ế ộ ả ề ề ơ ộ
tr . Ví d , đây là m t hàm tr v s li n tr c và li n sau c a tham s đ u tiên.ị ụ ộ ả ề ố ề ướ ề ủ ố ầ
// more than one returning value
#include <iostream.h>

void prevnext (int x, int& prev,
int& next)
{
prev = x-1;
next = x+1;

}

int main ()
{
int x=100, y, z;
prevnext (x, y, z);
cout << "Previous=" << y << ",
Next=" << z;
return 0;
}
Previous=99, Next=101
Giá tr m c đ nh c a tham s .ị ặ ị ủ ố
Khi đ nh nghĩa m t hàm chúng ta có th ch đ nh nh ng giá tr m c đ nh s đ cị ộ ể ỉ ị ữ ị ặ ị ẽ ượ
truy n cho các đ i s trong tr ng h p chúng b b qua khi hàm đ c g i. Đ làmề ố ố ườ ợ ị ỏ ượ ọ ể
vi c này đ n gi n ch c n gán m t giá tr cho đ i s khi khai báo hàm. N u giá tr c aệ ơ ả ỉ ầ ộ ị ố ố ế ị ủ
tham s đó v n đ c ch đ nh khi g i hàm thì giá tr m c đ nh s b b qua. Ví d : ố ẫ ượ ỉ ị ọ ị ặ ị ẽ ị ỏ ụ
// default values in functions
#include <iostream.h>

int divide (int a, int b=2)
{
int r;
r=a/b;
return (r);
}

int main ()
{
cout << divide (12);
cout << endl;

6
5

×