You are on page 1of 66

Chng 1

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

2004, HONG MINH SN

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

2004, HONG MINH SN

Chng 2: Cc yu t c bn ca C v C++

2.1 T chc chng trnh C/C++


Cu trc v cc phn t c bn ca mt chng trnh vit trn C/C++ Qui trnh to ra mt chng trnh chy c:

2004, HONG MINH SN

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++

2.1 T chc chng trnh C/C++


# Tin x l Khai bo th vin v macro Khai bo hm c s dng trong CT chnh

Khai bo bin, hm ...


void main() {

Chng trnh (CT) Thn hm chnh


2004, HONG MINH SN

Chng trnh chnh

nh ngha hm (thn hm)

nh ngha thn hm khai bo


4

Chng 2: Cc yu t c bn ca C v C++

Chng trnh tnh giai tha: Phin bn C


#include <stdio.h> #include <conio.h> int factorial(int); void main() { char c = 'N'; int N = 1; int kq; do { printf(\nEnter a number > 0:"); /* writing on the screen */ scanf("%d",&N); /* reading from keyboard to N */ kq = factorial(N); /* calling function with argument N */ printf(\nFactorial of %d is %d", N, kq); /*write result on screen */ printf(\nPress 'Y' to continue or any other key to stop"); c = getch(); /* reading a character from keyboard*/ } while (c=='y' || c=='Y'); /* checking loop condition */

2004, HONG MINH SN

} int factorial(int n) { int kq = 1; while (n > 1) kq *= n--; return kq; } 5

Chng 2: Cc yu t c bn ca C v C++

Chng trnh tnh giai tha: Phin bn C++


#include <iostream.h> #include <conio.h> int factorial(int); void main() { char c = 'N'; int N = 1; do { cout << \nEnter a number > 0: // writing on the screen cin >> N; // reading from keyboard to N int kq = factorial(N); // calling function with argument cout << \nFactorial of << N << is << kq cout << \nPress 'Y' to continue or any other key to stop"; c = getch(); // reading a character from keyboard } while (c == 'y' || c == 'Y'); // checking loop condition
2004, HONG MINH SN

int factorial(int n) { int kq = 1; while (n > 1) kq *= n--; return kq; } 6

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++

B sung file m ngun v son tho


Cc cng c bin dch v lin kt Ca s son tho

Ca s thng bo kt qu (bin dch,)

2004, HONG MINH SN

Ca s bn lm vic/ d n

Chng 2: Cc yu t c bn ca C v C++

Qui tc son tho m ngun


1. Tn bin, tn hm, tn kiu mi:
Trnh s dng cc t kha v tn kiu c s Cc k t dng c: A..Z, a..z, 0..9, _ Phn bit gia ch hoa v ch thng: n khc N Ngn nhng kh nng phn bit, gi nh nhn bit S dng ting Anh hoc ting Vit khng du (k c dng ch thch)

2004, HONG MINH SN

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

double else enum extern float for goto if

int long register return short signed sizeof static

struct switch typedef union unsigned void volatile while

Chng 2: Cc yu t c bn ca C v C++

10

T kha trong C++


asm case const delete enum float friend int new public short static_cast this typedef unsigned volatile auto catch const_cast else false dynamic_cast goto long operator register signed struct throw typeid using wchar_t bool break char class continue default extern do double explicit export for if inline mutable namespace private protected reinterpret_cast return sizeof static switch template true try typename union virtual void while
11

2004, HONG MINH SN

Chng 2: Cc yu t c bn ca C v C++

Bin dch (compile)


Bin dch tng file ngun ring bit (*.c: C compiler, *.cpp: C++ compiler), kt qu => *.obj Trong Visual C++: Gi Compile (Ctrl + F7) bin dch ring r hoc Build (F7) kt hp bin dch v lin kt cho ton b d n Cc kiu li bin dch (compile error):
Li c php: S dng tn sai qui nh hoc cha khai bo, thiu du chm phy ;, du ng } Li kiu: Cc s hng trong biu thc khng tng thch kiu, gi hm vi tham s sai kiu
2004, HONG MINH SN

Cc kiu cnh bo bin dch (warning):


T ng chuyn i kiu lm mt chnh xc Hm khai bo c kiu tr v nhng khng tr v S dng du = trong trng hp nghi vn l so snh ==
12

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

S dng hm nhng khng c nh ngha hm Bin hoc hm c nh ngha nhiu ln

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 Debug trong Visual C++:


2004, HONG MINH SN

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

2004, HONG MINH SN

Ngn xp (tham bin, bin cc b) Vng nh t do

k i count a

Chng 2: Cc yu t c bn ca C v C++

15

2.2 Bin v d liu


Biu thc = d liu + php ton + Biu din d liu: Thng qua bin hoc hng s, km theo kiu Ni dung trong phn ny:

2004, HONG MINH SN

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

2.2.1 Cc kiu d liu c bn ca C/C++


Kiu
char signed char unsigned char int signed int unsigned int short signed short unsigned short long signed long unsigned long float double long double bool (C++) wchar_t (C++)

Kch c thng dng (tnh bng bit)


8 8 8 16/32 16/32 16/32 16 16 16 32 32 32 32 64 80 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

2004, HONG MINH SN

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

Dch bit La chn Ly tha?

Chng 2: Cc yu t c bn ca C v C++

18

Tng thch v chuyn i kiu


Tng thch kiu => T ng chuyn i kiu
Gia cc kiu s nguyn vi nhau (lu phm vi gi tr) Gia cc kiu s thc vi nhau (lu chnh xc) Gia cc kiu s nguyn v s thc (lu phm vi gi tr v chnh xc) Kiu bool sang s nguyn, s thc: true => 1, false => 0 S nguyn, s thc sang kiu bool: 0 => true, 0 => false

Nu c li hoc cnh bo => khc phc bng cch p chuyn i kiu:


2004, HONG MINH SN

VD:
i = int(2.2) % 2; j = (int)2.2 + 2; // C++

Chng 2: Cc yu t c bn ca C v C++

19

Nhn nhn v chuyn i kiu

long int short char bool

long double double float

2004, HONG MINH SN

Chng 2: Cc yu t c bn ca C v C++

20

Nhn nhn v chuyn i kiu

long int short float double

long double

2004, HONG MINH SN

Chng 2: Cc yu t c bn ca C v C++

21

2.2.2 Khai bo bin


char bool int double long unsigned unsigned c = 'N'; Khai bo v khi to gi tr b = true; kq; Ch khai bo, gi tr bt nh d; count, i=0; Khai bo kt hp, ch i=0 vhexa=0x00fa; t gi tr u hexa voctal=082; t gi tr u octal -> 66 ch khng phi 82

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++

V d khai bo cc loi bin


Bin ton cc
int N = 1; void main() { char c = 'N'; do { printf(\nEnter a number > 0:"); scanf("%d",&N); int kq = factorial(N); // C++ only! ... } while (c == 'y' || c == 'Y') } int factorial(int n) { int kq = 1; while (n > 1) kq *= n--; return kq; }

Bin cc b

2004, HONG MINH SN

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; }

Bin static: c lu tr trong b nh d liu CT


Bin static cc b: hn ch truy nhp t bn ngoi hm Bin static ton cc: hn ch truy nhp t file khc
24

Chng 2: Cc yu t c bn ca C v C++

2.2.3 Hng s (trc kin)


Kiu
int long int unsigned int float double long double char bool wchar_t

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

2004, HONG MINH SN

Chng 2: Cc yu t c bn ca C v C++

25

2.3 Cc kiu d liu dn xut trc tip


Kiu lit k Kiu hng Kiu con tr Kiu mng Kiu tham chiu (C++)

2004, HONG MINH SN

Chng 2: Cc yu t c bn ca C v C++

26

2.3.1 Kiu lit k (enum)


Mc ch s dng:
nh ngha mt kiu l tp cc hng s nguyn k hiu S dng thun tin bng tn => hng s nguyn

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

2004, HONG MINH SN

Chng 2: Cc yu t c bn ca C v C++

S dng kiu lit k


/* C version */ void main() { enum Color c = Red; /* enum WeekDay d = Tue; /* int i=c, j=d; /* enum Color c2 = i+1; /* int di1 = 0x01; /* int di2 = DI_MOTOR1_STARTED;/* ++c; /* } // C++ version */ void main() { enum Color c = Red; // WeekDay d = Tue; // int i=c, j=d; // Color c2 = i+1; // Color c3 = Color(i+1); // int di1 = 0x01; // int di2 = DI_MOTOR1_STARTED;// ++c; // } c = 0 */ d = 3 */ j=0, i=3 */ c2 = 1 */ OK, but... */ this is better */ c = 1 */

C: Nh mt kiu s nguyn 8 bit

2004, HONG MINH SN

c = Red OK, d = Tue i=0, j=3 Error! OK, c3 = Green OK, but... this is better Error!

C++ Khng cn nh mt kiu s nguyn!

Chng 2: Cc yu t c bn ca C v C++

28

2.3.2 Kiu hng (const)


Cho php khai bo nh bin s, nhng c gn gi tr c nh bng mt hng s v khng th c thay i => khai bo hng s
void main() { const double pi = 3.1412; // initializing is OK! const int ci = 1; // initializing is OK! ci = 2; // error! ci = 1; // error, too! int i = ci; // const int is a subset of int const Color cc = Red; cc = Green; // error const double d; // potential error }
29

2004, HONG MINH SN

Chng 2: Cc yu t c bn ca C v C++

2.3.3 Kiu con tr


Con tr thc cht l mt bin cha a ch ca mt i tng c th l mt bin hoc mt hm.
int v = 2; int* p = &v; // p holds the address of v

Con tr p

Vng nh cha bin CT 0x000127c3

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

2.3.3 Kiu con tr


int i = 1; int* p = &i;// p holds the address of i *p = 2; // i = 2 int j; p = &j; // now p holds the address of j *p = 3; // j = 3, i remains 2

2004, HONG MINH SN

Chng 2: Cc yu t c bn ca C v C++

31

V d s dng kiu con tr


void main() { int i = 0; int* p = &i; int j = *p; *p = 2; p = &j; *p = 3; double d = i; p = &d; p = (*int)&d; // // // // // // // // // double* pd=0; // *pd = 0; // pd = &d; // double* pd2; // *pd2 = 0; // pd2 = &d; // p refers to the addesss of i j = 0 now i = 2 now p contains the addess of j now j = 3, i remains 2 OK, int is compatible to double error, int* isnt compatible to double* no compile error, but dangerous, meaningles type conversion! p contains the address 0 no compile error, but fatal error OK p refers to an uncertain address fatal error OK, pd and pd2 refer to the same addr.

2004, HONG MINH SN

}
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

2.3.4 Kiu mng


Ch s 0 1 2 ... N-1

a ch u

a ch cui

a ch u - a ch cui = N * kch c mt phn t

Cu trc d liu vi:


2004, HONG MINH SN

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

2004, HONG MINH SN

Khai bo vi s phn t v khi to gi tr cc phn t


int double char d[3]= {1, 2, 3}; e[5]= {1, 2, 3}; f[4]= {0};

Chng 2: Cc yu t c bn ca C v C++

35

Khai bo mng (tip)


Khai bo v khi to gi tr cc phn t, s phn t c t ng xc nh
int double double char a[]= b[]= c[]= s[]= {1, 2, 3, 4, 5}; {1, 2, 3}; {0}; {a};

Khai bo mng nhiu chiu


double M[2][3]; int X[2][]={{1,2},{3,4},{5,6}}; short T[2][2]={1,2,3,4,5,6};
2004, HONG MINH SN

Chng 2: Cc yu t c bn ca C v C++

36

V d s dng kiu mng


void main() { int a[5]; // a has 5 elements with uncertain values int b[5]= {1,3,5,7,9}; // 5 elements with initial values double c[]; // error, unspecified size double x = 1.0, y = 2.0; double d[]= {x,y,3.0}; // 3 elements with initial values short n = 10; double v[n]; // error, array size must be a constant! const int m=10; // C++ OK double v2[m]; // C++ OK a[0] = 1; int i= 1; a[i] = 2; a[5] = 6; // no compile error, but fatal error int k = a[5]; // no compile error, but fatal error a = {1,2,3,4,5}; // error a = b; // error, cannot assign array int M[2][3]; M[0][1] = 0; M[0][2] = 1; }
37

2004, HONG MINH SN

Chng 2: Cc yu t c bn ca C v C++

Mng c bit: Chui k t


Trong C/C++, chui k t khng phi l kiu c bn, m thc cht l mt mng Phn bit chui k t thng v chui k t kt 0
char city1[]= {'H','A','N',' ','O','I}; char city2[]= "HA NOI"; wchar_t city3[]= L"H NOI"; city2[] = HANOI; // error

2004, HONG MINH SN

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

2004, HONG MINH SN

Chng 2: Cc yu t c bn ca C v C++

Mng v con tr (tip)


void main() { int a[5]; int* p p[0] = p[1] = p+= 2; p[0] = p[1] = p[3] = }
2004, HONG MINH SN

= 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

2004, HONG MINH SN

Chng 2: Cc yu t c bn ca C v C++

2.3.5 Kiu tham chiu (C++)


Mt bin tham chiu l mt bin i din trc tip cho mt bin khc (thay cho con tr) ngha s dng ch yu v sau trong truyn tham s cho hm
void main() { double d = 2.0; double& r = d; // r represents d double *p1 = &d, *p2 = &r; r = 1.0; // OK, d = 1.0 double& r2; // error, r has to be assigned to a var. double& r3 = 0; // error, too double d2 = 0; r = d2; // r = 0, d=0 r = 1.0; // r = d = 1, d2 =0 }
42

2004, HONG MINH SN

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

2004, HONG MINH SN

Chng 2: Cc yu t c bn ca C v C++

2.4 nh ngha kiu d liu mi


Cu trc (struct): Tp hp nhng d liu hn hp, truy nhp theo tn (bin thnh vin). Thng dng nht trong C, ngha c m rng trong C++ Hp nht (union): Mt tn kiu chung cho nhiu d liu khc nhau (chim cng ch trong b nh). t thng dng trong c C v C++ Lp (class): Ch c trong C++, m rng struct c thm nhng hm thnh vin.
2004, HONG MINH SN

Chng 2: Cc yu t c bn ca C v C++

44

2.4.1 Cu trc (struct)


nh ngha cu trc (bn trong hoc ngoi cc hm)
struct Time Tn kiu mi { (khng trng lp) int hour; // gio int minute; // phut int second; // giay }; Cc bin thnh vin, khai bo c lp struct Date { hoc chung kiu int day, month, year; };
2004, HONG MINH SN

C++

struct Student { char name[32]; struct Date birthday; int id_number; };

Cc bin thnh vin c th cng kiu hoc khc kiu

Chng 2: Cc yu t c bn ca C v C++

45

Khai bo bin cu trc


void main() { Time classTime = {6,45,0}; Time lunchTime = {12}; Date myBirthday, yourBirthday = {30,4,1975}; Student I = {"Nguyen Van A", {2,9,1975}}; //...

2004, HONG MINH SN

Chng 2: Cc yu t c bn ca C v C++

46

S dng bin cu trc


/... void main() { Time classTime = {6,45,0}; Time lunchTime = {12}; Date myBirthday, yourBirthday = {30,4,1975}; Student I = {"Nguyen Van A", {2,9,1975}}; lunchTime.minute = 15; lunchTime.hour = classTime.hour + 6; Student U = I; // in C++ also possible: Student U(I); U.name[11] = 'B'; // "Nguyen Van B" U.id_number++; // 1 U.birthday.day = 30; // 30-9-1975 U.birthday.month = 4; // 30-4-1975 U.birthday = yourBirthday; // structs can be assigned }
47

2004, HONG MINH SN

Chng 2: Cc yu t c bn ca C v C++

Phn v d: khai bo v s dng cu trc


struct Time { int hour = 0; // error, initialization not allowed int minute, // error, use semicolon (;) instead int second // error, missing semicolon (;) } // error, missing semicolon (;) //... void main() { Date d; d = {11,9,2001}; // error, {...} is an initialization // list,not a structure Date.hour = 0; // error, Date is a type, not a var. struct Date2 { int day, month, year; }; Date2 d2 = d; // error, Date is not compatible to Date2 }

2004, HONG MINH SN

Chng 2: Cc yu t c bn ca C v C++

48

Mng, con tr v cu trc


Kt hp mng, con tr v cu trc cho php xy dng v s dng cc cu trc d liu phc tp mt cch rt linh hot
void main() { //... Date victoryDays[]= {{19,8,1945},{7,5,1954},{30,4,1975}}; Date saigonVictory= victoryDays[2]; Date *p=&saigonVictory; (*p).year += 30; // good p->year -=30; // better Student studentList[45]; for (int i=0; i < 45; ++i) { studentList[i].id_number= i; studentList[i].birthday=yourBirthday; } Student* pList = studentList; while (pList < studentList+45) { pList->id_number += 4800; ++pList; } }
49

2004, HONG MINH SN

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

2.5 iu khin CT: phn nhnh


Cc kiu phn nhnh
if .. else: Phn nhnh la chn mt hoc hai trng hp switch .. case: Phn nhnh la chn nhiu trng hp break: Lnh nhy kt thc (sm) mt phm vi return: Lnh nhy v kt thc (sm) mt hm goto: Lnh nhy ti mt nhn (khng nn dng!)

2004, HONG MINH SN

Chng 2: Cc yu t c bn ca C v C++

53

2.5.1 Cu trc if .. else


La chn mt trng hp: s dng if
if (npoints >= 60) cout << "Passed"; if (npoints >= 80 && npoints <= 90) { grade = A; cout << grade; }

Phn nhnh hai trng hp: s dng if .. else


if (npoints >= 90) cout << A; else if (npoints >= 80) cout << B; else if (npoints >= 70) cout << C; else if (npoints >= 60) cout << D; else cout << F;
54

2004, HONG MINH SN

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; }

2004, HONG MINH SN

Chng 2: Cc yu t c bn ca C v C++

55

2.5.2 Cu trc switch .. case


Signal input; int i = 0; while (i++ < 8) { input = readInput(i); // read from input module i switch (input.type) { case BINARY_8: cout << input.value.byte; break; case BINARY_16: cout << input.value.word; break; case ANALOG_1: cout << input.value.real; break; case ANALOG_2: cout << input.value.lreal; break; default: cout << "Unknown signal type"; } }
56

2004, HONG MINH SN

Chng 2: Cc yu t c bn ca C v C++

2.6 iu khin CT: vng lp


Cc kiu vng lp trong C/C++
while (condition) { } do { } while (condition) for (init;condition;post_action) { }

2004, HONG MINH SN

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

2.6.1 Cu trc while..


#include <iostream.h> void main() { char input[32]; cout << "\nEnter your full name:"; cin.getline(input,31); short nLetters=0, nSpaces=0; short i=0; while (input[i] != 0) { if (input[i] == ' ') ++nSpaces; else ++nLetters; ++i; } cout << "\nYour name has " << nLetters << " letters"; cout << "\nYou have " << nSpaces - 1 << " middle name"; cin >> i; }
58

2004, HONG MINH SN

Chng 2: Cc yu t c bn ca C v C++

Cu trc while: Biu thc iu kin


#include <iostream.h> void main() { char input[32], family_name[16]={0}; cout << "\nEnter your full name:"; cin.getline(input,31); short i=0; while (input[i] != 0 && input[i] != ' ') { 0) { family_name[i]= input[i]; if (input[i] == ' ') break; ++i; family_name[i]= input[i]; ++i; } } cout << "\nYour family name is " << family_name; cin >> i; }

2004, HONG MINH SN

Chng 2: Cc yu t c bn ca C v C++

59

2.6.2 Cu trc do while...


#include <iostream.h> void main() { char input[32], family_name[16]={0}; short i; do { cout << "\nEnter your full name:"; cin.getline(input,31); i = 0; while (input[i] != 0 && input[i] != ' ') { family_name[i]= input[i]; ++i; } cout << "\nYour family name is " << family_name; cout << "\nDo you want to continue? (Y/N):; cin >> i; } while (i == Y || i == N) }

2004, HONG MINH SN

Chng 2: Cc yu t c bn ca C v C++

60

2.6.3 Cu trc for ..


short i =0; while (input[i]!= 0) { if (input[i]==' ') ++nSpaces; else ++nLetters; ++i; } short i=0; for (;input[i]!= 0;) { if (input[i]==' ') ++nSpaces; else ++nLetters; ++i; } for (short i=0;input[i]!=0; ++i) { if (input[i] == ' ') ++nSpaces; else ++nLetters; }

2004, HONG MINH SN

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

2004, HONG MINH SN

Chng 2: Cc yu t c bn ca C v C++

Luyn tp nh theo sn bi ging


Tp to d n mi vi Visual C++ Tp vit mt chng trnh bng C (t ui *.c):
tp khai bo cc loi bin, s dng cc kiu d liu c bn tp s dng cc php ton hc s dng ton t sizeof tm kch c cc kiu d liu, in kt qu ra mn hnh bin dch, chy th v tm li tp s dng cng c debugger i ui file thnh *.cpp v th li
2004, HONG MINH SN

Tp vit mt chng trnh bng C/C++ khc tm hiu:


Cch khai bo v s dng kiu hng, kiu lit k, kiu con tr, kiu mng, kiu tham chiu (C++), kiu cu trc bn cht ca con tr v quan h vi kiu mng
63

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

2004, HONG MINH SN

Chng 2: Cc yu t c bn ca C v C++

Bi tp ln 1 (tun 1-6: Lp trnh cu trc)


1. Xy dng mt chng trnh c chc nng to tn hiu theo yu cu ngi s dng v dng tn hiu (bc thang, tn hiu dc, xung vung, hnh sin hoc n trng), tham s ca tn hiu (ty theo dng tn hiu chn nh bin , tn s, dc, rng xung,...). Yu cu ngi s dng nhp khong thi gian cn to gi tr tn hiu cng thi gian trch mu, sau ghi cc gi tr gin on ca tn hiu ra mt file vi tn do ngi s dng nhp. Gi : s dng th vin <fstream.h> cho vic thao tc vi file. 2. Xy dng mt chng trnh tnh tch phn ca tn hiu (hay tnh din tch di ng cong) bng phng php xp x hnh thang vi cc gi tr gin on ca tn hiu a vo t file to ra theo chng trnh 1. 3. Suy ngh phn hoch chng trnh 1 v 2 thnh cc hm a vo th vin. Vit li cc chng trnh theo thit k mi.
65

2004, HONG MINH SN

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

2004, HONG MINH SN

Chng 2: Cc yu t c bn ca C v C++

You might also like