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=(b­sqrt(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)

; ể else if (bi u th c  ệ ;

ề ệ ứ đi u ki n n­1)

. . . ể 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 do­while  ể ư 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

ệ ể while (Bi u th c ề ứ đi u ki n)

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 do­while dùng