Ề ƯƠ
Ọ Ớ
Ậ
Đ C
NG ÔN T P MÔN TIN H C L P 11
ữ ậ ệ ậ 1. Khái ni m l p trình và ngôn ng l p trình.
ậ
Khái ni m l p trình. ệ
ữ ậ ạ ợ
Các lo i NNLT: Ngôn ng máy, h p ng , NNLT b c cao ữ
ợ ị ị ị
Trình H p d ch, Biên d ch, Thông d ch
ầ ủ 2. Các thành ph n c a NNLT
ầ ơ ả ữ ữ
Các thành ph n c b n: b ng ch cái, cú pháp, ng nghĩa ả
ệ ừ ặ ẩ
Khái ni m: t
khóa, tên chu n, tên dành riêng – cách đ t tên
ệ ế ằ
Khái ni m h ng, bi n.
ố ự ạ ằ ằ ằ ằ ố ự ự ằ
Có 4 lo i h ng: h ng s nguyên, h ng s th c, h ng kí t
/xâu kí t , h ng logic.
ệ ặ ạ
Khái ni m chú thích, các cách đ t chú thích: //dòng chú thích, /* đo n chú thích*/ ấ
ươ ng trình 3. C u trúc ch
ầ ầ ấ ầ ươ
C u trúc chung: có 2 ph n g m ph n khai báo và ph n thân ch ồ
ng trình
ầ ươ ắ ầ ằ
Ph n thân ch
ng trình b t đ u b ng hàm main:
int main() {
các câu lệnh; return 0;
}
ầ
Ph n khai báo:
ư ệ ư ệ : #include
Khai báo th vi n
ư ệ
ữ ệ
ư
ạ
ị
L u ý thêm các hàm đ nh d ng in d li u khác trong th vi n iomanip
// tương tự cout.width(n)
// tương tự cout.precision(n)
ệ ầ ề #include
ể ử ụ Đ s d ng các hàm này c n khai báo t p tiêu đ setw(n) setprecision(n)
Ví d :ụ
ố ậ Làm tròn s th p phân trong C++:
ấ C u trúc:
cout<
ế ệ ầ ậ ầ ố ỏ ẽ
#include // cau lenh goi tat ca thu vien trong C/C++
using namespace std;
int main(){
float n, m, a;
cout<<"Nhap n: ";
cin>>n;
ế ầ ậ trong đó n là s ph n th p phân c n làm tròn. N u b qua l nh fixed thì khi làm tròn s
ị
không làm tròn đ n ph n th p phân không còn giá tr .
ặ
kiểu_dữ_liệu tên_hằng = giá_trị_hằng ;
cout<<"Nhap m: ";
cin>>m;
a=n/m;
cout<<"\n Ket qua la: "< tên_hằng giá_trị_hằng ;
ho c:
Ví d : ụ #define sohs 50 ;
const int sohs = 50 ;
const int CHIEUDAI = 10;
const int CHIEURONG = 5;
Khai báo bi n: ế
ở ạ
a. Khai báo không kh i t o
tên_biến_1 ;
tên_biến_2 ;
tên_biến_3 ;
ế ề ể ộ c khai báo trên cùng m t dòng:
ể ượ
Nhi u bi n cùng ki u có th đ
tên_biến_1, tên_biến_2, tên_biến_3 ;
ở ạ
b. Khai báo có kh i t o
ể ượ ệ ế ầ ở Trong câu l nh khai báo, các bi n có th đ ị
c gán ngay giá tr ban đ u b i phép
toán gán (=) theo cú pháp:
tên_biến_1 = gt_1, tên_biến_2 = gt_2, tên_biến_3 = gt_3;
ứ ể ế ể ằ ặ ị
const int n = 10 ;
int main()
{
// khai báo biến nguyên I, j, k và khởi tạo I bằng 2, k bằng 15
int I = 2, j , k = n + 5;
// khai báo biến thực eps và khởi tạo bằng 10-6
float eps = 1.0e-6 ;
// khai báo biến kí tự c và khởi tạo bằng ‘Z’
char c = ‘Z’;
// khai báo xâu kí tự d và khởi tạo d bằng “Tin học”
char d[100] = “Tin học”;
}
trong đó các giá tr gt_1, gt_2, gt_3 có th là các h ng, bi n ho c bi u th c.
Ví d :ụ
ệ ự ủ
ế
ạ
c. Ph m vi hi u l c c a bi n
ộ ậ ư ệ ợ
ụ ứ ế ế ộ ơ ộ
ế
ử ụ ượ ệ ế
ư
ạ
ố ệ
ươ ộ
ử ụ ượ ở ư ươ
ế
t ch
Nh đã bi
ng trình là m t t p h p các hàm, các câu l nh cũng nh các khai báo.
ệ ự ủ
Ph m vi hi u l c c a m t bi n là n i mà bi n có tác d ng. T c là bi n thu c hàm hay
ệ
ấ
c phép s d ng bi n đó? M t bi n xu t hi n trong
kh i l nh nào? Câu l nh nào đ
ở
ể ượ ử ụ
c b i hàm khác
ch ế
c s d ng b i hàm này nh ng không s d ng đ ng trình có th đ
ặ ể ử ụ ụ ế ề ặ ộ
ở ả
ầ
ắ ể ừ ị ụ ộ ơ
ị
ượ
v trí nó đ ượ
c
c khai báo
ố ệ ứ ế ế ẽ
ho c có th s d ng b i c hai, đi u này ph thu c ch t ch vào v trí n i bi n đ
ế ẽ
khai báo. M t nguyên t c đ u tiên là bi n s có tác d ng k t
cho đ n h t kh i l nh ch a nó.
ế
ị
d. Gán giá tr cho bi n
ụ ướ ư ượ Trong các ví d tr c chúng ta đã s d ng phép gán dù nó ch a đ ơ
c trình bày, đ n
ế ả ạ ộ ộ ử ụ
ị ớ gi n m t phép gán mang ý nghĩa t o giá tr m i cho m t bi n.
ị ớ ượ ế ị ấ ể ướ đ ng xoá đi b t k tr c đó nó
Khi bi n đ
ị ư ứ ư ẽ ượ ự ộ
c gán giá tr m i, giá tr cũ s đ
c t
ủ
ị
ặ
ch a giá tr nào (ho c ch a có giá tr ). Cú pháp c a phép gán nh sau:
ị ủ ứ ẽ ể ế ả ặ
= ;
ng trình s tính toán giá tr c a bi u th c bên v ph i và gán
// khởi tạo I bằng 3
// gán cho n giá trị 10
// in ra: 10, 3
// gán lại giá trị của I bằng n/2 = 5
// in ra: 10, 5
Khi g p phép gán ch
ế ở ế
ị ươ
v trái.
ườ ư ớ V i ý nghĩa thông th
L u ý:
ị ả ạ ộ ộ
ợ ụ ứ ể
ị ở ề ậ giá tr này cho bi n
Ví d : ụ
int n, I = 3;
n = 10;
cout << n <<”, “ << I << endl;
I = n / 2;
cout << n <<”, “ << I << endl;
ủ
ộ
ạ
i m t
ng c a phép toán (nghĩa là tính toán và cho l
ị ả ạ ủ
ị
ụ ữ
ệ
giá tr ) thì phép toán gán còn m t nhi m v n a là tr l
i m t giá tr . Giá tr tr l
i c a
ả ấ
ề
ị ủ
phép toán gán chính là giá tr c a bi u th c bên ph i d u gán. L i d ng đi u này C++ cho
ộ
ế
phép chúng ta gán “kép” cho nhi u bi n nh n cùng m t giá tr b i cú pháp:
ế ẽ
t c các bi n s nh n cùng giá tr
ị gt.
biến_1 = biến_2 = … = biến_n = gt ;
ậ
ấ ả
ớ
v i cách gán này t
Ví d : ụ
int I, j, k ;
I = j = k = 1;
ệ
ư ượ ấ ệ
c phép xu t hi n trong b t k Ngoài vi c gán kép nh trên, phép toán gán còn đ
ộ ể ể ứ ỉ
ị ứ
ụ n = 3 + (I = 2) s cho ta
ệ ọ ơ
ộ
ở ộ
ư ệ ẳ ứ
ọ
ng h p) nh ng cũng tr nên khó đ c, ch ng h n câu l nh trên có th vi
ể ế
ớ ắ ầ ẽ ễ ọ ơ ấ ố ớ ợ
ệ ạ
ể ấ ỳ
ứ
ề
bi u th c nào, đi u này cho phép m t bi u th c ch a phép gán, nó không ch tính toán mà
ệ ử ụ
ẽ
ế
I = 2 và n = 5. Vi c s d ng
còn gán giá tr cho các bi n, ví d
ộ
ươ
ề
ng trình g n gàng h n (trong m t
nhi u ch c năng g p trong m t câu l nh làm cho ch
ạ
ố ườ
s tr
t tách
I = 2; n = 3 + I; s d đ c h n ít nh t đ i v i các b n m i b t đ u tìm
thành 2 câu l nh:
ề ậ
hi u v l p trình.
ộ ố ể ữ ệ
ẩ
4. M t s ki u d li u chu n
ộ
ế
ộ ố
ớ
ớ
M t bi n trong ch
ế
ế
ươ
ng trình là m t s ô nh liên ti p nào đó trong b nh dùng đ l u tr
ạ ộ
ả
ủ
ể ử ụ
ộ
ữ ệ
ể ớ
ẽ
ể ữ ệ
ỉ
ộ
ề ậ
ế
ể ư
ộ
ữ
ượ ắ
ươ
ữ ệ
c g n
ng trình và đ
d li u (vào, ra hay k t qu trung gian) trong quá trình ho t đ ng c a ch
ữ ệ
ủ
ể
ế
ế
ớ
v i m t tên do NSD khai báo. Đ s d ng bi n, NSD khai báo: tên bi n và ki u c a d li u
ớ ượ
ắ ch có các d li u cùng ki u v i nhau m i đ
ớ
ế
ứ
c phép làm toán v i
ch a trong bi n. Nguyên t c:
ế ố
ẩ
ế
nhau. Do đó, khi đ c p đ n m t ki u d li u chu n, ta s xét đ n các y u t
sau:
(cid:0)
ộ ừ
ể ủ ữ ệ
ể ỉ
Tên ki uể : là m t t
ị
dành riêng đ ch đ nh ki u c a d li u.
(cid:0)
ố
ộ
ườ
ố
ộ
ị
ớ: Thông th
ỉ
ở
ệ ố
ụ
ế
ụ
ng s byte này ph thu c vào các trình
ệ
đây ta ch xét đ n h th ng máy PC thông d ng hi n
ữ
ư
S byte l u tr trong b nh
ệ ố
biên d ch và h th ng máy khác nhau,
nay.
(cid:0)
ề
ị ủ
ể
ẽ
ộ
Mi n giá tr c a ki u
ị ữ ệ
ị
ị
ớ ế
ể
ể
ợ
ể : Quy đ nh m t đ n v d li u thu c ki u này s có th ch a
ộ ơ
ể ứ
ế
ề
ầ
ị
giá tr trong pham vi nào. NSD c n nh đ n mi n giá tr này đ khai báo ki u cho các bi n
ộ
ầ ử ụ
c n s d ng m t cách thích h p.
ườ
ộ ố ể
M t s ki u th
ng dùng:
ướ
c/ precision
ể ữ ệ
Ki u d li u
Ký tự
Tên ki uể
char
Kích th
1 byte
số nguyên
int
4 byte
ữ ố ậ
float
4 byte (1.2E38 > 3.4E+38), 6 ch s th p phân
Số thực (dấu
chấm động)
ữ ố ậ
double
8 byte (2.3E308 > 1.7E+308), 15 ch s th p phân
Lôgic
bool
1 byte
ể
ứ
5. Phép toán, bi u th c
ề ậ ấ ạ C++ có r t nhi u phép toán lo i 1 ngôi, 2 ngôi và th m chí 3 ngôi.
ầ ượ ạ ạ ặ ọ ứ
c g i là h ng th c ho c toán h ng,
ử ệ ọ
Các thành ph n tên g i tham gia trong phép toán đ
ượ ọ
các kí hi u phép toán đ c g i là toán t .
ố ọ
a. Các phép toán s h c: + , , * , / , %
(cid:0) ừ ộ
Các phép toán + (c ng), (tr ), * (nhân)
(cid:0) ượ ứ ể ạ
Phép toán a / b (chia) đ
ố ầ ạ ế
ủ
c th c hi n theo ki u c a các toán h ng, t c n u
ượ
ỉ ấ
ế
c
ệ
ả ủ
ả ố ự ự ạ
// do 13 và 5 là 2 số nguyên
13/5 = 2
13.0/5 = 13/5.0 = 13.0/5.0 = 2.6 // có ít nhất 1 toán hạng là thực
ự
ả
c hai toán h ng là s nguyên thì k t qu c a phép chia ch l y ph n nguyên, ng
ế
ạ ế
l
i n u 1 trong 2 toán h ng là th c thì k t qu là s th c.
Ví d : ụ
(cid:0) ư ả ạ ầ ư ủ ầ i ph n d c a phép chia a/b, trong đó a
ấ
Phép toán a % b (l y ph n d ) tr l
ố
và b là 2 s nguyên.
// phần dư của 13/5
// phần dư của 5/13
13%5 = 3 ;
5%13 = 5 ;
Ví d :ụ
ả
b. Các phép toán t
tự ăng, gi m: i++ , ++i , i , i
(cid:0) ẽ ị ứ ươ
ng đ
ặ ươ
ể ứ ệ
ẽ
ớ ượ
ứ ượ ể ớ ượ ạ i++ s tăng
c l
ệ ụ ạ Phép toán ++i và i++ s cùng tăng
l nh ệ
ế
+i khác v i ớ i++. C th ++
i s tăng
ẽ
ứ
bi u th c. Ng
ượ
ể
cũ). Đi m khác bi ớ
ơ
i lên 1 đ n v t c t
ng v i câu
ằ
i = i+1. Tuy nhiên n u 2 phép toán này n m trong câu l nh ho c bi u th c thì +
i, sau đó i m i đ
c tham gia vào tính toán trong
ị i
ể
i sau khi bi u th c đ
c tính toán xong (v i giá tr
ả ử i = 3, j = 15.
c minh ho thông qua ví d sau, gi ụ ể
i
t này đ s
ả
Phép toán
i = ++j ; // tăng trư cớ
i = j++ ; // tăng sau
j = ++i + 5 ;
j = i++ + 5 ;
Tương đương
j = j + 1; i = j ;
i = j ; j = j + 1 ;
i = i + 1 ; j = i + 5 ;
j = i + 5; i = i + 1;
K t quế
i = 16 , j = 16
i = 15 , j = 16
i = 4, j = 9
i = 4, j = 8
ệ ự ứ ệ ả ặ ẽ
ể
tăng gi m vào trong bi u th c ho c câu l nh s
ơ ể ế ợ
Chú ý: Vi c k t h p phép toán t
ư
ọ
ươ
ng trình g n nh ng khó hi u h n. làm ch
c. Các phép toán so sánh và lôgic
ị ủ ứ ế ể ặ
Đây là các phép toán mà giá tr tr l
ị ể ị
ứ
ở ộ ậ
ơ ệ ộ
ượ ạ
c l
ệ
ị ị ả ạ
i là đúng ho c sai. N u giá tr c a bi u th c là
ậ
i là sai thì bi u th c nh n giá tr 0. Nói cách khác 1 và
đúng thì nó nh n giá tr 1, ng
ị
ị ụ ể ủ
0 là giá tr c th c a 2 khái ni m "đúng", "sai". M r ng h n C++ quan ni m m t giá tr
ấ ỳ
b t k khác 0 là " đúng" và giá tr 0 là " sai".
// nhận giá trị 1 vì đúng
// = 0 vì sai
// = 1
// = 3 vì 5<2 bằng 0
// = 4 vì 5>=2 bằng 1
ạ ủ ể ả
ừ
ị ủ ạ ả
ị + Các phép toán so sánh
== (bằng nhau), != (khác nhau),
> (lớn hơn), < (nhỏ hơn),
>= (lớn hơn hoặc bằng), <= (nhỏ hơn hoặc bằng).
ụ
Hai toán h ng c a các phép toán này ph i cùng ki u. Ví d :
3 == 3 hoặc 3 == (4 - 1)
3 == 5
3 != 5
3 + (5 < 2)
3 + (5 >= 2)
ệ
ầ
Chú ý: C n phân bi
t phép toán gán (=) và phép toán so sánh (==). Phép gán v a gán
ả ạ
ế ừ
ị
giá tr cho bi n v a tr l
i giá tr b t k (là giá tr c a toán h ng bên ph i), trong khi phép
ả ạ
so sánh luôn luôn tr l ị ấ ỳ
ặ
i giá tr 1 ho c 0.
ủ ứ ộ ỉ
ậ
ể ệ ạ
ể ệ ở ố ở + Các phép toán lôgic:
&& (và), || (hoặc ), ! (không, phủ định)
ể
ả
Hai toán h ng c a lo i phép toán này ph i có ki u lôgic t c ch nh n m t trong hai
ị
c th hi n b i các s nguyên khác 0) ho c "sai" (th hi n b i 0). Khi
a
1
1
0
0
b
1
0
1
0
a && b
1
0
0
0
a || b
1
1
1
0
! a
0
0
1
1
ượ ặ ả ạ
ượ
giá tr "đúng" (đ
ị ả ạ ủ
i c a phép toán là 1 ho c 0 và đ
đó giá tr tr l ặ
c cho trong b ng sau:
Tóm l i:ạ
(cid:0) ạ ỉ
Phép toán "và" đúng khi và ch khi hai toán h ng cùng đúng
(cid:0) ạ ặ ỉ Phép toán "ho c" sai khi và ch khi hai toán h ng cùng sai
// = 0 vì có hạng thức (4>5) sai
// = 1 vì cả hai hạng thức cùng đúng
// = 0
// = 1 vì (4+3<7) bằng 0
// = 1 vì có một hạng thức (5) đúng
// = 0 vì cả hai hạng thức đều sai
(cid:0) ủ ị ủ ạ ặ ỉ Phép toán "không" (ho c "ph đ nh") đúng khi và ch khi toán h ng c a nó
sai.
Ví d :ụ
3 && (4 > 5)
(3 >= 1) && (7)
!1
!(4 + 3 < 7)
5 || (4 >= 6)
(5 < !0) || (4 >= 6)
ể ệ ừ c ti n hành t
Chú ý: vi c đánh giá bi u th c đ
ờ
ả ẽ ừ
ữ ả
ẽ
ế
ự ủ ư ể ế
t
ả
tăng
cho kết quả x = 0 , i = 3 , j = 4
cho kết quả y = 0 , i = 2 , j = 4
ụ ể ế
trái sang ph i và s d ng khi bi
ứ
ế
k t qu mà không ch đánh giá h t bi u th c. Cách đánh giá này s cho nh ng k t qu
ụ
ph khác nhau n u trong bi u th c ta "tranh th " đ a thêm vào các phép toán t
ứ
ả
gi m. Ví d cho ứ ượ
ể
ế
ế
ứ
i = 2, j = 3, xét 2 bi u th c sau đây:
x = (++i < 4 && ++j > 5) //
y = (++j > 5 && ++i < 4) //
ạ ủ ứ ư
ả ậ ấ
ạ ừ
ả
ệ ẽ
ầ ươ ổ ị
ể
ứ
ị
thi
ị ủ i và j sau khi th c hi n xong hai bi u th c này s có k t qu
ể
i < 4 là đúng nên ch
ể ứ
ượ ậ
c bi u th c. Do v y sau khi đánh giá xong c
j > 5 là sai nên ch
ế ộ ể ượ
ươ ượ
ỉ
ụ
ế j đ
ộ ầ
ể ứ
ự ứ ả t hai bi u th c là nh nhau (ngo i tr hoán đ i v trí 2 toán h ng c a phép
ế i = 2 và j = 3 ta th y c hai bi u th c trên cùng nh n giá tr 0.
ể
ứ
ả
ế
ả ế ụ
ng trình ph i ti p t c
ả i và j đ uề
ươ
ng trình
i < 4. Nghĩa là
c tăng 1,
ắ
ữ
i = 2, j = 4 khác v i k t qu c a bi u th c trên. Ví d này m t l n n a nh c
đó ta có
ể
tăng gi m trong bi u th c và trong
ế
cách vi
ớ
toán &&). V i gi
t
ự
Tuy nhiên các giá tr c a
ể
ụ ể ớ
khác nhau. C th v i bi u th c đ u vì ++
ứ
ể
ế
j > 5 đ đánh giá đ
tính ti p ++
ể
ớ
ượ
ứ
i=3, j=4). Trong khi đó v i bi u th c sau do ++
c tăng 1 (
đ
ầ
ứ
ậ
ể ế
c toàn b bi u th c là sai mà không c n tính ti p ++
có th k t lu n đ
ẽ ừ
ậ
j > 5 s d ng và vì v y ch có bi n
sau khi ch
ng trình đánh giá xong ++
ể
ả ủ
ừ
ớ ế
t
ỹ ệ ử ụ
ta chú ý ki m soát k vi c s d ng các phép toán t
câu l nh.ệ
ẩ ủ
ệ
ấ
ậ
6. L nh xu t / nh p chu n c a C++
ậ ữ ệ
ệ
ừ
L nh cin nh p d li u vào t
ữ ệ ể ậ ử ụ
bàn phím
ế
Đ nh p d li u vào cho các bi n có tên var1, var2, var3 chúng ta s d ng câu
l nh:ệ
cin >> var1 ;
cin >> var2 ;
cin >> var3 ;
ho c:ặ
cin >> var1 >> var2 >> var3 ;
ượ ử ụ
Các bi n ế var1, var2, var3 đ
ừ ữ ị
ể ế ề ậ ơ c s d ng đ l u tr các giá tr NSD nh p vào t
ế ể ư
ằ ế ế ế ậ
bàn
t ti p ti p các tên bi n vào
ể
ủ ả ấ phím. Hi n nhiên có th nh p nhi u bi n h n b ng cách vi
ệ
bên ph i các d u >> c a câu l nh.
ệ ữ ậ ng trình tính chu vi và di n tích hình ch nh t.
ươ
Ví d :ụ Ch
#include
using namespace std;
int main()
{
int cd, cr;
cout << "Nhap hai canh hinh chu nhat: ";
cin >> cd >> cr;
cout << "Dien tich = "<
ệ
l nh sau:
cout << "Chieu dai la " ;
cout << 23 ;
cout << " met";
ể ỉ ằ
ho c có th ch b ng 1 l nh:
cout << "Chieu dai la 23 met" ;
ệ ặ
ợ ế ư ườ ề ng h p ch a bi
t giá tr c th c a chi u dài, ch bi
ụ ạ ị ụ ể ủ
ậ ố c l u trong bi n ị
i giá tr này đã
cướ cin >> cd tr
ệ ế ầ ị Tr
ượ ư
đ
đó) và ta c n bi ế cd (ví d b n nh p s 23 t
t giá tr này là bao nhiêu thì có th s d ng câu l nh:
ệ ạ
ỉ ế
t hi n t
ệ
ở
ừ
bàn phím b i câu l nh
ể ử ụ
cout << "Chieu dai la " << cd << " met" ;
ị ầ ứ ể ể ế ộ ộ ộ ỉ M t giá tr c n in không ch là m t bi n nh ư cd, cr, ... mà còn có th là m t bi u th c.
ươ
ứ ị
ấ ữ ệ
ạ
Ph
ng th c đ nh d ng xu t d li u
ộ ộ
ị ỉ n 1) cout.width(n): Ch đ nh đ r ng in ra màn hình là
ứ ươ ộ
ng th c này cho phép in ra các giá tr v i đ r ng
ơ ị
ề
ớ ộ ộ ộ ộ
ơ ộ ộ ị ị ớ ộ ộ
ế n bé h n đ r ng th c s c a giá tr , thì in giá tr v i s
ự ự ủ
ự
ế n l n h n đ r ng th c, thì in giá tr canh theo l ằ
n c t trên màn hình b ng
ị ớ ố
ề
ị ượ ể ố ướ ộ Ph
l nh ệ
cout<< li n sau đó. N u
ự ự
ộ ằ
c t b ng v i đ r ng th c s . N u
ừ
ả
ph i, và đ tr ng các c t th a phía tr ớ
c giá tr đ c in.
// độ rộng thực của a là 2, của b là 3
// chiếm 2 cột màn hình
// đặt độ rộng giá trị in tiếp theo là 7
// b in trong 7 cột với 4 dấu cách đứng trước
ị ầ ụ ớ ỉ ươ ụ
ng th c này ch có tác d ng v i giá tr c n in ngay sau nó. Ví d :
ế ẽ ứ
Ph
int a = 12; b = 345;
cout << a;
cout.width(7);
cout << b;
ả
K t qu in ra s là:
12 345
ỉ
ộ ị ố ướ ị ầ . 2) cout.fill(ch): Ch đ nh đ n kí t c giá tr c n in
ầ ấ ả
ự ch vào kho ng tr ng tr
ủ
ộ ộ
ướ
ị ầ
ự ộ
đ n ng m đ nh là d u cách. Nghĩa là, khi đ r ng c a giá tr c n in bé h n đ
ị
c giá tr c n in cho đ v i đ
ị Kí t
ỉ
ỉ ị ầ
ấ ằ ộ ộ ị
ấ
ẽ ộ
ộ
r ng ch đ nh thì máy s đ n thêm các d u cách vào tr
ấ ỳ
ầ
ể
ộ
r ng ch đ nh. Có th yêu c u đ n m t kí t ự ch b t k thay cho d u cách b ng ph ộ
ơ
ủ ớ ộ
ươ
ng
ệ ế ệ ướ cout.fill('*') tr c khi in b thì
12****345.
ụ
ẽ ả
ứ
th c trên. Ví d trong dãy l nh trên, n u ta thêm dòng l nh
ế
k t qu in ra s là:
ươ ớ ọ ứ ụ ệ ế ặ ộ ỉ ị Ph ng th c này có tác d ng v i m i câu l nh in sau nó cho đ n khi g p m t ch đ nh
m i.ớ
ị ự ể ầ ộ ớ ỉ ị
3) cout.precision(n): Ch đ nh đ chính xác c n in v i các giá tr th c (hi u là
ấ ấ ậ ố ữ ố
s ch s sau d u ch m th p phân).
ươ ố ự ẽ ầ ữ ố ẻ ng th c này yêu c u các s th c in ra sau đó s có n1 ch s l ố ự
. Các s th c
ứ
ẽ ượ ướ Ph
c khi in ra s đ tr ế
c làm tròn đ n ch s l
// độ rộng thực của a là 4, của b là 7
// chiếm 4 cột màn hình
// đặt độ rộng giá trị in tiếp theo là 10
// đặt độ chính xác đến 2 số lẻ
// b in trong 10 cột với 4 dấu cách đứng trước
ữ ố ẻ ứ n1.
ộ th
ặ ứ ớ ỉ ị ụ ươ ế
ng th c này có tác d ng cho đ n khi g p m t ch đ nh m i.
ế
ẽ
ả
12.3 345.68
Ph
Ví d :ụ
int a = 12.3; b = 345.678;
cout << a;
cout.width(10);
cout.precision(3);
cout << b;
K t qu in ra s là:
ẽ
ấ
7. C u trúc r nhánh
ệ
Câu l nh if
+ Ý nghĩa
ộ ệ ươ ệ
ụ ế ộ c vi
M t câu l nh if cho phép ch
ề
ộ
ươ ố
ố ệ
ể ự
ng trình có th th c hi n kh i l nh này hay kh i
ệ
ệ
t trong câu l nh là đúng hay sai. Nói
ệ ượ
ẽ ỉ ự ệ
l nh khác ph thu c vào m t đi u ki n đ
ệ
cách khác câu l nh if cho phép ch ng trình r nhánh (ch th c hi n 1 trong 2 nhánh).
ạ
+ Cú pháp
(cid:0) D ng thi u:
ế
if (điều kiện)
{
khối lệnh;
}
ạ
(cid:0) D ng đ y đ :
ầ ủ if (điều kiện)
{
khối lệnh 1;
}
else
{
khối lệnh 2;
}
ạ ề if có hai d ng: có else và không có else. đi u ki n ệ là
Trong cú pháp trên câu l nh ệ
ể ứ ứ ộ ặ ằ ị
m t bi u th c lôgic, t c là nó có giá tr đúng (khác 0) ho c sai (b ng 0).
ể ẽ ệ ệ
ng trình th c hi n câu l nh if, ch
ự
ươ ươ
ng trình s tính bi u th c
ệ
ự ẽ ế ụ ươ
Khi ch
ệ đúng ch
ề
N u ế đi u ki n ệ .
ứ đi u ki n
ề
ố ệ
ệ
ng trình s ti p t c th c hi n các l nh trong kh i l nh 1,
ề ẽ ự ệ ế ượ ạ
c l ệ
i (đi u ki n sai) ch ặ
ố ệ
ng trình s th c hi n kh i l nh 2 (n u có else) ho c
ươ
ng
ế
không làm gì (n u không có else).
ể ặ + Đ c đi m:
(cid:0) ặ ủ ứ ệ ể
ệ
ấ
Đ c đi m chung c a các câu l nh có c u trúc là b n thân nó ch a các câu l nh
ể ồ ệ ề ả
khác. Đi u này cho phép các câu l nh if có th l ng nhau.
(cid:0) ế ệ ệ ể
ư ẽ ầ ắ ấ ả ớ ề
ầ ồ
ớ N u nhi u câu l nh if (có else và không else) l ng nhau vi c hi u if và else nào
ượ
c
ặ đi v i nhau c n ph i chú ý. Qui t c là else s đi v i if g n nó nh t mà ch a đ
ớ
ghép c p v i else khác.
if (n>0) if (a>b) c = a;
else c = b;
ớ
ươ
ng v i:
ụ ệ Ví d câu l nh:
ươ
t
ng đ
if (n>0) { if (a>b) c = a; else c = b;}
ố ớ ề ệ ể ấ ố + Ví d 1: ụ
ằ
Ví dụ: B ng phép toán gán có đi u ki n có th tìm s l n nh t max trong 2 s a, b
max = (a > b) ? a: b ;
ư nh sau:
ở ặ ệ ượ
ế ế ứ ư
ế ế ậ
ế ậ
ộ ố
ứ
c tính b i dùng câu l nh if:
ho c max đ
if (a > b) max = a; else max = b;
Ví d 2ụ : Tính năm nhu n. Năm th n là nhu n n u nó chia h t cho 4, nh ng không
ầ
ặ
ế
chia h t cho 100 ho c chia h t 400. Chú ý: m t s nguyên a là chia h t cho b n u ph n
ằ
ư ủ
d c a phép chia b ng 0, t c a%b == 0.
#include
using namespace std;
int main()
{
int year;
cout << "Nam = " ; cin >> year ;
if (year%4 == 0 && year%100 !=0 || year%400 == 0)
cout << year << "la nam nhuan";
else
cout << year << "la nam khong nhuan";
return 0;
}
2 + bx + c = 0, bi
ả ươ ậ t a ế (cid:0) 0, b, c. Tìm x? i ph ng trình b c 2: ax
int main()
{
float a, b, c, delta, x1, x2;
Ví d 3ụ : Gi
#include
#include // sử dụng hàm sqrt()
using namespace std;
cout << "Nhap a , b, c: " ; cin >> a >> b >> c ;
if (a==0){
cout<<"Ban da nhap a=0"; return 0;
}
delta = b*b - 4*a*c ;
if (delta < 0)
cout << "PT vo nghiem"<
else if (delta==0)
cout<<"PT co nghiem kep x= " << -b/(2*a) <
else
{
x1 = (-b+sqrt(delta))/(2*a);
x2 = (-b-sqrt(delta))/(2*a);
cout << "x1 = " << x1 << " x2 = " << x2 ;
}
return 0;
}
ấ ỳ ộ ị
ế ị
ể ế ọ ặ
ượ ạ ế thay vì vi
(x != 0) đúng thì ta có x (cid:0) c l
(cid:0) ặ
t if (x != 0) ho c if (x == 0) ta có th vi
0 và vì x (cid:0)
ươ 0 nên (x) cũng đúng. Ng
ượ ươ ự ễ ấ Chú ý: Do C++ quan ni mệ "đúng" là m t giá tr khác 0 b t k và "sai" là giá tr 0 nên
ế
t g n thành if (x) ho c if (!x) vì n u
i n u (x) đúng thì x
ươ
ng đó (x != 0) cũng đúng. T ta d dàng th y đ c (x == 0) là t ng đ ng t
ừ
0, t
ớ
v i (!x).
ế ệ ầ ậ ầ ố ỏ ẽ
#include
ế ầ ậ trong đó n là s ph n th p phân c n làm tròn. N u b qua l nh fixed thì khi làm tròn s ị không làm tròn đ n ph n th p phân không còn giá tr .
ặ
cout<<"Nhap m: ";
cin>>m;
a=n/m;
cout<<"\n Ket qua la: "<
const int sohs = 50 ; const int CHIEUDAI = 10; const int CHIEURONG = 5;
Khai báo bi n: ế ở ạ a. Khai báo không kh i t o
ế ề ể ộ c khai báo trên cùng m t dòng:
ể ượ
Nhi u bi n cùng ki u có th đ
ở ạ b. Khai báo có kh i t o
ể ượ ệ ế ầ ở Trong câu l nh khai báo, các bi n có th đ ị c gán ngay giá tr ban đ u b i phép
toán gán (=) theo cú pháp:
ứ ể ế ể ằ ặ ị
const int n = 10 ; int main() {
// khai báo biến nguyên I, j, k và khởi tạo I bằng 2, k bằng 15 int I = 2, j , k = n + 5; // khai báo biến thực eps và khởi tạo bằng 10-6 float eps = 1.0e-6 ; // khai báo biến kí tự c và khởi tạo bằng ‘Z’ char c = ‘Z’; // khai báo xâu kí tự d và khởi tạo d bằng “Tin học” char d[100] = “Tin học”;
}
trong đó các giá tr gt_1, gt_2, gt_3 có th là các h ng, bi n ho c bi u th c. Ví d :ụ
ệ ự ủ
ế
ạ
c. Ph m vi hi u l c c a bi n
ộ ậ ư ệ ợ
ụ ứ ế ế ộ ơ ộ
ế ử ụ ượ ệ ế
ư ạ ố ệ ươ ộ ử ụ ượ ở ư ươ ế t ch Nh đã bi ng trình là m t t p h p các hàm, các câu l nh cũng nh các khai báo. ệ ự ủ Ph m vi hi u l c c a m t bi n là n i mà bi n có tác d ng. T c là bi n thu c hàm hay ệ ấ c phép s d ng bi n đó? M t bi n xu t hi n trong kh i l nh nào? Câu l nh nào đ ở ể ượ ử ụ c b i hàm khác ch ế c s d ng b i hàm này nh ng không s d ng đ ng trình có th đ
ặ ể ử ụ ụ ế ề ặ ộ
ở ả ầ ắ ể ừ ị ụ ộ ơ ị ượ v trí nó đ ượ c c khai báo
ố ệ ứ ế ế ẽ ho c có th s d ng b i c hai, đi u này ph thu c ch t ch vào v trí n i bi n đ ế ẽ khai báo. M t nguyên t c đ u tiên là bi n s có tác d ng k t cho đ n h t kh i l nh ch a nó.
ế
ị d. Gán giá tr cho bi n
ụ ướ ư ượ Trong các ví d tr c chúng ta đã s d ng phép gán dù nó ch a đ ơ c trình bày, đ n
ế ả ạ ộ ộ ử ụ ị ớ gi n m t phép gán mang ý nghĩa t o giá tr m i cho m t bi n.
ị ớ ượ ế ị ấ ể ướ đ ng xoá đi b t k tr c đó nó
Khi bi n đ ị ư ứ ư ẽ ượ ự ộ c gán giá tr m i, giá tr cũ s đ c t ủ ị ặ ch a giá tr nào (ho c ch a có giá tr ). Cú pháp c a phép gán nh sau:
ị ủ ứ ẽ ể ế ả ặ
= ;
ng trình s tính toán giá tr c a bi u th c bên v ph i và gán
// khởi tạo I bằng 3
// gán cho n giá trị 10
// in ra: 10, 3
// gán lại giá trị của I bằng n/2 = 5
// in ra: 10, 5
Khi g p phép gán ch ế ở ế ị ươ v trái.
ườ ư ớ V i ý nghĩa thông th
L u ý: ị ả ạ ộ ộ
ợ ụ ứ ể
ị ở ề ậ giá tr này cho bi n Ví d : ụ int n, I = 3; n = 10; cout << n <<”, “ << I << endl; I = n / 2; cout << n <<”, “ << I << endl; ủ ộ ạ i m t ng c a phép toán (nghĩa là tính toán và cho l ị ả ạ ủ ị ụ ữ ệ giá tr ) thì phép toán gán còn m t nhi m v n a là tr l i m t giá tr . Giá tr tr l i c a ả ấ ề ị ủ phép toán gán chính là giá tr c a bi u th c bên ph i d u gán. L i d ng đi u này C++ cho ộ ế phép chúng ta gán “kép” cho nhi u bi n nh n cùng m t giá tr b i cú pháp:
ế ẽ
t c các bi n s nh n cùng giá tr
ị gt.
biến_1 = biến_2 = … = biến_n = gt ; ậ ấ ả ớ v i cách gán này t Ví d : ụ int I, j, k ; I = j = k = 1; ệ
ư ượ ấ ệ c phép xu t hi n trong b t k Ngoài vi c gán kép nh trên, phép toán gán còn đ
ộ ể ể ứ ỉ
ị ứ ụ n = 3 + (I = 2) s cho ta
ệ ọ ơ
ộ ở ộ ư ệ ẳ ứ ọ ng h p) nh ng cũng tr nên khó đ c, ch ng h n câu l nh trên có th vi
ể ế ớ ắ ầ ẽ ễ ọ ơ ấ ố ớ ợ ệ ạ
ể ấ ỳ ứ ề bi u th c nào, đi u này cho phép m t bi u th c ch a phép gán, nó không ch tính toán mà ệ ử ụ ẽ ế I = 2 và n = 5. Vi c s d ng còn gán giá tr cho các bi n, ví d ộ ươ ề ng trình g n gàng h n (trong m t nhi u ch c năng g p trong m t câu l nh làm cho ch ạ ố ườ s tr t tách I = 2; n = 3 + I; s d đ c h n ít nh t đ i v i các b n m i b t đ u tìm thành 2 câu l nh: ề ậ hi u v l p trình.
ộ ố ể ữ ệ
ẩ
4. M t s ki u d li u chu n
ộ
ế
ộ ố
ớ
ớ
M t bi n trong ch ế
ế ươ ng trình là m t s ô nh liên ti p nào đó trong b nh dùng đ l u tr ạ ộ ả
ủ
ể ử ụ
ộ
ữ ệ
ể ớ ẽ
ể ữ ệ
ỉ ộ
ề ậ
ế
ể ư ộ ữ ượ ắ ươ ữ ệ c g n ng trình và đ d li u (vào, ra hay k t qu trung gian) trong quá trình ho t đ ng c a ch ữ ệ ủ ể ế ế ớ v i m t tên do NSD khai báo. Đ s d ng bi n, NSD khai báo: tên bi n và ki u c a d li u ớ ượ ắ ch có các d li u cùng ki u v i nhau m i đ ớ ế ứ c phép làm toán v i ch a trong bi n. Nguyên t c: ế ố ẩ ế nhau. Do đó, khi đ c p đ n m t ki u d li u chu n, ta s xét đ n các y u t sau:
(cid:0)
ộ ừ
ể ủ ữ ệ
ể ỉ
Tên ki uể : là m t t
ị dành riêng đ ch đ nh ki u c a d li u.
(cid:0)
ố
ộ
ườ
ố
ộ
ị
ớ: Thông th ỉ ở
ệ ố
ụ
ế
ụ ng s byte này ph thu c vào các trình ệ đây ta ch xét đ n h th ng máy PC thông d ng hi n
ữ ư S byte l u tr trong b nh ệ ố biên d ch và h th ng máy khác nhau, nay.
(cid:0)
ề
ị ủ
ể
ẽ
ộ
Mi n giá tr c a ki u
ị ữ ệ ị
ị ớ ế
ể
ể
ợ
ể : Quy đ nh m t đ n v d li u thu c ki u này s có th ch a ộ ơ ể ứ ế ề ầ ị giá tr trong pham vi nào. NSD c n nh đ n mi n giá tr này đ khai báo ki u cho các bi n ộ ầ ử ụ c n s d ng m t cách thích h p.
ườ
ộ ố ể M t s ki u th
ng dùng:
ướ
c/ precision
ể ữ ệ Ki u d li u Ký tự
Tên ki uể char
Kích th 1 byte
số nguyên
int
4 byte
ữ ố ậ
float
4 byte (1.2E38 > 3.4E+38), 6 ch s th p phân
Số thực (dấu chấm động)
ữ ố ậ
double
8 byte (2.3E308 > 1.7E+308), 15 ch s th p phân
Lôgic
bool
1 byte
ể
ứ 5. Phép toán, bi u th c
ề ậ ấ ạ C++ có r t nhi u phép toán lo i 1 ngôi, 2 ngôi và th m chí 3 ngôi.
ầ ượ ạ ạ ặ ọ ứ c g i là h ng th c ho c toán h ng,
ử ệ ọ Các thành ph n tên g i tham gia trong phép toán đ ượ ọ các kí hi u phép toán đ c g i là toán t .
ố ọ a. Các phép toán s h c: + , , * , / , %
(cid:0) ừ ộ Các phép toán + (c ng), (tr ), * (nhân)
(cid:0) ượ ứ ể ạ
Phép toán a / b (chia) đ ố ầ ạ ế ủ c th c hi n theo ki u c a các toán h ng, t c n u ượ ỉ ấ ế c
ệ ả ủ ả ố ự ự ạ
// do 13 và 5 là 2 số nguyên
13/5 = 2 13.0/5 = 13/5.0 = 13.0/5.0 = 2.6 // có ít nhất 1 toán hạng là thực
ự ả c hai toán h ng là s nguyên thì k t qu c a phép chia ch l y ph n nguyên, ng ế ạ ế l i n u 1 trong 2 toán h ng là th c thì k t qu là s th c. Ví d : ụ
(cid:0) ư ả ạ ầ ư ủ ầ i ph n d c a phép chia a/b, trong đó a
ấ Phép toán a % b (l y ph n d ) tr l ố và b là 2 s nguyên.
// phần dư của 13/5
// phần dư của 5/13
13%5 = 3 ; 5%13 = 5 ;
Ví d :ụ
ả
b. Các phép toán t
tự ăng, gi m: i++ , ++i , i , i
(cid:0) ẽ ị ứ ươ
ng đ ặ ươ ể ứ ệ
ẽ
ớ ượ ứ ượ ể ớ ượ ạ i++ s tăng
c l ệ ụ ạ Phép toán ++i và i++ s cùng tăng l nh ệ ế +i khác v i ớ i++. C th ++ i s tăng ẽ ứ bi u th c. Ng ượ ể cũ). Đi m khác bi ớ ơ i lên 1 đ n v t c t ng v i câu ằ i = i+1. Tuy nhiên n u 2 phép toán này n m trong câu l nh ho c bi u th c thì + i, sau đó i m i đ c tham gia vào tính toán trong ị i ể i sau khi bi u th c đ c tính toán xong (v i giá tr ả ử i = 3, j = 15. c minh ho thông qua ví d sau, gi ụ ể i t này đ s
ả
Phép toán i = ++j ; // tăng trư cớ i = j++ ; // tăng sau j = ++i + 5 ; j = i++ + 5 ;
Tương đương j = j + 1; i = j ; i = j ; j = j + 1 ; i = i + 1 ; j = i + 5 ; j = i + 5; i = i + 1;
K t quế i = 16 , j = 16 i = 15 , j = 16 i = 4, j = 9 i = 4, j = 8
ệ ự ứ ệ ả ặ ẽ
ể tăng gi m vào trong bi u th c ho c câu l nh s ơ ể ế ợ Chú ý: Vi c k t h p phép toán t ư ọ ươ ng trình g n nh ng khó hi u h n. làm ch
c. Các phép toán so sánh và lôgic
ị ủ ứ ế ể ặ
Đây là các phép toán mà giá tr tr l ị ể ị
ứ ở ộ ậ ơ ệ ộ
ượ ạ c l ệ ị ị ả ạ i là đúng ho c sai. N u giá tr c a bi u th c là ậ i là sai thì bi u th c nh n giá tr 0. Nói cách khác 1 và đúng thì nó nh n giá tr 1, ng ị ị ụ ể ủ 0 là giá tr c th c a 2 khái ni m "đúng", "sai". M r ng h n C++ quan ni m m t giá tr ấ ỳ b t k khác 0 là " đúng" và giá tr 0 là " sai".
// nhận giá trị 1 vì đúng
// = 0 vì sai
// = 1
// = 3 vì 5<2 bằng 0
// = 4 vì 5>=2 bằng 1
ạ ủ ể ả
ừ
ị ủ ạ ả
ị + Các phép toán so sánh == (bằng nhau), != (khác nhau), > (lớn hơn), < (nhỏ hơn), >= (lớn hơn hoặc bằng), <= (nhỏ hơn hoặc bằng). ụ Hai toán h ng c a các phép toán này ph i cùng ki u. Ví d : 3 == 3 hoặc 3 == (4 - 1) 3 == 5 3 != 5 3 + (5 < 2) 3 + (5 >= 2) ệ ầ Chú ý: C n phân bi t phép toán gán (=) và phép toán so sánh (==). Phép gán v a gán ả ạ ế ừ ị giá tr cho bi n v a tr l i giá tr b t k (là giá tr c a toán h ng bên ph i), trong khi phép ả ạ so sánh luôn luôn tr l ị ấ ỳ ặ i giá tr 1 ho c 0.
ủ ứ ộ ỉ
ậ ể ệ ạ ể ệ ở ố ở + Các phép toán lôgic: && (và), || (hoặc ), ! (không, phủ định) ể ả Hai toán h ng c a lo i phép toán này ph i có ki u lôgic t c ch nh n m t trong hai ị c th hi n b i các s nguyên khác 0) ho c "sai" (th hi n b i 0). Khi
a 1 1 0 0
b 1 0 1 0
a && b 1 0 0 0
a || b 1 1 1 0
! a 0 0 1 1
ượ ặ ả ạ ượ giá tr "đúng" (đ ị ả ạ ủ i c a phép toán là 1 ho c 0 và đ đó giá tr tr l ặ c cho trong b ng sau:
Tóm l i:ạ
(cid:0) ạ ỉ Phép toán "và" đúng khi và ch khi hai toán h ng cùng đúng
(cid:0) ạ ặ ỉ Phép toán "ho c" sai khi và ch khi hai toán h ng cùng sai
// = 0 vì có hạng thức (4>5) sai
// = 1 vì cả hai hạng thức cùng đúng
// = 0
// = 1 vì (4+3<7) bằng 0
// = 1 vì có một hạng thức (5) đúng
// = 0 vì cả hai hạng thức đều sai
(cid:0) ủ ị ủ ạ ặ ỉ Phép toán "không" (ho c "ph đ nh") đúng khi và ch khi toán h ng c a nó
sai. Ví d :ụ 3 && (4 > 5) (3 >= 1) && (7) !1 !(4 + 3 < 7) 5 || (4 >= 6) (5 < !0) || (4 >= 6)
ể ệ ừ c ti n hành t
Chú ý: vi c đánh giá bi u th c đ ờ ả ẽ ừ ữ ả ẽ
ế ự ủ ư ể ế t ả tăng
cho kết quả x = 0 , i = 3 , j = 4
cho kết quả y = 0 , i = 2 , j = 4
ụ ể ế trái sang ph i và s d ng khi bi ứ ế k t qu mà không ch đánh giá h t bi u th c. Cách đánh giá này s cho nh ng k t qu ụ ph khác nhau n u trong bi u th c ta "tranh th " đ a thêm vào các phép toán t ứ ả gi m. Ví d cho ứ ượ ể ế ế ứ i = 2, j = 3, xét 2 bi u th c sau đây:
x = (++i < 4 && ++j > 5) // y = (++j > 5 && ++i < 4) //
ạ ủ ứ ư
ả ậ ấ
ạ ừ ả ệ ẽ
ầ ươ ổ ị ể ứ ị thi ị ủ i và j sau khi th c hi n xong hai bi u th c này s có k t qu ể i < 4 là đúng nên ch
ể ứ ượ ậ
c bi u th c. Do v y sau khi đánh giá xong c j > 5 là sai nên ch ế ộ ể ượ
ươ ượ
ỉ ụ
ế j đ ộ ầ ể ứ ự ứ ả t hai bi u th c là nh nhau (ngo i tr hoán đ i v trí 2 toán h ng c a phép ế i = 2 và j = 3 ta th y c hai bi u th c trên cùng nh n giá tr 0. ể ứ ả ế ả ế ụ ng trình ph i ti p t c ả i và j đ uề ươ ng trình i < 4. Nghĩa là c tăng 1, ắ ữ i = 2, j = 4 khác v i k t qu c a bi u th c trên. Ví d này m t l n n a nh c đó ta có ể tăng gi m trong bi u th c và trong
ế cách vi ớ toán &&). V i gi t ự Tuy nhiên các giá tr c a ể ụ ể ớ khác nhau. C th v i bi u th c đ u vì ++ ứ ể ế j > 5 đ đánh giá đ tính ti p ++ ể ớ ượ ứ i=3, j=4). Trong khi đó v i bi u th c sau do ++ c tăng 1 ( đ ầ ứ ậ ể ế c toàn b bi u th c là sai mà không c n tính ti p ++ có th k t lu n đ ẽ ừ ậ j > 5 s d ng và vì v y ch có bi n sau khi ch ng trình đánh giá xong ++ ể ả ủ ừ ớ ế t ỹ ệ ử ụ ta chú ý ki m soát k vi c s d ng các phép toán t câu l nh.ệ
ẩ ủ
ệ
ấ
ậ 6. L nh xu t / nh p chu n c a C++
ậ ữ ệ
ệ
ừ
L nh cin nh p d li u vào t
ữ ệ ể ậ ử ụ
bàn phím ế
Đ nh p d li u vào cho các bi n có tên var1, var2, var3 chúng ta s d ng câu
l nh:ệ
cin >> var1 ; cin >> var2 ; cin >> var3 ; ho c:ặ cin >> var1 >> var2 >> var3 ; ượ ử ụ Các bi n ế var1, var2, var3 đ
ừ ữ ị
ể ế ề ậ ơ c s d ng đ l u tr các giá tr NSD nh p vào t ế ể ư ằ ế ế ế ậ bàn t ti p ti p các tên bi n vào
ể ủ ả ấ phím. Hi n nhiên có th nh p nhi u bi n h n b ng cách vi ệ bên ph i các d u >> c a câu l nh.
ệ ữ ậ ng trình tính chu vi và di n tích hình ch nh t.
ươ
Ví d :ụ Ch
#include ệ
l nh sau: cout << "Chieu dai la " ;
cout << 23 ;
cout << " met";
ể ỉ ằ
ho c có th ch b ng 1 l nh:
cout << "Chieu dai la 23 met" ; ệ ặ ợ ế ư ườ ề ng h p ch a bi t giá tr c th c a chi u dài, ch bi
ụ ạ ị ụ ể ủ
ậ ố c l u trong bi n ị
i giá tr này đã
cướ cin >> cd tr ệ ế ầ ị Tr
ượ ư
đ
đó) và ta c n bi ế cd (ví d b n nh p s 23 t
t giá tr này là bao nhiêu thì có th s d ng câu l nh: ệ ạ
ỉ ế
t hi n t
ệ
ở
ừ
bàn phím b i câu l nh
ể ử ụ
cout << "Chieu dai la " << cd << " met" ; ị ầ ứ ể ể ế ộ ộ ộ ỉ M t giá tr c n in không ch là m t bi n nh ư cd, cr, ... mà còn có th là m t bi u th c. ị ỉ n 1) cout.width(n): Ch đ nh đ r ng in ra màn hình là ứ ươ ộ ng th c này cho phép in ra các giá tr v i đ r ng
ơ ị ề
ớ ộ ộ ộ ộ
ơ ộ ộ ị ị ớ ộ ộ
ế n bé h n đ r ng th c s c a giá tr , thì in giá tr v i s
ự ự ủ
ự
ế n l n h n đ r ng th c, thì in giá tr canh theo l ằ
n c t trên màn hình b ng
ị ớ ố
ề ị ượ ể ố ướ ộ Ph
l nh ệ
cout<< li n sau đó. N u
ự ự
ộ ằ
c t b ng v i đ r ng th c s . N u
ừ
ả
ph i, và đ tr ng các c t th a phía tr ớ
c giá tr đ c in. // độ rộng thực của a là 2, của b là 3 // chiếm 2 cột màn hình // đặt độ rộng giá trị in tiếp theo là 7 // b in trong 7 cột với 4 dấu cách đứng trước ị ầ ụ ớ ỉ ươ ụ
ng th c này ch có tác d ng v i giá tr c n in ngay sau nó. Ví d : ế ẽ ứ
Ph
int a = 12; b = 345;
cout << a;
cout.width(7);
cout << b;
ả
K t qu in ra s là: ộ ị ố ướ ị ầ . 2) cout.fill(ch): Ch đ nh đ n kí t c giá tr c n in ầ ấ ả
ự ch vào kho ng tr ng tr
ủ ộ ộ
ướ ị ầ
ự ộ
đ n ng m đ nh là d u cách. Nghĩa là, khi đ r ng c a giá tr c n in bé h n đ
ị
c giá tr c n in cho đ v i đ
ị Kí t
ỉ
ỉ ị ầ
ấ ằ ộ ộ ị
ấ
ẽ ộ
ộ
r ng ch đ nh thì máy s đ n thêm các d u cách vào tr
ấ ỳ
ầ
ể
ộ
r ng ch đ nh. Có th yêu c u đ n m t kí t ự ch b t k thay cho d u cách b ng ph ộ
ơ
ủ ớ ộ
ươ
ng ệ ế ệ ướ cout.fill('*') tr c khi in b thì 12****345. ụ
ẽ ả ứ
th c trên. Ví d trong dãy l nh trên, n u ta thêm dòng l nh
ế
k t qu in ra s là:
ươ ớ ọ ứ ụ ệ ế ặ ộ ỉ ị Ph ng th c này có tác d ng v i m i câu l nh in sau nó cho đ n khi g p m t ch đ nh m i.ớ ị ự ể ầ ộ ớ ỉ ị ấ ấ ậ ố ữ ố
s ch s sau d u ch m th p phân). ươ ố ự ẽ ầ ữ ố ẻ ng th c này yêu c u các s th c in ra sau đó s có n1 ch s l ố ự
. Các s th c ứ
ẽ ượ ướ Ph
c khi in ra s đ tr ế
c làm tròn đ n ch s l // độ rộng thực của a là 4, của b là 7 // chiếm 4 cột màn hình // đặt độ rộng giá trị in tiếp theo là 10 // đặt độ chính xác đến 2 số lẻ // b in trong 10 cột với 4 dấu cách đứng trước ữ ố ẻ ứ n1.
ộ th
ặ ứ ớ ỉ ị ụ ươ ế
ng th c này có tác d ng cho đ n khi g p m t ch đ nh m i. 12.3 345.68 Ph
Ví d :ụ
int a = 12.3; b = 345.678;
cout << a;
cout.width(10);
cout.precision(3);
cout << b;
K t qu in ra s là: + Ý nghĩa ộ ệ ươ ệ ụ ế ộ c vi M t câu l nh if cho phép ch
ề
ộ
ươ ố
ố ệ
ể ự
ng trình có th th c hi n kh i l nh này hay kh i
ệ
ệ
t trong câu l nh là đúng hay sai. Nói
ệ ượ
ẽ ỉ ự ệ
l nh khác ph thu c vào m t đi u ki n đ
ệ
cách khác câu l nh if cho phép ch ng trình r nhánh (ch th c hi n 1 trong 2 nhánh). + Cú pháp
(cid:0) D ng thi u:
ế (cid:0) D ng đ y đ : ạ ề if có hai d ng: có else và không có else. đi u ki n ệ là Trong cú pháp trên câu l nh ệ
ể ứ ứ ộ ặ ằ ị m t bi u th c lôgic, t c là nó có giá tr đúng (khác 0) ho c sai (b ng 0).
ể ẽ ệ ệ
ng trình th c hi n câu l nh if, ch ự
ươ ươ
ng trình s tính bi u th c
ệ
ự ẽ ế ụ ươ
Khi ch
ệ đúng ch
ề
N u ế đi u ki n ệ .
ứ đi u ki n
ề
ố ệ
ệ
ng trình s ti p t c th c hi n các l nh trong kh i l nh 1, ề ẽ ự ệ ế ượ ạ
c l ệ
i (đi u ki n sai) ch ặ
ố ệ
ng trình s th c hi n kh i l nh 2 (n u có else) ho c ươ
ng
ế
không làm gì (n u không có else). ể ặ + Đ c đi m: (cid:0) ặ ủ ứ ệ ể ệ
ấ
Đ c đi m chung c a các câu l nh có c u trúc là b n thân nó ch a các câu l nh
ể ồ ệ ề ả
khác. Đi u này cho phép các câu l nh if có th l ng nhau. (cid:0) ế ệ ệ ể ư ẽ ầ ắ ấ ả ớ ề
ầ ồ
ớ N u nhi u câu l nh if (có else và không else) l ng nhau vi c hi u if và else nào
ượ
c ặ đi v i nhau c n ph i chú ý. Qui t c là else s đi v i if g n nó nh t mà ch a đ
ớ
ghép c p v i else khác. if (n>0) if (a>b) c = a;
else c = b;
ớ
ươ
ng v i: ụ ệ Ví d câu l nh: ươ
t ng đ
if (n>0) { if (a>b) c = a; else c = b;} ố ớ ề ệ ể ấ ố + Ví d 1: ụ
ằ
Ví dụ: B ng phép toán gán có đi u ki n có th tìm s l n nh t max trong 2 s a, b max = (a > b) ? a: b ; ư nh sau: ở ặ ệ ượ ế ế ứ ư ế ế ậ
ế ậ
ộ ố ứ c tính b i dùng câu l nh if:
ho c max đ
if (a > b) max = a; else max = b;
Ví d 2ụ : Tính năm nhu n. Năm th n là nhu n n u nó chia h t cho 4, nh ng không
ầ
ặ
ế
chia h t cho 100 ho c chia h t 400. Chú ý: m t s nguyên a là chia h t cho b n u ph n
ằ
ư ủ
d c a phép chia b ng 0, t c a%b == 0.
#include 2 + bx + c = 0, bi ả ươ ậ t a ế (cid:0) 0, b, c. Tìm x? i ph ng trình b c 2: ax int main()
{
float a, b, c, delta, x1, x2; Ví d 3ụ : Gi
#include cout << "Nhap a , b, c: " ; cin >> a >> b >> c ; if (a==0){
cout<<"Ban da nhap a=0"; return 0;
} delta = b*b - 4*a*c ;
if (delta < 0) cout << "PT vo nghiem"< else if (delta==0) cout<<"PT co nghiem kep x= " << -b/(2*a) < else
{ x1 = (-b+sqrt(delta))/(2*a);
x2 = (-b-sqrt(delta))/(2*a);
cout << "x1 = " << x1 << " x2 = " << x2 ; } return 0;
} ấ ỳ ộ ị ế ị
ể ế ọ ặ ượ ạ ế thay vì vi
(x != 0) đúng thì ta có x (cid:0) c l (cid:0) ặ
t if (x != 0) ho c if (x == 0) ta có th vi
0 và vì x (cid:0)
ươ 0 nên (x) cũng đúng. Ng
ượ ươ ự ễ ấ Chú ý: Do C++ quan ni mệ "đúng" là m t giá tr khác 0 b t k và "sai" là giá tr 0 nên
ế
t g n thành if (x) ho c if (!x) vì n u
i n u (x) đúng thì x
ươ
ng đó (x != 0) cũng đúng. T ta d dàng th y đ c (x == 0) là t ng đ ng t ừ
0, t
ớ
v i (!x).ươ
ứ ị
ấ ữ ệ
ạ
Ph
ng th c đ nh d ng xu t d li u
ộ ộ
12 345
ỉ
3) cout.precision(n): Ch đ nh đ chính xác c n in v i các giá tr th c (hi u là
ế
ẽ
ả
ẽ
ấ
7. C u trúc r nhánh
ệ
Câu l nh if
ạ
if (điều kiện)
{
khối lệnh;
}
ạ
ầ ủ if (điều kiện)
{
khối lệnh 1;
}
else
{
khối lệnh 2;
}