You are on page 1of 48

NHẬP MÔN LẬP TRÌNH

CHƯƠNG 4:
CÁC LỆNH CÓ CẤU TRÚC

1
&
VC
BB
Nội dung

I Các lệnh rẽ nhánh

II Các lệnh lặp

LTCB – Các lệnh có cấu trúc 2


&
VC
BB
I. Các cấu trúc rẽ nhánh
Câu lệnh if thiếu
Trong ( ), cho kết quả
(sai = 0, đúng ≠ 0)
if (<BT Logic>)
<Lệnh 1>;
Câu lệnh đơn hoặc
Câu lệnh phức (đặt
giữa { và })

S
<BT Logic>

Đ
<Lệnh 1>

LTCB – Các lệnh có cấu trúc 3


&
VC
BB
I. Các cấu trúc rẽ nhánh (tt)
Câu lệnh if thiếu (tt)
void main()
{
if (a == 0)
printf(“a bang 0”);

if (a == 0)
{
printf(“a bang 0”);
a = 2912;
}

if (a == 0)
printf(“a bang 0”);
if (a != 0)
printf(“a khac 0”);
}
LTCB – Các lệnh có cấu trúc 4
&
VC
BB
I. Các cấu trúc rẽ nhánh (tt)
Câu lệnh if đủ
Trong ( ), cho kết quả
(sai = 0, đúng ≠ 0)

if (<BT Logic>)
<Lệnh 1>; Câu lệnh đơn hoặc
else Câu lệnh phức (đặt
giữa { và })
<Lệnh 2>;
S
<BT Logic> <Lệnh 2>

Đ
<Lệnh 1>

LTCB – Các lệnh có cấu trúc 5


&
VC
BB
I. Các cấu trúc rẽ nhánh (tt)
Câu lệnh if đủ (tt)
void main()
{
if (a == 0)
printf(“a bang 0”);
if (a != 0)
printf(“a khac 0”);

if (a == 0)
printf(“a bang 0”);
else
printf(“a khac 0”);
}

LTCB – Các lệnh có cấu trúc 6


&
VC
BB
I. Các cấu trúc rẽ nhánh (tt)
Câu lệnh if mở rộng
if (<BT Logic 1>)
<Lệnh 1>;
Nếu biểu thức
else if (<BT Logic 2>)
Logic i đúng thì
<Lệnh 2>; thực hiện Lệnh
……………………….. i, nếu không có
biểu thức Logic
………………………..
nào đúng thì
else if (<BT Logic n-1>) thực hiện Lệnh
<Lệnh n-1>; n
else
<Lệnh n>; 7
LTCB – Các lệnh có cấu trúc
&
VC
BB
I. Các cấu trúc rẽ nhánh (tt)
Câu lệnh if mở rộng (tt)

S
<BT Logic1>

Đ
S
<Lệnh 1> <BT Logic2> ………

Đ
<Lệnh 2>

<Lệnh n>

LTCB – Các lệnh có cấu trúc 8


&
VC
BB
I. Các cấu trúc rẽ nhánh (tt)
Câu lệnh if mở rộng (tt)
void main()
{
if (diem >= 8)
printf(“Xep loai GIOI”);
else if (diem >= 7)
printf(“Xep loai KHA”);
else if (diem >= 5)
printf(“Xep loai TRUNG BINH”);
else
printf(“KHONG DAT”);
}

LTCB – Các lệnh có cấu trúc 9


&
VC
BB
I. Các cấu trúc rẽ nhánh (tt)
Các câu lệnh if lồng nhau
 Nguyên tắc: mệnh đề else sẽ được hiểu là
của if gần nó nhất
 Có thể dùng cặp {} để bao câu if bên trong
câu if khác
 Nhận xét VD sau:
if (n > 0)
if (a > b)
x = a;
else
x = b;

LTCB – Các lệnh có cấu trúc 10


&
VC
BB
I. Các cấu trúc rẽ nhánh (tt)
Các câu lệnh if lồng nhau (tt)
if (n > 0) if (n > 0)
if (a > b) {
x = a; if (a > b)
else x = a;
x = b; }
=> else được else
hiểu là của lệnh x = b;
if (a > b) => else được
hiểu là của lệnh if
(n > 0)

LTCB – Các lệnh có cấu trúc 11


&
VC
BB
I. Các cấu trúc rẽ nhánh (tt)
Câu lệnh switch thiếu
switch (<Biến/BT>)
{ <Biến/BT> Đ
<Lệnh 1>
case <GT1>:<Lệnh 1>;break;= <GT1>
case <GT2>:<Lệnh 2>;break; S
… <Biến/BT> Đ
<Lệnh 2>
} = <GT2>

S
 <Biến/BT> là biến/biểu
thức cho giá trị rời rạc.
 <Lệnh> : đơn hoặc khối
lệnh nhưng không cần
{}. LTCB – Các lệnh có cấu trúc 12
&
VC
BB
I. Các cấu trúc rẽ nhánh (tt)
Câu lệnh switch thiếu (tt)
void main()
{
int a;
printf(“Nhap a: ”);
scanf(“%d”, &a);

switch (a)
{
case 1 : printf(“Mot”); break;
case 2 : printf(“Hai”); break;
case 3 : printf(“Ba”); break;
}
}

LTCB – Các lệnh có cấu trúc 13


&
VC
BB
I. Các cấu trúc rẽ nhánh (tt)
Câu lệnh switch đủ
switch (<Biến/BT>)
Đ
{ <Biến/BT>
= <GT1>
<Lệnh 1>
case <GT1>:<Lệnh 1>;break;
S
case <GT2>:<Lệnh 2>;break;
Đ
… <Biến/BT>
<Lệnh 2>
= <GT2>
default:
<Lệnh n>; S

}
<Lệnh n>

LTCB – Các lệnh có cấu trúc 14


&
VC
BB
I. Các cấu trúc rẽ nhánh (tt)
Câu lệnh switch đủ (tt)
void main()
{
int a;
printf(“Nhap a: ”);
scanf(“%d”, &a);

switch (a)
{
case 1 : printf(“Mot”); break;
case 2 : printf(“Hai”); break;
case 3 : printf(“Ba”); break;
default : printf(“Ko biet doc”);
}
}

LTCB – Các lệnh có cấu trúc 15


&
VC
BB
I. Các cấu trúc rẽ nhánh (tt)
Câu lệnh switch lồng nhau
switch (a)
{
case 1 : printf(“Mot”); break;
case 2 : switch (b)
{
case 1 : printf(“A”); break;
case 2 : printf(“B”); break;
}
break;
case 3 : printf(“Ba”); break;
default : printf(“Khong biet doc”);
}

LTCB – Các lệnh có cấu trúc 16


&
VC
BB
I. Các cấu trúc rẽ nhánh (tt)
Câu lệnh switch với nhiều
trường hợp dùng chung 1 lệnh
switch (ithang)
{
case 1:
case 2:
case 3: printf("Quy 1.\n");
break;
case 4:
case 5:
case 6: printf("Quy 2.\n");
break;
………………

LTCB – Các lệnh có cấu trúc 17


&
VC
BB
I. Các cấu trúc rẽ nhánh (tt)
Phân biệt if và switch
 Câu lệnh if  Câu lệnh switch

if (a == 1) switch (a)
printf(“Mot”); {
if (a == 2) case 1: printf(“Mot”);
printf(“Hai”); break;
if (a == 3) case 2: printf(“Hai”);
printf(“Ba”); break;
if (a == 4) case 3: printf(“Ba”);
printf(“Bon”); break;
if (a == 5) case 4: printf(“Bon”);
printf(“Nam”); break;
case 5: printf(“Nam”);
}
LTCB – Các lệnh có cấu trúc 18
&
VC
BB
II. Các cấu trúc lặp
Đặt vấn đề
 Ví dụ
 Viết chương trình xuất các số từ 1 đến 10
=> Sử dụng 10 câu lệnh printf
 Viết chương trình xuất các số từ 1 đến 1000
=> Sử dụng 1000 câu lệnh printf !?
 Giải pháp
 Sử dụng cấu trúc lặp để lặp lại một hành
động trong khi một điều kiện nào đó còn
đúng.
 3 lệnh lặp: for, while, do… while
LTCB – Các lệnh có cấu trúc 19
&
VC
BB
II. Các cấu trúc lặp (tt)
Cấu trúc for
for (<Khởi đầu>; <Đ/K lặp>; <Bước nhảy>)
<Lệnh>;

<Khởi đầu>

<Bước nhảy>

Đ
<Đ/K lặp> <Lệnh>

LTCB – Các lệnh có cấu trúc 20


&
VC
BB
II. Các cấu trúc lặp (tt)
Cấu trúc for (tt)
<Khởi đầu>, <Đ/K lặp>, <Bước nhảy>: là các
biểu thức liên quan đến 1 biến rời rạc (biến
đếm). Cả 3 có thể vắng mặt
<Khởi đầu>: gán giá trị ban đầu cho biến đếm
<Đ/K lặp>: kiểm tra giá trị hiện tại của
biến đếm bằng 1 điều kiện. Nếu điều kiện
thỏa thì thực hiện <Lệnh>
<Bước nhảy>: tăng hoặc giảm biến đếm
sau mỗi lần thực hiện <Lệnh>

LTCB – Các lệnh có cấu trúc 21


&
VC
BB
II. Các cấu trúc lặp (tt)
Cấu trúc for (tt)
int i;
for (i = 0; i < 10; i++)
printf (“%d\n”, i);
ÞIn các số từ 0 -> 9, mỗi số trên 1 dòng
ÞKết thúc vòng lặp: i=?

for (int j=10; j>=0; j-=2)


printf (“%d\n”, j);
ÞIn các số chẵn từ 10 đến 0.
ÞKết thúc vòng lặp: i=-2

for (int k=1; k<=0; k++)


printf (“%d\n”, k);
ÞKhông làm gì cả
ÞKết thúc vòng lặp: k=1
LTCB – Các lệnh có cấu trúc 22
&
VC
BB
II. Các cấu trúc lặp (tt)
Cấu trúc for (tt)
 Câu lệnh for là một câu lệnh đơn và có thể lồng
nhau.
if (n < 10 && m < 20)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
printf(“%d”, i + j);
printf(“\n”);
}
}
}

LTCB – Các lệnh có cấu trúc 23


&
VC
BB
II. Các cấu trúc lặp (tt)
Cấu trúc for (tt)
 Trong câu lệnh for, có thể sẽ không có phần
<Khởi đầu>
int i;
for (i = 0; i < 10; i++)
<Khởi đầu>
printf(“%d\n”, i);
<Bước nhảy>
int i = 0;
for (; i < 10; i++)
printf(“%d\n”, i); Đ
<Đ/K lặp> <Lệnh>

LTCB – Các lệnh có cấu trúc 24


&
VC
BB
II. Các cấu trúc lặp (tt)
Cấu trúc for (tt)
 Trong câu lệnh for, có thể sẽ không có phần
<Bước nhảy>
int i;
for (i = 0; i < 10; i++)
printf(“%d\n”, i); <Khởi đầu>

<Bước nhảy>
for (i = 0; i < 10; )
{
printf(“%d\n”, i); Đ
<Đ/K lặp> <Lệnh>
i++;
}
S

LTCB – Các lệnh có cấu trúc 25


&
VC
BB II. Các cấu trúc lặp (tt)
Cấu trúc for (tt)
 Trong câu lệnh for, có thể sẽ không có phần
<Đ/K lặp>
int i;
for (i = 0; i < 10; i++)
printf(“%d\n”, i);

for (i = 0; ; i++)
printf(“%d\n”, i);

for (i = 0; ; i++)
{
if (i >= 10)
break;
printf(“%d\n”, i);
} 26
LTCB – Các lệnh có cấu trúc
&
VC
BB
II. Các cấu trúc lặp (tt)
Cấu trúc for (tt)
 Lệnh break làm kết thúc câu lệnh.
 Lệnh continue bỏ qua lần lặp hiện tại.
for (i = 0; i < 10; i++)
{
if (i % 2 == 0)
break;
printf(“%d\n”, i);
}

for (i = 0; i < 10; i++)


{
if (i % 2 == 0)
continue;
printf(“%d\n”, i);
} 27
LTCB – Các lệnh có cấu trúc
&
VC
BB
II. Các cấu trúc lặp (tt)
Cấu trúc for (tt)
 Không được thêm ; ngay sau lệnh lệnh for.
=> Tương đương câu lệnh rỗng.
for (i = 0; i < 10; i++);
{
printf(“%d”, i);
printf(“\n”);
}

for (i = 0; i < 10; i++)


{
};
{
printf(“%d”, i);
printf(“\n”);
} 28
LTCB – Các lệnh có cấu trúc
&
VC
BB
II. Các cấu trúc lặp (tt)
Cấu trúc for (tt)
 Các thành phần <Khởi đầu>, <Đ/K lặp>,
<Bước nhảy> cách nhau bằng dấu ;
 Nếu có nhiều thành phần trong mỗi phần thì
được cách nhau bằng dấu ,
for (int i = 1, j = 2; i + j < 10; i++, j += 2)
printf(“%d\n”, i + j);

LTCB – Các lệnh có cấu trúc 29


&
VC
BB
Câu lệnh while

Đ
<Đ/K lặp> <Lệnh>

S
while (<Đ/K lặp>)
<Lệnh>;

NMLT - Câu lệnh lặp 30


&
VC
BB
Câu lệnh while

int i = 0;
while (i < 10)
{
printf(“%d\n”, i);
i++;
}

for (int i = 0; i < 10; i++)


printf(“%d\n”, i);

int i = 0;
for (; i < 10; )
{
printf(“%d\n”, i);
i++;
}
NMLT - Câu lệnh lặp 31
&
VC
BB
Câu lệnh while - Một số lưu ý

 Câu lệnh while là một câu lệnh đơn và có thể


lồng nhau.
if (n < 10 && m < 20)
{
while (n >= 1)
{
while (m >= 1)
{
printf(“%d”, m);
m--;
}
n--;
}
}
NMLT - Câu lệnh lặp 32
&
VC
BB
Câu lệnh while - Một số lưu ý

 Câu lệnh while có thể không thực hiện lần nào


do điều kiện lặp ngay từ lần đầu đã không thỏa.
void main()
{
int n = 1;
while (n > 10)
{
printf(“%d\n”, n);
n--;
}

}

NMLT - Câu lệnh lặp 33


&
VC
BB
Câu lệnh for - Một số lưu ý

 Không được thêm ; ngay sau lệnh lệnh while.


int n = 0;
while (n < 10);
{
printf(“%d\n”, n);
n++;
}

while (n < 10)


{
};
{
printf(“%d\n”, n);
n++;
}
NMLT - Câu lệnh lặp 34
&
VC
BB
Câu lệnh while - Một số lưu ý

 Câu lệnh while có thể bị lặp vô tận (loop)


void main()
{
int n = 1;
while (n < 10)
{
printf(“%d”, n);
n--;
}

n = 1;
while (n < 10)
printf(“%d”, n);
}
NMLT - Câu lệnh lặp 35
&
VC
BB
Câu lệnh do… while

<Lệnh>

Đ
<Đ/K lặp>

S
do
<Lệnh>;
while (<Đ/K lặp>);

NMLT - Câu lệnh lặp 36


&
VC
BB
Câu lệnh do… while

int i = 0;
do
{
printf(“%d\n”, i);
i++;
}
while (i < 10);

int i = 0;
printf(“%d\n”, i);
i++;
for (; i < 10; )
{
printf(“%d\n”, i);
i++;
}
NMLT - Câu lệnh lặp 37
&
VC
BB
Câu lệnh do… while - Một số lưu ý

 Câu lệnh do… while là một câu lệnh đơn và có


thể lồng nhau.
int a = 1, b;
do
{
b = 1;
do
{
printf(“%d\n”, a + b);
b = b + 2;
}
while (b < 20);
a++;
}
while (a < 20); 38
NMLT - Câu lệnh lặp
&
VC
BB
Câu lệnh do… while - Một số lưu ý

 Câu lệnh do… while sẽ được thực hiện ít nhất 1


lần do điều kiện lặp được kiểm tra ở cuối.
void main()
{
int n;
do
{
printf(“Nhap n: ”);
scanf(“%d”, &n);
}
while (n < 1 || n > 100);
}

NMLT - Câu lệnh lặp 39


&
VC
BB
Câu lệnh do… while - Một số lưu ý

 Câu lệnh do… while có thể bị lặp vô tận (loop)



int n = 1;
do
{
printf(“%d”, n);
n--;
}
while (n < 10);

n = 1;
do
printf(“%d”, n);
while (n < 10);
… 40
NMLT - Câu lệnh lặp
&
VC
BB
while & do… while

 while có thể không thực hiện lần nào.


 do… while sẽ được thực hiện ít nhất 1 lần.
int n = 100;
while (n < 10)
{
…;
}

do
{
printf(“Nhap n: ”);
scanf(“%d”, &n);
}
while (n > 10);
NMLT - Câu lệnh lặp 41
&
VC
BB
Bài tập thực hành
Vẽ lưu đồ giải thuật và viết chương trình:
1. Viết chương trình nhập vào 2 số a và b.
Tìm và in ra số lớn nhất (dùng 2 cách: if
thiếu và if đủ)
2. Viết chương trình nhập vào 2 số a và b.
Nếu a>b thì hoán đổi a và b, ngược lại thì
không hoán đổi. In giá trị a, b
3. Viết chương trình nhập vào 2 số a và b. In
ra thông báo “a bằng b” nếu a=b, ngược lại
in ra thông báo “a khác b”

LTCB – Các lệnh có cấu trúc 42


&
VC
BB
Bài tập thực hành (tt)
4. Viết chương trình nhập vào 1 ký tự. Kiểm
tra xem ký tự nhập vào là chữ thường trong
khoảng từ ‘a’ đến ‘z’ thì đổi thành chữ in
hoa và in ra “Chữ hoa là …”. Ngược lại in
ra “Ký tự vừa nhập là …”
(Chữ in thường có mã ASCII lớn hơn chữ in hoa 32)
5. Nhập 4 số nguyên a, b, c và d. Tìm số có giá trị
nhỏ nhất (min)
6. Giải phương trình bậc nhất ax + b = 0
7. Nhập độ dài 3 cạnh 1 tam giác. Nếu là tam
giác thì tính diện tích, ngược lại thông báo lỗi
LTCB – Các lệnh có cấu trúc 43
&
VC
BB
Bài tập thực hành (tt)
8. Viết chương trình nhập vào điểm trung bình
của 1 học sinh. In ra xếp loại học tập của
học sinh đó. Cách xếp loại:
DTB>=9 -> Xuất sắc
9>DTB>=8 -> Giỏi
8>DTB>=7 -> Khá
7>DTB>=5 -> Trung bình
DTB<5 -> Yếu
9. Bổ sung bài tập xếp loại học lực trên để
kiểm tra trường hợp nhập điểm trung bình
không hợp lệ (DTB<0 hoặc DTB>10)
LTCB – Các lệnh có cấu trúc 44
&
VC
BB
Bài tập thực hành (tt)
10.Viết chương trình giải và biện luận nghiệm
cho phương trình bậc 2:
ax2 + bx + c = 0
11. Nhập vào tháng và năm. Cho biết tháng đó
có bao nhiêu ngày. Chú ý: năm nhuận là
năm chia kết cho 4 nhưng không chia hết
cho 100
12.Nhập ngày tháng năm hôm nay. Tính ngày
tháng năm của ngày hôm qua và ngày
tháng năm của ngày mai

LTCB – Các lệnh có cấu trúc 45


&
VC
BB
Bài tập thực hành (tt)
13.Viết chương trình tính tiền điện gồm các
khoảng sau:
KW 50 100 150 200 250 300 >300

Giá 600 865 1135 1495 1620 1740 1790

Chỉ số mới và cũ được nhập vào từ bàn phím


14. Viết chương trình in bảng cửu chương 2
theo dạng :
2x1=2
2x2=4
…..
2 x 10 = 20

LTCB – Các lệnh có cấu trúc 46


&
VC
BB
Bài tập thực hành (tt)
15.Nhập số nguyên n (n>1). Kiểm tra xem n có
là số nguyên tố (SNT là số chia hết cho 1
và chính nó)
16.Nhập một số nguyên dương n. Tính:
a. S = 1 + 2 + … + n
b. S = 12 + 22 + … + n2
c. S = 1 + 1/2 + … + 1/n
d. S = 1*2*…*n = n!
17.Nhập n. In n số đầu tiên trong dãy Fibonacy.
Với : a1 = a2 = 1, an = an – 1 + an – 2

LTCB – Các lệnh có cấu trúc 47


&
VC
BB
Bài tập thực hành (tt)
18.Tìm ước số chung lớn nhất của 2 số nguyên
dương a và b nhập từ bàn phím.
19.Có số tiền A gửi ngân hàng với lãi suất
s%/tháng. Hỏi muốn có số tiền B (B>A) thì gửi
bao nhiêu tháng?
20.Nhập vào n số nguyên cho đến khi gặp số 0 thì
dừng. In ra số lớn nhất và số nhỏ nhất trong
các số đã nhập
21.Bổ sung bài tập kiểm tra 1 số có phải là số
nguyên tố để chương trình đưa ra câu hỏi “Có
kiểm tra số khác nữa không?”, ấn Y hoặc y thì
chạy tiếp, ấn N hoặc n thì dừng 48
LTCB – Các lệnh có cấu trúc

You might also like