Upload
cuong
View
2.609
Download
5
Embed Size (px)
Citation preview
Cấu trúc điều Cấu trúc điều khiểnkhiển
Cấu trúc điều khiểnCấu trúc điều khiển
Lệnh rẽ nhánh: Lệnh rẽ nhánh: ifif – – elseelse Lệnh rẽ nhiều nhánh: Lệnh rẽ nhiều nhánh: switchswitch Vòng lặp: Vòng lặp: whilewhile, , dodo whilewhile, , forfor Các từ khóa: Các từ khóa: break break và và continuecontinue
Lệnh rẽ nhánh Lệnh rẽ nhánh ififCú phápCú pháp::
if if ((điều kiệnđiều kiện))
SS;; Điều kiệnĐiều kiện: biểu thức cho kết quả : biểu thức cho kết quả SỐSỐ; phải ; phải
được đặt giữa cặp ngoặc đơn ()được đặt giữa cặp ngoặc đơn () SS phải là 1 câu lệnh, nếu nhiều hơn 1 lệnh, các 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 {} – lệnh phải được đặt giữa cặp ngoặc nhọn {} – khối lệnhkhố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ềđiều u
kiệkiệnnSS
00
00
Lưu ýLưu ý Nếu đặt dấu chấm phẩy (;) ở ngay sau biểu thức điều kiện 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ư “thì lệnh S của if xem như “KHÔNG LÀM GÌ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
Lệnh rẽ nhánh Lệnh rẽ nhánh if-elseif-elseCú phápCú pháp::
if if ((điều kiệnđiều kiện))
SS;;
elseelse SSee;; Phần lệnh Phần lệnh elseelse có thể thêm vào trong câu lệnh có thể thêm vào trong câu lệnh
ifif để chỉ thị các lệnh thực hiện khi điều kiện để chỉ thị các lệnh thực hiện khi điều kiện bằng bằng 00 (FALSE). (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ềđiều u
kiệkiệnnSS
00
00
SSee
Nhiều lệnh Nhiều lệnh ifif lồng nhau lồng nhauelseelse kết nốikết nối với lệnh với lệnh if if gần nhấtgần nhất
int i = 100;if(i > 0)
if(i > 1000)printf("i qua lon\n");
elseprintf("i chap nhan duoc\n");
int i = 100;if(i > 0)
if(i > 1000)printf("i qua lon\n");
elseprintf("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
Cấu trúc nhiều chọn lựa – Cấu trúc nhiều chọn lựa – switchswitchCú phápCú pháp::
switch switch ((biểu thứcbiểu thức)){{
casecase gt gt11: : SS11; [; [breakbreak;];]
casecase gt gt22: : SS22; [; [breakbreak;];]
......casecase gt gtnn: : SSnn; [; [breakbreak;];]
default: SSee; ;
}} Biểu thứcBiểu thức: cho kết quả : cho kết quả SỐ NGUYÊNSỐ NGUYÊN; phải được đặt giữa cặp ngoặc ; phải được đặt giữa cặp ngoặc
đơn ()đơn () SSii : dãy các lệnh. : dãy các lệnh.
Ví dụ lệnh Ví dụ lệnh switchswitchswitch(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");
}
Một số lưu ý – Một số lưu ý – switchswitch Nếu không có giá trị nào khớp, các lệnh trong phần Nếu không có giá trị nào khớp, các lệnh trong phần defaultdefault sẽ được thực thi; và nếu không có sẽ được thực thi; và nếu không có defaultdefault cũng không xảy ra lỗi.cũng không xảy ra lỗi.
Lệnh Lệnh breakbreak rất quan trọng. 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 = 3i = 2i = 1
i = 3i = 2i = 1
biểu biểu thứcthức
SS11;;
break;break;
gtgt11
……
SS22;;
break;break;
SSee;;
gtgt22
defaultdefault
Cấu trúc nhiều chọn lựa – Cấu trúc nhiều chọn lựa – switchswitch
Ví dụ khác – Ví dụ khác – switchswitch//Doan chuong trinh doc so 0..9switch(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..9switch(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");
}
Lệnh lặp Lệnh lặp whilewhileCú phápCú pháp:: while while ((điều điều kiệnkiện))
SS;; Điều kiệnĐiều kiện: biểu thức cho kết quả : biểu thức cho kết quả SỐSỐ; ;
phải được đặt giữa cặp ngoặc đơn ()phải được đặt giữa cặp ngoặc đơn () SS phải là 1 câu lệnh, nếu nhiều hơn 1 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 lệnh, các lệnh phải được đặt giữa cặp ngoặc nhọn {} – ngoặc nhọn {} – khối lệnhkhố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 = 5j = 4j = 3j = 2j = 1
j = 5j = 4j = 3j = 2j = 1
while(j > 0) {printf("j = %i\n", j);j--;
}
while(j > 0) {printf("j = %i\n", j);j--;
}
whilewhile thực hiện lệnh S ít nhất 0 lần thực hiện lệnh S ít nhất 0 lần
điềđiều u
kiệkiệnnSS
00
00
Lưu ý dấu chấm phẩy Lư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 Dấu ‘;’ đặt ngay sau biểu thức điều kiện đồng nghĩa với lệnh
S là rỗng.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ị lặp không thoát được
Đôi khi người lập trình Đôi khi người lập trình cố ý sử dụng lệnh rỗngcố ý 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 ‘;’ để kết thúc while
không có S
Lệnh lặp Lệnh lặp do whiledo whileCú phápCú pháp::
dodo
SS;;
while while ((điều điều kiệnkiện););
Điều kiệnĐiều kiện: biểu thức cho kết quả : biểu thức cho kết quả SỐSỐ; phải ; phải được đặt giữa cặp ngoặc đơn ()được đặt giữa cặp ngoặc đơn ()
SS phải là 1 câu lệnh, nếu nhiều hơn 1 lệnh, 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 các lệnh phải được đặt giữa cặp ngoặc nhọn {} – nhọn {} – khối lệnhkhối lệnh..
điềđiều u
kiệkiệnn
SS
00
00
Ví dụ Ví dụ dodo whilewhile
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");
startj = 5j = 4j = 3j = 2j = 1stop
startj = 5j = 4j = 3j = 2j = 1stop
Ví dụ Ví dụ dodo whilewhile
dodo whilewhile thực hiện lệnh S ít nhất 1 lần 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");
startj = -10stop
startj = -10stop
Lệnh lặp Lệnh lặp forfor
Lệnh lặp Lệnh lặp forfor dồn hết các thành phần của vòng lặp vào trong 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.một câu lệnh.
Cú phápCú pháp::
for for ((khởi độngkhởi động; ; điều kiện lặpđiều kiện lặp;; điều khiển điều khiển))
SS;;
điềđiều u
kiệkiệnn00
00khởi khởi độngđộng SS
điều điều khiểnkhiển
Lệnh lặp Lệnh lặp for – for – Ví dụ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 = 5j = 4j = 3j = 2j = 1
j = 5j = 4j = 3j = 2j = 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 lej = 4 chanj = 3 lej = 2 chanj = 1 le
j = 5 lej = 4 chanj = 3 lej = 2 chanj = 1 le
Bước lặp trong Bước lặp trong forfor C không giới hạn độ lớn của bước lặp trong for.C không giới hạn độ lớn của bước lặp trong for.
#include <math.h>
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 <math.h>
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;}
Nói thêm về Nói thêm về forfor Phần lệnh khởi động và lệnh điều khiển có thể gồm nhiều 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 (,)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ẽ hợp lý hơn
Vòng lặp không kết thúc
breakbreak Từ khóa Từ khóa breakbreak chỉ thị việc thoát ngay lập tức khỏi cấu chỉ thị việc thoát ngay lập tức khỏi cấu
trúc điều khiển.trúc điều khiển. Cẩn thận khi sử dụng!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 lainhap mot so nguyen: 16j = 16
nhap mot so nguyen : intkhong hop le, nhap lainhap mot so nguyen: 16j = 16
Nếu scanf trả về 1, chương trình thoát khỏi vòng lặp for
continuecontinue Từ khóa Từ khóa continuecontinue chỉ thị bước nhanh đến bước lặp kế, chỉ thị bước nhanh đến bước lặp kế,
bất kể phía sau đó còn nhiều lệnh cần lặp.bất kể phía sau đó còn nhiều lệnh cần lặp. Hạn chế sử dụng!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 = 1j = 2j = 4j = 5j = 7j = 8j = 10
j = 1j = 2j = 4j = 5j = 7j = 8j = 10
Nếu j chia hết cho 3 thì bỏ qua lệnh in j
Tóm lượcTóm lược
ifif elseelse: rẽ nhánh: rẽ nhánh switchswitch rẽ nhiều nhánh với điều kiện là giá trị rẽ nhiều nhánh với điều kiện là giá trị
của biểu thức nguyêncủa biểu thức nguyên whilewhile, , dodo whilewhile, , forfor – 3 loại vòng lặp của C – 3 loại vòng lặp của C breakbreak continuecontinue