際際滷

際際滷Share a Scribd company logo
Nguy畛n C担ng Huy  Khoa CNTT&TT 1
CC 畉C I畛MCC 畉C I畛M
C畛A C++C畛A C++
 C叩c kh叩i ni畛m c董 b畉n c畛a C++
 L畉p tr狸nh c畉u tr炭c trong C++
 C叩c 畉c i畛m m畛i c畛a C++
Ch動董ng 1Ch動董ng 1::
Nguy畛n C担ng Huy  Khoa CNTT&TT 2
N畛i dungN畛i dung
 C叩c kh叩i ni畛m c董 b畉n trong C++
 C畉u tr炭c i畛u khi畛n
 Hm v c畉u tr炭c ch動董ng tr狸nh
 Con tr畛 v chu畛i k箪 t畛
 Tham s畛 m畉c nhi棚n c畛a hm
 T叩i 畛nh ngh挑a hm
 Hm t畉i ch畛 (inline)
 Truy畛n tham s畛
 Tham chi畉u
 Struct
Nguy畛n C担ng Huy  Khoa CNTT&TT 3
C叩c kh叩i ni畛m c董 b畉n
 T畛 kh坦a
 Dnh ri棚ng cho ng担n ng畛  kh担ng 動畛c 畉t t棚n
tr湛ng v畛i t畛 kh坦a.
 L ch畛 th動畛ng
VD : char, int, return, for, else, const, static
 T棚n
 Ph但n bi畛t ch畛 HOA v ch畛 th動畛ng
 G畛m ch畛, s畛, _ v ph畉i b畉t 畉u b畉ng ch畛 c叩i.
 畛 di t畛i a l 32
 N棚n theo quy c叩ch 畉t t棚n.
VD: x, hoten, a1, num_of_var, Delta, TEN, ...
Nguy畛n C担ng Huy  Khoa CNTT&TT 4
C叩c kh叩i ni畛m c董 b畉n
 Ki畛u d畛 li畛u
T棚n ki畛uT棚n ki畛u K鱈ch th動畛cK鱈ch th動畛c Ph畉m viPh畉m vi
char 1 byte -128  127
unsigned char 1 byte 0  255
int 2 bytes -32768  32767
unsigned int 2 bytes 0  65535
short 2 bytes 0  65535
long 4 bytes -2
31
 2
31
- 1
unsigned long 4 bytes 0  2
32
- 1
float 4 bytes 1.2e
-38
 3.4e
38
double 8 bytes 2.2e
-308
 1.8e
308
Nguy畛n C担ng Huy  Khoa CNTT&TT 5
C叩c kh叩i ni畛m c董 b畉n
 Bi畉n
 Khai b叩o : b畉t k畛 v畛 tr鱈 no trong ch動董ng tr狸nh
 Kh畛i t畉o : c坦 th畛 v畛a khai b叩o v kh畛i t畉o
VD: int x=5, y=10;
for( int i=0, tong =0 ; i<10 ; i++)
tong +=i ;
 Bi畉n khai b叩o trong 1 kh畛i l畛nh : ch畛 c坦 ph畉m
vi ho畉t 畛ng trong kh畛i l畛nh 坦.
VD: if( delta >0 ) {
float x1= (-b + sqrt(delta)) / (2*a);
float x2= (-b - sqrt(delta)) / (2*a);
...
}
Nguy畛n C担ng Huy  Khoa CNTT&TT 6
C叩c kh叩i ni畛m c董 b畉n
 Bi畉n
 Bi畉n ton c畛c : c坦 t叩c d畛ng trong ton b畛 CT.
 Bi畉n 畛a ph動董ng (c畛c b畛): ch畛 c坦 t叩c d畛ng
trong ph畉m vi c畛a n坦.
VD: int so = 5;
void GanSo(int x) {
so = x;
}
int NuaSo(int x) {
int c=2;
int so =x/c ;
return so;
}
Nguy畛n C担ng Huy  Khoa CNTT&TT 7
C叩c kh叩i ni畛m c董 b畉n
 H畉ng
 Khai b叩o :
VD: #define MAX 100
const int MAX=100;
 M畛t s畛 h畉ng quan tr畛ng :
 S畛 nguy棚n: 10 , -5, 300000, 1000L, ...
 S畛 th畛c : 3.1416, .5 , 123E-5, ...
 K箪 t畛 : char ch1 = A , ch2=97;
 Chu畛i k箪 t畛 :
char *str=Chuoi Ky Tu;
char chuoi[50]; strcpy(chuoi, );
if ( strcmp(chuoi,)==0)
cout << Chuoi rong;
Nguy畛n C担ng Huy  Khoa CNTT&TT 8
C叩c kh叩i ni畛m c董 b畉n
 Ki畛u
 Chuy畛n 畛i ki畛u :
 M畉c nhi棚n (t畛 畛ng) :
float x = 3.1416;
int y = x ; float sole = x - y;
 Do ng動畛i l畉p tr狸nh s畛 d畛ng :
C炭 ph叩p: ( Ki畛u ) bi畛u th畛c( Ki畛u ) bi畛u th畛c
ho畉c Ki畛u ( bi畛u th畛c )Ki畛u ( bi畛u th畛c )
V鱈 d畛:
int a=10, b=3;
float c1 = a / b ;
float c2 = float (a/b);
float c3 = (float) a / b ;
float c4 = float (a)/b;
Nguy畛n C担ng Huy  Khoa CNTT&TT 9
C叩c kh叩i ni畛m c董 b畉n
 C叩c ph辿p to叩n
 S畛 h畛c: + , - , * , / , %
 Lu畉n l箪: ==, !=, >, <, >=, <=, &&, ||, !
 G叩n : =
 L畉y k鱈ch th動畛c: sizeof (畛i t動畛ng d畛 li畛u )
 i畛u ki畛n : e1 ? e2 : e3
 L畉y 畛a ch畛 : &(bi畉n)
 Tng gi畉m :
x++ , x-- , ++x , --x
tong+= i ; tich *= i;
/= , %= , -= , &= , |= , ^=
Nguy畛n C担ng Huy  Khoa CNTT&TT 10
C叩c kh叩i ni畛m c董 b畉n
 M畉ng
 Khai b叩o :
<Ki畛u> <T棚n m畉ng> [<K鱈ch th動畛c>];<Ki畛u> <T棚n m畉ng> [<K鱈ch th動畛c>];
VD : int m[10]; float ds[MAX];
 S畛 d畛ng : ph辿p to叩n l畉y gi叩 tr畛 ph畉n t畛.
 Th畛 t畛 ph畉n t畛 : t畛 0 畉n (k鱈ch th動畛c -1)
VD: // CT t鱈nh t畛ng c畛a 10 s畛 Fibonacci 畉u ti棚n
long a[10]; a[0]=a[1]=1;
for (int i=2; i<10 ; i++)
a[i] = a[i-1] + a[i-2];
long tong=0;
for(i=0 ; i<10 ; i++)
tong+=a[i];
Nguy畛n C担ng Huy  Khoa CNTT&TT 11
C叩c kh叩i ni畛m c董 b畉n
 Ch炭 th鱈ch
 Tr棚n 1 d嘆ng :
// ch炭 th鱈ch tr棚n 1 d嘆ng
 Tr棚n nhi畛u d嘆ng :
/* ch炭 th鱈ch tr棚n nhi畛u d嘆ng */
 C叩c ch畛 th畛 ti畛n bi棚n d畛ch :
# define # undefine # include
# if # else # endif
# if # elif # else # endif
# ifdef # else # endif
# ifndef # else # endif
# error
Nguy畛n C担ng Huy  Khoa CNTT&TT 12
C叩c kh叩i ni畛m c董 b畉n
 Nh畉p xu畉t
 Th動 vi畛n hm : # include <iostream.h>
 Nh畉p : cin >> Bi畉ncin >> Bi畉n
 Xu畉t : cout << (Bi畛u th畛c)cout << (Bi畛u th畛c)
 C叩c ki畛u d畛 li畛u c坦 th畛 nh畉p xu畉t :
char , int, unsigned, long, unsigned long, 
float, double, char* , char []
(void*): l畉y 畛a ch畛 畉u c畛a chu畛i
 C坦 th畛 nh畉p xu畉t li棚n t畛c tr棚n m畛t d嘆ng.
VD: cout << Gia tri x =  << x <<  , y =  <<y;
cout << Nhap n = ; cin >> n;
Nguy畛n C担ng Huy  Khoa CNTT&TT 13
C叩c kh叩i ni畛m c董 b畉n
 Nh畉p xu畉t
 M畛t s畛 hm 畛nh d畉ng ton c畛c:
 cin.width(n)
 cout.width(n)
 cout.precision(n)
 cin.seekg(n)
 K箪 t畛 畉c bi畛t : n, t, 0, b, r
 畛nh d畉ng kh叩c: endl, ends, flush, 
 Nh畉p chu畛i :
 gets(char* str);
 cin.getline(char* str, int n);
Nguy畛n C担ng Huy  Khoa CNTT&TT 14
C叩c kh叩i ni畛m c董 b畉n
 C畉u tr炭c 1 ch動董ng tr狸nh 董n gi畉n
Nguy畛n C担ng Huy  Khoa CNTT&TT 15
C畉u tr炭c i畛u khi畛n
 Tu畉n t畛
 C但u l畛nh : vi畉t tr棚n m畛t hay nhi畛u d嘆ng
 Kh畛i l畛nh :
 L d達y c叩c l畛nh vi畉t trong c畉p { }
 T動董ng 動董ng v畛i 1 c但u l畛nh
 Gi叩 tr畛 c畛a bi畛u th畛c i畛u ki畛n
 B畉ng 0 : <=> SAI
 Kh叩c 0 : <=> 炭ng
VD: int x=0;
if(x=2)
cout<<  x bang 2 ;
else
cout<<  x khac 2 ;
Nguy畛n C担ng Huy  Khoa CNTT&TT 16
C畉u tr炭c i畛u khi畛n
 R畉 nh叩nh
 if (bi畛u th畛c)
L畛nh 1;
else
L畛nh 2;
 switch (bi畛u th畛c) {
case gi叩 tr畛 1 : L畛nh 1; ... [ break; ]
case gi叩 tr畛 2 : L畛nh 2; ... [ break; ]
...
case gi叩 tr畛 n : L畛nh n; ... [ break; ]
default : L畛nh n+1;
}
Nguy畛n C担ng Huy  Khoa CNTT&TT 17
C畉u tr炭c i畛u khi畛n
 L畉p
 while (bi畛u th畛c)
L畛nh ;
 do
L畛nh ;
while (bi畛u th畛c);
 for ( e1 ; e2 ; e3 )
L畛nh;
e1 : bi畛u th畛c kh畛i t畉o
e2 : bi畛u th畛c i畛u ki畛n
e3 : bi畛u th畛c l畉p
Nguy畛n C担ng Huy  Khoa CNTT&TT 18
C畉u tr炭c i畛u khi畛n
 T畛 kh坦a break
 Tho叩t ra kh畛i c畉u tr炭c switch
 Tho叩t ra kh畛i v嘆ng l畉p : while, do while, for
 T畛 kh坦a continue: Tr畛 v畛 畉u v嘆ng l畉p
 L畛nh nh畉y goto
 D湛ng chung v畛i nh達n l畛nh
 Kh担ng n棚n s畛 d畛ng v狸 s畉 ph叩 v畛 c畉u tr炭c CT
 働u i畛m : tho叩t kh畛i c叩c v嘆ng l畉p l畛ng s但u
Nguy畛n C担ng Huy  Khoa CNTT&TT 19
Hm v c畉u tr炭c ch動董ng tr狸nh
 Hm
 C炭 ph叩p :
<Ki畛u tr畉 v畛> <T棚n hm> (Danh s叩ch ki畛u v tham s畛)
{ [ Khai b叩o d畛 li畛u c畛c b畛 ]
[ Th但n hm ]
[ C但u l畛nh return ]
}
VD: int Max ( int x, int y) {
int somax;
somax = (x>y) ? x : y;
return somax;
}
Nguy畛n C担ng Huy  Khoa CNTT&TT 20
Hm v c畉u tr炭c ch動董ng tr狸nh
 Hm
 Khai b叩o prototype :
<Ki畛u tr畉 v畛> <T棚n hm> ( Danh s叩ch ki畛u );
VD: int Max ( int , int );
int Min ( int , int );
void main() {
int a =10 , b =5;
cout<<So max= << Max(a,b)<<endl;
cout<<So min= << Min(a,b)<<endl;
}
int Max (int x , int y) { ... }
int Min (int x , int y) { ... }
Nguy畛n C担ng Huy  Khoa CNTT&TT 21
Hm v c畉u tr炭c ch動董ng tr狸nh
 Hm
 C叩ch g畛i :
T棚n hm(tham s畛 theo th畛 t畛 t畛 tr叩i sang)
 Tham s畛 v 畛i s畛:
int Max ( int x, int y) {
if(x>y) return x;
return y;
}
void main() {
int a =10 , b = 5;
cout<<So max= << Max ( a , b ) << endl;
}
Tham s畛 (h狸nh th畛c)
畛i s畛
(Tham s畛 th畛c t畉)
Nguy畛n C担ng Huy  Khoa CNTT&TT 22
Hm v c畉u tr炭c ch動董ng tr狸nh
 C畉u tr炭c ch動董ng tr狸nh
 Ch動董ng tr狸nh theo d畉ng l畉p tr狸nh c畉u tr炭c g畛m
t畉p h畛p nhi畛u hm 畛c l畉p nhau.
 Hm main() l hm th畛c thi.
 M畛t ch動董ng tr狸nh ch畛 c坦 th畛 c坦 1 hm main()
duy nh畉t.
 D畉ng chung :
# include < Th動 vi畛n hm >
Khai b叩o prototype;
Khai b叩o d畛 li畛u ton c畛c
畛nh ngh挑a c叩c hm 達 khai b叩o.
畛nh ngh挑a hm main().
Nguy畛n C担ng Huy  Khoa CNTT&TT 23
Con tr畛 v chu畛i k箪 t畛
 Kh叩i ni畛m
 Con tr畛 l動u 畛a ch畛 c畛a 1 畛i t動畛ng d畛 li畛u kh叩c.
 K鱈ch th動畛c con tr畛 = 1 担 nh畛 c畛a h畛 i畛u hnh.
 Tr棚n MS-DOS, k鱈ch th動畛c c畛a con tr畛 l 2 bytes.
 Khai b叩o : < Ki畛u> *<T棚n con tr畛>;
VD: long x = 20;
long *y; y = &x;
 C叩c ph辿p to叩n
 畛a ch畛 : &&y
 Gi叩 tr畛 : y
 Gi叩 tr畛 d畛 li畛u m con tr畛 ang tr畛 t畛i : **y
2020
1036H
x
10361036
1080H
*y
Nguy畛n C担ng Huy  Khoa CNTT&TT 24
Con tr畛
 C叩ch t鱈nh 畛a ch畛
 int x=10; // Ch畉ng h畉n bi畉n x ang 畛 畛a ch畛 1000
 int *px = &x; // px =1000
 (*px)++; // G叩n x=11
 px++; // px = 1002 v狸 px l con tr畛 ki畛u int
 px +=n; // px ang tr畛 畉n 畛a ch畛 (1002 + 2*n )
 C畉p v湛ng nh畛 : Con tr畛 = newnew <Ki畛u> [ S畛 l動畛ng ];
V鱈 d畛: int *px= new int;
long *py; py= new long[20];
 Thu h畛i v湛ng nh畛 : deletedelete <con tr畛>;
V鱈 d畛: delete px;
delete[] py;
Nguy畛n C担ng Huy  Khoa CNTT&TT 25
Con tr畛
 Con tr畛 v m畉ng
 Con tr畛 l 1 m畉ng 畛ng => k鱈ch th動畛c c坦 th畛 thay 畛i.
 M畉ng nh動 l 1 con tr畛 nh動ng 畛 l畛n v湛ng nh畛 c畛 畛nh.
C叩ch s畛 d畛ng m畉ng v con tr畛 g畉n nh動 gi畛ng nhau
C畉p v湛ng nh畛
v畛a 畛
cho con tr畛
Thu h畛i l畉i
v湛ng nh畛
Nguy畛n C担ng Huy  Khoa CNTT&TT 26
Con tr畛
M畉ng g畛m 10 con tr畛M畉ng g畛m 10 con tr畛
Con tr畛 畉n 1 m畉ngCon tr畛 畉n 1 m畉ng
10 ph畉n t畛 ki畛u int10 ph畉n t畛 ki畛u int
 Ph但n bi畛t m畉ng con tr畛 v con tr畛 畉n m畉ng
Nguy畛n C担ng Huy  Khoa CNTT&TT 27
Con tr畛
 Con tr畛 畉n con tr畛
 T動董ng t畛 (t畛ng qu叩t h董n) m畉ng nhi畛u chi畛u.
 C畉n th畉n khi c畉p v湛ng nh畛.
Nguy畛n C担ng Huy  Khoa CNTT&TT 28
Con tr畛 畉n hm
 L con tr畛 畉c bi畛t d湛ng 畛 tr畛 畉n 畛a ch畛 m達
l畛nh th畛c thi c畛a 1 hm.
 Khai b叩o con tr畛 畉n hm ph畉i 畉t trong c畉p d畉u
ngo畉c. (*p):
int (*p1)(*p1) (const char *, const char *);
long (*p2)(*p2) (int a, int b);
 Th動畛ng d湛ng con tr畛 ny 畛 g畛i 1 hm v g畛i
hm 坦 nh動 l 1 畛i s畛 畉n 1 hm kh叩c.
void check(char *a, char *b,
int (*cmp)(*cmp)(const char *, const char *));
 G畛i hm:
check(abc,ABC, strcmp);
Nguy畛n C担ng Huy  Khoa CNTT&TT 29
Con tr畛 畉n hm
 V鱈 d畛
G畛i hm check s畛 d畛ng con tr畛
畉n hm nh動 l 1 畛i s畛
Nguy畛n C担ng Huy  Khoa CNTT&TT 30
Con tr畛 void*
 C坦 th畛 tr畛 畉n b畉t k畛 lo畉i d畛 li畛u no.
 Ph畉i d湛ng ph辿p 辿p ki畛u khi thay 畛i.
Nguy畛n C担ng Huy  Khoa CNTT&TT 31
Con tr畛 v chu畛i k箪 t畛
 Chu畛i k箪 t畛
 L 1 m畉ng k箪 t畛 hay con tr畛 k箪 t畛
=> truy xu畉t ph畉n t畛 c畛a chu畛i t動董ng t畛 nh動 m畉ng.
VD: char chuoi1[20], *chuoi2;
char c = chuoi1[0];
 Ph畉i c畉p v湛ng nh畛 cho chu畛i d畉ng con tr畛.
VD: chuoi2 = new char [50];
 Chu畛i s畉 動畛c 叩nh d畉u b畛i k箪 t畛 k畉t th炭c : 00
 Hm nh畉p chu畛i :
 gets(chuoi2);gets(chuoi2);
 cin.getline(chuoi2, 49);cin.getline(chuoi2, 49);
 In chu畛i ra mn h狸nh: cout<<chuoi1<<chuoi2;cout<<chuoi1<<chuoi2;
Nguy畛n C担ng Huy  Khoa CNTT&TT 32
Con tr畛 v chu畛i k箪 t畛
 Chu畛i k箪 t畛
 M畛t s畛 hm x畛 l箪 chu畛i trong <string.h>:
 Copy chu畛i: char* strcpy (char* s1, char* s2);
 T畉o b畉n sao: char* strdup (char* s1);
 Chi畛u di: int strlen (char* s);
 So s叩nh: int strcmp (char* s1, char* s2);
 Gh辿p chu畛i: char* strcat (char* s1, char* s2);
 畉o ng動畛c: char* strrev (char* s);
 畛i sang HOA: char* strupr (char* s);
 畛i sang th動畛ng: char* strlwr (char* s);
 G叩n n k箪 t畛 c:
char* strnset (char* s, int c , int n);
Nguy畛n C担ng Huy  Khoa CNTT&TT 33
Tham s畛 m畉c nhi棚n
 Kh叩i ni畛m
 G叩n c叩c gi叩 tr畛 m畉c nhi棚n cho c叩c tham s畛 c畛a hm.
 働u i畛m
 Kh担ng c畉n ph畉i hi畛u r探 箪 ngh挑a t畉t c畉 c叩c tham s畛.
 C坦 th畛 gi畉m 動畛c s畛 l動畛ng hm c畉n 畛nh ngh挑a.
 Khai b叩o tham s畛 m畉c nhi棚n
 T畉t c畉 c叩c tham s畛 m畉c nhi棚n 畛u ph畉i 畉t 畛 cu畛i hm.
 Ch畛 c畉n 動a vo khai b叩o, kh担ng c畉n trong 畛nh ngh挑a.
 G畛i hm c坦 tham s畛 m畉c nhi棚n
 N畉u cung c畉p 畛 tham s畛 => d湛ng tham s畛 truy畛n vo.
 N畉u kh担ng 畛 tham s畛 => d湛ng tham s畛 m畉c nhi棚n
Nguy畛n C担ng Huy  Khoa CNTT&TT 34
Tham s畛 m畉c nhi棚n
 V鱈 d畛
MessageBox( LPCTSTR lpszText,
LPCTSTR lpszCaption = NULL,
UINT nType = MB_OK )
Hm th畛 hi畛n 1 c畛a s畛 th担ng b叩o trong Visual C++
MessageBox(Hien thi thong bao ra man hinh");
MessageBox( Chuc nang khong su dung duoc",
Bao loi );
C坦 th畛 g畛i hm theo c叩c d畉ng sau:
MessageBox( Ban muon thoat khoi chuong trinh?",
Thong bao,
MB_YESNO | MB_ICONASTERISK );
Nguy畛n C担ng Huy  Khoa CNTT&TT 35
Tham s畛 m畉c nhi棚n
 V鱈 d畛
void Ham1 (int a=0, int b=1) {
cout<<tham so 1 = <<a<<endl;
cout<<tham so 2 = <<b<<endl;
}
void main() {
int x=10, y=20;
cout << Goi Ham1 4 lan, ta duoc : <<endl;
Ham1(x,y);
Ham1(x);
Ham1(y);
Ham1();
}
Nguy畛n C担ng Huy  Khoa CNTT&TT 36
T叩i 畛nh ngh挑a hm
 Kh叩i ni畛m
C++ cho ph辿p 畛nh ngh挑a c叩c hm tr湛ng t棚n.
 Quy t畉c t叩i 畛nh ngh挑a
 C叩c hm tr湛ng t棚n ph畉i kh叩c nhau v畛 tham s畛:
 S畛 l動畛ng
 Th畛 t畛
 Ki畛u
 Quy t畉c g畛i hm
 T狸m hm c坦 ki畛u tham s畛 ph湛 h畛p.
 D湛ng ph辿p 辿p ki畛u t畛 畛ng.
 T狸m hm g畉n 炭ng (ph湛 h畛p) nh畉t.
Nguy畛n C担ng Huy  Khoa CNTT&TT 37
T叩i 畛nh ngh挑a hm
 V鱈 d畛 1
int Max (int a, int b)
{ return (a>b) ? a : b; }
float Max (float a, float b)
{ return (a>b) ? a : b; }
SinhVien Max (SinhVien a, SinhVien b) {
return (a.diemtb > b.diemtb) ? a :
b; }
void main() {
int x1=1, y1=2;
float x2=3, y2=4;
long x3=5, y3=6;
cout << Max(x1,y1)<<t<<Max(x2,y2)<<endl;
cout << Max(x3,y1) <<endl;
cout << Max(x3,y2) <<endl;
cout << Max(x3,y3) <<endl;
}
Nguy畛n C担ng Huy  Khoa CNTT&TT 38
T叩i 畛nh ngh挑a hm
 V鱈 d畛 2
int F (int a=0, int b=1)
{  }
float F (float a=5, float b=9)
{  }
void main() {
int x1=1, y1=2;
float x2=3, y2=4;
long x3=5, y3=6;
cout << F(x1)<<t<<F(y2)<<endl;
cout << F(x3) << F() << endl;
}
Nguy畛n C担ng Huy  Khoa CNTT&TT 39
Hm inline
 L 1 hm nh動ng t叩c d畛ng t動董ng t畛 nh動 m畛t macro.
 Kh畉c ph畛c 動畛c c叩c nh動畛c i畛m c畛a hm v macro.
 Gi畉m th畛i gian th畛c thi ch動董ng tr狸nh.
 Tng k鱈ch th動畛c c畛a m達 l畛nh th畛c thi.
 Ch畛 n棚n 畛nh ngh挑a inline khi hm c坦 k鱈ch th動畛c nh畛.
 C炭 ph叩p : th棚m t畛 kh坦a inline vo tr動畛c hm.
VD: inlineinline float sqr(float x) {
return (x*x);
}
inlineinline int Max(int a, int b) {
return ((a>b) ? a : b) ;
}
Nguy畛n C担ng Huy  Khoa CNTT&TT 40
Tham chi畉u
 Kh叩i ni畛m
 L 1 lo畉i 畛i t動畛ng d畛 li畛u tham chi畉u 畉n 1
畛i t動畛ng c坦 s畉n.
 L 1 b鱈 danh nh動 con tr畛, nh動ng kh担ng c畉n c坦
t叩c t畛 *.
VD: int x = 10;
int *px; px = &x;
int &rx = x;
3 c叩ch thay 畛i gi叩 tr畛 c畛a x :
x = 5;
*px = 5;
rx = 5;
1010
1036H
x
10361036
1080H
*px
&rx
Nguy畛n C担ng Huy  Khoa CNTT&TT 41
Tham chi畉u
 Tham chi畉u d湛ng nh動 m畛t bi畉n
 Kh畛i t畉o : int x=5; int &rx = x;
int &a; int &b=5; // SAI
 Tham chi畉u h畉ng : kh担ng th畛 s畛a 畛i gi叩 tr畛.
const int &n=10;
<=> int x=3; const int &n=x;
n=5; // B叩o l畛i v狸 n l炭c ny l h畉ng s畛
 G叩n tr畛 l畉i :
 Kh担ng th畛 s畛a 畛i 畛i t動畛ng tham chi畉u.
 Ch畛 l thay 畛i gi叩 tr畛.
int x = 5, y = 20; int &rx = x;
rx = y; // Ch鱈nh l g叩n x=20
// kh担ng ph畉i l rx tham chi畉u 畉n y
Nguy畛n C担ng Huy  Khoa CNTT&TT 42
Tham chi畉u
 Tham chi畉u d湛ng nh動 畛i s畛 c畛a hm
 Lm thay 畛i gi叩 tr畛 c畛a tham s畛.
 H畛u 鱈ch cho hm tr畉 v畛 nhi畛u k畉t qu畉.
 Ti畉t ki畛m 動畛c 担 nh畛 trung gian (tham s畛 h狸nh th畛c)
trong hm.
void Nhap (int& a, float& b) {
cout<< Nhap tham so 1 : ; cin>>a;
cout<< Nhap tham so 2 : ; cin>>b;
}
void main() {
int n; float m;
Nhap( n , m );
}
Nguy畛n C担ng Huy  Khoa CNTT&TT 43
Tham chi畉u
 Tham chi畉u d湛ng nh動 tr畛 tr畉 v畛 c畛a hm
 畛i t動畛ng tr畉 v畛 v畉n b畛n v畛ng khi hm k畉t th炭c.
 Tr畛 tr畉 v畛 l 1 畛i t動畛ng ton c畛c hay 1 v湛ng nh畛 c畛c
b畛.
VD: long a[1000];
long& GiaTri(int i) { return a[i]; }
void main() {
GiaTri(1) = 1; GiaTri(2) = 1;
for( int i= 3; i<1000; i++)
GiaTri(i) = GiaTri(i-1) + GiaTri(i-2);
}
=> ch l畛i : che i c叩ch bi畛u di畛n c畛a d畛 li畛u.
( Ch畉ng h畉n : ta 畛i l畉i d湛ng CTDL l danh s叩ch li棚n k畉t
=> ch畛 vi畉t l畉i hm GiaTri(int ) m th担i )
Nguy畛n C担ng Huy  Khoa CNTT&TT 44
Truy畛n tham s畛
 Truy畛n theo gi叩 tr畛
 Gi叩 tr畛 tham s畛 khi ra kh畛i hm s畉 kh担ng thay 畛ikh担ng thay 畛i.
void Swap1(int a, int b) {
int temp = a;
a = b;
b = temp;
}
void main(){
int x = 5, y = 10;
Swap1( x , y );
cout <<  x =  << x
<<  y =  << y
<< endl;
}
55
1010
xx
yy
aa
bb
mainmain Swap1Swap1
STEPSTEP
0101
55
1010
xx
yy
55
1010
aa
bb
mainmain Swap1Swap1
STEPSTEP
0202
55
1010
xx
yy
1010
55
aa
bb
mainmain Swap1Swap1
STEPSTEP
0303
Nguy畛n C担ng Huy  Khoa CNTT&TT 45
Truy畛n tham s畛
 Truy畛n theo 畛a ch畛 (con tr畛)
 Gi叩 tr畛 tham s畛 khi ra kh畛i hm c坦 th畛 thay 畛ic坦 th畛 thay 畛i.
void Swap2(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
void main(){
int x = 5, y = 10;
Swap2( &&x , &&y );
cout <<  x =  << x
<<  y =  << y
<< endl;
}
55
1010
xx
yy
aa
bb
mainmain Swap2Swap2
STEPSTEP
0101
100
200
55
1010
xx
yy
100100
200200
aa
bb
mainmain Swap2Swap2
STEPSTEP
0202
100
200
1010
55
xx
yy
100100
200200
aa
bb
mainmain Swap2Swap2
STEPSTEP
0303
100
200
Nguy畛n C担ng Huy  Khoa CNTT&TT 46
Truy畛n tham s畛
 Truy畛n theo tham chi畉u:
 Gi叩 tr畛 tham s畛 khi ra kh畛i hm c坦 th畛 thayc坦 th畛 thay 畛i.
void Swap3(int&& a, int&& b) {
int temp = a;
a = b;
b = temp;
}
void main(){
int x = 5, y = 10;
Swap3( x , y );
cout <<  x =  << x
<<  y =  << y
<< endl;
}
55 1010xx yy
mainmain
STEPSTEP
0101
aa bb
Swap3Swap3
1010 55xx yy
mainmain
STEPSTEP
0202
aa bb
Swap3Swap3
1010 55xx yy
mainmain
STEPSTEP
0303
Nguy畛n C担ng Huy  Khoa CNTT&TT 47
Struct
 Kh叩i ni畛m
Struct L 1 d畉ng c畉u tr炭c d畛 li畛u m b畉n th但n c坦 th畛 ch畛a
nhi畛u lo畉i d畛 li畛u c坦 ki畛u kh叩c nhau.
 Khai b叩o
SinhVien a;
2 bytes
2 bytes
4 bytes
8 bytes
diemtb
namsinh
*hoten
masosv[]
Nguy畛n C担ng Huy  Khoa CNTT&TT 48
Struct
 Bi畉n ki畛u struct :
SinhVien a, b, ds1[20], *ds2;
 Truy xu畉t c叩c thnh ph畉n c畛a struct :
cin >> a.masosv;
cout << Tuoi cua b la : <<b.tuoi;
cin >> ds[19].namsinh;
ds2->hoten = new char[50];
 G叩n struct :
SinhVien c = a;
 Con tr畛 struct :
SinhVien *ds= new SinhVien[100];

More Related Content

What's hot (16)

Pointer vn
Pointer vnPointer vn
Pointer vn
Harry Potter
C8 object-oriented thinking
C8 object-oriented thinkingC8 object-oriented thinking
C8 object-oriented thinking
Ti畉n Quang Phan
Lap trinh c++ c坦 l畛i gi畉i 1
Lap trinh c++ c坦 l畛i gi畉i 1Lap trinh c++ c坦 l畛i gi畉i 1
Lap trinh c++ c坦 l畛i gi畉i 1
Minh Ngoc Tran
Lap trinh huong_doi_tuong_cpp_dhct_lesson08
Lap trinh huong_doi_tuong_cpp_dhct_lesson08Lap trinh huong_doi_tuong_cpp_dhct_lesson08
Lap trinh huong_doi_tuong_cpp_dhct_lesson08
xcode_esvn
Lap trinh c++ c坦 l畛i gi畉i 3
Lap trinh c++ c坦 l畛i gi畉i 3Lap trinh c++ c坦 l畛i gi畉i 3
Lap trinh c++ c坦 l畛i gi畉i 3
Minh Ngoc Tran
Nmlt C03 Cac Kieu Du Lieu Co So
Nmlt C03 Cac Kieu Du Lieu Co SoNmlt C03 Cac Kieu Du Lieu Co So
Nmlt C03 Cac Kieu Du Lieu Co So
Cuong
3 Function
3 Function3 Function
3 Function
Cuong
L畉p tr狸nh c++ c坦 l畛i gi畉i 2
L畉p tr狸nh c++ c坦 l畛i gi畉i 2L畉p tr狸nh c++ c坦 l畛i gi畉i 2
L畉p tr狸nh c++ c坦 l畛i gi畉i 2
Minh Ngoc Tran
Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-
Minh Ngoc Tran
C8 object-oriented thinking
C8 object-oriented thinkingC8 object-oriented thinking
C8 object-oriented thinking
Ti畉n Quang Phan
Lap trinh c++ c坦 l畛i gi畉i 1
Lap trinh c++ c坦 l畛i gi畉i 1Lap trinh c++ c坦 l畛i gi畉i 1
Lap trinh c++ c坦 l畛i gi畉i 1
Minh Ngoc Tran
Lap trinh huong_doi_tuong_cpp_dhct_lesson08
Lap trinh huong_doi_tuong_cpp_dhct_lesson08Lap trinh huong_doi_tuong_cpp_dhct_lesson08
Lap trinh huong_doi_tuong_cpp_dhct_lesson08
xcode_esvn
Lap trinh c++ c坦 l畛i gi畉i 3
Lap trinh c++ c坦 l畛i gi畉i 3Lap trinh c++ c坦 l畛i gi畉i 3
Lap trinh c++ c坦 l畛i gi畉i 3
Minh Ngoc Tran
Nmlt C03 Cac Kieu Du Lieu Co So
Nmlt C03 Cac Kieu Du Lieu Co SoNmlt C03 Cac Kieu Du Lieu Co So
Nmlt C03 Cac Kieu Du Lieu Co So
Cuong
3 Function
3 Function3 Function
3 Function
Cuong
L畉p tr狸nh c++ c坦 l畛i gi畉i 2
L畉p tr狸nh c++ c坦 l畛i gi畉i 2L畉p tr狸nh c++ c坦 l畛i gi畉i 2
L畉p tr狸nh c++ c坦 l畛i gi畉i 2
Minh Ngoc Tran
Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-
Minh Ngoc Tran

Similar to giao trinh c++ Chuong1 (20)

Cac dac diem cua ng担n ng畛 C++ trong nh但p moon l畉p tr狸nh
Cac dac diem cua ng担n ng畛 C++ trong nh但p moon l畉p tr狸nhCac dac diem cua ng担n ng畛 C++ trong nh但p moon l畉p tr狸nh
Cac dac diem cua ng担n ng畛 C++ trong nh但p moon l畉p tr狸nh
lethanhphuoc1993
C8 object-oriented thinking
C8 object-oriented thinkingC8 object-oriented thinking
C8 object-oriented thinking
H畛 L畛i
10. C - Function And Operator Overload
10. C   - Function And Operator Overload10. C   - Function And Operator Overload
10. C - Function And Operator Overload
Darian Pruitt
C10 generic algorithms
C10 generic algorithmsC10 generic algorithms
C10 generic algorithms
H畛 L畛i
C3 functions and_library
C3 functions and_libraryC3 functions and_library
C3 functions and_library
H畛 L畛i
Nmlt c13 con_tronangcao_in
Nmlt c13 con_tronangcao_inNmlt c13 con_tronangcao_in
Nmlt c13 con_tronangcao_in
Huy Nguy畛n
Ngon ngu c theo chuan ansi
Ngon ngu c theo chuan ansiNgon ngu c theo chuan ansi
Ngon ngu c theo chuan ansi
Huynh MVT
KTLT.NguyenVanNoi
KTLT.NguyenVanNoiKTLT.NguyenVanNoi
KTLT.NguyenVanNoi
tgu_violet
Fortran c董 s畛
Fortran c董 s畛Fortran c董 s畛
Fortran c董 s畛
Hajunior9x
Sang tao4
Sang tao4Sang tao4
Sang tao4
hieusui
Pointer
PointerPointer
Pointer
Phi T動畛ng
Ch動董ng Tr狸nh Con
Ch動董ng Tr狸nh Con Ch動董ng Tr狸nh Con
Ch動董ng Tr狸nh Con
Nguy畛n Thi棚n
C畉u tr炭c d畛 li畛u c董 b畉n - n t畉p
C畉u tr炭c d畛 li畛u c董 b畉n - n t畉pC畉u tr炭c d畛 li畛u c董 b畉n - n t畉p
C畉u tr炭c d畛 li畛u c董 b畉n - n t畉p
H畛 L畛i
C9 templates
C9 templatesC9 templates
C9 templates
Ti畉n Quang Phan
C9 templates
C9 templatesC9 templates
C9 templates
H畛 L畛i
Nmlt c11 con_trocoban_in
Nmlt c11 con_trocoban_inNmlt c11 con_trocoban_in
Nmlt c11 con_trocoban_in
Huy Nguy畛n
Cpl test1%20key
Cpl test1%20keyCpl test1%20key
Cpl test1%20key
H畛 L畛i
Cac dac diem cua ng担n ng畛 C++ trong nh但p moon l畉p tr狸nh
Cac dac diem cua ng担n ng畛 C++ trong nh但p moon l畉p tr狸nhCac dac diem cua ng担n ng畛 C++ trong nh但p moon l畉p tr狸nh
Cac dac diem cua ng担n ng畛 C++ trong nh但p moon l畉p tr狸nh
lethanhphuoc1993
C8 object-oriented thinking
C8 object-oriented thinkingC8 object-oriented thinking
C8 object-oriented thinking
H畛 L畛i
10. C - Function And Operator Overload
10. C   - Function And Operator Overload10. C   - Function And Operator Overload
10. C - Function And Operator Overload
Darian Pruitt
C10 generic algorithms
C10 generic algorithmsC10 generic algorithms
C10 generic algorithms
H畛 L畛i
C3 functions and_library
C3 functions and_libraryC3 functions and_library
C3 functions and_library
H畛 L畛i
Nmlt c13 con_tronangcao_in
Nmlt c13 con_tronangcao_inNmlt c13 con_tronangcao_in
Nmlt c13 con_tronangcao_in
Huy Nguy畛n
Ngon ngu c theo chuan ansi
Ngon ngu c theo chuan ansiNgon ngu c theo chuan ansi
Ngon ngu c theo chuan ansi
Huynh MVT
KTLT.NguyenVanNoi
KTLT.NguyenVanNoiKTLT.NguyenVanNoi
KTLT.NguyenVanNoi
tgu_violet
Fortran c董 s畛
Fortran c董 s畛Fortran c董 s畛
Fortran c董 s畛
Hajunior9x
Sang tao4
Sang tao4Sang tao4
Sang tao4
hieusui
C畉u tr炭c d畛 li畛u c董 b畉n - n t畉p
C畉u tr炭c d畛 li畛u c董 b畉n - n t畉pC畉u tr炭c d畛 li畛u c董 b畉n - n t畉p
C畉u tr炭c d畛 li畛u c董 b畉n - n t畉p
H畛 L畛i
C9 templates
C9 templatesC9 templates
C9 templates
H畛 L畛i
Nmlt c11 con_trocoban_in
Nmlt c11 con_trocoban_inNmlt c11 con_trocoban_in
Nmlt c11 con_trocoban_in
Huy Nguy畛n
Cpl test1%20key
Cpl test1%20keyCpl test1%20key
Cpl test1%20key
H畛 L畛i

giao trinh c++ Chuong1

  • 1. Nguy畛n C担ng Huy Khoa CNTT&TT 1 CC 畉C I畛MCC 畉C I畛M C畛A C++C畛A C++ C叩c kh叩i ni畛m c董 b畉n c畛a C++ L畉p tr狸nh c畉u tr炭c trong C++ C叩c 畉c i畛m m畛i c畛a C++ Ch動董ng 1Ch動董ng 1::
  • 2. Nguy畛n C担ng Huy Khoa CNTT&TT 2 N畛i dungN畛i dung C叩c kh叩i ni畛m c董 b畉n trong C++ C畉u tr炭c i畛u khi畛n Hm v c畉u tr炭c ch動董ng tr狸nh Con tr畛 v chu畛i k箪 t畛 Tham s畛 m畉c nhi棚n c畛a hm T叩i 畛nh ngh挑a hm Hm t畉i ch畛 (inline) Truy畛n tham s畛 Tham chi畉u Struct
  • 3. Nguy畛n C担ng Huy Khoa CNTT&TT 3 C叩c kh叩i ni畛m c董 b畉n T畛 kh坦a Dnh ri棚ng cho ng担n ng畛 kh担ng 動畛c 畉t t棚n tr湛ng v畛i t畛 kh坦a. L ch畛 th動畛ng VD : char, int, return, for, else, const, static T棚n Ph但n bi畛t ch畛 HOA v ch畛 th動畛ng G畛m ch畛, s畛, _ v ph畉i b畉t 畉u b畉ng ch畛 c叩i. 畛 di t畛i a l 32 N棚n theo quy c叩ch 畉t t棚n. VD: x, hoten, a1, num_of_var, Delta, TEN, ...
  • 4. Nguy畛n C担ng Huy Khoa CNTT&TT 4 C叩c kh叩i ni畛m c董 b畉n Ki畛u d畛 li畛u T棚n ki畛uT棚n ki畛u K鱈ch th動畛cK鱈ch th動畛c Ph畉m viPh畉m vi char 1 byte -128 127 unsigned char 1 byte 0 255 int 2 bytes -32768 32767 unsigned int 2 bytes 0 65535 short 2 bytes 0 65535 long 4 bytes -2 31 2 31 - 1 unsigned long 4 bytes 0 2 32 - 1 float 4 bytes 1.2e -38 3.4e 38 double 8 bytes 2.2e -308 1.8e 308
  • 5. Nguy畛n C担ng Huy Khoa CNTT&TT 5 C叩c kh叩i ni畛m c董 b畉n Bi畉n Khai b叩o : b畉t k畛 v畛 tr鱈 no trong ch動董ng tr狸nh Kh畛i t畉o : c坦 th畛 v畛a khai b叩o v kh畛i t畉o VD: int x=5, y=10; for( int i=0, tong =0 ; i<10 ; i++) tong +=i ; Bi畉n khai b叩o trong 1 kh畛i l畛nh : ch畛 c坦 ph畉m vi ho畉t 畛ng trong kh畛i l畛nh 坦. VD: if( delta >0 ) { float x1= (-b + sqrt(delta)) / (2*a); float x2= (-b - sqrt(delta)) / (2*a); ... }
  • 6. Nguy畛n C担ng Huy Khoa CNTT&TT 6 C叩c kh叩i ni畛m c董 b畉n Bi畉n Bi畉n ton c畛c : c坦 t叩c d畛ng trong ton b畛 CT. Bi畉n 畛a ph動董ng (c畛c b畛): ch畛 c坦 t叩c d畛ng trong ph畉m vi c畛a n坦. VD: int so = 5; void GanSo(int x) { so = x; } int NuaSo(int x) { int c=2; int so =x/c ; return so; }
  • 7. Nguy畛n C担ng Huy Khoa CNTT&TT 7 C叩c kh叩i ni畛m c董 b畉n H畉ng Khai b叩o : VD: #define MAX 100 const int MAX=100; M畛t s畛 h畉ng quan tr畛ng : S畛 nguy棚n: 10 , -5, 300000, 1000L, ... S畛 th畛c : 3.1416, .5 , 123E-5, ... K箪 t畛 : char ch1 = A , ch2=97; Chu畛i k箪 t畛 : char *str=Chuoi Ky Tu; char chuoi[50]; strcpy(chuoi, ); if ( strcmp(chuoi,)==0) cout << Chuoi rong;
  • 8. Nguy畛n C担ng Huy Khoa CNTT&TT 8 C叩c kh叩i ni畛m c董 b畉n Ki畛u Chuy畛n 畛i ki畛u : M畉c nhi棚n (t畛 畛ng) : float x = 3.1416; int y = x ; float sole = x - y; Do ng動畛i l畉p tr狸nh s畛 d畛ng : C炭 ph叩p: ( Ki畛u ) bi畛u th畛c( Ki畛u ) bi畛u th畛c ho畉c Ki畛u ( bi畛u th畛c )Ki畛u ( bi畛u th畛c ) V鱈 d畛: int a=10, b=3; float c1 = a / b ; float c2 = float (a/b); float c3 = (float) a / b ; float c4 = float (a)/b;
  • 9. Nguy畛n C担ng Huy Khoa CNTT&TT 9 C叩c kh叩i ni畛m c董 b畉n C叩c ph辿p to叩n S畛 h畛c: + , - , * , / , % Lu畉n l箪: ==, !=, >, <, >=, <=, &&, ||, ! G叩n : = L畉y k鱈ch th動畛c: sizeof (畛i t動畛ng d畛 li畛u ) i畛u ki畛n : e1 ? e2 : e3 L畉y 畛a ch畛 : &(bi畉n) Tng gi畉m : x++ , x-- , ++x , --x tong+= i ; tich *= i; /= , %= , -= , &= , |= , ^=
  • 10. Nguy畛n C担ng Huy Khoa CNTT&TT 10 C叩c kh叩i ni畛m c董 b畉n M畉ng Khai b叩o : <Ki畛u> <T棚n m畉ng> [<K鱈ch th動畛c>];<Ki畛u> <T棚n m畉ng> [<K鱈ch th動畛c>]; VD : int m[10]; float ds[MAX]; S畛 d畛ng : ph辿p to叩n l畉y gi叩 tr畛 ph畉n t畛. Th畛 t畛 ph畉n t畛 : t畛 0 畉n (k鱈ch th動畛c -1) VD: // CT t鱈nh t畛ng c畛a 10 s畛 Fibonacci 畉u ti棚n long a[10]; a[0]=a[1]=1; for (int i=2; i<10 ; i++) a[i] = a[i-1] + a[i-2]; long tong=0; for(i=0 ; i<10 ; i++) tong+=a[i];
  • 11. Nguy畛n C担ng Huy Khoa CNTT&TT 11 C叩c kh叩i ni畛m c董 b畉n Ch炭 th鱈ch Tr棚n 1 d嘆ng : // ch炭 th鱈ch tr棚n 1 d嘆ng Tr棚n nhi畛u d嘆ng : /* ch炭 th鱈ch tr棚n nhi畛u d嘆ng */ C叩c ch畛 th畛 ti畛n bi棚n d畛ch : # define # undefine # include # if # else # endif # if # elif # else # endif # ifdef # else # endif # ifndef # else # endif # error
  • 12. Nguy畛n C担ng Huy Khoa CNTT&TT 12 C叩c kh叩i ni畛m c董 b畉n Nh畉p xu畉t Th動 vi畛n hm : # include <iostream.h> Nh畉p : cin >> Bi畉ncin >> Bi畉n Xu畉t : cout << (Bi畛u th畛c)cout << (Bi畛u th畛c) C叩c ki畛u d畛 li畛u c坦 th畛 nh畉p xu畉t : char , int, unsigned, long, unsigned long, float, double, char* , char [] (void*): l畉y 畛a ch畛 畉u c畛a chu畛i C坦 th畛 nh畉p xu畉t li棚n t畛c tr棚n m畛t d嘆ng. VD: cout << Gia tri x = << x << , y = <<y; cout << Nhap n = ; cin >> n;
  • 13. Nguy畛n C担ng Huy Khoa CNTT&TT 13 C叩c kh叩i ni畛m c董 b畉n Nh畉p xu畉t M畛t s畛 hm 畛nh d畉ng ton c畛c: cin.width(n) cout.width(n) cout.precision(n) cin.seekg(n) K箪 t畛 畉c bi畛t : n, t, 0, b, r 畛nh d畉ng kh叩c: endl, ends, flush, Nh畉p chu畛i : gets(char* str); cin.getline(char* str, int n);
  • 14. Nguy畛n C担ng Huy Khoa CNTT&TT 14 C叩c kh叩i ni畛m c董 b畉n C畉u tr炭c 1 ch動董ng tr狸nh 董n gi畉n
  • 15. Nguy畛n C担ng Huy Khoa CNTT&TT 15 C畉u tr炭c i畛u khi畛n Tu畉n t畛 C但u l畛nh : vi畉t tr棚n m畛t hay nhi畛u d嘆ng Kh畛i l畛nh : L d達y c叩c l畛nh vi畉t trong c畉p { } T動董ng 動董ng v畛i 1 c但u l畛nh Gi叩 tr畛 c畛a bi畛u th畛c i畛u ki畛n B畉ng 0 : <=> SAI Kh叩c 0 : <=> 炭ng VD: int x=0; if(x=2) cout<< x bang 2 ; else cout<< x khac 2 ;
  • 16. Nguy畛n C担ng Huy Khoa CNTT&TT 16 C畉u tr炭c i畛u khi畛n R畉 nh叩nh if (bi畛u th畛c) L畛nh 1; else L畛nh 2; switch (bi畛u th畛c) { case gi叩 tr畛 1 : L畛nh 1; ... [ break; ] case gi叩 tr畛 2 : L畛nh 2; ... [ break; ] ... case gi叩 tr畛 n : L畛nh n; ... [ break; ] default : L畛nh n+1; }
  • 17. Nguy畛n C担ng Huy Khoa CNTT&TT 17 C畉u tr炭c i畛u khi畛n L畉p while (bi畛u th畛c) L畛nh ; do L畛nh ; while (bi畛u th畛c); for ( e1 ; e2 ; e3 ) L畛nh; e1 : bi畛u th畛c kh畛i t畉o e2 : bi畛u th畛c i畛u ki畛n e3 : bi畛u th畛c l畉p
  • 18. Nguy畛n C担ng Huy Khoa CNTT&TT 18 C畉u tr炭c i畛u khi畛n T畛 kh坦a break Tho叩t ra kh畛i c畉u tr炭c switch Tho叩t ra kh畛i v嘆ng l畉p : while, do while, for T畛 kh坦a continue: Tr畛 v畛 畉u v嘆ng l畉p L畛nh nh畉y goto D湛ng chung v畛i nh達n l畛nh Kh担ng n棚n s畛 d畛ng v狸 s畉 ph叩 v畛 c畉u tr炭c CT 働u i畛m : tho叩t kh畛i c叩c v嘆ng l畉p l畛ng s但u
  • 19. Nguy畛n C担ng Huy Khoa CNTT&TT 19 Hm v c畉u tr炭c ch動董ng tr狸nh Hm C炭 ph叩p : <Ki畛u tr畉 v畛> <T棚n hm> (Danh s叩ch ki畛u v tham s畛) { [ Khai b叩o d畛 li畛u c畛c b畛 ] [ Th但n hm ] [ C但u l畛nh return ] } VD: int Max ( int x, int y) { int somax; somax = (x>y) ? x : y; return somax; }
  • 20. Nguy畛n C担ng Huy Khoa CNTT&TT 20 Hm v c畉u tr炭c ch動董ng tr狸nh Hm Khai b叩o prototype : <Ki畛u tr畉 v畛> <T棚n hm> ( Danh s叩ch ki畛u ); VD: int Max ( int , int ); int Min ( int , int ); void main() { int a =10 , b =5; cout<<So max= << Max(a,b)<<endl; cout<<So min= << Min(a,b)<<endl; } int Max (int x , int y) { ... } int Min (int x , int y) { ... }
  • 21. Nguy畛n C担ng Huy Khoa CNTT&TT 21 Hm v c畉u tr炭c ch動董ng tr狸nh Hm C叩ch g畛i : T棚n hm(tham s畛 theo th畛 t畛 t畛 tr叩i sang) Tham s畛 v 畛i s畛: int Max ( int x, int y) { if(x>y) return x; return y; } void main() { int a =10 , b = 5; cout<<So max= << Max ( a , b ) << endl; } Tham s畛 (h狸nh th畛c) 畛i s畛 (Tham s畛 th畛c t畉)
  • 22. Nguy畛n C担ng Huy Khoa CNTT&TT 22 Hm v c畉u tr炭c ch動董ng tr狸nh C畉u tr炭c ch動董ng tr狸nh Ch動董ng tr狸nh theo d畉ng l畉p tr狸nh c畉u tr炭c g畛m t畉p h畛p nhi畛u hm 畛c l畉p nhau. Hm main() l hm th畛c thi. M畛t ch動董ng tr狸nh ch畛 c坦 th畛 c坦 1 hm main() duy nh畉t. D畉ng chung : # include < Th動 vi畛n hm > Khai b叩o prototype; Khai b叩o d畛 li畛u ton c畛c 畛nh ngh挑a c叩c hm 達 khai b叩o. 畛nh ngh挑a hm main().
  • 23. Nguy畛n C担ng Huy Khoa CNTT&TT 23 Con tr畛 v chu畛i k箪 t畛 Kh叩i ni畛m Con tr畛 l動u 畛a ch畛 c畛a 1 畛i t動畛ng d畛 li畛u kh叩c. K鱈ch th動畛c con tr畛 = 1 担 nh畛 c畛a h畛 i畛u hnh. Tr棚n MS-DOS, k鱈ch th動畛c c畛a con tr畛 l 2 bytes. Khai b叩o : < Ki畛u> *<T棚n con tr畛>; VD: long x = 20; long *y; y = &x; C叩c ph辿p to叩n 畛a ch畛 : &&y Gi叩 tr畛 : y Gi叩 tr畛 d畛 li畛u m con tr畛 ang tr畛 t畛i : **y 2020 1036H x 10361036 1080H *y
  • 24. Nguy畛n C担ng Huy Khoa CNTT&TT 24 Con tr畛 C叩ch t鱈nh 畛a ch畛 int x=10; // Ch畉ng h畉n bi畉n x ang 畛 畛a ch畛 1000 int *px = &x; // px =1000 (*px)++; // G叩n x=11 px++; // px = 1002 v狸 px l con tr畛 ki畛u int px +=n; // px ang tr畛 畉n 畛a ch畛 (1002 + 2*n ) C畉p v湛ng nh畛 : Con tr畛 = newnew <Ki畛u> [ S畛 l動畛ng ]; V鱈 d畛: int *px= new int; long *py; py= new long[20]; Thu h畛i v湛ng nh畛 : deletedelete <con tr畛>; V鱈 d畛: delete px; delete[] py;
  • 25. Nguy畛n C担ng Huy Khoa CNTT&TT 25 Con tr畛 Con tr畛 v m畉ng Con tr畛 l 1 m畉ng 畛ng => k鱈ch th動畛c c坦 th畛 thay 畛i. M畉ng nh動 l 1 con tr畛 nh動ng 畛 l畛n v湛ng nh畛 c畛 畛nh. C叩ch s畛 d畛ng m畉ng v con tr畛 g畉n nh動 gi畛ng nhau C畉p v湛ng nh畛 v畛a 畛 cho con tr畛 Thu h畛i l畉i v湛ng nh畛
  • 26. Nguy畛n C担ng Huy Khoa CNTT&TT 26 Con tr畛 M畉ng g畛m 10 con tr畛M畉ng g畛m 10 con tr畛 Con tr畛 畉n 1 m畉ngCon tr畛 畉n 1 m畉ng 10 ph畉n t畛 ki畛u int10 ph畉n t畛 ki畛u int Ph但n bi畛t m畉ng con tr畛 v con tr畛 畉n m畉ng
  • 27. Nguy畛n C担ng Huy Khoa CNTT&TT 27 Con tr畛 Con tr畛 畉n con tr畛 T動董ng t畛 (t畛ng qu叩t h董n) m畉ng nhi畛u chi畛u. C畉n th畉n khi c畉p v湛ng nh畛.
  • 28. Nguy畛n C担ng Huy Khoa CNTT&TT 28 Con tr畛 畉n hm L con tr畛 畉c bi畛t d湛ng 畛 tr畛 畉n 畛a ch畛 m達 l畛nh th畛c thi c畛a 1 hm. Khai b叩o con tr畛 畉n hm ph畉i 畉t trong c畉p d畉u ngo畉c. (*p): int (*p1)(*p1) (const char *, const char *); long (*p2)(*p2) (int a, int b); Th動畛ng d湛ng con tr畛 ny 畛 g畛i 1 hm v g畛i hm 坦 nh動 l 1 畛i s畛 畉n 1 hm kh叩c. void check(char *a, char *b, int (*cmp)(*cmp)(const char *, const char *)); G畛i hm: check(abc,ABC, strcmp);
  • 29. Nguy畛n C担ng Huy Khoa CNTT&TT 29 Con tr畛 畉n hm V鱈 d畛 G畛i hm check s畛 d畛ng con tr畛 畉n hm nh動 l 1 畛i s畛
  • 30. Nguy畛n C担ng Huy Khoa CNTT&TT 30 Con tr畛 void* C坦 th畛 tr畛 畉n b畉t k畛 lo畉i d畛 li畛u no. Ph畉i d湛ng ph辿p 辿p ki畛u khi thay 畛i.
  • 31. Nguy畛n C担ng Huy Khoa CNTT&TT 31 Con tr畛 v chu畛i k箪 t畛 Chu畛i k箪 t畛 L 1 m畉ng k箪 t畛 hay con tr畛 k箪 t畛 => truy xu畉t ph畉n t畛 c畛a chu畛i t動董ng t畛 nh動 m畉ng. VD: char chuoi1[20], *chuoi2; char c = chuoi1[0]; Ph畉i c畉p v湛ng nh畛 cho chu畛i d畉ng con tr畛. VD: chuoi2 = new char [50]; Chu畛i s畉 動畛c 叩nh d畉u b畛i k箪 t畛 k畉t th炭c : 00 Hm nh畉p chu畛i : gets(chuoi2);gets(chuoi2); cin.getline(chuoi2, 49);cin.getline(chuoi2, 49); In chu畛i ra mn h狸nh: cout<<chuoi1<<chuoi2;cout<<chuoi1<<chuoi2;
  • 32. Nguy畛n C担ng Huy Khoa CNTT&TT 32 Con tr畛 v chu畛i k箪 t畛 Chu畛i k箪 t畛 M畛t s畛 hm x畛 l箪 chu畛i trong <string.h>: Copy chu畛i: char* strcpy (char* s1, char* s2); T畉o b畉n sao: char* strdup (char* s1); Chi畛u di: int strlen (char* s); So s叩nh: int strcmp (char* s1, char* s2); Gh辿p chu畛i: char* strcat (char* s1, char* s2); 畉o ng動畛c: char* strrev (char* s); 畛i sang HOA: char* strupr (char* s); 畛i sang th動畛ng: char* strlwr (char* s); G叩n n k箪 t畛 c: char* strnset (char* s, int c , int n);
  • 33. Nguy畛n C担ng Huy Khoa CNTT&TT 33 Tham s畛 m畉c nhi棚n Kh叩i ni畛m G叩n c叩c gi叩 tr畛 m畉c nhi棚n cho c叩c tham s畛 c畛a hm. 働u i畛m Kh担ng c畉n ph畉i hi畛u r探 箪 ngh挑a t畉t c畉 c叩c tham s畛. C坦 th畛 gi畉m 動畛c s畛 l動畛ng hm c畉n 畛nh ngh挑a. Khai b叩o tham s畛 m畉c nhi棚n T畉t c畉 c叩c tham s畛 m畉c nhi棚n 畛u ph畉i 畉t 畛 cu畛i hm. Ch畛 c畉n 動a vo khai b叩o, kh担ng c畉n trong 畛nh ngh挑a. G畛i hm c坦 tham s畛 m畉c nhi棚n N畉u cung c畉p 畛 tham s畛 => d湛ng tham s畛 truy畛n vo. N畉u kh担ng 畛 tham s畛 => d湛ng tham s畛 m畉c nhi棚n
  • 34. Nguy畛n C担ng Huy Khoa CNTT&TT 34 Tham s畛 m畉c nhi棚n V鱈 d畛 MessageBox( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK ) Hm th畛 hi畛n 1 c畛a s畛 th担ng b叩o trong Visual C++ MessageBox(Hien thi thong bao ra man hinh"); MessageBox( Chuc nang khong su dung duoc", Bao loi ); C坦 th畛 g畛i hm theo c叩c d畉ng sau: MessageBox( Ban muon thoat khoi chuong trinh?", Thong bao, MB_YESNO | MB_ICONASTERISK );
  • 35. Nguy畛n C担ng Huy Khoa CNTT&TT 35 Tham s畛 m畉c nhi棚n V鱈 d畛 void Ham1 (int a=0, int b=1) { cout<<tham so 1 = <<a<<endl; cout<<tham so 2 = <<b<<endl; } void main() { int x=10, y=20; cout << Goi Ham1 4 lan, ta duoc : <<endl; Ham1(x,y); Ham1(x); Ham1(y); Ham1(); }
  • 36. Nguy畛n C担ng Huy Khoa CNTT&TT 36 T叩i 畛nh ngh挑a hm Kh叩i ni畛m C++ cho ph辿p 畛nh ngh挑a c叩c hm tr湛ng t棚n. Quy t畉c t叩i 畛nh ngh挑a C叩c hm tr湛ng t棚n ph畉i kh叩c nhau v畛 tham s畛: S畛 l動畛ng Th畛 t畛 Ki畛u Quy t畉c g畛i hm T狸m hm c坦 ki畛u tham s畛 ph湛 h畛p. D湛ng ph辿p 辿p ki畛u t畛 畛ng. T狸m hm g畉n 炭ng (ph湛 h畛p) nh畉t.
  • 37. Nguy畛n C担ng Huy Khoa CNTT&TT 37 T叩i 畛nh ngh挑a hm V鱈 d畛 1 int Max (int a, int b) { return (a>b) ? a : b; } float Max (float a, float b) { return (a>b) ? a : b; } SinhVien Max (SinhVien a, SinhVien b) { return (a.diemtb > b.diemtb) ? a : b; } void main() { int x1=1, y1=2; float x2=3, y2=4; long x3=5, y3=6; cout << Max(x1,y1)<<t<<Max(x2,y2)<<endl; cout << Max(x3,y1) <<endl; cout << Max(x3,y2) <<endl; cout << Max(x3,y3) <<endl; }
  • 38. Nguy畛n C担ng Huy Khoa CNTT&TT 38 T叩i 畛nh ngh挑a hm V鱈 d畛 2 int F (int a=0, int b=1) { } float F (float a=5, float b=9) { } void main() { int x1=1, y1=2; float x2=3, y2=4; long x3=5, y3=6; cout << F(x1)<<t<<F(y2)<<endl; cout << F(x3) << F() << endl; }
  • 39. Nguy畛n C担ng Huy Khoa CNTT&TT 39 Hm inline L 1 hm nh動ng t叩c d畛ng t動董ng t畛 nh動 m畛t macro. Kh畉c ph畛c 動畛c c叩c nh動畛c i畛m c畛a hm v macro. Gi畉m th畛i gian th畛c thi ch動董ng tr狸nh. Tng k鱈ch th動畛c c畛a m達 l畛nh th畛c thi. Ch畛 n棚n 畛nh ngh挑a inline khi hm c坦 k鱈ch th動畛c nh畛. C炭 ph叩p : th棚m t畛 kh坦a inline vo tr動畛c hm. VD: inlineinline float sqr(float x) { return (x*x); } inlineinline int Max(int a, int b) { return ((a>b) ? a : b) ; }
  • 40. Nguy畛n C担ng Huy Khoa CNTT&TT 40 Tham chi畉u Kh叩i ni畛m L 1 lo畉i 畛i t動畛ng d畛 li畛u tham chi畉u 畉n 1 畛i t動畛ng c坦 s畉n. L 1 b鱈 danh nh動 con tr畛, nh動ng kh担ng c畉n c坦 t叩c t畛 *. VD: int x = 10; int *px; px = &x; int &rx = x; 3 c叩ch thay 畛i gi叩 tr畛 c畛a x : x = 5; *px = 5; rx = 5; 1010 1036H x 10361036 1080H *px &rx
  • 41. Nguy畛n C担ng Huy Khoa CNTT&TT 41 Tham chi畉u Tham chi畉u d湛ng nh動 m畛t bi畉n Kh畛i t畉o : int x=5; int &rx = x; int &a; int &b=5; // SAI Tham chi畉u h畉ng : kh担ng th畛 s畛a 畛i gi叩 tr畛. const int &n=10; <=> int x=3; const int &n=x; n=5; // B叩o l畛i v狸 n l炭c ny l h畉ng s畛 G叩n tr畛 l畉i : Kh担ng th畛 s畛a 畛i 畛i t動畛ng tham chi畉u. Ch畛 l thay 畛i gi叩 tr畛. int x = 5, y = 20; int &rx = x; rx = y; // Ch鱈nh l g叩n x=20 // kh担ng ph畉i l rx tham chi畉u 畉n y
  • 42. Nguy畛n C担ng Huy Khoa CNTT&TT 42 Tham chi畉u Tham chi畉u d湛ng nh動 畛i s畛 c畛a hm Lm thay 畛i gi叩 tr畛 c畛a tham s畛. H畛u 鱈ch cho hm tr畉 v畛 nhi畛u k畉t qu畉. Ti畉t ki畛m 動畛c 担 nh畛 trung gian (tham s畛 h狸nh th畛c) trong hm. void Nhap (int& a, float& b) { cout<< Nhap tham so 1 : ; cin>>a; cout<< Nhap tham so 2 : ; cin>>b; } void main() { int n; float m; Nhap( n , m ); }
  • 43. Nguy畛n C担ng Huy Khoa CNTT&TT 43 Tham chi畉u Tham chi畉u d湛ng nh動 tr畛 tr畉 v畛 c畛a hm 畛i t動畛ng tr畉 v畛 v畉n b畛n v畛ng khi hm k畉t th炭c. Tr畛 tr畉 v畛 l 1 畛i t動畛ng ton c畛c hay 1 v湛ng nh畛 c畛c b畛. VD: long a[1000]; long& GiaTri(int i) { return a[i]; } void main() { GiaTri(1) = 1; GiaTri(2) = 1; for( int i= 3; i<1000; i++) GiaTri(i) = GiaTri(i-1) + GiaTri(i-2); } => ch l畛i : che i c叩ch bi畛u di畛n c畛a d畛 li畛u. ( Ch畉ng h畉n : ta 畛i l畉i d湛ng CTDL l danh s叩ch li棚n k畉t => ch畛 vi畉t l畉i hm GiaTri(int ) m th担i )
  • 44. Nguy畛n C担ng Huy Khoa CNTT&TT 44 Truy畛n tham s畛 Truy畛n theo gi叩 tr畛 Gi叩 tr畛 tham s畛 khi ra kh畛i hm s畉 kh担ng thay 畛ikh担ng thay 畛i. void Swap1(int a, int b) { int temp = a; a = b; b = temp; } void main(){ int x = 5, y = 10; Swap1( x , y ); cout << x = << x << y = << y << endl; } 55 1010 xx yy aa bb mainmain Swap1Swap1 STEPSTEP 0101 55 1010 xx yy 55 1010 aa bb mainmain Swap1Swap1 STEPSTEP 0202 55 1010 xx yy 1010 55 aa bb mainmain Swap1Swap1 STEPSTEP 0303
  • 45. Nguy畛n C担ng Huy Khoa CNTT&TT 45 Truy畛n tham s畛 Truy畛n theo 畛a ch畛 (con tr畛) Gi叩 tr畛 tham s畛 khi ra kh畛i hm c坦 th畛 thay 畛ic坦 th畛 thay 畛i. void Swap2(int* a, int* b) { int temp = *a; *a = *b; *b = temp; } void main(){ int x = 5, y = 10; Swap2( &&x , &&y ); cout << x = << x << y = << y << endl; } 55 1010 xx yy aa bb mainmain Swap2Swap2 STEPSTEP 0101 100 200 55 1010 xx yy 100100 200200 aa bb mainmain Swap2Swap2 STEPSTEP 0202 100 200 1010 55 xx yy 100100 200200 aa bb mainmain Swap2Swap2 STEPSTEP 0303 100 200
  • 46. Nguy畛n C担ng Huy Khoa CNTT&TT 46 Truy畛n tham s畛 Truy畛n theo tham chi畉u: Gi叩 tr畛 tham s畛 khi ra kh畛i hm c坦 th畛 thayc坦 th畛 thay 畛i. void Swap3(int&& a, int&& b) { int temp = a; a = b; b = temp; } void main(){ int x = 5, y = 10; Swap3( x , y ); cout << x = << x << y = << y << endl; } 55 1010xx yy mainmain STEPSTEP 0101 aa bb Swap3Swap3 1010 55xx yy mainmain STEPSTEP 0202 aa bb Swap3Swap3 1010 55xx yy mainmain STEPSTEP 0303
  • 47. Nguy畛n C担ng Huy Khoa CNTT&TT 47 Struct Kh叩i ni畛m Struct L 1 d畉ng c畉u tr炭c d畛 li畛u m b畉n th但n c坦 th畛 ch畛a nhi畛u lo畉i d畛 li畛u c坦 ki畛u kh叩c nhau. Khai b叩o SinhVien a; 2 bytes 2 bytes 4 bytes 8 bytes diemtb namsinh *hoten masosv[]
  • 48. Nguy畛n C担ng Huy Khoa CNTT&TT 48 Struct Bi畉n ki畛u struct : SinhVien a, b, ds1[20], *ds2; Truy xu畉t c叩c thnh ph畉n c畛a struct : cin >> a.masosv; cout << Tuoi cua b la : <<b.tuoi; cin >> ds[19].namsinh; ds2->hoten = new char[50]; G叩n struct : SinhVien c = a; Con tr畛 struct : SinhVien *ds= new SinhVien[100];