Professional Documents
Culture Documents
K thut lp trnh
Chng 2: Cc yu t c bn ca C v C++
0101010101010101100001 0101010101010101100001 StateController 0101010100101010100101 0101010100101010100101 1010011000110010010010 1010011000110010010010 start() 1100101100100010000010 1100101100100010000010 stop() 0101010101010101100001 0101010101010101100001 0101010100101010100101 0101010100101010100101 1010011000110010010010+ B*u; 1010011000110010010010 y = A*x 1100101100100010000010+ d*u; 1100101100100010000010 x = C*x LQGController 0101010101010101100001 0101010101010101100001 0101010100101010100101 0101010100101010100101 start() 1010011000110010010010 stop() 1010011000110010010010 1100101100100010000010 1100101100100010000010
8/19/2006
Ni dung chng 2
2.1 2.2 2.3 2.4 2.5 2.6 2.7 T chc chng trnh C/C++ Bin v cc kiu d liu c bn Cc kiu d liu dn xut trc tip nh ngha kiu d liu mi iu khin chng trnh: phn nhnh iu khin chng trnh: vng lp Mt s lnh iu khin chng trnh khc
Chng 2: Cc yu t c bn ca C v C++
Vn to d n Qui tc son tho m ngun Bin dch tng phn v sa cc loi li bin dch Lin kt v s dng th vin, sa li lin kt Chy th v g ri (Debug)
S lc v t chc b nh
Chng 2: Cc yu t c bn ca C v C++
Chng 2: Cc yu t c bn ca C v C++
Chng 2: Cc yu t c bn ca C v C++
Chng 2: Cc yu t c bn ca C v C++
To d n
1
2
2004, HONG MINH SN
Chng 2: Cc yu t c bn ca C v C++
Ca s bn lm vic/ d n
Chng 2: Cc yu t c bn ca C v C++
2. Sau mi cu lnh c chm phy; 3. on { } c coi l nhm lnh, khng c du chm phy sau , tr trng hp khai bo kiu 4. Cu trc m ngun theo kiu phn cp => d c 5. B sung ch thch y , hp l (/* */ hoc //) 6. Chia mt file ln thnh nhiu file nh
9
Chng 2: Cc yu t c bn ca C v C++
Cc t kha trong C
auto break case char const continue default do
2004, HONG MINH SN
Chng 2: Cc yu t c bn ca C v C++
10
Chng 2: Cc yu t c bn ca C v C++
Chng 2: Cc yu t c bn ca C v C++
Lin kt (link)
MyProg.obj MyLib1.obj MyLib2.obj xx.obj yy.lib
MyProg.exe
Lin kt l qu trnh ghp nhiu file ch (*.obj, *.lib) to ra chng trnh chy cui cng *.exe Trong Visual C++: Gi Build (F7) Li lin kt c th l do:
2004, HONG MINH SN
Chng 2: Cc yu t c bn ca C v C++
13
Chy th v g ri (debug)
Chy th trong Visual C++: Execute hoc Ctrl+F5 Tm li:
Li khi chy l li thuc v phng php, t duy, thut ton, khng phi v c php Li khi chy bnh thng khng c bo Li khi chy rt kh pht hin, v th trong a s trng hp cn tin hnh debug.
Chy ti ch t cursor: Ctrl+F10 Chy tng dng lnh: F10 Chy vo trong hm: F11 Chy tip bnh thng: F5 Xem kt qu di ca s Output hoc gi QuickWatch
14
Chng 2: Cc yu t c bn ca C v C++
T chc b nh
H iu hnh Cc CT khc M chng trnh D liu ton cc Vng nh t do
nh ngn xp SP
n Matran_A f
k i count a
Chng 2: Cc yu t c bn ca C v C++
15
Cc kiu d liu c bn Cc php ton p dng Tng thch v chuyn i kiu Khai bo bin, phn loi bin
Chng 2: Cc yu t c bn ca C v C++
16
Phm vi ti thiu
127 to 127 127 .. 127 0 .. 255 32767 .. 32767 -nt0 .. 65535 32767 .. 32767 nt 0 .. 65535 2147483647..2147483647 - nt0 .. 4294967295 chnh xc 6 ch s chnh xc 15 ch s chnh xc 17 ch s 32767 .. 32767
17
Chng 2: Cc yu t c bn ca C v C++
Cc php ton c bn
Php ton K hiu Gn S hc = +, -, *, /, +=, -=, *=, /= %, %= ++, -So snh Logic Logic bit
2004, HONG MINH SN
Kiu nguyn X X X X X X X X X
Kiu s thc X X
Kiu bool X x x x
>, <, >=, <=, ==, != &&, ||, ! &, |, ^, ~ &=, |=, ^= <<,>>, <<=,>>= ? : Khng c!
X X
X X x x
Chng 2: Cc yu t c bn ca C v C++
18
VD:
i = int(2.2) % 2; j = (int)2.2 + 2; // C++
Chng 2: Cc yu t c bn ca C v C++
19
Chng 2: Cc yu t c bn ca C v C++
20
long double
Chng 2: Cc yu t c bn ca C v C++
21
C: Ton b bin phi khai bo ngay u thn hm C++: C th khai bo ti ch no cn, trc khi s dng Phn loi bin:
2004, HONG MINH SN
Bin ton cc: Khai bo ngoi hm, lu gi trong vng nh d liu chng trnh Bin cc b: Khai bo trong thn hm, lu gi trong ngn xp Tham bin: Khai bo trn danh sch tham s ca hm, lu gi trong ngn xp
22
Chng 2: Cc yu t c bn ca C v C++
Bin cc b
Hai bin cc b cng tn hai phm vi khc nhau, khng lin quan g n nhau!
Tham bin
23
Chng 2: Cc yu t c bn ca C v C++
c tnh lu gi
Bin extern: Khai bo s dng bin ton cc c nh ngha v gn gi tr trong mt tp tin khc
/* file1.c */ int x, y; char ch; void main() { /* ... */ } void func1(void) { x = 123; }
2004, HONG MINH SN
/* file2.c */ extern int x, y; extern char ch; void func22() { x = y / 10; } void func23() { y = 10; }
Chng 2: Cc yu t c bn ca C v C++
V d
1 123 21000 234 0x0A 081 35000L 34l 234L 0x0AL 081L 10000U 987u 40000u 123.23F 4.34e3f .1f 123.23 1.0 0.9876324 .1e10 1001.2L A B a \n \t \b true false LA LB
Chng 2: Cc yu t c bn ca C v C++
25
Chng 2: Cc yu t c bn ca C v C++
26
V d
enum Color {Red, Green, enum WeekDay { Mon = 2, Tue, Wed, Thu, Fri, Sun = 1 }; enum { DI_MOTOR1_STARTED = DI_MOTOR1_RUNNING = DI_MOTOR2_STARTED = DI_MOTOR2_RUNNING = DI_PUMP1_STARTED = DI_PUMP1_RUNNING = DI_OVERLOADED = DI_VALVE1_OPENED = }; Blue}; Sat, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80
27
Chng 2: Cc yu t c bn ca C v C++
c = Red OK, d = Tue i=0, j=3 Error! OK, c3 = Green OK, but... this is better Error!
Chng 2: Cc yu t c bn ca C v C++
28
Chng 2: Cc yu t c bn ca C v C++
Con tr p
p:
2004, HONG MINH SN
&v
v:
cha a ch ca bin v
Chng 2: Cc yu t c bn ca C v C++
30
Chng 2: Cc yu t c bn ca C v C++
31
}
32
Chng 2: Cc yu t c bn ca C v C++
Tm tt s b v con tr
Con tr l mt bin cha a ch byte u ca mt bin d liu, c s dng truy cp gin tip d liu Sau khi khai bo m khng khi to, mc nh con tr mang mt a ch bt nh a ch con tr mang c th thay i c => con tr c th mi lc i din cho mt bin d liu khc Ton t ly a ch ca mt bin (&) tr v con tr vo kiu ca bin => thng gn cho bin con tr Ton t truy nhp ni dung (*) p dng cho con tr tr v bin m con tr mang a ch => c th c hoc thay i gi tr ca bin
2004, HONG MINH SN
Khng bao gi s dng ton t truy nhp ni dung, nu con tr cha mang mt a ch nh m chng trnh c quyn kim sot
Chng 2: Cc yu t c bn ca C v C++
33
a ch u
a ch cui
S lng cc phn t c nh Cc phn t c cng kiu Cc phn t c sp xp k tip trong b nh C th truy nhp tng phn t mt cch t do theo ch s hoc theo a ch
Chng 2: Cc yu t c bn ca C v C++
34
Khai bo mng
S phn t ca mng phi l hng s nguyn (trong C phi l mt trc kin, trong C++ c th l kiu const ...) Khai bo khng khi to:
int enum double const int char a[3]; {index = 5}; b[index]; N = 2; c[N]; // C++ only
Chng 2: Cc yu t c bn ca C v C++
35
Chng 2: Cc yu t c bn ca C v C++
36
Chng 2: Cc yu t c bn ca C v C++
a s cc hm trong th vin C lm vic vi chui k t kt 0 Vi C++, chui k t c nh ngha bng lp string trong th vin chun, khng s dng byte kt 0
38
Chng 2: Cc yu t c bn ca C v C++
Mng v con tr
void main() { int a[5]; int* p; p = a; p = &a[0]; *p = 1; ++p; *p = 2; p++; *p = 3; p += 2; *p = 5; ++p; *p = 6; a = p; }
39
// a has 5 elements with // uncertain values // // // // // // // // // // // // p refers to a[0] the same as above a[0]=1 now p points to a[1] a[1]=2 now p points to a[2] a[2]=3 now p points to a[4] a[4] = 5 OK, no problem until we dereference it Now is a BIG BIG problem! error, a is like a constant pointer
Chng 2: Cc yu t c bn ca C v C++
= a; 1; 2; 3; 4; 6;
// // // // // // // // //
a has 5 elements with uncertain values p points to a[0] a[0]=1 a[1]=2 now p points to a[2] a[2]=3 a[3]=4 a[5]=6, Now is a BIG BIG problem!
Chng 2: Cc yu t c bn ca C v C++
40
Tm lc v mng
Mng l mt tp hp cc d liu cng kiu, sp xp lin k trong b nh => cc phn t ca mng C th truy cp cc phn t mng vi bin mng km theo ch s hoc vi bin con tr (theo a ch ca tng phn t) S phn t ca mng l c nh (khi khai bo phi l hng s), khng bao gi thay i c Bin mng (tnh) thc cht l mt con tr hng, mang a ch ca phn t u tin C th t gi tr u cho cc phn t ca mng qua danh sch khi to, khng bao gi gn c mng cho nhau. Nu cn sao chp hai mng th phi s dng hm Khng bao gi c php truy nhp vi ch s nm ngoi phm vi, nu N l s phn t th phm vi cho php l t 0..N-1 Con tr khng bao gi l mt mng, n ch c th mang a ch ca mt mng v s dng qun l mng (d l ng hay tnh)
41
Chng 2: Cc yu t c bn ca C v C++
Chng 2: Cc yu t c bn ca C v C++
2.3.6 Typedef
T kha typedef to ra mt tn mi cho mt kiu c sn, khng nh ngha mt kiu mi ngha: a tn mi d nh, ph hp vi ng dng c th, d thay i v sau
typedef float REAL; typedef int AnalogValue; typedef int Vector[10]; typedef AnalogValue AnalogModule[8]; typedef int* IPointer; AnalogValue av1 = 4500; Vector x = {1,2,3,4,5,6,7,8,9,10}; AnalogModule am1 = {0}; IPointer p = &av1;
43
Chng 2: Cc yu t c bn ca C v C++
Chng 2: Cc yu t c bn ca C v C++
44
C++
Chng 2: Cc yu t c bn ca C v C++
45
Chng 2: Cc yu t c bn ca C v C++
46
Chng 2: Cc yu t c bn ca C v C++
Chng 2: Cc yu t c bn ca C v C++
48
Chng 2: Cc yu t c bn ca C v C++
Tm lc v cu trc (struct)
Cu trc (struct) c s dng nhm cc d liu lin quan m t mt i tng, cc d liu c th cng hoc khc kiu nh ngha kiu cu trc bng cch khai bo tn cc bin thnh vin. nh ngha kiu cu trc cha phi l nh ngha cc bin c th, v th khng c t gi tr u cho cc bin Kch c ca cu trc >= tng kch c cc thnh vin Truy cp mt bin cu trc thng qua tn bin, ton t (.) v tn bin thnh vin Cc kiu cu trc c th lng vo nhau, trong cu trc c th s dng mng, mt mng c th c cc phn t l cu trc, v.v...
2004, HONG MINH SN
Cc bin c cng kiu cu trc c th gn cho nhau, c th s dng khi to cho nhau (khc hn vi mng) C th s dng con tr truy nhp d liu cu trc thng qua ton t (*.) v ton t (->) Hai kiu cu trc c khai bo ging nhau hon ton vn l hai kiu cu trc khc nhau
50
Chng 2: Cc yu t c bn ca C v C++
2.4.2 Hp nht
enum SignalType {BINARY_8, BINARY_16, ANALOG_1, ANALOG_2}; union SignalValue { unsigned short word; unsigned char byte; float real; double lreal; }; struct Signal { SignalType type; SignalValue value; }; void main() { SignalValue B,W; B.byte = 0x01; W.word = 0x0101; unsigned char b = W.byte; // OK, the lower byte float f = W.real; // meaningless Signal DI1 = {BINARY_8, 0x11}; Signal AI1 = {ANALOG_1,{0}}; Signal AI2; AI2.type = ANALOG_2; AI2.value.lreal = 145.67; }
2004, HONG MINH SN
Chng 2: Cc yu t c bn ca C v C++
51
Tm lc v hp nht
Hp nht (union) l mt tp hp (khng c cu trc cht ch) cha cc bin s dng chung nh, mi ng cnh ch s dng mt bin ring bit Union thng c s dng khi d liu u vo c th c kiu khc nhau Cc thnh vin ca mt union khng lin quan n nhau, khng cng nhau to thnh mt thc th thng nht Kch c ca union bng kch c ca bin ln nht Khai bo kiu union tng t nh khai bo struct, nhng ngha khc hn
2004, HONG MINH SN
Truy nhp bin thnh vin cng tng t nh struct, c th qua bin trc tip hoc qua bin con tr. Union c th cha struct, struct c th cha union, union c th cha mng, cc phn t ca mng c th l union.
Chng 2: Cc yu t c bn ca C v C++
52
Chng 2: Cc yu t c bn ca C v C++
53
Chng 2: Cc yu t c bn ca C v C++
V d: Hm max()
int max1(int a, int b) { int c; if (a > b) c = a; else c = b; return c; } int max2(int a, int b) { int c = a; if (a < b) c = b; return c; } int max3(int a, int b) { if (a < b) a = b; return a; } int max4(int a, int b) { if (a > b) return a; else return b; } int max5(int a, int b) { if (a > b) return a; return b; } int max6(int a, int b) { return (a > b)? a: b; }
Chng 2: Cc yu t c bn ca C v C++
55
Chng 2: Cc yu t c bn ca C v C++
Vng lp c th thc hin vi if..else + goto, song khng bao gi nn nh vy ng dng vng lp ch yu trong lm vic vi mng v cc cu trc d liu tng qut khc => truy nhp qua bin mng + ch s, qua con tr hoc qua iterator (s cp sau ny)
Chng 2: Cc yu t c bn ca C v C++
57
Chng 2: Cc yu t c bn ca C v C++
Chng 2: Cc yu t c bn ca C v C++
59
Chng 2: Cc yu t c bn ca C v C++
60
short i=0; for (;input[i]!=0; ++i) { if (input[i] == ' ') ++nSpaces; else ++nLetters; }
61
Chng 2: Cc yu t c bn ca C v C++
Tm lc cc cu trc vng lp
Cc cu trc vng lp while v for tng t nh nhau, thc ra ta ch cn mt trong hai Cu trc do..while tuy c ngha khc mt cht, song cng c th chuyn v cu trc while hoc for Cc cu trc c th lng vo nhau tng i t do, tuy nhin trnh lng qu nhiu cn d bao qut, khi cn c th phn hoch li thnh hm iu khin vng lp c th nm trc tip trn iu kin, hoc c th kt hp bn trong vng lp vi cc lnh if..else v break, return Thn trng trong kim tra iu kin vng lp (ch s mng, con tr, ...)
62
Chng 2: Cc yu t c bn ca C v C++
Chng 2: Cc yu t c bn ca C v C++
Bi tp v nh cho chng 2
1. Vit mt chng trnh bng C, thc hin ln lt cc chc nng sau y: yu cu ngi s dng nhp mt s nguyn ln hn 0 phn tch s nguyn thnh hng n v, hng chc, hm trm, v.v... v in kt qu ln lt ra mn hnh. hi ngi s dng c yu cu tip tc hay khng, nu c yu cu th lp li 2. Chuyn chng trnh thnh C++ v n gin ha cc cu lnh vo-ra bng cch s dng th vin <iostream.h> 3. Da vo kiu Date trong bi ging, vit mt chng trnh cho php ngi s dng nhp s liu cho mt ngy, v sau : a) Kim tra cc s liu ngy, thng v nm c hp l hay khng b) Kim tra xem ngy c phi l mt ngy l trong nm hay khng c) Xc nh ngy tip theo l ngy no d) In cc kt qu thng bo ra mn hnh
64
Chng 2: Cc yu t c bn ca C v C++
Chng 2: Cc yu t c bn ca C v C++
Ch dn v thc hin bi tp ln
Bi tp ln c th thc hin ring hoc theo nhm t chn (ti a 3 ngi/nhm) Bi tp ln 1 np vo cui tun 7, bao gm: M t theo mu trn t nht 1 trang giy v cc t tng phn tch, thit k v thc thi. Ton b th mc d n (file d n, m ngun v chng trnh chy) cn nn li di dng *.zip v gi v a ch email ca gio vin: luuhongviet@gmail.com. Qui nh tn file zip: bt u bng P1_, tip theo l tn y ca ngi i din nhm, v d P1_NguyenVanA.zip. Lu trc khi nn cn xa tt c cc file ph trong th mc Debug, ch tr file *.exe. Hon thnh bi tp ln khng nhng l iu kin d thi hc k, m im bi tp ln cn c tnh vo im cui hc k theo mt h s thch hp
66
Chng 2: Cc yu t c bn ca C v C++