Chỉång V : Cạc cáu lãûnh âiãưu khiãøn Trang 35 Ch−¬ng V. CẠC CÁU LÃÛNH ÂIÃƯU KHIÃØN Thäng thỉåìng trong mäüt chỉång trçnh, cạc cáu lãûnh âỉåüc thỉûc hiãûn tưn tỉû tỉì trãn xúng. Tuy nhiãn cọ nhiãưu khi ta lải mún thay âäøi tráût tỉû trãn nhåì sỉí dủng cạc cáu lãûnh âiãưu khiãøn chỉång trçnh. Cạc cáu lãûnh âiãưu khiãøn cọ thãø lm cho cạc cáu lãûnh âỉåüc thỉûc hiãûn nhiãưu láưn hồûc khäng láưn no c. Cạc cáu lãûnh âiãưu khiãøn gäưm cọ : • cáu lãûnh r nhạnh : if .else ; switch • cáu lãûnh nhy khäng âiãưu kiãûn • cáu lãûnh vng làûp • cáu lãûnh häù tråü nhỉ break, continue. I. Cáu lãûnh if else : I.1. Cạc dảng ca cáu lãûnh if : Dảng 1 : if (biãøu thỉïc) /* khäng cọ dáúu cháúm pháøy åí âáy*/ lãûnh_1; Dảng 2 : if (biãøu thỉïc) lãûnh_1; else lãûnh_2; biãøu thỉïc khäúi lãûnh 1 T F Chổồng V : Caùc cỏu lóỷnh õióửu khióứn Trang 36 Daỷng 1 : nóỳu bióứu thổùc coù giaù trở khaùc 0 (TRUE) thỗ thổỷc hióỷn khọỳi lóỷnh 1, nóỳu bũng 0 (FALSE) thỗ tióỳp tuỷc thổỷc hióỷn lóỷnh tióỳp theo sau lóỷnh if. Daỷng 2 : nóỳu bióứu thổùc coù giaù trở khaùc 0 (TRUE) thỗ thổỷc hióỷn khọỳi lóỷnh 1, nóỳu bũng 0 (FALSE) thỗ thổỷc hióỷn khọỳi lóỷnh 2. Bióứu thổùc khọng nhỏỳt thióỳt phaới laỡ bióứu thổùc so saùnh maỡ coù thóứ laỡ bióứu thổùc sọỳ hoỹc. Vờ duỷ : tỗm sọỳ lồùn nhỏỳt vaỡ nhoớ nhỏỳt trong 2 sọỳ nhỏỷp tổỡ baỡn phờm. #include <stdio.h> #include <conio.h> main() { float x,y,min,max; printf(Nhap so thuc thu nhat:);scanf(%f,&x); printf(Nhap so thuc thu hai :);scanf(%f,&y); if ( x<y ) { min = x; max = y; } else { min = y; max = x; } printf(\n Gia tri lon nhat = %f, Gia tri nho nhat = %f,max, min); getch(); return 0; } Ta coù thóứ thay thóỳ lóỷnh trón bũng lóỷnh : min=(x<y)? x:y; max=(x>y)? x:y; I.2. Sổỷ lọửng nhau giổợa caùc cỏu lóỷnh if: Caùc cỏu lóỷnh if coù thóứ lọửng nhau : trong khọỳi lóỷnh cuớa cỏu lóỷnh if naỡy coù thóứ coù cỏu lóỷnh if khaùc. óứ traùnh nhỏửm lỏựn ta nón sổớ duỷng dỏỳu õoùng mồớ khọỳi lóỷnh. bióứu thổùc Khọỳi lóỷnh 2 khọỳi lóỷnh 1 T F Chổồng V : Caùc cỏu lóỷnh õióửu khióứn Trang 37 Nóỳu sọỳ tổỡ khoùa if bũng sọỳ tổỡ khoùa else thỗ ta coù tổồng ổùng tổỡng cỷp if-else Nóỳu sọỳ tổỡ khoùa if nhióửu hồn sọỳ tổỡ khoùa else thỗ else õổồỹc gừn vồùi if lióửn trổồùc noù. Vờ duỷ : if (n>0) if (a>b) z=a; else z=b; Nhổ vỏỷy else seợ gừn lióửn vồùi if thổù hai. óứ chổồng trỗnh trong saùng, ta cỏửn tuỏn thuớ : Ta nón sổớ duỷng cỷp dỏỳu {} õóứ chừc chừn khọng nhỏửm lỏựn. Caùc cỏu lóỷnh, khọỳi lóỷnh nũm trong mọỹt cỏu lóỷnh if nũm dởch vóử bón phaới. Caùc cỏu lóỷnh, khọỳi lóỷnh cuỡng cỏỳp thỗ vióỳt thúng cọỹt. ióứm õỏửu vaỡ õióứm cuọỳi cuớa khọỳi lóỷnh phaới nũm thúng cọỹt. Vờ duỷ : if (n>0) if(a>b) z=a; tổồng õổồng vồùi : if ((n>0)&&(a>b)) z=a; I.3. else if: if (bióứu thổùc 1) khọỳi lóỷnh 1; else if (bióứu thổùc 2) khọỳi lóỷnh 2; . else if ( bióứu thổùc n) khọỳi lóỷnh n; else khọỳi lóỷnh n+1; ọỳi vồùi cỏu lóỷnh naỡy : Chố coù 1 trong n+1 khọỳi lóỷnh õổồỹc thổỷc hióỷn . Nóỳu bióứu thổùc i laỡ bióứu thổùc õỏửu tión khaùc 0 (TRUE) thỗ khọỳi lóỷnh i õổồỹc thổỷc hióỷn Nóỳu caớ n bióứu thổùc õóửu bũng 0 (FALSE) thỗ khọỳi lóỷnh n+1 õổồỹc thổỷc hióỷn. Vờ duỷ : giaới phổồng trỗnh bỏỷc 2 #include <stdio.h> #include <conio.h> #include <math.h> main() { Chổồng V : Caùc cỏu lóỷnh õióửu khióứn Trang 38 float a,b,c,delta; printf(\nNhap vao 3 he so:); scanf(%f%f%f,&a,&b,&c); if (a==0) if (b==0) if (c==0) printf(\nPhuong trinh dung voi moi x); else printf(\nPhuong trinh vo nghiem!); else printf(\nPhuong trinh co 1 nghiem x: %f,(-c) / b); else { delta=b*b-4*a*c; if (delta<0.0) printf(\nPhuong trinh vo nghiem); else if (delta==0.0) printf(\nPhuong trinh co mot nghiem kep : x = %f,-b/(2*a)); else { printf(\nPhuong trinh co hai nghiem phan biet :); printf(\nx1 = %f, (-b+sqrt(delta))/(2*a)); printf(\nx2 = %f, (-b-sqrt(delta))/(2*a)); } } getch(); return 0; } II. Cỏu lóỷnh switch: Lóỷnh if chố cho pheùp ta choỹn mọỹt trong hai phổồng aùn tuỡy theo bióứu thổùc õióửu kióỷn. Tuy nhión õọi khi ta cỏửn phaới lổỷa choỹn 1 trong nhióửu phổồng aùn khaùc nhau. óứ thuỏỷn tióỷn ta seợ duỡng cỏu lóỷnh switch: switch (bióứu thổùc) { case hũng1 : [ khọỳi lóỷnh 1 ; ] case hũng2 : [ khọỳi lóỷnh 2 ; ] case hũngn : [ khọỳi lóỷnh n ; ] [default : khọỳi lóỷnh n+1 ; ] } Trong õoù : bióứu thổùc: laỡ bióứu thổùc nguyón bỏỳt kỗ Caùc hũng i phaới coù giaù trở khaùc nhau Caùc khọỳi lóỷnh i vaỡ thaỡnh phỏửn default laỡ khọng bừt buọỹc. Sổỷ hoaỷt õọỹng cuớa cỏu lóỷnh switch : Chổồng V : Caùc cỏu lóỷnh õióửu khióứn Trang 39 Maùy seợ so saùnh bióứu thổùc vồùi caùc hũng i theo thổù tổỷ tổỡ trón xuọỳng. Khi bióứu thổùc coù giaù trở bũng hũng i thỗ khọỳi lóỷnh i õổồỹc thổỷc hióỷn. Nóỳu trong khọỳi lóỷnh õoù khọng coù lóỷnh nhaớy thỗ seợ thổỷc hióỷn tióỳp tuỷc caùc khọỳi lóỷnh bón dổồùi maỡ khọng cỏửn so saùnh tióỳp. Nóỳu trong khọỳi lóỷnh õoù coù lóỷnh break thỗ seợ thoaùt ra khoới cỏu lóỷnh switch. Khi bióứu thổùc coù giaù trở khaùc vồùi tỏỳt caớ hũng i thỗ seợ thổỷc hióỷn khọỳi lóỷnh n+1 (nóỳu coù). Khi bióứu thổùc bũng vồùi hũng i, õóứ sau khi thổỷc hióỷn xong khọỳi lóỷnh i chổồng trỗnh seợ thoaùt ra ngoaỡi cỏu lóỷnh switch sồùm hồn ta coù thóứ duỡng lóỷnh break. Ta cuợng coù thóứ sổớ duỷng lóỷnh goto õóứ nhaớy ra khoới cỏu lóỷnh switch (ta khọng nón duỡng lóỷnh goto). Vờ duỷ : #include <stdio.h> #include <conio.h> main() { char ch; printf(\n Nhap 1 ki tu:); scanf(%c,&ch); switch (ch) { case A : printf(\nChu A); break; case B : printf(\nChu B); break; case C : printf(\nChu C); break; default : printf(\nKhong phai cac chu A,B,C); } getch(); return 0; } Nhióửu giaù trở case trong mọỹt trổồỡng hồỹp : Maùy seợ tióỳp tuỷc laỡm vióỷc khi chổa gỷp lóỷnh thoaùt, vỗ vỏỷy ta coù thóứ sừp xóỳp õóứ coù nhióửu giaù trở case trong mọỹt trổồỡng hồỹp Vờ duỷ : #include <stdio.h> #include <conio.h> main() { int n; printf(Nhap diem:); scanf(%d,&n); Chổồng V : Caùc cỏu lóỷnh õióửu khióứn Trang 40 switch (n) { case 0: case 1: case 2: case 3: case 4: printf(loaỷi keùm);break; case 5: case 6: printf(loaỷi trung bỗnh);break; case 7: case 8: printf(loaỷi gioới);break; default: printf(loaỷi gioới); } getch(); return 0; } Trong C++ ta coù thóứ vióỳt nhổ sau : #include <stdio.h> #include <conio.h> main() { int n; printf(Nhap diem:); scanf(%d,&n); switch (n) { case 0,1,2,3,4: printf(loaỷi keùm);break; case 5,6: printf(loaỷi trung bỗnh);break; case 7,8: printf(loaỷi gioới);break; default: printf(loaỷi gioới); } getch(); return 0; } Ta nón sổớ duỷng default cho duỡ khọng bao giồỡ xaớy ra trổồỡng hồỹp õoù: ta duỡng default õóứ kióứm tra xem coù thóứ coù lọựi hay khọng bũng caùch õỷt mọỹt thọng baùo lọựi ồớ õoù, tổỡ õoù ta dóự gồợ rọỳi. III. Cỏu lóỷnh for: óứ thổỷc hióỷn caùc cọng vióỷc lỷp õi lỷp laỷi hay laỡm vióỷc vồùi caùc phỏửn tổớ maớng, nóỳu ta vióỳt tổỡng lóỷnh mọỹt thỗ seợ khọng hióỷu quaớ. Daỷng : for([ caùc bióứu thổùc khồới taỷo ] ; [ bióứu thổùc õióửu kióỷn ] ; [ bióứu thổùc thay õọứi õióửu kióỷn ]) Chổồng V : Caùc cỏu lóỷnh õióửu khióứn Trang 41 cọng vióỷc ; /* õỏy laỡ thỏn cuớa chu trỗnh */ Sổỷ hoaỷt õọỹng cuớa cỏu lóỷnh for : 1. Thổỷc hióỷn bióứu thổùc khồới taỷo. 2. Kióứm tra bióứu thổùc õióửu kióỷn - nóỳu bióứu thổùc õióửu kióỷn õuùng thỗ thổỷc hióỷn cọng vióỷc bón trong chu trỗnh for. - nóỳu bióứu thổùc õióửu kióỷn sai thỗ thoaùt ra khoới lóỷnh for . 3. Tờnh bióứu thổùc 3, quay trồớ laỷi bổồùc 2. Vờ duỷ : óứ õổa ra maỡn hỗnh caùc sọỳ tổỡ 1 õóỳn 10, mọựi sọỳ trón mọỹt doỡng : #include <stdio.h> #include <conio.h> main() { int i; for(i=1;i<=10;i++) printf(\n%d,i); getch(); return 0; } Vờ duỷ : #include <stdio.h> #include <conio.h> main() { Bióứu thổùc khồới taỷo Bióứu thổùc õióửu kióỷn Thổỷc hióỷn cọng vióỷc Thay õọứi õióửu kióỷn T F Chỉång V : Cạc cáu lãûnh âiãưu khiãøn Trang 42 int i,n,sohang,tong=0; printf(“\nNhap n:”); scanf(“%d”,&n); printf(“\nNhap vao %d so nguyen :”,n); for(i=1;i<=n;i++) { printf(“\nSo thu %d : ”,i); scanf(“%d”,&sohang); tong+=sohang; } printf(“\nTong = %d”,tong); getch(); return 0; } Cạc biãøu thỉïc trong ngồûc vng cọ thãø cọ, cọ thãø khäng nhỉng cạc dáúu cháúm pháøy, ngồûc âån bàõt büc phi cọ màût. Cạc biãøu thỉïc cng loải âỉåüc ngàn cạch nhau båíi dáúy pháøy. Våïi C++ ta cọ thãø khai bạo biãún tảm thåìi åí mäüt khäúi lãûnh {}. Trong vng làûp for cọ thãø khai bạo biãún trong biãøu thỉïc âáưu tiãn ca biãøu thỉïc khåíi tảo. Khi biãøu thỉïc 2 vàõng màût thç nọ xem nhỉ ln âụng. Biãøu thỉïc 2 cọ thãø gäưm nhiãưu biãøu thỉïc nhỉng tênh âụng sai ca nọ l tênh âụng sai ca biãøu thỉïc cúi cng. Âãø ra khi vng làûp ta dng cạc lãûnh break, goto hồûc return trong thán chu trçnh. Vê dủ : vng làûp for sau âáy khäng cọ biãøu thỉïc thay âäøi âiãưu kiãûn: for(count=0;count<10;) printf(“\n%d”,count++); Tháûm chê ta cọ thãø viãút vng làûp for khäng cọ c ba biãøu thỉïc trãn. Ta cng cọ thãø tảo vng làûp for khäng cọ cáu lãûnh no trong vng làûp, mi cäng viãûc â âỉåüc thỉûc hiãûn trong cáu lãûnh for. Khi âọ cáu lãûnh räùng s l dáúu cháúm pháøy âỉïng mäüt mçnh trãn mäüt dng. Tuy nhiãn ta khäng nãn lm nhỉ váûy. • Cạc vng for läưng nhau : Phêa trong cạc thán ca vng for cọ thãø cọ nhỉỵng vng for khạc. Vê dủ : for(i=1;i<10;i++) { for(j=1;j<10;j++) printf(“%3d”,i+j); printf(”\n”); } Khi gàûp lãûnh break trong vng làûp for thç mạy s ra khi vng làûp for sáu nháút chỉïa lãûnh ny. Chổồng V : Caùc cỏu lóỷnh õióửu khióứn Trang 43 IV. Cỏu lóỷnh while: Daỷng : while (bióứu thổùc) cọng vióỷc; /* thỏn chu trỗnh*/ Dỏỳu ngoỷc bao quanh bióứu thổùc laỡ bừt buọỹc. Sổỷ hoaỷt õọỹng cuớa cỏu lóỷnh while : 1. Kióứm tra bióứu thổùc - Nóỳu bióứu thổùc õuùng thỗ chuyóứn sang bổồùc 2. - Nóỳu bióứu thổùc sai thỗ thoaùt khoới voỡng lỷp. 2. Thổỷc hióỷn cọng vióỷc. 3. Quay laỷi bổồùc 1. Vờ duỷ : óứ õổa ra maỡn hỗnh caùc sọỳ tổỡ 1 õóỳn 10, mọựi sọỳ trón mọỹt doỡng : #include <stdio.h> #include <conio.h> main() { int i=1; while ( i<=10) { printf(\n%d,i); i++; } getch(); return 0; } õỏy ta nhồù phaới tng giaù trở cuớa bióỳn i vỗ nóỳu khọng thỗ voỡng lỷp seợ õổồỹc thổỷc hióỷn maợi maợi vỗ luùc naỡo õióửu kióỷn cuợng õổồỹc thoớa maợn. bióứu thổùc cọng vióỷc T F Chổồng V : Caùc cỏu lóỷnh õióửu khióứn Trang 44 Vờ duỷ : #include <stdio.h> #include <conio.h> main() { int n,tong=0,i=1; while ( i<=10) { printf(\nNhap so thu %d : ,i); scanf(%d,&n); tong+=n; i++; } printf(\nTong la : %d,tong); getch(); return 0; } Vờ duỷ : #include <stdio.h> #include <conio.h> main() { int n,i=1; long luythua=1; printf(\nNhap n:); scanf(%d,&n); while ( i<=10) { luythua*=n; i++; } printf(\n%d luy thua 10 = : %ld,n,luythua); getch(); return 0; } Vờ duỷ : kióứm tra sọỳ nguyón n coù phaới laỡ sọỳ nguyón tọỳ khọng int k=2; while (n%k && k*k<=n) k++; if(k*k>n) printf(\nDay la so nguyen to); Vờ duỷ : Tờnh e x 1+x/1!+x 2 /2!+ .+x n /n! #include <stdio.h> #include <conio.h> #include <math.h>