r -'
3.5. Phep toan tang giam:
C dua ra hai phep toan m9t ngoi dS tang va giam cac bi Sn ( nguyen va thvc ). Toan tu tang la++ se c9ng 1 vao toan h~ng cua n6, toan tu giam -- thi se trir toan h~ng di 1.
Vi dv:
n=5
++n Cho ta n=6 --n Cho ta n=4
Ta c6 thS vi@t phep toan ++ va -- tru&c ho~c sau toan h~ng nhu sau: ++n, n++, --n, n--.
Sµ khac nhau cua ++n van++ & ch6: trong phep n++ thi tang sau khi gia tri cua n6 da duqc su dl).ng, con trong phep ++n thin duqc tang tru&c khi su dl).ng. Sµ khac nhau giua n-- va --n cung nhu v?,y.
Vi d1}: n=5 x=++n x-n++ Cho ta x=6 va n=6 Cho ta x=S va n=6
3.6. Thfr t\f U'U tien cac phep toan:
Cac phep toan c6 d9 uu tien khac nhau, di@u nay c6 y nghla trong cung m9t biSu thuc se c6 m9t s6 phep toan nay duqc thµc hi~n tru&c m<)t s6 phep toan khac.
Thu tµ uu tien cua cac phep toan duqc trinh bay trong bang sau: TT Phep toan Trinh tµ k@t hqp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 () [] ->
! ~ & * - ++ -- (type) sizeof * ( phep nhan) / % +- <<>> <<= >>= == I= & && II ?: = += -= *= /= %= <<= >>= &= A= 1=
Trai qua phai Phai qua trai Trai qua phai Trai qua phai Trai qua phai Trai qua phai Trai qua phai Trai qua phai Trai qua phai Trai qua phai Trai qua phai Trai qua phai Phai qua trai Phai qua trai Trai qua phai
Chu thich:
Cac phep toan ten m<)t dong c6 cung thu ti;r uu tien, cac phep toan a hang tren c6 s6 uu tien cao han cac s6 a hang du6i.
D6i v6i cac phep toan cung muc uu tien thi trinh ti;r tinh toan c6 th@ tu trai qua phai hay nguqc le;ti duqc chi ra trong c<)t trznh hf: kit hfJP.
Vi dv:
*--px=*(--px) ( Phai qua trai) 8/4*6=(8/4)*6 ( Trai qua phai)
Nen dung cac d§.u ngo~c tron dS viSt biSu thuc m<)t each chinh xac.
Cac phep toan I~:
Dong 1
[ ] Dung dS biSu di Sn ph~n tu mang, vi d\l: a[i] [j] . Dung dS biSu diSn thanh ph~n c§.u true, vi d\l: ht.ten
-> Dung dS biSu diSn thanh ph~n c§.u true thong qua con tro Dong2
* Dung dS khai bao con tro, vi d\l: int *a & Phep toan 1§.y dia chi, vi dv; &x
(type) la phep chuySn d6i kiSu, vi d\l: (float)(x+y) Dong 15
Toan tu, thuong dung dS vi@t m<)t day bi@u thuc trong toan tu for.
3.7. Chuy~n dBi ki~u gia trj:
Vi~c chuySn d6i kiSu gia tri thuong diSn ra m<)t each ti;r d<)ng trong hai truong hqp sau:
Khi gan bi@u thuc g6m cac toan he;tng khac ki@u.
Khi gan m<)t gia tri ki@u nay cho m9t bi@n ( ho~c ph~n tu mang) ki@u khac. DiSu nay xay ra trong toan tu gan, trong vi~c truySn gia tri cac tham s6 thi;rc S\I cho cac d6i.
Ngoai ra, ta c6 th@ chuySn tu m<)t kiSu gia tri sang m<)t kiSu b§.t ky ma ta mu6n b&ng phep chuySn sau:
( type) biSu thl'.rc
Vi d\J.:
(float) (a+b)
Chuy~n dBi ki~u trong bi~u thfrc:
Khi hai toan h~ng trong m9t phep toan c6 kiSu khac nhau thi kiSu thip han se dugc nang thanh kiSu cao han tru6c khi thvc hi~n phep toan. KSt qua thu dugc la m9t gia tri kiSu cao han. Ching h~n:
Gifra int va long thi int chuySn thanh long. Gifra int va float thi int chuySn thanh float.
Gifra float va double thi float chuySn thanh double.
Vi dv:
l.5*(11/3)=4.5 1.5* 11/3=5.5 (11/3)* 1.5=4.5
Chuy~n dBi ki~u thong qua phep gan:
Gia tri cua vS phai dugc chuy@n sang ki@u vs trai d6 la kiSu cua kSt qua. KiSu int c6 th@ dugc dugc chuySn thanh float. KiSu float c6 th@ chuySn thanh int do ch~t di ph§.n th~p phan. KiSu double chuySn thanh float b&ng each lam tron. KiSu long dugc chuySn thanh int b&ng each cilt b6 m9t vai chfr s6.
Vi d\l:
int n;
n=15.6 gia tri cua n la 15
B6i ki~u d~ng (type)bi~u thfrc:
Theo each nay, ki@u cua bi@u thuc dugc d6i thanh ki@u type theo nguyen t~c tren.
Vi d\l:
Cho m9t gia tri kiSu int. NSu a la float thi a day c6 S\J' chuySn d6i tu float sang int. Chu y ring ban than kiSu cua a v~n khong bi thay d6i. N6i each khac, a v~n c6 kiSu float nhung (int)a c6 kiSu int.
B6i v6i ham toan h9c cua thu vi~n chu§.n, thi gia tri cua d6i va gia tri cua ham d@u c6 kiSu double, vi v~y dS tinh can b~c hai cua m9t biSn nguyen n ta phai dung phep ep kiSu dS chuySn kiSu int sang double nhu sau:
sqrt((double)n)
Phep ep kiSu c6 cung s6 uu tien nhu cac toan tu m9t ngoi.
Chuy:
Mu6n c6 gia tri chinh xac trong phep chia hai s6 nguyen c~n dung phep ep kiSu:
( ( float )a )/b
f)S dBi gia tri thvc r sang nguyen, ta dung: (int)(r+0.5)
Chu y thu 1\.1' uu tien:
(int)l.4*10=1 *10=10 (int)(l .4* 10)=(int)14.0=14
Chuong 4 cAu TRUC CO BAN CUA CHUONG TRINH
4.1. Loi chu thich:
Cac lai binh lu~n, cac lai giai thich c6 thS dua vao 6 b§.t ky ch6 nao cu.a chuang trinh dS cho chuang trinh dS hi@u, dS d9c han ma khong lam anh huong dSn cac ph~n khac. Lai giai thfch duqc d~t gifra hai d§.u /* va */.
Trong m9t chuang trinh c~n { va luon luon c~n) viSt them nhfmg lai giai thfch dS chuang trinh them ro rang, them dS hiSu.
Vi d\l: #include "stdio.h" #include "string.h" #include "alloc.h" #include "process.h" int main() { } char *str '
/* C§.p phat b9 nh6 cho xau ky tµ * /
if ((str = malloc(lO)) == NULL)
{
printf("Not enough memory to allocate buffer\n"); exit(l ); /* KSt thuc chuang trinh nSu thiSu b9 nh6 * /
}
/* copy "Hello" vao xau * / strcpy(str, "Hello");
/* HiSn thi xau * /
printf("String is %s\n", str); /* Giai ph6ng b9 nh6 * / free(str);
4.2. L~nh va khfii l~nh: 4.2.1. L~nh:
M(h bi Su thuc kiSu nhu x=0 ho~c ++i ho~c scanf( ... ) tr& thanh cau l~nh khi c6 di kem theo d&u;
Vi dl}: x=0· ' ++i· ' scanf( ... );
Trong chuang trinh C, d&u; la d&u hi~u kSt thuc cau l~nh.
4.2.2. Khfii l~nh:
M9t day cac cau l~nh duqc bao boi cac d&u { } g9i la m9t kh6i l~nh. Vi dv:
{ a=2· ' b=3· ' printf("\n%6d%6d",a,b ); }
TURBO C xem kh6i l~nh cung nhu m9t cau l~nh rieng le. N6i each khac, ch6 nao viSt duqc m9t cau l~nh thi a d6 cung c6 quySn d~t m9t kh6i l~nh.
Khai bao & d§u khfii l~nh:
Cac khai bao biSn va mang chiing nhfrng c6 thS d~t a dftu cua m9t ham ma con c6 thS viSt CY dftu kh6i l~nh: .
{ } int a,b,c[50]; float x,y,z,t[20][30]; a==b==3· ' x=5.5; y=a*x; z=b*x· ' printf("\n y= %8.2f\n z=%8.2f',y,z);
S11 lf>ng nhau ciia cac khBi l~nh va ph~m vi ho~t d9ng ciia cac bi~n va mang: Ben trong m9t kh6i l~nh lc;ti c6 th@ viSt 16ng kh6i l~nh khac. S1)' 16ng nhau theo each nhu v~y la khong hc;tn ch@.
Khi may b~t d~u lam vi~c v&i m9t kh6i l~nh thi cac biSn va mang khai bao ben trong n6 m&i dm;rc hinh thanh va duqc hinh thanh va duqc c~p phat b9 nh&. Cac biSn nay chi t6n tc;ti trong thai gian may lam vi~c ben trong kh6i l~nh va chCmg l~p tuc biSn m~t ngay sau khi may ra khoi kh6i l~nh. V~y:
Gia tri cua m9t biSn hay m9t marig khai bao ben trong m9t kh6i l~nh khong th@ dua ra su d\lng a b~t ky ch6 nao ben ngoai kh6i l~nh d6 & b~t ky ch6 nao ben ngoai m9t kh6i l~nh ta khong th@ can thi~p dSn cac biSn va cac mang duqc khai bao ben trong kh6i l~nh
NSu ben trong m9t kh6i ta dung m9tbiSn hay m9t mang c6 ten la a thi di@u nay khong lam thay d6i gia tri cua m9t bi Sn khac cung c6 ten la a ( nSu c6) duqc dung a dau d6 ben ngoai kh6i l~nh nay.
NSu c6 m<)t biSn da duqc khai bao & ngoai m<)t kh6i l~nh va k:hong trung ten v&i cac biSn khai bao ben trong kh6i l~nh nay thi biSn d6 cung c6 th@ SU d\}ng ca ben trong cung nhu ben ngoai kh6i l?nh.
Vi d\l:
Xet doc;tn chuang trinh sau:
{ int a=5 b=2· ' ' { int a 4· ' b=a+b· '
printf("\n a trong =%3d b=%3d",a,b);
}
printf("\n a ngoai =%3d b=%3d",a,b);
}
a trong =4 b=6 a ngoai =5 b=6
Do tinh chit biSn a trong va ngoai kh6i l~nh.
4.3. C~u true CO' ban cua chuO'ng trinh:
Ciu true chuong trinh va ham la m9t trong cac v§n dS quan tr9ng cua C. VS ham ta se co m<)t chuong noi ti my vS no. 6 day ta chi dua ra m9t s6 qui tile chung:
Ham la m9t don vi d9c l~p cua chuong trinh. Tinh d9c l~p cua ham thS hi~n
6 hai diSm:
Khong cho phep xay dvng m9t ham ben trong cac ham khac.
M6i ham co cac bi Sn, mang .. rieng cua no va chung chi dugc SU dvng n9i b9 ben trong ham. Noi each khac ham la don vi co tinh chit khep kin.
M9t chuong trinh bao g6m m9t ho~c nhiSu ham. Ham main() la thanh ph§.n bilt bu9c cua chuong trinh. Chuong trinh bilt d§.u thvc hi~n cac cau l~nh d§.u tien cua ham main() va kSt thuc khi g~p diu } cu6i cung cua ham nay. Khi chuong trinh lam vi~c, may co thS ch~y tu ham nay sang ham khac.
Cac chuong trinh C dugc tb chuc theo m~u:
ham 1
ham2
hamn
Ben ngoai cac ham 6 cac vi tri ( ... ) la ch6 d~t: cac toan tu #include ... ( dung dS khai bao SU dvng cac ham chu~n), toan tu #define ... ( dung dS dinh nghia cac hing), dinh nghia kiSu du li~u bing typedef, khai bao cac biSn ngoai, mang ngoai ....
Vi~c truySn du li~u va kSt qua tu ham nay sang ham khac dugc thvc hi~n theo m9t trong hai each:
Su di,mg bi Sn ngoai, mang ngoai ...
V~y n6i tom le:li cfiu true ca ban cua chuang trinh nhu sau:
Vi d\J:
D Cac #include
D Cac #define
D Khai bao cac d6i tm;mg du li~u ngoai ( bi@n, mang, cfiu true vv .. ).
D Khai bao nguyen m~u cac ham.
□ Ham main().
D Dinh nghla cac ham ( ham main c6 thS d?,t sau ho~c xen vao giua cac ham khac).
Chuang trinh tinh x luy thua y r6i in ra may in kSt qua: #include "stdio.h" #include "math.h" main() { } double x,y,z;
printf("\n Nhap x va y"); scanf("%lf>/olf' ,&x,&y );
z=pow(x,y); /* ham lfiy luy thua y luy thua x * /
fprintf(stdpm,"\n x= %8.2lf\n y=%8.2lf\n z=%8.2lf',x,y,z);
4.4. MQt s6 qui tic dtn nh& khi vi~t chll'<Yng trinh: Qui tic dftu tien cfin nh& fa:
M6i cau l¢nh c6 thi vdt tren m9t hay nhiJu dong nhzmg phai kit thuc bang ddu;
Qui tic thfr hai fa:
Cac lai giai thich cdn aU9'C ag;t giua cac ddu /* va *Iva c6 thi au9'C vdt Tren m9t dong
Tren nhiJu dong
Qui tic thfr ba la:
Trang chuang trinh, khi ta sit d11,ng cac ham chudn, vi d11, nhu printfO, getchO, ... ma cac ham nay lgi chua trong file stdio.h trong thu m11,c cua C, vi vt;iy a adu chuang trinh ta phai khai baa sit d11,ng;
#include "stdio.h "
Qui tic thfr ttr la:
M9t chuang trinh c6 thd chi c6 m9t ham chinh ( ham mainO) hog,c c6 thd c6 them vai ham khac.
Chuong 5 cAu TRUC DIEU KHIEN
M9t chuong trinh bao g6m nhiSu cau l~nh. Thong thucmg cac cau l~nh dugc thvc hi~n m9t each l~n lugt theo thu tv ma chung dugc viSt ra. Cac c&u true diSu khiSn cho phep thay d6i tr~t tv n6i tren, do d6 may c6 th@ nhay thvc hi~n m9t cau l~nh khac a m9t vi tri truac ho~c sau cau l~nh hi~n thai.
Xet vs m~t cong dvng, co th@ chia cac c&u true diSu khi@n thanh cac nh6m chinh:
Nhay kh6ng c6 di@u ki~n. Renhanh.
T6 chuc chu trinh.
Ngoai ra con m9t s6 toan tu khac c6 chuc nang b6 trg nhu break, continue.
5.1. cAu true co di~u ki~n: 5.1.1. L~nh if-else:
Toan tu if cho phep Iva chc;m ch:;i,y theo m9t trong hai nhanh tuy thu9c vao
S\I bing kh6ng va khac kh6ng cua bi@u thuc. N6 c6 hai each viSt sau: if ( bi@u thuc) if ( bi@u thuc)
kh6i l~nh 1; /* D,;mg m9t * /
Ho~t d{>ng cua bi~u thfrc d~ng 1:
kh6i l~nh 1; else
kh6i l~nh 2; /* D~ng hai * /
May tinh gia tri cua bi@u thuc. NSu biSu thuc dung ( biSu thuc c6 gia tri khac 0) may se thvc hi~n kh6i l~nh 1 va sau d6 se thvc hi~n cac l~nh tiSp sau l~nh if trong chuong trinh. NSu biSu thuc sai ( biSu thuc c6 gia tri bing 0) thi may bo qua kh6i l~nh 1 ma thvc hi~n ngay cac l~nh ti Sp sau l~nh if trong chuong trinh.
May tinh gia tri cua biSu thuc. NSu biSu thuc dung ( biSu thuc c6 gia tri
khac 0) may se th\IC hi~n kh6i l~nh 1 va sau d6 se th\IC hi~n cac l~nh tiSp sau kh6i l~nh 2 trong chuang trinh. NSu biSu thuc sai ( biSu thuc c6 gia tri bing 0) thi may bo qua kh6i l~nh 1 ma th\IC hi~n kh6i l~nh 2 sau d6 th\IC hi~n tiSp cac l~nh tiSp sau kh6i l~nh 2 trong chuang trinh.
Vi dl}.:
Chuang trinh nh~p vao hai s6 a va b, tim max cua hai s6 r6i in kSt qua len man hinh. Chuang trinh c6 thS viSt bing ca hai each tren nhu sau:
#include "stdio.h" main()
{
float a,b,max; printf("\n Cho a="); scanf("¾f' ,&a); printf("\n Cho b="); scanf("¾f' ,&b ); .max=a;
if (b>max) max-b;
printf(" \n Max cua hai so a=%8.2f Max=%8.2f' ,a,b,max); } #include "stdio.h" main() { float a,b,max;
printf("\n Cho a="); scanf("¾f' ,&a); printf("\n Cho b="); scanf("¾f' ,&b );
if ( a>b) max=a; else rnax=b;
printf(" \n Max cua hai so a=%8.2f Max=%8.2f' ,a,b,rnax);
}
S\f IBng nhau cua cac toan tfr if:
va b=%8.2f la
C cho phep su dµng cac toan tu if 16ng nhau c6 nghla la trong cac kh6i l~nh ( 1 va 2) & tren c6 thS chua cac toan tu if - else khac. Trong tnrong hgp nay, nSu khong SU dµng cac dfiu dong rn& ngo~c cho cac kh6i thi se c6 thS nh~rn l~n gifra cac if-else.
Chu y la may se g:in toan tu else v&i toan tu if khong c6 else g§.n nhfit. Ching h?n nhu do?n chuong trinh vi d\l sau:
if ( n>O) /* if thu nhfit* / if ( a>b) /* ifthuhai*/
z=a; else
z=b·
'
thi else & day se di vai if thu hai.
Do?n chuong trinh tren tuong duong v&i: if ( n>O) { } /* if thu nhfit* / if ( a>b) /* ifthuhai*/ z=a; else z=b· '
Truong hgp ta rnu6n else di v6i if thu nhfit ta vi St nhu sau: if ( n>O)
{
if ( a>b) z=a; else z=b· ' 5.1.2. L~nh else-if: /* if thu hai*/
Khi mu6n thvc hi~n m9t trong n quySt dinh ta c6 th@ su dvng c&u true sau: if ( bi@u thuc I)
kh6i l~nh l;
else if ( biSu thuc 2) kh6i l~nh 2;
else if ( bi Su thuc n-1) kh6i l~nh n-1;
else
kh6i l~nh n;
Trong c&u true nay, may se di ki@m tra tu bi@u thuc I tr& di d@n khi g~p bi Su thuc nao c6 gia tri khac 0.
NSu bi@u thuc thu i (1,2, ... n-l) c6 gia tri khac 0, may se thvc hi~n kh6i l~nh i, r6i sau d6 di thvc hi~n l~nh n&m tiSp theo kh6i l~nh n trong chuang trinh.
NSu trong ca n-1 biSu thuc khong c6 biSu thuc nao khac 0, thi may se thvc hi~n kh6i l~nh n r6i sau d6 di thvc hi~n l~nh n&m tiSp theo kh6i l~nh n trong chuang trinh.
Vi d1.1:
Chuang trinh giai phuang trinh b~c hai. #include "stdio.h"
main()
{
printf("\n Nhap a, b, c:"); scanf("%fU/ofU/of,&a&b&c ); d=b*b-4*a*c;
if (d<0.0)
printf("\n Phuong trinh vo nghiem "); else if (d==0.0)
printf("\n Phuong trinh co nghiem kep xl,2=%8.2f',-b/(2*a)); else
{
}
printf("\n Phuong trinh co hai nghiem "); printf("\n xl =%8.2f',(-b+sqrt( d))/(2*a)); printf("\n x2=%8.2f' ,(-b-sqrt( d))/(2*a));
5.2. L~nh nhay khong di~u ki~n - toan tfr goto:
Nhan c6 cung d~mg nhu ten biSn va c6 dfiu: dung a phia sau. Nhan c6 th@ dugc gan cho b§.t ky cau l?nh nao trong chuang trinh.
Vi d\J-:
ts: s=s++;
thi 6 day ts la nhan cua cau l?nh gan s=s++. Toan tu goto c6 d~ng:
goto nhan;
Khi gij,p toan tu nay may se nhay tai cau l?nh c6 nhan viSt sau tu khoa goto.
Khi dung toan tfr goto cin chu y:
Cau l?nh goto va nhan c~n n&m trong m9t ham, c6 nghia la toan tu goto chi cho phep nhay tu vi tri nay dSn vi tri khac trong than m<)t ham va khong thS dung dS nhay tu m9t ham nay sang m9t ham khac.
Khong cho phep dung toan tu goto dS nhay tu ngoai vao trong m9t kh6i l?nh. Tuy nhien vi?c nhay tu trong m9t kh6i l?nh ra ngoai la hoan toan hgp I?. Vi dv nhu do~n chuang trinh sau la sai.
goto nl;
{
nl: printf("\n Gia tri cua N la: ");
} Vi d\J-: Tinh t6ng s=l +2+3+ .... + 10 #include "stdio.h" main() {