Cấu trúc điều khiển
Lệnh rẽ nhánh: if – else
Lệnh rẽ nhiều nhánh: switch
Vòng lặp: while, do while, for
Các từ khóa: break và continue
13 trang |
Chia sẻ: phuongt97 | Lượt xem: 421 | Lượt tải: 0
Nội dung tài liệu Bài giảng Nhập môn lập trình: Cấu trúc điều khiển - Trần Phước Tuấn, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
NMLT
C?U TRÚC ?I?U KHI?N
Tr?n Ph??c Tu?n
tranphuoctuan.khoatoan.dhsp@gmail.com
NH?P MÔN L?P TRÌNH 212/23/2009
C?u trúc ?i?u khi?n
? L?nh r? nhánh: if – else
? L?nh r? nhi?u nhánh: switch
? Vòng l?p: while, do while, for
? Các t? khóa: break và continue
NH?P MÔN L?P TRÌNH 312/23/2009
L?nh r? nhánh if
Cú pháp:
if (?i?u ki?n)
S;
? ?i?u ki?n: bi?u th?c cho k?t qu? S?; ph?i
???c ??t gi?a c?p ngo?c ??n ()
? S ph?i là 1 câu l?nh, n?u nhi?u h?n 1 l?nh, các
l?nh ph?i ???c ??t gi?a c?p ngo?c nh?n {} –
kh?i l?nh.
scanf("%i %i", &a, &b);
max = a;
if(b > max)
max = b;
printf(“So lon la: %i\n“, max);
scanf("%i %i", &a, &b);
max = a;
if(b > max)
max = b;
printf(“So lon la: %i\n“, max);
?i?u
ki?n
S
0
?0
NH?P MÔN L?P TRÌNH 412/23/2009
??u ý
? N?u ??t d?u ch?m ph?y (;) ? ngay sau bi?u th?c ?i?u ki?n
thì l?nh S c?a if xem nh? “KHÔNG LÀM GÌ”
printf(“Nhap mot so nguyen: ");
scanf("%i", &j);
if(j > 0);
printf(“%i la so duong“, j);
printf(“Nhap mot so nguyen: ");
scanf("%i", &j);
if(j > 0);
printf(“%i la so duong“, j);
Nhap mot so nguyen: -6
-6 là so duong
Nhap mot so nguyen: -6
-6 là so duong
NH?P MÔN L?P TRÌNH 512/23/2009
L?nh r? nhánh if-else
Cú pháp:
if (?i?u ki?n)
S;
else Se;
? Ph?n l?nh else có th? thêm vào trong câu l?nh
if ?? ch? th? các l?nh th?c hi?n khi ?i?u ki?n
b?ng 0 (FALSE).
scanf("%i %i", &a, &b);
if(a > b)
max = a;
else
max = b;
printf(“So lon la: %i\n“, max);
scanf("%i %i", &a, &b);
if(a > b)
max = a;
else
max = b;
printf(“So lon la: %i\n“, max);
?i?u
ki?n
S
0
?0 Se
NH?P MÔN L?P TRÌNH 612/23/2009
Nhi?u l?nh if l?ng nhau
else k?t n?i v?i l?nh if g?n nh?t
int i = 100;
if(i > 0)
if(i > 1000)
printf("i qua lon\n");
else
printf("i chap nhan duoc\n");
int i = 100;
if(i > 0)
if(i > 1000)
printf("i qua lon\n");
else
printf("i chap nhan duoc\n");
i chap nhan duoci chap nhan duoc
int i = -20;
if(i > 0) {
if(i > 1000)
printf("i qua lon\n");
}
else
printf("i la so am\n");
int i = -20;
if(i > 0) {
if(i > 1000)
printf("i qua lon\n");
}
else
printf("i la so am\n");
i la so ami la so am
NH?P MÔN L?P TRÌNH 712/23/2009
C?u trúc nhi?u ch?n l?a – switch
Cú pháp:
switch (bi?u th?c)
{
case gt1: S1; [break;]
case gt2: S2; [break;]
...
case gtn: Sn; [break;]
default: Se;
}
? Bi?u th?c: cho k?t qu? S? NGUYÊN; ph?i ???c ??t gi?a c?p
ngo?c ??n ()
? Si : dãy các l?nh.
NH?P MÔN L?P TRÌNH 812/23/2009
Ví d? l?nh switch
switch(c) {
case 'a': case 'A':
printf(“Dien tich = %.2f\n", r * r * pi);
break;
case 'c': case 'C':
printf(“Chu vi = %.2f\n", 2 * r * pi);
break;
case 'q':
printf(“Thoat\n");
break;
default:
printf(“Chon khong hop le\n");
}
switch(c) {
case 'a': case 'A':
printf(“Dien tich = %.2f\n", r * r * pi);
break;
case 'c': case 'C':
printf(“Chu vi = %.2f\n", 2 * r * pi);
break;
case 'q':
printf(“Thoat\n");
break;
default:
printf(“Chon khong hop le\n");
}
NH?P MÔN L?P TRÌNH 912/23/2009
M?t s? ??u ý – switch
? N?u không có giá tr? nào kh?p, các l?nh trong ph?n
default s? ???c th?c thi; và n?u không có default
c?ng không x?y ra l?i.
? L?nh break r?t quan tr?ng.
float f;
switch(f) {
case 2:
....
float f;
switch(f) {
case 2:
....
switch(i) {
case 2 * j:
....
switch(i) {
case 2 * j:
....
i = 3;
switch(i) {
case 3: printf("i = 3\n");
case 2: printf("i = 2\n");
case 1: printf("i = 1\n");
}
i = 3;
switch(i) {
case 3: printf("i = 3\n");
case 2: printf("i = 2\n");
case 1: printf("i = 1\n");
}
i = 3
i = 2
i = 1
i = 3
i = 2
i = 1
NH?P MÔN L?P TRÌNH 1012/23/2009
bi?u
th?c
S1;
break;
gt1
S2;
break;
Se;
gt2
default
C?u trúc nhi?u ch?n l?a – switch
NH?P MÔN L?P TRÌNH 1112/23/2009
Ví d? khác – switch
//Doan chuong trinh doc so 0..9
switch(so) {
case 0: printf(“khong\n");
case 1: printf(“mot\n");
case 2: printf(“hai\n");
case 3: printf(“ba");
case 4: printf(“bon");
case 5: printf(“nam");
case 6: printf(“sau");
case 7: printf(“bay");
case 8: printf(“tam");
case 9: printf(“chin");
}
//Doan chuong trinh doc so 0..9
switch(so) {
case 0: printf(“khong\n");
case 1: printf(“mot\n");
case 2: printf(“hai\n");
case 3: printf(“ba");
case 4: printf(“bon");
case 5: printf(“nam");
case 6: printf(“sau");
case 7: printf(“bay");
case 8: printf(“tam");
case 9: printf(“chin");
}
NH?P MÔN L?P TRÌNH 1212/23/2009
L?nh l?p while
Cú pháp: while (?i?u ki?n)
S;
? ?i?u ki?n: bi?u th?c cho k?t qu? S?;
ph?i ???c ??t gi?a c?p ngo?c ??n ()
? S ph?i là 1 câu l?nh, n?u nhi?u h?n 1
l?nh, các l?nh ph?i ???c ??t gi?a c?p
ngo?c nh?n {} – kh?i l?nh.
int j = 5;
while(j > 0)
printf("j = %i\n", j--);
int j = 5;
while(j > 0)
printf("j = %i\n", j--);
j = 5
j = 4
j = 3
j = 2
j = 1
j = 5
j = 4
j = 3
j = 2
j = 1
while(j > 0) {
printf("j = %i\n", j);
j--;
}
while(j > 0) {
printf("j = %i\n", j);
j--;
}
? while th?c hi?n l?nh S ít nh?t 0 l?n
?i?u
ki?n
S
0
?0
NH?P MÔN L?P TRÌNH 1312/23/2009
??u ý d?u ch?m ph?y ;
? D?u ‘;’ ??t ngay sau bi?u th?c ?i?u ki?n ??ng ngh?a v?i l?nh
S là r?ng.
int j = 5;
while(j > 0);
printf("j = %i\n", j--);
int j = 5;
while(j > 0);
printf("j = %i\n", j--);
Ch?ong trình b? ??p
không thoát ???c
? ?ôi khi ng??i l?p trình c? ý s? d?ng l?nh r?ng
int c, j;
while(scanf("%i", &j) != 1)
while((c = getch()) != 27)
;
int c, j;
while(scanf("%i", &j) != 1)
while((c = getch()) != 27)
;
??t d?u ‘;’ ??
??t thúc while
không có S
NH?P MÔN L?P TRÌNH 1412/23/2009
L?nh l?p do while
Cú pháp:
do
{
S;
}while (?i?u ki?n);
? ?i?u ki?n: bi?u th?c cho k?t qu? S?; ph?i
???c ??t gi?a c?p ngo?c ??n ()
?i?u
ki?n
S
0
?0
NH?P MÔN L?P TRÌNH 1512/23/2009
Ví d? do while
int j = 5;
printf("start\n");
do
printf("j = %i\n", j--);
while(j > 0);
printf("stop\n");
int j = 5;
printf("start\n");
do
printf("j = %i\n", j--);
while(j > 0);
printf("stop\n");
start
j = 5
j = 4
j = 3
j = 2
j = 1
stop
start
j = 5
j = 4
j = 3
j = 2
j = 1
stop
NH?P MÔN L?P TRÌNH 1612/23/2009
Ví d? do while
? do while th?c hi?n l?nh S ít nh?t 1 l?n
int j = -10;
printf("start\n");
do {
printf("j = %i\n", j);
j--;
} while(j > 0);
printf("stop\n");
int j = -10;
printf("start\n");
do {
printf("j = %i\n", j);
j--;
} while(j > 0);
printf("stop\n");
start
j = -10
stop
start
j = -10
stop
NH?P MÔN L?P TRÌNH 1712/23/2009
L?nh l?p for
L?nh l?p for d?n h?t các thành ph?n c?a vòng l?p vào trong
m?t câu l?nh.
Cú pháp:
for (kh?i ??ng; ?i?u ki?n l?p; ?i?u khi?n)
S;
?i?u
ki?n
0
?0kh?i
??ng S
?i?u
khi?n
NH?P MÔN L?P TRÌNH 1812/23/2009
L?nh l?p for – Ví d?
int j;
for(j = 5; j > 0; j--)
printf("j = %i\n", j);
int j;
for(j = 5; j > 0; j--)
printf("j = %i\n", j);
j = 5
j = 4
j = 3
j = 2
j = 1
j = 5
j = 4
j = 3
j = 2
j = 1
for(j = 5; j > 0; j--) {
printf("j = %i ", j);
printf("%s\n", ((j%2)==0)?“chan":“le");
}
for(j = 5; j > 0; j--) {
printf("j = %i ", j);
printf("%s\n", ((j%2)==0)?“chan":“le");
}
j = 5 le
j = 4 chan
j = 3 le
j = 2 chan
j = 1 le
j = 5 le
j = 4 chan
j = 3 le
j = 2 chan
j = 1 le
NH?P MÔN L?P TRÌNH 1912/23/2009
???c l?p trong for
? C không gi?i h?n ?? l?n c?a b??c l?p trong for.
#include
int main(void)
{
double angle;
for(angle = 0.0; angle < 3.14159; angle += 0.2)
printf("sine of %.1lf is %.2lf\n",
angle, sin(angle));
return 0;
}
#include
int main(void)
{
double angle;
for(angle = 0.0; angle < 3.14159; angle += 0.2)
printf("sine of %.1lf is %.2lf\n",
angle, sin(angle));
return 0;
}
NH?P MÔN L?P TRÌNH 2012/23/2009
Nói thêm v? for
? Ph?n l?nh kh?i ??ng và l?nh ?i?u khi?n có th? g?m nhi?u
l?nh ??n gi?n, các l?nh này cách nhau b?i d?u ph?y (,)
int i, j, k;
for(i = 0, j = 5, k = -1; i < 10; i++, j++, k--)
int i, j, k;
for(i = 0, j = 5, k = -1; i < 10; i++, j++, k--)
? Các ph?n: kh?i ??ng, ?i?u ki?n l?p, ?i?u khi?n có
th? không có l?nh nào.
for(; i < 10; i++, j++, k--)for(; i < 10; i++, j++, k--)
for(;i < 10;)for(;i < 10;)
for(;;)for(;;)
Dùng while s? ??p
lý h?n
Vòng l?p không k?t thúc
NH?P MÔN L?P TRÌNH 2112/23/2009
break
? T? khóa break ch? th? vi?c thoát ngay l?p t?c kh?i c?u
trúc ?i?u khi?n.
? C?n th?n khi s? d?ng!
for(;;) {
printf(“nhap m?t so nguyen: ");
if(scanf("%i", &j) == 1)
break;
printf(“khong hop le, nhap lai\n“
}
printf(“j = %i\n", j);
for(;;) {
printf(“nhap m?t so nguyen: ");
if(scanf("%i", &j) == 1)
break;
printf(“khong hop le, nhap lai\n“
}
printf(“j = %i\n", j); nhap mot so nguyen : int
khong hop le, nhap lai
nhap mot so nguyen: 16
j = 16
nhap mot so nguyen : int
khong hop le, nhap lai
nhap mot so nguyen: 16
j = 16
??u scanf tr? ?? 1,
ch??ng trình thoát
kh?i vòng l?p for
NH?P MÔN L?P TRÌNH 2212/23/2009
continue
? T? khóa continue ch? th? ???c nhanh ??n b??c l?p k?,
b?t k? phía sau ?ó còn nhi?u l?nh c?n l?p.
? H?n ch? s? d?ng!
for(j = 1; j <= 10; j++) {
if(j % 3 == 0)
continue;
printf("j = %i\n", j);
}
for(j = 1; j <= 10; j++) {
if(j % 3 == 0)
continue;
printf("j = %i\n", j);
}
j = 1
j = 2
j = 4
j = 5
j = 7
j = 8
j = 10
j = 1
j = 2
j = 4
j = 5
j = 7
j = 8
j = 10
??u j chia h?t cho 3
thì b? qua l?nh in j
NH?P MÔN L?P TRÌNH 2312/23/2009
Tóm l??c
? if else: r? nhánh
? switch r? nhi?u nhánh v?i ?i?u ki?n là giá tr?
c?a bi?u th?c nguyên
? while, do while, for – 3 lo?i vòng l?p c?a C
? break
? continue
NH?P MÔN L?P TRÌNH 2412/23/2009
1. Nh?p a, b, c. Tìm max. Phát tri?n nhi?u s?
2. Gi?i ph??ng trình ax+b=0
3. Gi?i ph??ng trình ax2+bx+c=0
4. Gi?i h? ph??ng trình: a1x+b1y=c1
a2x+b2y=c2
5. Nh?p vào ?i?m trung bình, hãy x?p lo?i h?c t?p
6. Tính ti?n ?i?n (nh?p vào s? kw)
7. D?ng tam giác (nh?p các c?nh a, b,c )
8. Nh?p vào 1 tháng, cho bi?t tháng này thu?c quý m?y?
9. Vi?t ch??ng trình nh?p vào tháng, in ra s? ngày c?a nó
10. Vi?t ch??ng trình nh?p vào 2 s? x, y và 1 trong 4 toán t? +, -,
*, /. Sau ?ó th?c hi?n phép tính (n?u y = 0 thì thông báo
không chia ???c)
M?t s? bài t?p
NH?P MÔN L?P TRÌNH 2512/23/2009
1. Vi?t hàm:
1. Truy?n vào ký t? và s? n. In ra n ký t? ?ó
2. In hcn các d?u * có kích th??c m*n
3. In hcn r?ng các d?u * có kích th??c m*n
4. In tam giác cân các d?u * có chi?u cao h
5. In tam giác r?ng các d?u * có chi?u cao h
2. Tính các t?ng sau:
1. S = 1 + 2 + + n
2. S = 2 + 4 + + 2.n (?t?ng các s? ch?n <=n)
3. S = 12+22+ + n2
4. S = 1.2+2.3+ + n.(n+1)
5. S = 1/2 + 2/3 + n/(n+1)
3. Vi?t hàm:
1. Nh?p n s?, tính t?ng.
2. Nh?p n s?, tìm max
4. Tính s? h?ng th? n c?a dãy fibonaci (f0=f1=1, fn=fn-1+fn-2)
5. Tìm UCLN, BCNN c?a hai s? a,b (? C?u trúc Phân s?)
6. Rút g?n phân s?
7. In ra các ??c s? c?a n
8. T?ng các ??c s? c?a n, T?ng các s? ch?n <=n
9. T = n!
10. Ki?m tra n có ph?i là s? nguyên t? hay không
11. Ki?m tra n có ph?i là s? chính ph??ng hay không
12. Phân tích n thành tích các th?a s? nguyên t?
7. M?t s? bài t?p
Các file đính kèm theo tài liệu này:
- bai_giang_nhap_mon_lap_trinh_cau_truc_dieu_khien_tran_phuoc.pdf