Ể
CHƯƠNG V Ử Ề CÁC TOÁN T ĐI U KHI N
I. IFử
ạ Toán t Cú pháp: D ng 1:
ệ
ề
ứ đi u ki n)
ể
if (Bi u th c
ệ
ạ D ng 2:
ệ
ề
ứ đi u ki n)
ể
if (Bi u th c
ệ
else
ệ
Ch c nứ ăng:
ị ằ
ự
ề
ệ
ứ đi u ki n có giá tr b ng 1 thì th c
ệ i thì th c hi n Câu l nh 2 (D ng 2),
ệ
ạ ệ ạ if (D ng 1)
ậ
N u Bi u th c ế ể ệ hi n Câu l nh 1. Ngư c l ự ợ ạ ệ ặ ệ ự hi n các l nh sau ho c th c ương trình b c hai: ả ụ Ví d : Gi i ph #include "stdio.h" #include "math.h" void main() { int a,b,c; float x1,x2,del; clrscr(); printf("\nNhap he so a = "); scanf("%d",&a);
printf("\nNhap he so b = "); scanf("%d",&b); printf("\nNhap he so c = "); scanf("%d",&c); del=pow(b,2)4*a*c; if (del >= 0) { printf("Phuong trinh co nghiem"); x1=(bsqrt(del))/2*a; x2=(b+sqrt(del))/2*a; printf("\n x1 = %6.2f",x1); printf("\n x2 = %6.2f",x2); } else printf("\n Phuong trinh vo nghiem"); getch(); }
ữ ậ ố
ử ụ Chú ý: Hoàn toàn gi ng các ngôn ng l p trình khác, thì ử if l ng ồ
C cũng cho phép s d ng các toán t nhau. Ví d :ụ if (a>b) if (b>c) z = b else z = c ...
ể ử ồ M t d ng khác c a ki u toán t if l ng nhau:
ệ ủ ứ đi u ki n 1) ộ ạ ể if (Bi u th c
ề ệ ứ đi u ki n 2)
ề
ề ệ ứ đi u ki n n1)
.
.
.
ể
else if (bi u th c
ệ
else
ệ
ế ộ ố ừ đ n 7 và cho
1
ậ ương trình nh p vào m t s t
ể
Ví d :ụ t chế Vi ị ư trong tu n.ầ hi u th th #include "stdio.h" void main() { int t; clrscr(); printf("Nhap so thu tu cua ngay trong tuan t = "); scanf("%d",&t); if (t==1) printf("\nNgay chu nhat"); else if (t==2)
printf("\nNgay thu hai"); else if (t==3) printf("\nNgay thu ba"); else if (t==4) printf("\nNgay thu tu"); else if (t==5) printf("\nNgay thu nam"); else if (t==6) printf("\nNgay thu sau"); else printf("\nNgay thu bay"); getch();
}
ố ử ủ ử ư ng g n gi ng toán t
Case .. Of c a ứ switch cho phép c
ị ủ ăn c vào giá ộ ể ọ đ ch n m t
ứ ả ộ ể II. Toán t switch V ý tề ầ ở ử Pascal. Toán t ể tr c a m t bi u th c nguyên trong nhi u cách nh y.
Cú pháp:
ứ
ể swith (Bi u th c) { case n1:
ệ
case n2:
. . case nk:
[default:
ệ
}
ằ ố ự ứ ặ ể ho c bi u th c
Trong đó: ni là các s nguyên, h ng ký t ầ ằ h ng, các ni c n có các giá tr khác nhau.
ữ ặ ị ương trình đ t gi a { và } chính là thân Đo n ch ạ
ủ c a switch.
ộ ắ ầ
ứ ự ủ nào
ả ớ
ị
ị
ủ ộ ỳ S ho t
ế
ặ
ệ i câu l nh ni ế ả đ n câu ệ l nh có nhãn default (n u có), ho c ra kh i switch.
default là m t thành ph n không b t bu c ộ Th t ậ ự c a ni và default không theo tr t t c .ả ạ đ ng c a switch tu thu c vào giá tr ự ị ộ ứ ể ủ c a bi u th c. Khi bi u th c có giá tr ni thì nh y t ứ ể Khi bi u th c khác các giá tr ni thì nh y ứ ể ỏ
ẽ
ặ ặ
ấ
ố
ố
ể
ệ
ộ
ế ả đ n m t
ể đ nh y
ể ử ụ
ệ
ằ
ể
ỏ
ộ đó.
Ra kh i switch: ỏ ặ ệ ỏ Máy s ra kh i switch khi g p l nh break ho c g p d u ngo c ặ đ ng cu i cùng ủ (})c a switch. Có th dùng l nh goto trong thân switch ệ l nh ngoài thân switch ế N u switch n m trong m t hàm nào thì có th s d ng l nh return đ ra kh i hàm
Chú ý:
ả
ộ ộ ệ ẽ Khi máy nh y t ế ộ
ứ ệ ế
ặ ệ ệ ặ ự ớ i m t l nh nào thì s ụ ủ ho t ạ đ ng ti p theo c a nó s ph thu c vào ứ các l nh ệ đ ng sau câu l nh này.T c là n u ệ ả ớ i câu l nh có nhãn case ni thì nó máy nh y t ệ ấ ả ể ự đó cho t c các l nh sau có th th c hi n t ớ i khi g p l nh break, goto ho c return. t
ử ụ
ụ
ằ
ở
ví d trên b ng cách s d ng switch.
Ví d :ụ Vi
i ch
ương trình
ế ạ t l #include "stdio.h" void main() { int ch,t; tt: clrscr(); printf("Nhap so thu tu cua ngay trong tuan t = "); scanf("%d",&t); switch (t) { case 1:printf("\nNgay chu nhat"); break; case 2:printf("\nNgay thu hai"); break; case 3:printf("\nNgay thu ba");
break; case 4:printf("\nNgay thu tu"); break; case 5:printf("\nNgay thu nam"); break; case 6:printf("\nNgay thu sau"); break; case 7:printf("\nNgay thu bay"); break; default:printf("\nNhap lai"); getch(); goto tt; } printf("\nTiep tuc khong 1/0 ch = "); scanf("%d",&ch); if (ch==1) goto tt; }
ử goto và nhãn
III. Toán t
ạ
ế
đi li n ề ấ
ư tên bi n và ể
ệ
ương trình
ủ ệ
ạ goto có d ng:
Nhãn có cùng d ng nh ấ sau nó là d u (:), nhãn có th gán cho b t ỳ k câu l nh nào trong ch Ví d :ụ tt:clrscr(); /* tt là nhãn c a câu l nh xoá màn hình clrscr()*/ ử Toán t goto nhãn; ặ
ả ớ i câu
ừ ế ệ Khi g p câu l nh này mãy s nh y t ệ l nh co nhãn vi ẽ khoá goto t sau t
ầ ệ ằ
ằ
Chú ý: Câu l nh goto và nhãn c n n m trong m t ộ ỉ ử goto ch ị v trí này sang v trí khác ả ừ
ể hàm. Đi u ề đó nói lên r ng: Toán t ả ừ ị cho phép nh y t ủ trong thân c a hàm. Không dùng nh y t hàm này sang hàm khác. Không cho phép dùng toán t goto
ử ố ệ ả đ nh y ưng
ợ ạ ộ ể ự i thì có th th c hi n ư c l ệ đư c.ợ
IV. Toán t ừ t ngoài vào trong m t kh i l nh, nh ề đi u ng ử for
Cú pháp:
ứ ứ ể ể for (bi u th c 1; bi u th c 2; bi u th c 3)
ứ
ể
Ch c nứ ăng:
ớ ố ầ
ứ ị ệ ệ ự Cho th c hi n câu l nh sau for v i s l n ể ư c b i các bi u th c trong for. ớ ở đ nh tr
Trong đó:
ể ạ đ t o giá
ị ế đi u khi n.
ể
ề ử gán ể ệ ương trình.
ử đùng đ ể
ổ
ứ
ề
Bi u th c 1: Là m t toán t ứ ộ ể ầ ề ở đ u cho bi n tr kh i ị ộ ứ ể Bi u th c 2: Là m t quan h logic bi u th ể ế ụ ệ đ ti p t c ch đi u ki n ứ ể ộ Bi u th c 3: Là m t toán t gán ị ủ ể ề ế đi u khi n thay đ i giá tr c a bi n ể ặ ể Trong ba Bi u th c trong ngo c for có th ơn ba bi u ể ặ ủ ể thi u không đ ba ho c nhi u h th cứ
Chú ý:
ặ ắ ể
ợ
ệ
ặ
ặ ấ ồ
ầ ầ ữ
ộ ộ ẩ ứ
ể ầ ư t t
trái sang ph i. Tính ứ ứ
ứ ủ
Khi bi u th c 2 v ng m t thì nó luôn luôn ứ ệ ợ ờ đúng. Trong trư ng h p này vi c đư c xem là ờ ầ đư c th c hi n nh ự ợ ặ ỏ ra kh i vòng l p for c n ệ l nh break, goto ho c return. Trong d u ngo c tròn sau t ừ khoá for g m ba ấ ở ỗ ph n phân cách nhau b i d u ;. Trong m i ể ể ế ứ ph n không nh ng có th vi t m t bi u th c ể ế ợ mà còn có quy n ề đư c vi t m t dãy bi u ở ấ đó th c phân cách nhau b i d u ph y (,). Khi ứ ẽ đư c xác ợ ỗ ầ các bi u th c trong m i ph n s ợ ừ ị ả đúng sai đ nh l n l đư c ợ ể ủ ầ c a dãy bi u th c trong ph n th hai ố ể ể hi u là tính đúng sai c a bi u th c cu i cùng trong dãy này.
ộ
Bên trong thân c a m t toán t ứ
ử ủ ể ử ử for có th s for khác. T c là các vòng for
ứ ệ ấ
ử
ể ử ụ ế ộ ị ể ỏ
ể
ể ở ề ộ ụ d ng các toán t ồ l ng nhau. Khi g p câu l nh break trong thân for, máy ệ ặ ử ỏ ẽ s ra kh i toán t for sâu nh t ch a câu l nh này Trong thân for có th s d ng toán t goto ấ ỳ đ n m t v trí b t k đ nháy ra kh i vòng for nào đó. Cũng có th dùng return trong thân for đ tr v m t hàm nào đó.
ế
ề
ắ
ả
ộ
Ví d 1: ụ ậ
Nh p và S p x p m ng m t chi u theo chi u t
ề ăng
d n.ầ #include "stdio.h" main() { int i,j,temp; int a[10]; clrscr(); for (i=0;i<10;++i)
printf("a[%d] ",i); scanf("%d",&a[i]);
{ }
for (i=0;i<10;++i)
for (j=i+1; j<10;++j) if (a[i]>a[j]) { temp = a[i]; a[i] = a[j]; a[j] = temp; } for (i=0;i<10;++i) printf("%d ",a[i]); getch();
return 0; }
Ví d 2:ụ
ủ
ộ
ị
ậ đ u tiên c a m t ma tr n
ầ Tìm giá tr âm #include "stdio.h" main() { int i,j,temp; int a[3][3]; clrscr(); for (i=0;i<3;++i) for (j=0;j<3;++j)
{ printf("a[%d,%d] ",i,j);
scanf("%d",&temp);
a[i][j]=temp;
} for (i=0;i<3;++i) { for (j=0; j<3;++j) printf(" %10d",a[i][j]); printf("\n");
}
for (i=0;i<3;++i) for (j=0; j<3;++j)
if (a[i][j]<0) goto timthay;
printf("\n Ma tran khong co phan tu am"); goto kethuc;
timthay: printf("So am dau tien trong ma tran la %d",a[i][j]); kethuc: ; getch(); return 0; }
ỏ
ấ
ố ớ
ấ ủ
ậ
Ví d 3:ụ ương trình tìm s l n nh t và nh nh t c a t chế Vi ộ ừ t ng c t trong ma tr n. #include "stdio.h" main() { int i,j,max,min,temp; int a[4][4]; clrscr(); for (i=0;i<4;++i) for (j=0;j<4;++j)
printf("a[%d,%d] ",i,j);
{
scanf("%d",&temp); a[i][j]=temp; } for (i=0;i<3;++i) { for (j=0; j<3;++j) printf(" %10d",a[i][j]); printf("\n");
}
for (j=0;j<3;++j) {
max=min=a[0][j];
for (i=0; i<3;++i)
{
if (a[i][j]>max)
max=a[i][j];
if (a[i][j] }
printf("\n Cot %d \n Max = %d \nMin = %d",i,max,min); }
getch();
return 0;
} VI. Toán t ể while dùng ư for, toán t ử
ố ầ ặ ư c.ớ ử while
ố
đ xây
Cũng gi ng nh
ặ
ự
d ng vòng l p, tuy nhiên s l n l p không xác
ị
đ nh tr
Cú pháp: ệ ề
ứ đi u ki n) ể
while (Bi u th c
Ch c nứ ăng: ợ ẩ
ự ự
ể ỏ ể ệ có giá tr ngị Bi u th c ệ ứ
đư c th c hi n t c là
ợ
Câu l nhệ v n còn
vòng l p ặ đư c th c hiên khi
ứ đi u ề
Bi u th c
ị
ki nệ còn giá tr ị đúng (giá tr khác 0), và
Câu
ệ ứ
ự
ợ
l nhệ không đư c th c hi n t c là ra kh i vòng
ư c ợ
ề
ứ đi u ki n
ặ
l p khi
i.ạ
l Chú ý: ặ ừ ấ
ữ ể ợ khoá while
ứ
ể
t m t bi u th c mà
ứ
t m t dãy bi u th c
đúng
đúng ủ
ủ ử ứ ể
ộ
while có th
while khác. T c là các ồ ệ ặ ử ứ ấ Trong d u ngo c tròn sau t
ộ
ể ế
không nh ng có th vi
ộ
ế
ợ
còn có quy n ề đư c vi
ẩ
ở ấ
phân cách nhau b i d u ph y (,). Tính
ể
ể
ứ đư c hi u là tính
sai c a dãy bi u th c
ứ
ố
ể
sai c a bi u th c cu i cùng trong dãy.
Bên trong thân c a m t toán t
ủ
ử
ử ụ
s d ng các toán t
vòng while l ng nhau.
Khi g p câu l nh break trong thân while, máy
ỏ
ẽ
s ra kh i toán t
while sâu nh t ch a câu
ệ
l nh này ể ể ử ụ
ế ộ ị ỏ ể ể ở ề ộ Trong thân while có th s d ng toán t
ử
goto
ấ ỳ
đ n m t v trí b t k
đ nháy ra kh i vòng for
nào đó. Cũng có th dùng return trong thân
while đ tr v m t hàm nào đó. ừ t chế ương trình xét xem m t s nh p vào t ố ộ ố
ố Ví d :ụ
Vi
ả
ban phím có ph i là s nguyên t ậ
không #include "stdio.h"
main()
{
int i,j,n;
clrscr();
printf("Nhap mot so bat ky n = ");
scanf("%d",&n);
i=2;
while (n%i<>0 && i else
printf("\n %d Chinh la hop so",n);
getch();
return 0; ử do while ể ể ớ
ớ ự ệ ệ ệ ệ ể ứ đi u ề
ư c khi th c hi n câu l nh, còn dowhile
ể
ư c khi ki m tra bi u
ớ }
VI. Toán t
ợ
Ngư c v i while là ki m tra bi u th c
ki n trệ
ự
thì th c hi n câu l nh tr
ệ
ề
th c ứ đi u ki n. Cú pháp:
do ệ Ch c nứ ăng: ặ ẩ ợ ị ự ị
ệ ứ ặ ợ
đư c th c hi n t c là vòng l p
ệ ứ
ự
ệ còn giá
ể
ề
ứ đi u ki n
Bi u th c
ợ
Câu l nhệ không đư c th c
ứ đi u ề
ể
Bi u th c ợ ạ
ể ể ể ệ ề ể ự ệ ể ệ Câu l nhệ v n còn
ự
đư c th c hiên khi
tr sai (giá tr = 0), và
ỏ
hi n t c là ra kh i vòng l p khi
ki nệ có giá tr ngị ư c l
i.
ứ đi u ki n trong while
Có th hi u là: Bi u th c
ứ đi u ề
ể
ệ
dùng đ th c hi n câu l nh, còn Bi u th c
ặ
ỏ
đ thoát kh i vòng l p.
ki n trong dowhile dùng