Session 07 - Concept

You might also like

Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 14

Bi 7

iu kin

Mc tiu:
Kt thc bi hc ny, bn c th:
Gii thch v Cu trc la chn

Cu lnh if

Cu lnh if else

Cu lnh vi nhiu lnh if

Cu lnh if lng nhau

Cu lnh switch.
Gii thiu

Cc vn c cp t u n nay cho php chng ta vit nhiu chng trnh. Tuy nhin
cc chng trnh c nhc im l bt c khi no c chy, chng lun thc hin mt
chui cc thao tc ging nhau, theo cch thc ging nhau. Trong khi , chng ta thng
xuyn ch cho php thc hin cc thao tc nht nh nu n tha mn iu kin t ra.
7.1. Cu lnh iu kin l g ?

Cc cu lnh iu kin cho php chng ta thay i lung chng trnh. Da trn mt iu
kin no , mt cu lnh hay mt chui cc cu lnh c th c thc hin hoc khng.
Hu ht cc ngn ng lp trnh u s dng lnh if a ra iu kin. Nguyn tc thc hin
nh sau nu iu kin a ra l ng (true), chng trnh s thc hin mt cng vic no ,
nu iu kin a ra l sai (false), chng trnh s thc hin mt cng vic khc.
V d 7.1:
xc nh mt s l s chn hay s l, ta thc hin nh sau:
1. Nhp vo mt s.
2. Chia s cho 2 xc nh s d.
3. Nu s d ca php chia l 0, l s Chn.
HOC
Nu s d ca php chia khc 0, l s L.

Bc 2 trong gii thut trn kim tra phn d ca s khi chia cho 2 c bng 0 khng? Nu
ng, ta thc hin vic hin th thng bo l s chn. Nu s d khc 0, ta thc hin
vic hin th thng bo l s l.
Trong C mt iu kin c coi l ng (true) khi n c gi tr khc 0, l sai (false) khi n c gi tr
bng 0.

iu kin

87

7.2. Cc cu lnh la chn:


C cung cp hai dng cu lnh la chn:
Cu lnh if
Cu lnh switch
Chng ta hy tm hiu hai cu lnh la chn ny.
7.2.1 Cu lnh if:
Cu lnh if cho php ta a ra cc quyt nh da trn vic kim tra mt iu kin no l ng
(true) hay sai (false).
Cc iu kin gm cc ton t so snh v logic m chng ta tho lun bi 4.
Dng tng qut ca cu lnh if:
if (biu thc)
Cc cu lnh;
Biu thc phi lun c t trong cp du ngoc (). Mnh theo sau t kho if l mt iu kin
(hoc mt biu thc iu kin) cn c kim tra. Tip n l mt lnh hay mt tp cc lnh s c
thc thi khi iu kin (hoc biu thc iu kin) c kt qu true.
V d 7.2:
#include <stdio.h>
void main()
{
int x, y;
char a = y;
x = y = 0;
if (a == y)
{
x += 5;
printf(The numbers are %d and \t%d, x, y);
}
}
Kt qu ca chng trnh nh sau:
The numbers are 5 and 0
C kt qu ny l do bin a c gn gi tr 'y'.
Ch rng, khi lnh sau lnh if c t trong cp ngoc nhn {}. Khi c nhiu lnh cn c thc
hin, cc cu lnh c coi nh mt block (khi lnh) v phi c t trong cp du {}. Nu trong
v d trn ta khng a vo du ngoc nhn cu lnh if, ch c cu lnh u tin (x += 5) c thc
hin khi iu kin trong cu lnh if l ng.
V d di y s kim tra mt nm c phi l nm nhun hay khng. Nm nhun l nm chia ht cho
4 hoc 400 nhng khng chia ht cho 100. Chng ta s dng lnh if kim tra iu kin.
V d 7.3:
/* To test for a leap year */

88

Lp trnh c bn C

#include <stdio.h>
void main()
{
int year;
printf(\nPlease enter a year:);
scanf(%d, &year);
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
printf(\n%d is a leap year!, year);
}
Chng trnh trn cho ra kt qu nh sau:
Please enter a year: 1988
1988 is a leap year!
iu kin year % 4 == 0 && year % 100 != 0 || year % 400 == 0 tr v gi tr 1 nu nm l nm
nhun. Khi , chng trnh hin th thng bo gm bin year v dng ch is a leap year. Nu iu
kin trn khng tha mn, chng trnh khng hin th thng bo no.
7.2.2 Cu lnh if else:
trn chng ta bit dng n gin nht ca cu lnh if, cho php ta la chn thc hin hay
khng mt cu lnh hoc mt chui cc lnh. C cng cho php ta la chn trong hai khi lnh thc
hin bng cch dng cu trc if else. C php nh sau:
if (biu thc)
cu_lnh 1;
else
cu_lnh 2;
Nu biu thc iu kin trn l ng (khc 0), cu lnh 1 c thc hin. Nu n sai (khc 0) cu
lnh 2 c thc hin. Cu lnh sau if v else c th l lnh n hoc lnh phc. Cc cu lnh nn
c li vo trong dng mc d khng bt buc. Cch vit gip ta nhn thy ngay nhng lnh no
s c thc hin ty theo kt qu ca biu thc iu kin.
By gi chng ta vit mt chng trnh kim tra mt s l s chn hay s l. Nu em chia s cho
2 c d l 0 chng trnh s hin th dng ch The number is Even, ngc li s hin th dng
ch The number is Odd.
V d 7.4:
#include <stdio.h>
void main()
{
int num, res;
printf(Enter a number: );
scanf(%d, &num);
res = num % 2;

iu kin

89

if (res == 0)
printf(The number is Even);
else
printf(The number is Odd);
}
Xem mt v d khc, i mt k t hoa thnh k t thng. Nu k t khng phi l mt k t hoa, n
s c in ra m khng cn thay i. Chng trnh s dng cu trc if-else kim tra xem mt k t
c phi l k t hoa khng, ri thc hin cc thao tc tng ng.
V d 7.5:
/* Doi mot ky tu hoa thanh ky tu thuong */
#include <stdio.h>
void main()
{
char c;
printf(Please enter a character: );
scanf(%c, &c);

if (c >= A && c <= Z)


printf(Lowercase character = %c, c + a A);
else
printf(Character Entered is = %c, c);

Biu thc c >= A && c <= Z kim tra k t nhp vo c l k t hoa khng. Nu biu thc tr v
true, k t s c i thnh k t thng bng cch s dng biu thc c + a A, v c in ra
mn hnh qua hm printf(). Nu gi tr ca biu thc l false, cu lnh sau else c chy v chng
trnh hin th k t ra mn hnh m khng cn thc hin bt c s thay i no.

7.2.3 Nhiu la chn Cc cu lnh if else:


Cu lnh if cho php ta la chn thc hin mt hnh ng no hay khng. Cu lnh if else cho
php ta la chn thc hin gia hai hnh ng. C cho php ta c th a ra nhiu la chn hn. Chng
ta m rng cu trc if else bng cch thm vo cu trc else if thc hin iu . Ngha l mnh
else trong mt cu lnh if else li cha mt cu lnh if else khc. Do nhiu iu kin hn
c kim tra v to ra nhiu la chn hn.
C php tng qut trong trng hp ny nh sau:
if (biu thc) cu_lnh;
else
if (biu thc) cu_lnh;

else cu_lnh;
Cu trc ny gi l ifelseif ladder hay if-else-if staircase.

Cch canh l (li vo trong) nh trn gip ta nhn chng trnh mt cch d dng khi c mt
hoc hai lnh if. Tuy nhin khi c nhiu lnh if hn cch vit d gy ra nhm ln v nhiu
cu lnh s phi li vo qu su. V vy, lnh if-else-if thng c canh l theo dng:
if (biu thc)
cu_lnh;
else if (biu thc)
cu_lnh;
else if (biu thc)
cu_lnh;
.
else
cu_lnh;

90

Lp trnh c bn C

Cc iu kin c kim tra t trn xung di. Khi c mt iu kin no l true, cc cu


lnh gn vi n s c thc hin v cc lnh cn li s c b qua. Nu khng c iu kin
no l true, cc cu lnh gn vi else cui cng s c thc hin. Nu mnh else
khng tn ti, s khng c lnh no c thc hin do tt c cc iu kin u false.
V d di y nhn mt s t ngi dng. Nu s c gi tr t 1 n 3, chng trnh s in
ra s , ngc li chng trnh in ra thng bo Invalid choice.
V d 7.6:
#include <stdio.h>
main()
{
int x;
x = 0;
clrscr();
printf(Enter Choice (1 - 3): );
scanf(%d, &x);

if (x == 1)
printf(\nChoice is 1);
else if ( x == 2)
printf(\nChoice is 2);
else if ( x == 3)
printf(\nChoice is 3);
else
printf(\nInvalid Choice: Invalid Choice);

Trong chng trnh trn,


Nu x = 1, hin th dng ch Choice is 1.
Nu x = 2, hin th dng ch Choice is 2.
Nu x = 3, hin th dng ch Choice is 3 c hin th.
Nu x l bt k mt s no khc 1, 2, hoc 3, Invalid Choice c hin th.

Nu chng ta mun thc hin nhiu hn mt lnh sau mi cu lnh if hay else, ta phi t cc
cu lnh vo trong cp du ngoc nhn {}. Cc cu lnh to thnh mt nhm gi l lnh
phc hay mt khi lnh.
if (result >= 45)
{
printf("Passed\n");
printf("Congratulations\n");
}
else
{
printf("Failed\n");
printf("Good luck next time\n");
}
7.2.4 Cc cu trc if lng nhau:

iu kin

91

Mt cu trc if lng nhau l mt lnh if c t bn trong mt lnh if hoc else khc. Trong
C, lnh else lun gn vi lnh if khng c else gn n nht, v nm trong cng mt khi lnh
vi n. V d:
if (biu thc1)
{
if (biu thc2)
cu_lnh1;
if (biu thc3)
cu_lnh2;
else
cu_lnh3;
}
else
cu_lnh4;

/* vi if (biu thc3) */
/* vi if (biu thc1) */

Trong on lnh minh ha trn, nu gi tr ca biu thc-1 l true th lnh if th hai s c


kim tra. Nu biu thc-2 l true th lnh cu_lnh1 s c thc hin. Nu biu thu-3 l true,
cu_lnh2 s c thc hin nu khng cu_lnh3 c thc hin. Nu biu thc-1 l false th
cu_lnh4 c thc hin.

V lnh else trong cu trc else-if l khng bt buc, nn c th c mt cu trc khc nh


dng di y:
if (iu kin-1)
if (iu kin-2)
cu_lnh1;
else
cu_lnh2;
cu lnh k tip;

Trong on m trn, nu iu kin-1 l true, chng trnh s chuyn n thc hin lnh if th
hai v iu kin-2 c kim tra. Nu iu kin l true, cu_lnh1 c thc hin, nu
khng cu_lnh2 c thc hin, sau chng trnh thc hin nhng lnh trong cu lnh
k tip. Nu iu kin-1 l false, chng trnh s chuyn n thc hin nhng lnh trong
cu lnh k tip.

V d, marks1 v marks2 l im hai mn hc ca mt sinh vin. im marks2 s c cng


thm 5 im nu n nh hn 50 v marks1 ln hn 50. Nu marks2 ln hn hoc bng 50 th
sinh vin t loi A. iu ny c th c biu din bi on if c cu trc nh sau:
if (marks1 > 50 && marks2 < 50)
marks2 = marks2 + 5;
if (marks2 >= 50)
grade = A;
Mt s ngi a ra on code nh sau:
if (marks1 > 50)
if (marks2 < 50)
marks2 = marks2 + 5;
else
grade = A;

92

Lp trnh c bn C

Trong on lnh ny, A c gn cho bin grace ch khi marks1 ln hn 50 v marks2 ln hn hoc
bng 50. Nhng theo nh yu cu ca bi ton, bn grace c gn gi tr A sau khi thc hin vic
kim tra cng im v kim tra gi tr ca marks2. Hn na, gi tr ca bin grace khng ph thuc
vo marks1.

V lnh else trong cu trc if-else l khng bt buc, nn khi c lnh else no khng c
a vo trong chui cu trc if lng nhau chng trnh s trng khng r rng. Mt lnh else
lun c gn vi lnh if gn n nht m lnh if ny cha c kt hp vi mt lnh else
no.
V d :
if (n >0)
if ( a > b)
z = a;
else
z = b;
Lnh else i vi lnh if bn trong. Vic vit li vo trong dng l mt cch th hin mi quan h .
Tuy nhin canh l khng c chc nng gn else vi lnh if. Cp du ngoc nhn {} gip chng ta thc
hin chc nng mt cch chnh xc.
if (n > 0)
{
if ( a > b)
z = a;
}
else
z = b;
Hnh bn di biu din s kt hp gia if v else trong mt chui cc lnh if lng nhau.
if (n >0)

if ( a > b)
z = a;
else
z = b;

if (n > 0)
{
if ( a > b)
z = a;
}
else
z = b;

else kt hp vi if gn nht
else kt hp vi if u tin, bi v cp du
ngoc nhn t lnh if bn trong.
Theo chun ANSI, c th lng nhau n 15 mc. Tuy nhin, hu ht trnh bin dch cho php nhiu
hn th.
Mt v d v if lng nhau c cho bn di:
V d 7.7:
#include <stdio.h>
void main()
{
int x, y;
x = y = 0;
clrscr();
printf(Enter Choice (1 - 3): );
iu kin

93

scanf(%d, &x);
if(x == 1)
{
printf(\nEnter value for y (1 - 5): );
scanf (%d, &y);
if (y <= 5)
printf(\nThe value for y is: %d, y);
else
printf(\nThe value of y exceeds 5);
}
else
printf (\nChoice entered was not 1);
}
Trong chng trnh trn, nu gi tr ca x c nhp l 1, ngi dng c yu cu nhp tip gi tr
ca y. Ngc li, dng ch Choice entered was not 1 c hin th. Lnh if u tin c lng mt if
trong hin th gi tr ca y nu ngi dng nhp vo mt gi tr nh hn 5 cho y, hoc ngc li
s hin th dng ch The value of y exceeds 5.

Chng trnh di y a ra cch s dng ca if lng nhau.


V d 7.8:
Mt cng ty sn xut 3 loi sn phm c tn gi: vn phng phm cho my tnh (computer stationery),
a cng (fixed disks) v my tnh (computer).
Sn phm
Computer Stationery
Fixed Disks
Computers

M
1
2
3

Cng ty c chnh sch gim gi nh sau:


Sn phm
Computer Stationery
Computer Stationery
Computer Stationery
Fixed Disks
Fixed Disks
Computers
Computer

Gi tr t hng
$500/- hoc hn
$300/- hoc hn
di $300/$2000/- hoc hn
$1500/- hoc hn
$5000/- hoc hn
$2500/- hoc hn

T l gim gi
12%
8%
2%
10%
5%
10%
5%

Di y l chng trnh tnh gim gi.


V d 7.9:
#include <stdio.h>
void main()
{
int productcode;
float orderamount, rate = 0.0;
printf(\nPlease enter the product code: );
scanf(%d, &productcode);

94

Lp trnh c bn C

printf(Please enter the order amount: );


scanf(%f, &orderamount);
if (productcode == 1)
{
if (orderamount >= 500)
rate = 0.12;
else if (orderamount >= 300)
rate = 0.08;
else
rate = 0.02;
}
else if (productcode == 2)
{
if (orderamount >= 2000)
rate = 0.10;
else if (orderamount >= 1500)
rate = 0.05;
}
else if (productcode == 3)
{
if (orderamount >= 5000)
rate = 0.10;
else if (orderamount >= 2500)
rate = 0.05;
}
orderamount -= orderamount * rate;
printf( The net order amount is % .2f \n, orderamount);

Kt qu ca chng trnh c minh ho nh sau:


Please enter the product code: 3
Please enter the order amount: 6000
The net order amount is 5400

iu kin

95

trn, else sau cng trong chui cc else-if khng cn kim tra bt k iu kin no. V d, nu m
sn phm c nhp vo l 1 v gi tr t hng nh hn $300, th khng cn phi kim tra iu kin,
v tt c cc kh nng c kim sot.
Kt qu thc thi chng trnh vi m sn phm l 3 v gi tr t hng l $6000 c trnh by trn.
Sa i chng trnh trn ch n trng hp d liu nhp l mt m sn phm khng hp l.
iu ny c th d dng t c bng cch thm mt lnh else vo chui lnh if dng kim tra m
sn phm. Nu gp mt m sn phm khng hp l, chng trnh phi kt thc m khng cn tnh gi
tr thc ca n t hng.
7.2.5 Cu lnh switch:

Cu lnh switch cho php ta a ra quyt nh c nhiu cch la chn, n kim tra gi tr ca mt
biu thc trn mt danh sch cc hng s nguyn hoc k t. Khi n tm thy mt gi tr trong danh
sch trng vi gi tr ca biu thc iu kin, cc cu lnh gn vi gi tr s c thc hin. C
php tng qut ca lnh switch nh sau:
switch (biu_thc)
{
case hng_1:
chui_cu_lnh;
break;
case hng_2:
chui_cu_lnh;
break;
case hng_3:
chui_cu_lnh;
break;
default:
chui_cu_lnh;
}
, switch, case v default l cc t kho, chui_cu_lnh c th l lnh n hoc lnh ghp v
khng cn t trong cp du ngoc. Biu_thc theo sau t kha switch phi c t trong du ngoc
( ), v ton b phn thn ca lnh switch phi c t trong cp ngoc nhn { }. Kiu d liu kt qu
ca biu_thc v kiu d liu ca cc hng theo sau t kho case phi ng nht. Ch , hng s sau
case ch c th l mt hng s nguyn hoc hng k t. N cng c th l cc hng biu thc
nhng biu thc khng cha bt k mt bin no. Tt c cc gi tr ca case phi khc nhau.

Trong cu lnh switch, biu thc c xc nh gi tr, gi tr ca n c so snh vi tng


gi tr gn vi tng case theo th t ch ra. Nu mt gi tr trong mt case trng vi gi tr
ca biu thc, cc lnh gn vi case s c thc hin. Lnh break (s ni phn sau) cho
php thot ra khi switch. Nu khng dng lnh break, cc cu lnh gn vi case bn di s
c thc hin khng k gi tr ca n c trng vi gi tr ca biu thc iu kin hay khng.
Chng trnh c tip tc thc hin nh vy cho n khi gp mt lnh break. Chnh v th,
lnh break c coi l lnh quan trng nht khi dng switch.
Cc cu lnh gn vi default s c thc hin nu khng c case no tha mn. Lnh
default l ty chn. Nu khng c lnh default v khng c case no tha mn, khng c
hnh ng no c thc hin. C th thay i th t ca case v default.
Xt mt v d.
V d 7.10:
#include <stdio.h>
main ()

96

Lp trnh c bn C

char ch;
clrscr ();
printf(\nEnter a lower cased alphabet (a - z): );
scanf(%c, &ch);
if (ch < a || ch > z)
printf(\nCharacter not a lower cased alphabet);
else
switch (ch)
{
case a:
case e:
case i:
case o:
case u:
printf(\nCharacter is a vowel);
break;
case z:
printf (\nLast Alphabet (z) was entered);
break;
default:
printf(\nCharacter is a consonant);
break;
}
}

Chng trnh trn nhn vo mt k t dng ch thng v hin th thng bo k t l


nguyn m, l ch z hay l mt ph m. Nu n khng phi ba loi trn, chng trnh hin
th thng bo Character not a lower cased alphabet.
Nn s dng lnh break trong c case cui cng hoc default mc d v mt logic l khng
cn thit. Nhng iu rt c ch nu sau ny chng ta a thm case vo cui.
Di y l mt v d, biu thc ca switch l mt bin kiu s nguyn v gi tr ca mi case l
mt s nguyn.
V d 7.11:
/* Integer constants as case labels */
#include <stdio.h>
void main()
{
int basic;
printf(\n Please enter your basic: );
scanf(%d, &basic);
switch (basic)

iu kin

97

case 200:
printf(\n Bonus is dollar %d\n, 50);
break;
case 300:
printf(\n Bonus is dollar %d\n, 125);
break;
case 400:
printf(\n Bonus is dollar %d\n, 140);
break;
case 500:
printf(\n Bonus is dollar %d\n, 175);
break;
default:
printf(\n Invalid entry);
break;

T v d trn, lnh switch rt thun li khi chng ta mun kim tra mt biu thc da trn
mt danh sch gi tr ring bit. Nhng n khng th dng kim tra mt gi tr c nm
trong mt min no hay khng. V d, khng th dng switch kim tra xem basic c
nm trong khong t 200 n 300 hay khng, t xc nh mc tin thng. Trong
nhng trng hp nh vy, ta phi s dng if-else.

98

Lp trnh c bn C

Tm tt bi hc
Cc lnh iu kin cho php chng ta thay i lung thc hin ca chng trnh.

C h tr hai dng cu lnh la chn : if v switch.


Sau y l mt vi cu lnh iu kin:

Lnh if khi mt iu kin c kim tra; nu kt qu l true, cc cu lnh theo sau n s c


thc thi v sau thc hin lnh tip theo trong chng trnh chnh. Ngc li, nu kt qu l false, s
thc hin ngay lnh tip theo trong chng trnh chnh.

Lnh if else khi mt iu kin c kim tra; nu kt qu l true, cc cu lnh theo sau if
c thc thi. Nu kt qu l false, th cc lnh theo sau else c thc thi.

Cc lnh if lng nhau l lnh if bn trong mt lnh if khc.


Lnh switch cho php a ra quyt nh c nhiu la chn, n kim tra gi tr ca biu thc iu
kin trong mt danh sch cc hng. Nu c, chng trnh chuyn n phn thc hin.
Kim tra tin hc tp
1. Cc lnh cho php chng ta thay i lung thc hin ca chng trnh.
A. iu kin
B. Vng lp
C. Tun t
D. Tt c u sai
2. Lnh else l mt tu chn.

(ng / Sai)

3. l lnh if c t bn trong mt lnh if hoc else.


A. Nhiu lnh if
B. Lnh if lng nhau
C. Lnh if o
D. Tt c u sai
4. Lnh l mt lnh cho php chn nhiu hng thi hnh. Lnh ny kim tra gi tr ca mt
biu thc da vo mt danh sch cc hng s nguyn hoc hng k t.
A. Tun t
B. if
C. switch
D. Tt c u sai
5.
if (biu_thc)
cu_lnh1;
else
cu_lnh2;
Cu lnh no s c thc thi khi gi tr ca biu_thc l false?
A. cu_lnh1
B. cu_lnh2

iu kin

99

Bi tp t lm
1. Vit chng trnh nhp vo hai s a v b, v kim tra xem a c chia ht cho b hay khng.
2. Vit chng trnh nhp vo hai s v kim tra xem tch ca hai s ny bng hay ln hn 1000.
3. Vit chng trnh nhp vo hai s. Tnh hiu ca hai s ny. Nu hiu s ny bng vi mt trong
hai s nhp th hin th thng tin:
Hiu bng gi tri <gi tr ca s nhp vo>
Nu hiu khng bng vi mt trong hai gi tr nhp, hin th thng tin:
Hiu khng bng bt k gi tr no c nhp
4. Cng ty Montek a ra cc mc tr cp cho nhn vin ng vi tng loi nhn vin nh sau:
Loi nhn vin
A
B
Nhng loi khc

Mc tr cp
300
250
100

Tnh lng cui thng ca nhn vin (Mc lng v loi nhn vin c nhp t ngi dng).
5. Vit chng trnh xp loi sinh vin theo cc qui lut di y:
Nu im => 75
Nu 60 <= im < 75
Nu 45 <= im < 60
Nu 35 <= im < 45
Nu im < 35

100

Loi A
Loi B
Loi C
Loi D
Loi E

Lp trnh c bn C

You might also like