Cấu trúc điều khiển
GV. Nguyễn Minh Huy
Nhập mơn lập trình - GV. Nguyễn Minh Huy
1
Nội dung
Biểu thức và toán tử trong C.
Cấu trúc rẽ nhánh
nhánh..
Cấu trúc lặp.
lặp.
Nhập mơn lập trình - GV. Nguyễn Minh Huy
2
Nội dung
Biểu thức và toán tử trong C.
Cấu trúc rẽ nhánh
nhánh..
Cấu trúc lặp.
lặp.
Nhập mơn lập trình - GV. Nguyễn Minh Huy
3
Biểu thức và toán tử trong C
Biểu thức trong C:
Là một dãy hữu hạn các toán hạng và toán tử.
tử.
a+b–d*c/e
(x >> (p + 1 - n)) & ~(~0 << n)
Toán hạng
hạng:: biến,
biến, hằng.
hằng.
Tốn tử:
tử:
Tốn tử một ngơi:
ngơi:
tốn> a ~a, !b, ++c.
Tốn tử hai ngơi
ngơi:: a <
phép toán>
toán> b a + b, x / y.
Toán tử ba ngơi
ngơi:: tốn tử điều kiện ( ) ? :
Kết quả biểu thức
thức:: một giá trị số.
số.
Nhập mơn lập trình - GV. Nguyễn Minh Huy
4
Biểu thức và toán tử trong C
Toán tử số học
học::
Ký hiệu:
hiệu: +, -, *, /, %.
% chỉ dùng với số nguyên
nguyên..
/ kết quả phụ thuộc toán hạng
hạng..
int a = 5 % 3; // Đúng
float x = 5 % 3.0;
3.0; // Sai
int b = 5 / 3; // Chia nguyên
float y = 5.0 / 3; // Chia thực
Toán tử so sánh:
sánh:
Ký hiệu:
hiệu: >, <, >=, <=, ==, !=.
Kết quả:
quả: 1 (true), 0 (false).
Nhập mơn lập trình - GV. Nguyễn Minh Huy
int a = 5 > 3;
int b = 5 == 3;
int c = 5 != 3;
// 1 (true)
// 0 (false)
// 1 (true)
5
Biểu thức và toán tử trong C
Toán tử logic:
Ký hiệu:
hiệu:
! (not), && (and), || (or).
Kết nối biểu thức so sánh.
sánh.
Kết quả:
quả: 1 (true), 0 (false).
Toán tử trên bit:
Ký hiệu:
hiệu:
& (and), | (or), ^ (xor
(xor).
).
~ ((bù
bù).
).
>> (dịch
(dịch phải
phải),
), << ((dịch
dịch trái
trái).
).
int a = (5 > 3) && (4 > 7); // 0 (false)
int b = (5 > 3) || (4 > 7); // 1 (true)
int c = !(5 == 3);
// 1 (true)
short a = 5 & 6; // 0101 and 0110
short b = 5 | 6; // 0101 or 0110
unsigned short c = ~1; // not 0001
short d = a >> 1;
Thao tác trên bit dữ liệu
liệu..
Nhập mơn lập trình - GV. Nguyễn Minh Huy
6
Biểu thức và toán tử trong C
Toán tử tăng
tăng,, giảm:
giảm:
Ký hiệu:
hiệu: ++, --.
--.
Tăng
Tăng//giảm 1 đơn vị trên biến
biến..
Tiền tố
tố:: tính trước biểu thức
thức..
Hậu tố
tố:: tính sau biểu thức
thức..
int
int
int
int
a=5
5++
++;;
a = 5;
b = ++
++a
a * 4;
c=a
a++
++ * 4;
// Sai
// b = 24
// b = 20
Toán tử gán
gán::
Ký hiệu:
hiệu: =, <
phép toán
toán>=
>=
a =
toán>= b;
a = a
toán> b;
toán>:
>:
+, -, *, /, %,
&, |, ^, >>, <<.
Nhập môn lập trình - GV. Nguyễn Minh Huy
int a = 5;
int b, c, d;
d = c = b = a; // b = a
// c = b
// d = c
int e += a;
// e = e + a
int f *= a + 1; // f = f * (a + 1)
7
Biểu thức và toán tử trong C
Độ ưu tiên toán tử:
tử:
Nhập mơn lập trình - GV. Nguyễn Minh Huy
8
Nội dung
Biểu thức và toán tử trong C.
Cấu trúc rẽ nhánh
nhánh..
Cấu trúc lặp.
lặp.
Nhập mơn lập trình - GV. Nguyễn Minh Huy
9
Cấu trúc rẽ nhánh
Câu lệnh ifif--else:
Cú pháp
pháp::
if (<biểu thức logic>
logic>))
<Lệnh 1>;
[else
<Lệnh 2>;]
Mã giả
giả::
Nếu <biểu thức logic>
Lệnh 1
[Ngược lại
Lệnh 2]
<biểu thức logic>
sai
đúng
Lệnh 1
Lệnh 2
Ví dụ:
dụ:
// Câu lệnh ifif-else đủ
if (n > 0)
0)
a = a * 2;
else
a = a / 2;
Nhập môn lập trình - GV. Nguyễn Minh Huy
// Bỏ mệnh đề else
if (n > 0)
0)
a = a * 2;
// Dùng khối lệnh
if (n > 0)
0)
{
a = a * 2;
b = b + 1;
}
10
Cấu trúc rẽ nhánh
Câu lệnh ifif--else:
Lưu ý:
Biểu thức logic phải đặt giữa ( ).
Giá trị 1: true.
Giá trị 0: false.
if
if--else là câu lệnh phức
phức..
Khơng có ; sau if hoặc else
else..
if
if--else có thể lồng nhau
nhau..
else tương ứng if gần nhất
nhất..
if n > 0
// Sai
a = a * 2;
if ((1
1)
// Luôn đúng
a = a * 2;
if ((n
n > 0)
0) ;
// Sai
a = a * 2;
else ;
a = a / 2;
if ((n
n > 0)
0)
// ifif-else lồng
if ((a
a > b)
b)
c = c + 1;
else
c = c – 1;
Nhập môn lập trình - GV. Nguyễn Minh Huy
11
Cấu trúc rẽ nhánh
Câu lệnh ifif--else:
if
if--else lồng nhau
nhau,, kiểm tra điều kiện trên cùng 1 biến
biến::
if (dtb >= 8)
loai = ““Gioi
Gioi”;
”;
else
if (dtb >= 6.5)
loai = ““Kha
Kha”;
”;
else
if (dtb >= 5)
loai = ““Trung
Trung binh
binh”;
”;
else
loai = ““Yeu
Yeu”;
”;
Nhập mơn lập trình - GV. Nguyễn Minh Huy
if (dtb >= 8)
loai = ““Gioi
Gioi”;
”;
else if (dtb >= 6.5)
loai = ““Kha
Kha”;
”;
else if (dtb >= 5)
loai = ““Trung
Trung binh
binh”;
”;
else
loai = ““Yeu
Yeu”;
”;
12
Cấu trúc rẽ nhánh
Câu lệnh switch
switch--case:
Cú pháp
pháp::
switch (thức>
>)
{
[case <giá trị 1>:
<Lệnh 1>;
break;
case <giá trị 2>:
<Lệnh 2>;
break;
....]
[default:
<Lệnh N>;]
}
Nhập môn lập trình - GV. Nguyễn Minh Huy
// Câu lệnh if
if--else tương đương
if (<
(
biểu thức
thức>
> == <
giá trị 1>)
<Lệnh 1>;
else if (<
(biểu thức
thức>
> == <
giá trị 2>)
<Lệnh 2>;
C
else
<Lệnh N>;
13
Cấu trúc rẽ nhánh
Câu lệnh switch
switch--case:
switch (thu)
thu)
{
case 1:
printf(“Chu
printf
(“Chu nhat
nhat”);
”); break;
case 2:
printf(“Thu
printf
(“Thu hai”);
hai”); break;
case 3:
printf(“Thu
printf
(“Thu ba”);
ba”); break;
case 4:
printf(“Thu
printf
(“Thu tu
tu”);
”); break;
case 5:
printf(“Thu
printf
(“Thu nam”);
nam”); break;
case 6:
printf(“Thu
printf
(“Thu sau”);
sau”); break;
case 7:
printf(“Thu
printf
(“Thu bay”); break;
}
Nhập môn lập trình - GV. Nguyễn Minh Huy
14
Cấu trúc rẽ nhánh
Câu lệnh switch
switch--case:
Lưu ý:
Biểu thức phải đặt giữa ( ).
Giá trị ở mệnh đề case
case::
Giá trị đơn
đơn..
Không là miền giá trị.
trị.
Câu lệnh break
break::
Ngắt giữa các case
case..
Có thể bỏ để ghép các case
case..
Nhập mơn lập trình - GV. Nguyễn Minh Huy
switch a + b // Sai
{
y
}
switch (a
(a + b)
b)
{
case > 5:
y
}
// Sai
15
Cấu trúc rẽ nhánh
Câu lệnh switch
switch--case:
switch (thu)
thu)
{
case 2:
case 3:
case 4:
case 5:
case 6:
printf(“
printf
(“Ngay
Ngay lam viec
viec”);
”); break;
case 1:
case 7:
printf(“
printf
(“Ngay
Ngay nghi
nghi”);
”); break;
default:
printf(“
printf
(“Ngay
Ngay khong ton tai”);
}
Nhập mơn lập trình - GV. Nguyễn Minh Huy
16
Nội dung
Biểu thức và toán tử trong C.
Cấu trúc rẽ nhánh
nhánh..
Cấu trúc lặp
lặp..
Nhập mơn lập trình - GV. Nguyễn Minh Huy
17
Cấu trúc lặp
Xét chương trình xuất số:
số:
Xuất các số nguyên từ 1 đến 10.
Thực hiện 10 lần lệnh xuất
xuất..
Xuất các số nguyên từ 1 đến 100.
Thực hiện 100 lần lệnh xuất
xuất!!
!!
Dùng lệnh lặp.
lặp.
Nhập mơn lập trình - GV. Nguyễn Minh Huy
18
Cấu trúc lặp
Câu lệnh while và dodo-while:
Cú pháp
pháp::
// Câu lệnh while
while (<
(<điều
điều kiện lặp>)
lặp>)
<Lệnh>;
Lệnh>;
// Câu lệnh while tương đương
<Lệnh>;
Lệnh>;
while (<
(<điều
điều kiện lặp>)
lặp>)
<Lệnh>;
Lệnh>;
đúng
<điều kiện lặp>
// Câu lệnh do
do--while
do
{
<Lệnh>;
Lệnh>;
} while (<
(<điều kiện lặp>
lặp>);
Lệnh
<điều kiện lặp>
đúng
Lệnh
sai
Nhập mơn lập trình - GV. Nguyễn Minh Huy
sai
19
Cấu trúc lặp
Câu lệnh while và dodo-while:
Ví dụ:
dụ:
// Câu lệnh while
printf(“
printf
(“Nhap
Nhap vao n = “);
scanf(“%d”,
scanf
(“%d”, &n);
// Câu lệnh do
do--while
printf(“Nhap vao n = “);
scanf(“%d”, &n);
i = 1;
while (i
(i <= n
n))
{
printf(“%d”,
printf
(“%d”, i);
i++;
}
i = 1;
do
{
Nhập mơn lập trình - GV. Nguyễn Minh Huy
printf(“%d”, i);
printf(“%d”,
i++;
} while (i
(i <= n
n);
);
20