CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.1 Leänh ñôn vaø leänh phöùc 8.9 Leänh GOTO 8.2 Leänh IF 8.10 Leänh ROÃNG 8.3 Leänh SWITCH-CASE Baøi taäp cuoái chöông 8.4 Leänh WHILE 8.5 Leänh DO-WHILE 8.6 Leänh FOR 8.7 Leänh BREAK vaø leänh CONTINUE 8.8 Leänh RETURN CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.1 LEÄNH ÑÔN VAØ LEÄNH PHÖÙC (SIMPLE STATEMENT VAØ COMPOUND STATEMENT) - Leänh ñôn laø moät bieåu thöùc thuoäc loaïi baát kyø theo sau noù laø moät daáu chaám phaåy (;), do ñoù leänh ñôn coøn ñöôïc goïi laø leänh bieåu thöùc. Ví duï: Caùc leänh sau ñaây laø caùc leänh ñôn a = a + 1; b >>= 3; printf (.); CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.1 LEÄNH ÑÔN VAØ LEÄNH PHÖÙC (SIMPLE STATEMENT VAØ COMPOUND STATEMENT) -Leänh phöùc bao haøm moät hay nhieàu leänh ñôn ñöôïc bao beân trong caëp daáu ngoaëc nhoïn ({ }) vaø ñöôïc boä dòch C xem nhö laø moät leänh ñôn. Ví duï: Xeùt leänh if sau if (a > 0) { i += 2; a++; leänh phöùc, ñöôïc xem laø moät leänh n = a * i; } CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.1 LEÄNH ÑÔN VAØ LEÄNH PHÖÙC (SIMPLE STATEMENT VAØ COMPOUND STATEMENT) Caùc leänh ñieàu khieån naøy coù theå ñöôïc chia ra laøm hai nhoùm: - Nhoùm leänh lieân quan ñeán vieäc reõ nhaùnh chöông trình: if- else, switch-case, goto,. - Nhoùm leänh laëp: while, for, do_while CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.2 LEÄNH IF Leänh if cho pheùp laäp trình vieân thöïc hieän moät leänh ñôn hay moät leänh phöùc tuøy theo bieåu thöùc ñieàu kieän, neáu bieåu thöùc coù trò khaùc 0 thì leänh ñöôïc thöïc thi.
CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.2 LEÄNH IF Daïng 1: if (bieu_thuc) leänh; - bieåu_thöùc laø moät bieåu thöùc baát kyø, coù theå coù haèng, bieán hoaëc goïi haøm trong ñoù vaø sau cuøng laø bieåu thöùc naøy seõ coù trò 0 hoaëc 1 CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.2 LEÄNH IF Daïng 1: if (bieu_thuc) leänh; - leänh laø leänh thöïc thi cuûa if, coù theå laø leänh ñôn, phöùc hoaëc leänh roãng. CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.2 LEÄNH IF Daïng 2: if (bieu_thuc) leänh_1; else leänh_2; CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.2 LEÄNH IF Ví duï: Xeùt chöông trình sau ñaây #include <stdio.h> main() { int n; clrscr(); printf (Moi nhap mot so: ); scanf (%d, &n); if (n % 2 == 0) printf ("So la so chan \n"); printf ("Moi ban nhan mot phim de ket thuc \n"); getch(); } CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.2 LEÄNH IF Ví duï: Xeùt chöông trình sau ñaây #include <stdio.h> main() { int n; clrscr(); printf ("Moi nhap mot so: "); scanf ("%d", &n); if (n % 2 == 0) printf ("So la so chan \n"); vaãn coù daáu chaám phaåy else printf ("So la so le \n"); printf ("Moi ban nhan mot phim de ket thuc \n"); getch(); } CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.2 LEÄNH IF Ví duï: Xeùt chöông trình sau ñaây if (a > 0) if (a > 0) if (b > 0) { c = b + a; if (b > 0) else c = b – a; c = b – a; } else c = b – a; CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.2 LEÄNH IF if (bieåu_thöùc_1) Khi thöïc hieän leänh if_else loàng lenh_1; nhau nhö theá naøy caùc bieåu thöùc else if (bieåu_thöùc_2) seõ ñöôïc tính laàn löôït töø treân lenh_2; xuoáng döôùi neáu coù bieåu thöùc else if (bieåu_thöùc_3) naøo khaùc 0, leänh töông öùng vôùi lenh_3; if ñoù seõ ñöôïc thi haønh vaø toaøn. boä phaàn coøn laïi cuûa leänh if-else else ñöôïc boû qua. lenh_n; CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.2 LEÄNH IF Ví duï: Chöông trình ví duï sau nhaäp vaøo moät kyù töï, kieåm tra kyù töï ñoù laø thöôøng, hoa, kyù soá hoaëc kyù töï keát thuùc file hay kyù töï khaùc.h> main() { char c; clrscr(); printf ("Nhap mot ky tu: "); c = getchar(); CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.2 LEÄNH IF if (c == EOF) printf ("Da den cuoi file \n"); else if (c >= 'a' && c <= 'z') printf ("ky tu thuong\n"); else if (c >= 'A' && c <= 'Z') printf ("ky tu hoa\n"); else if (c >= '0' && c <= '9') printf ("ky tu so\n"); else printf ("ky tu khac\n"); getch(); } CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.3 LEÄNH SWITCH-CASE switch (bieåu_thöùc) : { case haèng_n: case haèng_1: leänh_n; leänh_1; break; break; default: case haèng_2: leänh; leänh_2; break; break; } : CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.3 LEÄNH SWITCH-CASE CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.3 LEÄNH SWITCH-CASE Ví duï: Vieát chöông trình nhaäp moät trò, neáu trò ñoù chia heát cho 5 thì coäng theâm 5 vaøo cho soá ñoù, neáu trò ñoù chia cho 5 dö 1 thì coäng theâm 1, töông töï cho 3, neáu laø soá khaùc thì baùo khoâng thoûa.h> main() { int so; clrscr(); printf ("Nhap mot so: "); scanf ("%d", &so); CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.3 LEÄNH SWITCH-CASE switch (so % 5) { case 0: so += 5; printf ("Tri la: %d\n", so); break; case 1: so += 1; printf ("Tri la: %d\n", so); break; CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.3 LEÄNH SWITCH-CASE case 3: so += 3; printf ("Tri la: %d\n", so); break; default: printf ("Khong thoa\n"); break; } getch(); } CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.3 LEÄNH SWITCH-CASE Leänh break cuoái moãi case seõ chuyeån ñieàu khieån chöông trình ra khoûi leänh switch.
Neáu khoâng coù break, caùc leänh tieáp ngay sau seõ ñöôïc thöïc thi duø caùc leänh naøy coù theå laø cuûa moät case khaùc. CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.3 LEÄNH SWITCH-CASE Ví duï: Xeùt ví duï nhaäp thaùng vaø naêm, kieåm tra soá ngaøy trong thaùng. switch (thang) { case 4: case 6: case 9: case 11: so_ngay = 30; break; CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.3 LEÄNH SWITCH-CASE case 2: if (nam % 4 == 0) so_ngay = 29; else so_ngay = 28; break; default: so_ngay = 31; break; } printf("Thang %d nam %d co %d ngay\n", thang, nam, so_ngay); CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.4 LEÄNH WHILE Coù theå noùi while laø leänh laëp cô baûn cuûa ngoân ngöõ laäp trình coù caáu truùc, noù cho pheùp chuùng ta laëp laïi moät leänh hay moät nhoùm leänh trong khi ñieàu kieän coøn ñuùng (true-töùc khaùc 0). Cuù phaùp cuûa leänh while: while (bieu-thuc) lenh CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.4 LEÄNH WHILE CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.4 LEÄNH WHILE Ví duï: Chöông trình sau ñaây seõ in ra maøn hình 10 soá ngaãu nhieân töø 0 ñeán 99.h> main() { int i = 1; clrscr(); randomize(); printf ("So ngau nhien trong khoang 0- 99 la: "); CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.4 LEÄNH WHILE while (i <= 10) { printf ("%d", random(100)); i++; } getch(); } CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.4 LEÄNH WHILE Caùch khaùc: int i = 10; clrscr(); randomize(); printf ("So ngau nhien trong khoang 0-99 la: "); while (i) { printf ("%d", random(100)); --i; } CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.4 LEÄNH WHILE Ví duï: Nhaäp caùc kyù töï cho ñeán khi naøo nhaän ñöôïc kyù töï ESC coù maõ ASCII laø 27 thì keát thuùc chöông trình.h> #define ESC 27 main() { char c; clrscr(); printf ("Cac ky tu duoc nhap la: "); CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.4 LEÄNH WHILE while (1) { c = getche(); if (c == ESC) break; } } CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.4 LEÄNH WHILE #include <stdio.h> #define ESC 27 main() { char c; clrscr(); printf ("Cac ky tu duoc nhap la: "); while (getche() - ESC) ; leänh thöïc thi roãng } CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.5 LEÄNH DO-WHILE Neáu leänh while cho pheùp kieåm tra ñieàu kieän tröôùc roài thöïc thi leänh sau, nhö vaäy ngay töø ñaàu maø ñieàu kieän ñaõ sai thì leänh cuûa while khoâng ñöôïc thöïc thi, thì leänh laëp do-while laïi thöïc thi leänh tröôùc roài môùi kieåm tra ñieàu kieän sau.
Cuù phaùp cuûa leänh do-while nhö sau: do lenh while (bieåu_thöùc); CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.5 LEÄNH DO-WHILE CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.5 LEÄNH DO-WHILE Ví duï: Vieát chöông trình cho pheùp kieåm tra vaø in ra phím muõi teân ñaõ ñöôïc nhaán.h> #define ESC 27 main() { char c; clrscr(); printf ("\n Moi an cac phim mui ten \n"); CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.5 LEÄNH DO-WHILE do { c = getch(); if (c == 0) { c = getch(); switch(c) { case 'H': printf ("Ban da an mui ten len\n"); break; CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.5 LEÄNH DO-WHILE case 'P': printf ("Ban da an mui ten xuong\n"); break; case 'K': printf ("Ban da an mui ten qua trai\n"); break; case 'M': printf ("Ban da an mui ten qua phai\n"); CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.5 LEÄNH DO-WHILE break; } /* end switch */ } }while (c != 27); } CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.5 LEÄNH DO-WHILE Chuù yù raèng moãi phím muõi teân khi ñöôïc aán ñeàu sinh ra hai kyù töï: kyù töï ñaàu luoân laø kyù töï coù maõ ASCII laø 0 (töùc kyù töï NUL), kyù töï thöù hai laø caùc maõ ASII töông öùng vôùi phím, trong ví duï treân thì + Phím muõi teân leân coù maõ laø 0 vaø 'H' + Phím muõi teân xuoáng coù maõ laø 0 vaø 'P' + Phím muõi teân qua traùi coù maõ laø 0 vaø 'K' + Phím muõi teân coù maõ laø 0 vaø 'M'. CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.6 LEÄNH FOR Töông töï nhö ngoân ngöõ PASCAL, trong ngoân ngöõ C cuõng coù voøng laëp for, ñaây cuõng laø moät leänh laëp cho pheùp kieåm tra ñieàu kieän tröôùc, gioáng nhö while. Cuù phaùp cuûa leänh for nhö sau: for (bieåu_thöùc1; bieåu_thöùc2; bieåu_thöùc3) leänh CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.6 LEÄNH FOR - bieåu_thöùc1 coù yù nghóa laø bieåu thöùc ñeå khôûi ñoäng trò ñaàu cho bieán ñieàu khieån voøng for, noù coù theå laø bieåu thöùc gaùn hay bieåu thöùc phaåy, coù theå khoâng coù. - bieåu_thöùc2 coù yù nghóa laø bieåu thöùc cho pheùp kieåm tra xem voøng laëp coù ñöôïc tieáp tuïc laëp nöõa hay khoâng.
- bieåu_thöùc3 laø bieåu thöùc coù yù nghóa cho pheùp thay ñoåi bieán ñieàu khieån voøng laëp ñeå voøng laëp tieán daàn ñeán keát thuùc. Bieåu thöùc naøy ñöôïc tính sau khi caùc leänh thöïc thi trong thaân voøng for ñöôïc thöïc hieän xong. CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.6 LEÄNH FOR CHÖÔNG 8 CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG LAËP 8.