You are on page 1of 51

i hc Thi Nguyn-Trng HSP.

Khoa Ton-Tin
Nguyn Mnh c Ngn ng lp trnh C++

Ngn ng lp trnh C++

Chng 1
Gii thiu ngn ng C++
1.1. Xut x ca ngn ng C
Ngn ng lp trnh C do Dennis Ritchie v Brian Kernighan xy dng
nm 1970, th hin c tt c cc c trng ca ngn ng lp trnh bc cao
nhng cng c kh y cc kh nng ca ngn ng lp trnh bc thp.
Cng vi s pht trin mnh m ca cng ngh thng tin (CNTT), ngn
ng C c rt nhiu phin bn ca cc hng khc nhau nh C chun, Turbo C,
Microsoft C ... Sau ngn ng C l C++ ngoi cc tnh nng nh C, C++ cn
c b sung nhiu tnh nng khc, mt trong l k thut lp trnh hng
i tng, mt hng lp trnh rt quan trng.
1.2. Mt s c trng ca ngn ng C
Khc vi ngn ng Pascal, trong ngn ng C khng c s phn bit gia
hm v th tc. Chng trnh ca C bao gm nhiu hm nm trong cc tp
khc nhau, mi hm c xy dng c lp v c th gp ni vi nhau mt
cch d dng.
Trong ngn ng C c nhiu m hnh t chc b nh, lm cho chng
trnh vit bng C s dng b nh tit kim v hiu qu.
Con tr trong C l mt cng c mnh m cho php truy nhp vo mi
ngun t liu v h thng mt cch hiu qu. C cho php pht trin giao din
ho rt tin dng ...
Chnh v th m hu ht cc h thng chng trnh ln u c vit
bng C, v vic hc ngn ng C l bt buc i vi cc sinh vin chuyn
ngnh CNTT v nhng ngi lp trnh chuyn nghip.
Trong ti liu ny chng ta ch yu xt Turbo C Vr.3.0 ca Borland, bi
l C++ ang c ci t ph bin trn cc my vi tnh, s dng tng i d
dng v c trang b k thut lp trnh hng i tng, vn ny s c
xt trong mt chuyn tip theo.

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

1.3. Ci t ngn ng C
ci t c C++ vo my phi c b chng trnh gc TURBO C++
3.0 ca Borland, b chng trnh ny c th cha trn cc a mm hoc trong
a CD. Vic ci t tin hnh n gin nh sau: chy chng trnh INSTALL
trong a th nht, ri lm theo cc ch dn trn mn hnh.
Cng c th s dng b chng trnh Microsoft C++, vic ci t bng
cch thc hin chng trnh SETUP.
1.4. To chng trnh trong C
B x l vn bn Editor ca C++ cho php ta to ra cc chng trnh
ngun. nhanh chng to ra vn bn chng trnh ta cn nh mt s thao
tc sau:
To tp mi

: File New

M tp

: File Open (F3)

Ghi tp

: File Save (F2)

Ghi vi tn khc

: File Save as

Dch chng trnh : Compile (Alt + F9)


Chy chng trnh : Run (Ctrl + F9)
Thot ra

: File Quit (Alt + X)

Thao tc vi khi:
nh du du khi

: Ctrl + K + B

nh du cui khi

: Ctrl + K + K

Chuyn khi vo b nh m

: Edit + Cut

Sao chp khi vo b nh m : Edit + Copy


Sao chp khi ti v tr con tr : Edit + Paste
n, hin khi

: Ctrl + K + H

c tp t a vo v tr con tr : Ctrl + K + R
Ghi khi ln a
Tm mt xu

: Ctrl + K + R

: Ctrl + Q + F

Tm v thay th : Ctrl + Q + A
Xem tr gip

: Help (F1)
4

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

1.5. V d
V d chng trnh 1.1: Hin xu Hello ln mn hnh
// chuong trinh dau tien HELLO.CPP
# include <iostream.h>
void main()
{
cout << "Hello !"; // hin xu Hello
}

V d chng trnh 1.2: Tnh giai tha n!


// Tinh giai thua GTHUA.CPP
# include <iostream.h>
// Hm tnh giai tha
long gthua(int &n)
{ int gt = 1;
for (int i = 1; i <= n; i++) gt = gt*i;
return gt;
}
// Chng trnh chnh
void main()
{
int k;
cout << "\nNhap so n = "; cin >> k;
cout << k << "! = " << gthua(k);
}

Nhn xt:
- Trong chng trnh C c mt chng trnh (hm) chnh main() v c th
c hoc khng cc hm con.
- Du { v } ging nh Begin v End trong Pascal.
- Kt thc mt lnh c du chm phy (;).
- Li gii thch t sau cp k t //, v c th t trn mt dng hay sau
mt dng lnh.
- C phn bit tn vit bng ch thng vi ch hoa.
- Khi lnh (lnh ghp) l cc lnh t trong cp du ngoc nhn { ... }.

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

Chng 2
Cc khi nim c bn
2.1. Tp cc k hiu ca ngn ng C
26 ch ci hoa A ... Z, 26 ch ci thng a ... z
10 ch s : 0, 1, 2, ..., 9
Cc k hiu php ton: + - * / = ()
K t ni _ (du gch di).
Cc k hiu c bit: . , : [ ] { } ! @ # ...
2.2. Cc t kho
T kho l nhng t c s dng xc nh nhng tn c quy
nh sn trong C++, ngi s dng khng th t cc tn trng vi t kho.
Sau y l danh sch cc t kho trong C++:
asm

continue

float

new

signed

try

auto

default

for

operator

sizeof

typedef

break

delete

friend

private

static

union

case

do

goto

protected

struct

unsigned

catch

double

if

public

switch

virtual

char

else

inline

register

template

void

class

enum

int

return

this

volatile

const

extern

long

short

throw

while

2.3. Tn gi
Tn gi l tn cc bin, hm, lp ... do ngi s dng to ra trong cc
chng trnh. Tn gi phi tun theo cc quy nh sau y:
Bt u bng mt ch ci hay du gch di, sau c th l cc
ch ci, ch s hay du gch di.
Ch ci hoa v ch ci thng l khc nhau.
Khng c trng vi cc t kho.

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

2.4. Cc kiu d liu c s


Kiu d liu c s l cc kiu d liu c xy dng sn trong C++,
cc kiu trong C++ c biu din theo cu trc phn cp nh sau:
Cc kiu d liu trong C++

Kiu d liu c s

S
nguyn

int

void

char

S
thc

float

double

Kiu dn
xut

Kiu do ngi s
dng nh ngha

array
function
pointer

structure
union
class
enumeration

Ngoi tr kiu void, cc kiu d liu c s c th s dng kt hp vi


signed (c du), unsigned (khng du), long (s di), short (s ngn). Bng
sau y s cho bit kch thc v min xc nh ca cc kiu c s:
Kiu
char
unsigned char
signed char
int
unsined int
signed int
short int
unsigned short int
signed short int
long int
signed long int
unsigned long int
float
double
long double

S byte

Min xc nh

1
1
1
2
2
2
2
2
2
4
4
4
4
8
10

-128 .. 127
0 .. 255
-128 .. 127
-32768 .. 32767
0 .. 65535
-32768 .. 32767
-32768 .. 32767
0 .. 65535
-32768 .. 32767
-214783648 .. 214783647
-214783648 .. 214783647
0 .. 4294967295
3.4E-37 .. 3.4E+38
1.7E-308 .. 1.7E+308
3.4E-4932 .. 1.1E+4932
7

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

2.5. Khai bo bin


Mi bin cn phi khai bo trc khi s dng. Vic khai bo bin c
thc hin theo quy tc chung nh sau:
Kiu d liu <danh sch tn bin>;
V d:
int a, b, c;

// Khai bo 3 bin kiu int

float x, y;

//Khai bo 2 bin kiu float

char ch1;

// Khai bi 1 bin kiu char

Khi khai bo cc bin cng c th khi to ngay gi tr cho chng, v d:


int s1 = 5, s2, s3 = 10;
V tr khai bo bin: C++ cho php khai bo cc bin bt k v tr no
trong min xc nh. V d, hy xem vic khai bo cc bin trong on
chng trnh sau:
float x;

// khai bo bin x

float s = 0; // khai bo bin s v khi to gi tr 0 cho n


for (int i = 1; i<=10; i = i+1) // khai bo bin trong vng lp
{
cout << Nhap x = ;
cin >> x;
s = s + x;
}
float TB = s/10;

// gn gi tr ng khi thc hin

cout << TB;


Min tc dng ca bin c xc nh t im bin c khai bo cho
n cui khi cha khai bo . Bin c khai bo bn trong ca khi c
gi l bin cc b ca khi , bin c khai bo ngoi cng c gi l
bin tng th.
2.6. Hng
Hng l cc i lng m gi tr ca n khng thay i trong qu trnh
hot ng ca chng trnh.
Hng s nguyn int: 45
8

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

Hng long: 4599L; 123l


Hng float v double: 12.5; -0.001; 15. ; 1E-5; 1.327E+9
Hng nguyn h 16: oxa9; OX15AF
Hng k t: A ; a; 0
Hng xu k t: Ha noi; DHSP; a;
Khai bo hng:
const n = 10;

// khai bo hng n = 10

# define pi 3.14159 // khai bo hng pi = 3.14159


enum{A = 100; B = 150};
2.8. Nhp/xut
2.8.1. Nhp xut bng lnh cin, cout
vit d liu ra mn hnh c th dng lnh cout nh sau:
cout << <bt> [<< <bt> ] [...];
V d:
cout << Hello;
int a = 5, b = 9;
cout << Tich ab = << a*b ;
nhp d liu vo t bn phm c th dng lnh cin nh sau:
cin >> tn_bin [<< tn_bin] [<< ...];
V d:
cin >> n1;
cin >> n2;
C th gp hai lnh trn li nh sau: cin >> n1 >> n2;
Ch rng, s dng c cc lnh cin v cout trn trong chng trnh
phi c lnh # include <iostream.h> u chng trnh.
V d chng trnh 2.1: Lp chng trnh nhp hai s nguyn vo t bn
phm ri tnh tng ca chng.
// chuong trinh vi du nhap xuat
# include <iostream.h>

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

void main()
{
int a,b;
cout << "a = "; cin >> a;
cout << "b = "; cin >> b;
cout << "a + b = " << a+b;
}

C c nhiu lnh nhp xut d liu, sau y ta xt thm lnh xut printf,
lnh nhp scanf v gets.
2.8.2. Nhp xut bng printf, scanf, gets
s dng c cc hm ny phi c dn hng # include <stdio.h>
u chng trnh.
Hm printf c kh nng chuyn dng, to khun v a cc gi tr ra mn
hnh. Dng tng qut ca hm nh sau:
int printf(const char *dk [,danh sch cc biu thc]);
Cc k t iu khin:
\n

: sang dng mi.

\f

: sang trang mi.

\b

: li li mt bc.

\t

: du tab

Cc k t c t dng: quy nh khun dng d liu c in ra


%c

: k t n.

%s

: chui

%d

: s nguyn c du.

%f

: s thp phn du chm tnh.

%e

: s thp phn du chm ng.

%x

: s nguyn h 16 khng du.

%u

: s nguyn h 10 khng du.

%o

: s nguyn h 8 khng du.

: tin t cng vi %d, %x ... ch s nguyn di


(v d %ld).

10

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

xc nh rng ca biu thc in ra ta thm chui quy nh rng


vo gia, chng hn nh: %5d, %7.3f
V d:

printf(%5d %8.2f,12, 759.23678);

th s in ra l:

12 759.24

Hm scanf cho php c thng tin t thit b vo chun (bn phm), ri


lu vo bin nh. Hm c dng nh sau:
int scanf(const char *dk [, danh sch bin nh];
Trong hm scanf c dng ton t a ch & trc tn bin.
V d:
int a, b;
printf(\nNhap so a, b : );
scanf(%d %d, &a, &b);
Khi dng cc lnh cin hay scanf nhp cc chui m trong n c cha
du cch, th phn chui nhp vo t du cch tr i s b b qua, chng hn
nhp chui L Vn Hng th bin nhp ch nhn c L. khc phc
iu ta c th dng hm gets.
Hm gets c dng:
char *gets(char *s);
V d chng trnh 2.2: Nhp vo 2 s ri in ra tng ca chng:
# include <stdio.h>
void main()
{
int a,b;
printf("a = "); scanf("%d",&a);
printf("b = "); scanf("%d",&b);
printf("a + b = %d",a+b);
}

V d chng trnh 2.3: Nhp vo h v tn ca mt ngi v in ra mn


hnh:
# include <stdio.h>
void main()
{ char ht[18];
printf("\nVao ho va ten : ");
gets(ht);
printf("\nBan da nhap %s",ht);
}

11

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

2.9. Ton t
2.9.1. Ton t s hoc:
Cc ton t s hc gm c:
+

Cng

Tr

Nhn

Chia

D s

u tin: cc php ton nhn chia c thc hin trc cng v tr.
2.9.2. Ton t gn
Ton t gn: =
Nu c lnh: s = s + i;
C th vit : s += i;
Tng t c cc ton t gn s hc sau: -=
V d:

*=

/=

%=

int a=5, b, c;
b = c = 10;

2.9.3. Ton t tng gim


Cu lnh

i = i +1;

C th vit gn thnh: i++; hay ++i;


++i tng gi tr ca bin ri mi s dng, cn i++ dng bin ri mi tng
gi tr.
Tng t c cc ton t gim -- .
2.9.4. Ton t quan h
Cc ton t quan h gm c: < > <= >= == !=
Kt qu ca cc ton t quan h l 1 (ng), hoc 0 (sai).
Cc ton t s hc c u tin cao hn cc ton t quan h.
2.9.5. Ton t logic
Cc ton t logic gm c:
&&

logic AND
12

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

||

logic OR

logic NOT

logic XOR

Bng chn l ca cc php ton logic:


a

a&&b

a||b

!a

a^b

Cc php ton quan h c u tin nh hn so vi ! nhng ln hn so


vi &&, || v ^.
2.9.6. Ton t x l bit
Cc ton t x l bit gm c:
&
|
^
>>
<<
~

AND theo bit


OR theo bit
XOR theo bit
Dch phi
Dch tri
Ly phn b theo bit

Ta c:
0&0=0

0|0=0

0^0=0

0&1=0

0|1=1

0^1=1

1&0=0

1|0=1

1^0=1

1&1=1

1|1=1

1^1=0

a << n = a*2n
a >> n = a/2n
~0=1
~1=0

13

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

2.9.7. Th t u tin ca cc ton t


TT
Ton t
1 ::
2 -> () []
3 prefix++ prefix-- postfix++ postfix-~ ! unnary+ unary- unary* unary&
(type) sizeof new delete
4 ->* *
5 * / %
6 + 7 << >>
8 < <= > >=
9 == !=
10 &
11 ^
12 |
13 &&
14 ||
15 ?:
16 = += -= *= /= %= <<= >>= &=
^= |=

Tnh kt hp
tri sang phi
tri sang phi
phi sang tri

tri sang phi


tri sang phi
tri sang phi
tri sang phi
tri sang phi
tri sang phi
tri sang phi
tri sang phi
tri sang phi
tri sang phi
tri sang phi
phi sang tri
phi sang tri

Nhn xt:
Cc ton t dng trn c mc u tin cao hn dng di.
Cc php ton cng dng c mc u tin nh nhau.
prefix v posfix l nhng t xc nh s dng ++, -- thc hin trc
hay sau. Cn unary ch nh cc ton t mt ngi.
2.9.8. Biu thc
Biu thc l s kt hp gia cc ton t (operator) v cc ton hng
(operand) din t mt cng thc ton hc no .
Ton t
: l cc php ton (s hc, logic, quan h ... )
Ton hng : l i tng tc ng ca cc ton t (cc hng, bin,
hm...)
14

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

Trong C c cc loi biu thc:


- Biu thc s: gi tr ca biu thc l s.
- Biu thc logic: gi tr ca biu thc l ng (1) hoc sai (0).
- Biu thc k t: gi tr ca biu l mt k t thuc bng m ASCII.
- Biu thc chui k t: gi tr ca biu thc l mt chui k t.

15

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

Chng 3
Cc cu trc iu khin
3.1. Cu trc tuyn chn
3.1.1. Dng if
if (<btL>)

Bt L

<Khi lnh>;

Khi lnh

Nu <btL> c gi tr ng (1) th
thc hin <khi lnh> ri ra khi cu
trc, ngc li <btL> c gi tr sai (0)
th khng thc hin <khi lnh> v ra
ngay khi cu trc.

V d chng trnh 3.1: Nhp 2 s v tm s ln hn.


# include <iostream.h>
# include <conio.h>
void main()
{
int a, b, max;
cout << "Vao so thu nhat: "; cin >> a;
cout << "Vao so thu hai : "; cin >> b;
max = a;
if (b > max) max = b;
cout << "Max = " << max;
getch();
}

3.1.2. Dng if ... else


if (<btL>)

<Khi lnh 1>;


else
<Khi lnh 2>;

<Khi lnh 1>

btL

<Khi lnh 2>

16

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

Nu <btL> c gi tr ng th thc hin <Khi lnh 1> ri ra khi cu


trc, nu <btL> c gi tr sai th thc hin <Khi lnh 2> ri ra khi cu trc.
V d chng trnh 3.2: Gii PT bc hai (a#0) trn trng s thc.
#
#
#
#

include
include
include
include

<iostream.h>
<stdio.h>
<conio.h>
<math.h>

void main()
{
float a, b, c, d, x1, x2;
clrscr();
gotoxy(10,3);
printf("GIAI PT BAC 2\n");
cout << "a = "; cin >> a;
cout << "b = "; cin >> b;
cout << "c = "; cin >> c;
d = b*b - 4*a*c;
if (d < 0)
cout << "\nPhuong trinh vo nghiem";
else
if (d == 0)
cout << "\nNghiem kep X = " << -b/(2*a);
else
{
x1 = (-b+sqrt(d))/(2*a);
x2 = (-b-sqrt(d))/(2*a);
cout << "\nPT co 2 nghiem phan biet"
<< "\n
X1 = " << x1
<< "\n
X2 = " << x2;
}
getch();
}

3.1.3. Dng switch


switch (<bt nguyn>)
{
case hng1:
<khi lnh 1>;
break;
case hng2:
<khi lnh 2>;
break;
...
17

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

case hng n:
<khi lnh n>;
break;
[default:
<khi lnh n+1>;]
}
Nu <bt nguyn> c gi tr l mt hng i (i = 1 .. n) th thc hin <khi
lnh i>, ri ra khi cu trc. Nu <bt nguyn> khng cho gi tr l mt hng i
no th thc hin <khi lnh n+1> (nu c) ri ra khi cu trc.
V d chng trnh 3.3: Nhp 2 s ri chn mt php ton s hc tnh 2
s .
# include <iostream.h>
# include <stdio.h>
# include <conio.h>
void main()
{
float a, b;
char PT;
clrscr();
gotoxy(10,3);
printf("TINH TOAN SO HOC\n");
cout << "a = "; cin >> a;
cout << "b = "; cin >> b;
cout << "Chon phep toan (+ - * :) ? "; cin >> PT;
switch (PT)
{
case '+':
cout << "\na + b = " << a+b;
break;
case '-':
cout << "\na - b = " << a-b;
break;
case '*':
cout << "\na x b = " << a*b;
break;
case ':':
if (b!=0)
cout << "\na : b = " << a/b;
else
cout << "\nKhong chia duoc !";
break;
default:

18

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

cout <<"\nBan chon phep toan sai.";


}
getch();
}

3.1.4. Biu thc iu kin


<bt>? <bt1>:<bt2>;
Gi tr ca biu thc iu kin bng gi tr ca <bt1> nu <bt> c gi tr
ng (1), bng gi tr ca <bt2> nu <bt> c gi tr sai (0).
V d:
max = (num1>num2)? num1: num2;
Tng ng vi:
if (num1>num2)
max = num1;
else
max = num2;
3.2. Cu trc lp
3.2.1. Dng for
for(<bt khi to>; <bt kim tra>; <bt tng/gim>)
<Khi lnh>;
S hot ng ca vng for nh sau:
1. Xc nh <bt khi to>.
2. Xc nh <bt kim tra>, nu n c gi tr sai th thot khi cu
trc, nu n c gi tr ng th thc hin <khi lnh>.
3. Tnh <bt tng/gim> ri quay li bc 2.
V d:

for (int i=1; i<=100; i++) s = s + i;


hoc for (int i=100; i > 0; i-- ) s = s + i;

V d chng trnh 3.4: Lp bng nhn ca 10 s t nhin u tin.


# include <iostream.h>
# include <conio.h>
# include <iomanip.h>
void main()
{
int i, j;

19

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

clrscr();
gotoxy(20,3);
cout << "Bang tinh nhan\n\n";
for (i=1; i<=10; i++)
{
for (j=1; j<=10; j++)
cout << setw(5) << i*j;
cout <<"\n";
}
getch();
}

3.2.2. Dng while


while (<btL>)
<khi lnh>;
Vng lp while hot ng nh sau:
1. Xc nh gi tr ca <btL>.
2. Tu thuc vo gi tr ng hay sai ca <btL>, my s:
- Nu <btL> c gi tr sai th thot ra khi cu trc lp.
- Nu <btL> c gi tr ng th thc hin <khi lnh>, ri
quay li bc 1.
V d chng trnh 3.5: Tnh tng S = 1 + 1/2 + 1/3 + ... vi chnh xc
-6

10 .
# include <iostream.h>
# include <conio.h>
# define ss 1E-6
void main()
{
double s = 0;
int i = 1;
clrscr();
cout <<"\nTinh S = 1 + 1/2 + 1/3 + ...";
while (1.0/i >= ss)
{
s = s+ 1.0/i;
i = i+1;
}
cout<< "\nS =" << s;
getch();
}

20

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

V d chng trnh 3.6: Nhp 2 s ri chn mt php ton s hc tnh 2


s .
# include <iostream.h>
# include <stdio.h>
# include <conio.h>
void main()
{
float a, b;
char PT;
while (1)
{
clrscr();
// Xoa man hinh
gotoxy(10,3);
// chuyen con tro toi (10, 3)
printf("TINH TOAN SO HOC\n");
cout << "a = "; cin >> a;
cout << "b = "; cin >> b;
cout << "Chon phep toan (+ - * /) ? ";
cin >> PT;
switch (PT)
{
case '+':
cout << "\na + b = " << a+b;
break;
case '-':
cout << "\na - b = " << a-b;
break;
case '*':
cout << "\na x b = " << a*b;
break;
case '/':
if (b!=0)
cout << "\na : b = " << a/b;
else
cout << "\nKhong chia duoc !";
break;
default:
cout <<"\nBan da chon sai !";
}
char TL;
cout << "\n\nCo tinh nua khong (C/K) ? ";
cin >> TL;
if (TL == 'K' || TL == 'k') break;
}
}

21

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

3.2.3. Dng do ... while


do
<khi lnh>;
while (<btL>);
Vng lp do while hot ng nh sau:
1. Thc hin <khi lnh>.
2. Xc nh gi tr ca <btL> sau while:
- Nu <blL> c gi tr sai th thot ra khi cu trc.
- Nu <btL> c gi tr ng th quay li bc 1.
V d chng trnh 3.7: Tnh tng S = 1 + 1/2 + 1/3 + ... vi chnh xc
-6

10 .
# include <iostream.h>
# include <conio.h>
# define ss 1E-6
void main()
{
double s = 0;
int i = 1;
clrscr();
cout <<"\nTinh S = 1 + 1/2 + 1/3 + ...";
do
{
s = s+ 1.0/i;
i = i+1;
}
while (1.0/i >= ss);
cout<< "\nS =" << s;
getch();
}

3.2.4. Lnh break v continue


Khi gp break trong vng lp th s kt thc vng lp trong cng cha n.
Khi gp continue trong vng lp th s s quay li u vng lp, b qua
phn sau continue.
Lnh break trong cu trc witch kt thc mt nhnh case. Nu cui
khi lnh ca mt nhnh case khng c lnh break, khi thc hin xong khi
lnh , my s thc hin tip khi lnh ca case tip theo.
22

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

3.2.5. Nhn v lnh goto


Tn nhn c quy nh ging tn bin v c du hai chm (:) sau cng.
C th gn bt k cu lnh cho nhn, chng hn:
tiep_tuc: s = s + i;
Khi tiep_tuc l nhn ca lnh s = s + i;
Lnh goto c dng:
goto <nhn>;
Khi gp lnh ny my s nhy ti <nhn> trong chng trnh.
Ch :
Lnh goto ch c php nhy t mt v tr ny ti mt v tr khc
trong thn ca mt hm. N khng th nhy t hm ny ti hm
khc.
Khng c php cho lnh goto nhy t ngoi vo trong mt
khi lnh. Tuy nhin vic nhy t trong mt khi lnh ra ngoi l
hp l.
V d chng trnh 3.8: Nhp 2 s ri chn mt php ton s hc tnh 2
s .
# include <iostream.h>
# include <stdio.h>
# include <conio.h>
void main()
{
float a, b;
char PT;
tiep_tuc: clrscr();
gotoxy(10,3);
printf("TINH TOAN SO HOC\n");
cout << "a = "; cin >> a;
cout << "b = "; cin >> b;
cout << "Chon phep toan (+ - * :) ? "; cin >> PT;
switch (PT)
{
case '+':
cout << "\na + b = " << a+b;
break;
case '-':
cout << "\na - b = " << a-b;

23

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

break;
case 'x':
case 'X':
case '*':
cout << "\na x b = " << a*b;
break;
case '/':
case '\\':
case ':':
if (b!=0)
cout << "\na : b = " << a/b;
else
cout << "\nKhong chia duoc !";
break;
default:
cout <<"\nBan da chon sai !";
}
char TL;
cout << "\n\nCo tinh nua khong (C/K) ? ";
cin >> TL;
if (TL == 'c' || TL == 'C') goto tiep_tuc;
}

Bi tp
1. Gii v bin lun phng trnh ax + b = 0
2. Gii v bin lun h pt bc nht:
ax + by = c
a1x + b1y = c1
3. Vit chng trnh nhp 3 s x, y, z v tm s ln nht v nh nht trong
chng.
4. Lp chng trnh tm SCLN ca hai s nguyn dng a, b.
5. Gii v bin lun phng trnh aX4 + bX2 + c = 0
6. Lp chng trnh in ra bng cn bc 2 v cn bc 3 ca 100 s t nhin u
tin.
7. Lp chng trnh nhp mt s t nhin c ba ch s v i thnh ch.

24

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

8. Lp chng trnh tnh

S =

9. Lp chng trnh tnh

n!! =

1 + 3 + 5 + ... + n neu n le
2 + 4 + 6 + ... + n neu n chan

1 x 3 x 5 x ... x n neu n le
2 x 4 x 6 x ... x n neu n chan

10. Lp chng trnh tnh S = 1 -1/2 + 1/3 - 1/4 + 1/5 - 1/6 +... vi chnh
xc 10-6
11. Lp chng trnh tnh S = 1! + 2! + 3! + ... + n!
12. Lp chng trnh tnh khai trin Taylor hm s sau:
x2

x
ex = 1 +

+
1!

x3
+

2!

xn
+

... +

3!

n!

Vi chnh xc 10-6
13. Li xut lu tin khi gi tin tit kim khng k hn l 1% mi thng (li
xut lu tin l tin li ca thng trc c cng vo tin gc tnh li cho
thng sau). Hy lp chng trnh tnh s tin c c (c li ln gc) khi gi
N ng sau M thng.
14. Cho xu k t ABCD, cc xu ABCD, BACD, DABC, CDAB ...
c gi l cc hon v ca xu ABCD. Lp trnh tm :
a. S lng cc hon v ca xu ABCD.
b. In ra mn hnh cc hon v ca xu ABCD.
15. S Mersen l s nguyn t c dng 2n -1, trong n cng l mt s
nguyn t. Hy lp trnh tm tt cc cc s Mersen khng qu 10 ch s.
16. S 36 c tnh cht 36= 62 = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8
S tip theo c tnh cht nh vy l 125 = 352 = 1 + 2 + 3 + ... + 49.
Hy tm tt c nhng s khng vt qu 7 ch s c tnh cht nh trn.
17. Lp chng trnh in ra 1000 s nguyn t u tin.

25

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

Chng 4
Hm v cu trc chng trnh
Hm ng vai tr quan trng trong chng trnh C. Chng trnh c
chia thnh nhiu n th chc nng theo cch tip cn trn-xung, v c
thit k theo phng php lp trnh c cu trc. Mt chng vit trong ngn
ng C bao gm mt hm chnh (hm main) v cc hm con (mi hm l mt
chng trnh con). Th t ca cc hm trong chng trnh l bt k, nhng
chng trnh bao gi cng c thc hin t hm main. Trong C++ cc hm
c b sung nhiu c tnh mi h tr cho lp trnh hng i tng.
4.1. Chc nng ca hm
4.1.1. Hm main()
Chng trnh trong C l mt tp cc hm trong c mt hm main(),
l ni chng trnh c bt u v kt thc. Trong C hm main() nhn tr li
gi tr kiu int cho h thng, n c dng chung nh sau:
int main()
{
...
// Ni dung ca hm main()
return <bt int>;
}
Quy nh chung trong C l hm main() c kiu int, nn thng thng ta
khng phi khai bo kiu int m xem iu l mc nh.
Trong C++ hm main() c th l kiu void, nn khng cn tr li gi tr.
4.1.2. Trnh vic lp li cc on chng trnh
Nu chng trnh c nhiu on ging nhau, trnh vic phi vit li
cc on ging nhau , hy lp mt chng trnh con (hm con), khi cn
thit ch vic n ra cng vi cc tham s cn thit.
main()
{
func(5);
...
func(9);
}

func(int x)
{
...
}

26

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

4.1.3. T chc chng trnh


Phn tch chng trnh ln thnh cc modul chng trnh nh c lp,
mi modul l mt hm con gii quyt mt cng vic c th. Tng hm s
c hon chnh, kim tra sau li kt ni li thnh mt h thng chng
trnh.
4.1.4. Tnh c lp
Tnh c lp cho php cc chng trnh con c lp vi chng trnh
chnh. Chng hn trong chng trnh con c cc bin cc b, khng b chng
trnh chnh hay cc chng trnh con khc truy nhp n. iu ny s lm hn
ch ti vic ng chm tn bin, kim sot c cc hiu ph trong h thng
chng trnh ...
4.1.5. So snh hm trong C vi hm v th tc trong Pascal
Trong Pascal hm v th tc l hai i tng ring bit, hm tr v gi tr
cn th tc thc hin nhng tc v no . Trong C, hai khi nim ny nhp
li l mt, ngha l hm ca C c th tr v d liu qua i v cng c th tr
v gi tr.
4.2.Xy dng hm
4.2.1. Quy tc xy dng hm
Hm c th xem nh mt n v c lp ca chng trnh. Cc hm c
vai tr ngang nhau, cho nn trong ngn ng C khng cho php xy dng mt
hm nm bn trong mt hm khc.
Hm c dng chung nh sau:
type tn_hm(danh sch tham s hnh thc)
{
...

// thn hm

}
V d:
float max(float x, float y)
{ if ( x > y ) return x;
else return y; }

27

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

Trong C++ c hm kiu void, l hm khng tr li gi tr no. Khi


hm khng c i cng c th coi i ca n l void, v d:
void hamxyz(void)
4.2.2. Li gi hm
tn_hm([danh sch tham s tht])
Khi mt hm c gi th qu trnh din ra nh sau:
Cp pht b nh cho cc i v cc bin cc b.
Gn gi tr ca cc tham s tht cho cc i tng ng.
Thc hin cc lnh trong thn hm.
Khi gp cu lnh return hoc du } cui cng ca thn hm th
my s xo cc i, cc bin cc b v thot ra khi hm.
V d chng trnh 4.1: Lp chng trnh tm s ln hn ca 2 s cho.
# include <iostream.h>
# include <conio.h>
float max(float x, float y)
{
if (x > y)
return x;
else
return y;
}
void main()
{
float a = 5.5 ,b = 10;
clrscr();
cout << "\nmax = " << max(a,b);
getch();
}

4.2.3. Khai bo nguyn mu hm (prototype)


Nguyn mu ca hm l cch nh ngha v khai bo hm theo chun
ANSI, thc cht l dng u tin ca hm v c thm du chm phy (;).
Mc ch ca cch khai bo ny l trnh cc li do khng ng kiu d
liu gia tr truyn n hm v tr hm momg mun. Vi cc chng trnh ln
v phc tp th vic khai bo nguyn mu hm cng quan trng.

28

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

V d chng trnh 4.2: Tnh din tch hnh trn.


# include <iostream.h>
# define PI 3.14159
void main()
{
float dtht(float r); //Khai bao nguyen mau ham
cout << dtht(5.25);
}
float dtht(float r) { return r*r*PI; }

V d chng trnh 4.3. Tm c s chung ln nht ca 2 s nguyn


dng.
# include <iostream.h>
# include <conio.h>
int USCLN(int x, int y); // Khai bo nguyn mu ca hm USCLN
void main()
{
int a = 24, b = 36;
clrscr();
cout << "\nUSCLN(" << a << ", " << b<< ") = "
<< USCLN(a,b);
getch();
}
int USCLN(int x, int y)
{
while (x != y)
{
if (x > y) x = x-y;
else y = y-x;
}
return x;
}

4.2.4. Truyn tham s cho hm


C 4 cch truyn mt i cho cho mt tham s ca hm: truyn bng gi
tr, bng gi tr const, bng tham chiu, v bng tham chiu const.
Truyn bng gi tr:
Truyn bng gi tr l l phng php n gin v thng dng nht.
Trong cch truyn ny tham s l bin cc b, trong qu trnh gi thc hin
hm s thay i ca tham s hnh thc khng lm thay i gi tr nguyn thu
ca i (bin) c truyn.
29

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

V d chng trnh 4.4:


# include <iostream.h>
# include <conio.h>
// truyen tham so theo gia tri
void func(int x)
{
x = x+1;
cout << "\nx = " << x;
}
void main()
{
int u = 33;
clrscr();
func(u);
cout << "\nu = " << u;
getch();
}

Chng trnh trn s cho kt qu:


x = 34
u = 33
Truyn bng gi tr const
Truyn bng gi tr const tng t nh truyn bng gi tr nhng c thm
t kho const vo trc tn kiu bin hnh thc, lm cho tham s tr thnh
hng v hm khng th thay i c gi tr ca n.
V d chng trnh 4.5:
# include <iostream.h>
# include <conio.h>
// truyen tham so theo gia tri const
void func(const int x)
{ cout << "\nx = " << x; }
void main()
{
int u1 = 3, u2 = 5;
clrscr();
func(2*u1+6*u2);
getch();
}

Chng trnh trn cho kt qu:


x = 36
30

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

Truyn bng tham chiu


Truyn bng tham chiu (cn gi l truyn theo a ch) cho php thay
i gi tr ca i, v tham s ca hm ch l b danh cho i hin c. Trong
cch truyn ny phi thm ton t & vo trc tn tham s hnh thc.
V d chng trnh 4.6:
# include <iostream.h>
# include <conio.h>
// truyen tham so bang tham chieu
void func1(int &x)
{
x = x+1;
cout << "\nx = " << x;
}
void main()
{
int u = 33;
clrscr();
func1(u);
cout << "\nu = " << u;
getch();
}

Chng trnh trn s cho kt qu:


x = 34
u = 34
V d chng trnh 4.7: Hon v 2 s.
# include <iostream.h>
# include <conio.h>
void hoan_vi(int &x, int &y)
{
int z;
z = x;
x = y;
y = z;
}
void main()
{
int a = 5, b = 10;

31

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

clrscr();
cout << "\nHoan vi 2 so";
cout << "\nBan dau:" << endl
<< "a = " << a << endl
<< "b = " << b;
hoan_vi(a, b);
cout << "\nSau hoan vi:" << endl
<< "a = " << a << endl
<< "b = " << b;
getch();
}

Truyn bng tham chiu const


Truyn bng tham chiu const tng t nh truyn bng tham chiu,
nhng hm c truyn khng th lm thay i gi tr ca i c truyn.
Trong cch truyn ny phi thm t kho const vo trc tn kiu ca tham s
hnh thc.
V d chng trnh 4.8:
# include <iostream.h>
# include <conio.h>
// truyen tham so bang tham chieu const
void func1(const int &x)
{ cout << "\nx = " << x; }
void main()
{
int u = 33;
clrscr();
func1(3*u);
getch();
}

Chng trnh trn cho kt qu:


x = 99
4.3. Dn hng tin x l
C th coi dn hng tin x l l mt ngn ng nh trong C. hiu
cc dn hng tin x l, u tin hy xem trnh bin dch s lm g khi gp
dng lnh trong chng trnh nh sau:
number =45;

32

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

Bn yu cu trnh bin dch dch dng lnh ny ra m my, chip vi x


l c th thc hin c. Thay v phi dch ngay sang m my, cc dn hng
tin x l yu cu trnh bin dch phi x l chng theo mt yu cu no
ca ngi lp trnh trc khi bt u trnh bin dch, v m c tn l tin x
l. Sau y chng xem xt hai dn hng tin x l rt hay c s dng,
l #define v #include.
4.3.1. Dn hng #define
Dn hng #define dng gn tn cho hng, v d:
#define PI 3.14159
Chun ANSI cho php khai bo hng nh sau:
const PI = 3.14159;
Dn hng #define thay th cho cu lnh, v d:
#define ERROR cout << \nError, division by zero !\n
Khi cn thng bo do li, c th gi n nh sau:
if (b == 0) ERROR;
X l hm macro, v d:
#define DT(r) (PI*r*r) // Tnh din tch hnh trn
V d chng trnh 4.9.
# include <iostream.h>
# define PI 3.14159
# define ERROR cout << "\nLoi, ban kinh am.\n"
# define DT(r) PI*r*r
void main()
{
int bk;
cout <<"\nVao ban kinh r = ";
cin >> bk;
if (bk >= 0) cout << DT(bk);
else ERROR;
}

4.3.2. Dn hng #include


Dn hng #include dng np cc tp tin ngun vo tp tin ang lm
vic.
Khi ta xy dng cc h thng chng trnh ln v phc tp trn C, thng
c nhiu biu thc, cng thc tnh ton, hm t to, hng, macro, dn hng...
33

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

c s li nhiu ln. Ta c th t tt nhng th vo mt tp tin ngun


ring vi phm m rng l h (v d progres.h). Khi vit chng trnh cn phi
s dng cc cng vic x l trn, ta ch cn a pht biu:
# include progres.h
vo u chng trnh l c.
4.3.3. Cc tp tin header chun
Trong ngn ng C c mt s tp header chun, cha cc nh ngha v
macro rt hu ch cho ngi lp trnh. Cc tp ny thng c t trong th
mc TC\INCLUDE. Nhiu hm thng dng trong th vin C, thc s l cc
macro c nh ngha trong cc tp header chun, chng hn nh : getch(),
printf() trong tp stdio.h; sqrt(x), sin(x), exp(x) trong tp math.h.
Mun s dng c cc hm ny, ta phi t cc pht biu sau trong
chng trnh:
# include <stdio.h>
# include <math.h>
...
4.3.3. Cc tp tin header v nh nguyn mu
Mt l do khc phi dng cc tp header l chng cung cp cc nguyn
mu cc hm th vin ca C. Mi hm th vin ca C u lin quan n mt
tp tin header trong th mc TC\INCLUDE. V d nguyn mu cho hm
printf() c xc nh trong tp stdio.h.
m bo khng gi nhm mt hm th vin vi i sai kiu d liu, ta
ch cn t tp tin header vo sau # include u chng trnh. Vn ny
bn c c th xem chi tit trong cc ti liu Reference C.
4.4. Tnh quy
4.1. Khi nim
Mt i tng gi l c tnh quy nu n bao gm chnh n hoc c
nh ngha thng qua chnh n.
Trong C, mt hm c th c li gi ti chnh n, l tnh quy ca
hm.
V d:
34

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

- Bc tranh quy.
- Biu thc quy: i = i + 1;
1
-

nu n= 0

n! =
n(n-1)! nu n > 0

4.2. Cch xy dng hm quy


Hm quy thng c vit theo thut ton sau:
if (trng hp suy bin)
{
Trnh by cch gii bi ton
(gii nh c cch gii)
}
else // trng hp chung
{
Gi quy ti hm vi cc
gi tr khc nhau ca tham s
}

V d: Hm tm USCLN ca hai s nguyn dng.


int USCLN(int x, int y)
{
if (x == y) return x;
else
if (x > y) return USCLN(x-y, y);
else USCLN(x, y-x);
}

4.3. V d
V d 1: tnh giai tha n! bng phng php quy.
# include <iostream.h>
# include <conio.h>
// Tinh giai thua bang lap
long gthua(int &n)
{
long gt = 1;
for (int i = 1; i <= n; i++) gt = gt*i;

35

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

return gt;
}
// Tinh giai thua bang de quy
long gtdq(int n)
{
if (n == 0 || n == 1) return 1;
else return n*gtdq(n-1);
}
void main()
{
int k;
clrscr();
cout << "\nVao mot so nguyen khong am n = ";
cin >> k;
cout << k << "! = " << gtdq(k);
getch();
}

V d 2: Lp chng trnh tm dy s Fibonacci c tnh cht nh sau :


F0 = 0, F1 = 1
Fn = Fn-1 + Fn-2
# include <iostream.h>
# include <conio.h>
# include <iomanip.h>
// Tim day Fibonacci bang PP lap
void fibo1(int n)
{
int f0 = 0, f1 = 1, f2;
cout << "\nf0 = 0" << "\nf1 = 1";
for (int i=2; i<=n; i++)
{
f2 = f1+f0;
cout << "\nf" << i << " = " << f2;
f0 = f1;
f1 = f2;
}
}

36

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

// Tim day Fibonacci bang PP lap


long fibo2(int n)
{
if (n == 0) return 0;
else
if (n==1) return 1;
else
{
int f0 = 0, f1 = 1, f2;
for (int i=2; i<=n; i++)
{
f2 = f1+f0;
f0 = f1;
f1 = f2;
}
return f2;
}
}
// Tim day Fibonacci bang PP de quy
long fibodq(int n)
{
if (n==0) return 0;
else
if (n==1) return 1;
else return (fibodq(n-2)+fibodq(n-1));
}
void main()
{
int k = 9;
clrscr();
cout << "\nDay " << k+1 << " so Fibonacci:";
//fibo1(k);
//for (int i=0;i<=k; i++)
//
cout << setw(5) << fibo2(i);
for (int i=0;i<=k; i++)
cout << setw(5) << fibodq(i);
getch();
}

37

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

4.4. Ch
u im ca php quy l lm cho CTC tr nn gn gn v d
hiu. Xong mi ln gi quy, trn Stack xut hin cc tham bin tr v
cc b mi, dn ti tn nhiu nh v thi gian.
Ch nn dng quy vi nhng bi ton v cc cu trc d liu
m bn thn chng c nh ngha theo li qui. Ni chung nn trnh
dng php quy khi c th dng php lp tnh ton.
Vic chuyn vit mt hm theo phng php quy bng
phng php dng cc vng lp c gi l s kh qui.

38

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

Chng 4
Mng v chui

4.1. Mng (array)


Mng l tp hp cc bin c cng mt kiu no nm lin tc trong b
nh. s dng c mng cn phi khai bo trnh bin dch bit kiu v
ln ca n.
4.1.1. Khai bo mng
Khai bo bin mng:
Kiu phn t <tn_mng>[n1] [[n2] [...]];
trong n1, n2, ... l cc hng s nguyn khng m ch kch thc cc chiu
ca mng.
V d:
int a[5];
s xc nh mng mt chiu a kiu int c 5 phn t l a[0], a[1], a[3], a[4],
a[4]. Ta c th hnh dung cc phn t ca mng trn nh sau:
0

a
Cc phn t ca mng c truy nhp bng cch s dng tn ca n v
ch s phn t trong ngoc vung, chng hn nh:
a[0] = 12;
a[1] = 15;
a[3] = 2*a[0];
cout << a[3];
cin >> a[4];
Khi khai bo mng c th khi to ngay gi tr ca chng nh sau:
float b[3] = {1.0, 17.25, -3.5 };
mng khi to trn c th minh ho nh sau:
39

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

1.0

17.25

-3.5

S lng cc hng trong danh sch khi to phi nh hn hoc bng kch
c ca mng, nu nh hn th cc phn t cn li ca mng c t ng khi
to gi tr 0. V d:
int sm[5] = {3, 5, 7};
sm

int sa[3] = {10}; // cc phn t ca mng sa u c gi tr 10.


Khai bo mng nhiu chiu, chng hn: int b[3][4];
ta s c mng 2 chiu b kiu int vi 12 phn t, sp thnh 3 hng 4 ct nh
sau:
b[0][0]

b[0][1]

b[0][2]

b[0][3]

b[1][0]

b[1][1]

b[1][2]

b[1][3]

b[2][0]

b[2][1]

b[2][2]

b[2][3]

Truy nhp vo mng nhiu chiu:


b[1][2] = 15;

// gn 15 cho phn t b[1][2]

cin >> b[1][3];

// nhp gi tr t bn phm cho b[1][3]

Khai bo mng nhiu chiu v khi to gi tr cho chng, v d:


int m[3][4] = { { 3, 5, 0, 2 },
{ 1, 3, 7, 9 },
{ 2, 4, 6, 8 } };
Ch rng ton t ly a ch & ch p dng c cho mng mt chiu.
4.1.2. Truyn mt mng ti mt hm
Mt mng c truyn ti mt hm theo cng mt cch m bt c bin
khc c truyn, ngoi tr tn mng phi c cp du mc vung [] theo sau
bo rng n l tn ca mt mng.
V d: Xy dng hm tr v tng n phn t u tin ca mng:
s = a[0] + a[1] + ... + a[n-1]

40

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

double TONG(double a[], int n)


{
double s = 0.0;
for (int i = 0; i < n; i++)
s += a[i];
return s;
}
V d chng trnh 4.10: Nhp n s nguyn vo mng mt chiu ri sp
xp theo th t tng dn.
# include <iostream.h>
# include <conio.h>
# define N 100
void NHAP(int a[], int n)
{
for (int i=0; i<n; i++)
{
cout <<"a[" << i+1 << "] = ";
cin >> a[i];
}
}
void INRA(int a[], int n)
{
for (int i=0; i<n; i++)
cout <<"\na[" << i+1 << "] = " << a[i];
}
void hoanvi(int &x, int &y)
{ int tg = x; x = y; y = tg;}
void SAPXEP(int a[], int n)
{
for (int i=1; i<n; i++)
for (int j=1; j<=n-i; j++)
if (a[j-1]>a[j]) hoanvi(a[j-1], a[j]);
}
void main()
{
int x[N], m = 5;
clrscr();
NHAP(x, m);
SAPXEP(x, m);
INRA(x, m);
getch();
}

41

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

4.2. Chui
4.2.1. Khai bo chui
Chui l dng d liu lu tr v x l vn bn nh cc t, tn, cu.
Trong C khng d liu kiu xu (string) nh trong Pascal hay Basic, m thay
bng mng kiu char nh sau:
char name[size];
V d:
char st[20] = TIN HOC;
Ta c th biu din chui st trn nh sau:
st

...

19

...

Hm strlen(st) tr v di thc ca mt chui st.


Hm strcpy(st1, st2) sao chp xu st2 sang xu st1.
Cc chui trong C c mt s c tnh sau:
Mt chui C l mt mng char c th truy nhp c bng cch s
ng tn ca n v ton t ch s, chng hn nh :
cout << st[2];
Mi i tng chui trong C c kiu char*.
Cc chui trong C khng th c gn, thay vo dng hm
strcpy(st1, st2) sao chp chui st2 sang chui st1.
Ton t nhp >> ch c th dng c nu chui khng cha khong
trng. nhp t bn phm chui c cha khong trng hy dng
hm gets(st).
Cng nh mng c th khi to chui nh v d sau:
char th[] = { T, I, N, , H, O, C, \0 };
trong \0 l k hiu kt thc.
V d chng trnh 4.11: Chng trnh sau s kho st tng nh chim
gi, a ra a ch ca mi nh, ni dung cng vi m ASCII ca chng.
# include <iostream.h>
# include <conio.h>

42

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

# include <string.h>
# include <stdio.h>
void main()
{
//clrscr();
char name[30];
printf("\nCho ten ban: "); gets(name);
for (int i=0; i<strlen(name); i++)
printf("\nDia chi = %5u ky tu = %c ma ASCII = %3d",
&name[i], name[i], name[i]);
printf(\n);
}

4.2.2. Truyn mt chui n mt hm


V chui C l i tng kiu char*, nn kiu char* phi c khai bo
trong dang sch tham s.
V d chng trnh 4.12: m s ch hoa trong mt chui.
# include <iostream.h>
# include <conio.h>
# include <string.h>
int count(char* s)
{
int c = 0;
int dd = strlen(s);
for (int i=0; i<dd; i++)
{
if (*s >='A' && *s <= 'Z') c++;
*s++;
}
return c;
}
void main()
{
clrscr();
char st[50]="Phuong Dong Quang, TP.Thai Nguyen";
cout << "So luong chu hoa trong xau st la: "
<< count(st);
getch();
}

Ch : cc hm chun ca C h tr cho cc thao tc x l chui trong tp


string.h (xem trong ph lc 2 NNC ca P.V. t).

43

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

Chng 5
Con tr (Pointer)

5.1. Khi qut v con tr


5.1.1. Con tr l g
Con tr l bin cha a ch ca bin. Con tr cho ta cch truy nhp ti
bin m khng cn tham kho trc tip vo bin. C ch truy cp bin l a
ch ca bin v chng trnh thao kho bin gin tip thng qua a ch ca
n.
5.1.2. Ti sao phi dng con tr
Chng ta cn phi s dng con tr v cc l do sau:
Tr v nhiu gi tr t hm.
Truyn mng v xu gia cc hm.
X l mng d dng hn.
To cc cu trc d liu phc tp.
Truy nhp vi b nh ...
5.1.3. Khai bo con tr
Cng nh i vi bt k mt bin no khc, con tr phi c khai bo
trc khi s dng theo mu sau:
type *tn con tr;
V d cu lnh:
int x, y, *px, z;
l khai bo cc bin x, y, z kiu int v con tr px c kiu int.
Tng t ta khai bo cc con tr kiu khc.
5.1.4. S dng con tr
Chng ta xt chng trnh sau:
void main()
{

44

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

int i, j, *p;
i = 5;
p = &i;
j = *p;
*p = j + 4;

//
//
//
//
//

(1)
(2)
(3)
(4)
(5)

Cu lnh (1): khai bo 2 bin nguyn i, j


v mt bin p kiu con tr ch vo s nguyn.
H thng s dnh khng gian cho 3 bin ti 3

100
102
114

i
j
p

a ch chng hn l 100, 102 v 104.


Cu lnh (2): i = 5;
gn tr 5 cho bin i.

Cu lnh (3): p = &i;


a vo p a ch ca bin i, by gi p cha

100
102
114

i
j
p

100
102
114

5
100

i
j
p

100
102
114

5
5
100

i
j
p

100
102
114

9
5
100

i
j
p

a ch ca bin i, ta ni rng p tr vo i.
Cu lnh (4): j = *p;
a vo j ni dung ca bin c p tr ti (*
l ton t ch hng).
Cu lnh (5): *p = j + 4;
a (ni dung ca j) + 4 vo bin c p tr
vo.

V d chng trnh 5.1: Chng trnh hon thin sau s minh ho cho cc
gii thch trn, nhng ch l cc a ch thc ca i, j , p h 16 v khc
gi thit nu trong nhn xt trn.
45

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

# include <iostream.h>
# include <conio.h>
void main()
{
int i, j, *p;
i = 5;
p = &i;
j = *p;
*p = j + 4;
clrscr();
cout << "i = "
cout << "j = "
cout << "p tro
cout << "p tro
getch();
}

<< i <<
<< j <<
toi dia
vao gia

" dia
" dia
chi "
tri "

chi = " << &i << endl;


chi = " << &j << endl;
<< p << endl;
<< *p;

5.1.5. Cc php ton con tr


Cc gi tr con tr c th xut d liu vi ton t chn <<.
Cc con tr khng th nhp d liu. Nu p l con tr th lnh nhp sau
l sai:
cin >> p;

// Error

Cc con tr c th c gn cho nhng con tr khc cng kiu.


V d:
float *px, *py, x;
px = &x;
py = px;
Cc con tr c th c tng hay gim.
V d:
char st[] = ABCDEFGH;
char p = &st[3];
cout << *p = << *p << endl;
++p;
cout << *p = << *p << endl;
p += 3;
cout << *p = << *p << endl;
p -=6;

// p tr ti st[3]
// p tr ti st[4]
// p tr ti st[7]
// p tr ti st[1]

46

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

cout << *p = << *p << endl;


--p;
// p tr ti st[0]
cout << *p = << *p << endl;
Kt qu ca on chng trnh trn s l:
*p = D
*p = E
*p = H
*p = B
*p = A
5.2. Con tr v mng
5.2.1. Con tr v mng mt chiu
Con tr thng c s dng khi x l cc mng.
Chng ta phn tch chng trnh 5.2 sau y:
void main()
{
int a[10], *pa, x;
a[0] = 11; a[1] = 22; a[2] = 33; a[3] = 44;
pa = &a[0];
x = *pa;
pa++;
x = *pa;
x = *pa + 1;
x = *(pa + 1);
x = *++pa;
x = ++*pa;
x = *pa++;
getch();
}

int a[10], *pa, x;

Khai bo mng 10 s nguyn a[0], a[1], ... a[9], con


tr pa ch vo s nguyn v bin nguyn x.

a[0] = 1; ...

khi u cc phn t ca mng. Cc phn t t a[4]


ti a[9] cn cha c khi u, chng tnh c cha
cc gi tr c sn trong b nh.

pa = &a[0];

a a ch ca phn t u tin ca mng a vo pa.


Lnh ny c th c vit n gin hn l: pa = a;

47

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

x = *pa;

Ly ni dung ca s nguyn c pa tr vo (tc l


a[0]) gn cho bin x. Do x c gi tr bng 11.

pa++;

pa c tng mt n v, by gi n cha a ch ca
phn t th hai, l a ch ca a[1] tc l pa tr
vo a[1].

x = *pa;

*pa l ni dung ca a[1], do x c gi tr bng 22.

x = *pa + 1;

Cho x gi tr a[1] + 1, do x c gi tr l 22 + 1 =
23.

x = *(pa + 1);

Trc tin h thng thc hin php ton: pa + 1


iu cho kt qu l a ch ca a[2], s nguyn
a ch ny c a vo x, do vy x bng 33.
Ch rng nu pa tham gia vo php ton n khng
b thay i.

x = *++pa;

Theo u tin ca cc ton t, php ton ++pa c


thc hin trc, do pa cha a ch ca a[2].
Sau thc hin php ton *, x cha a ch a[2] tc
l x = 33.

x = ++*pa;

u tin thc hin *pa, pa ang tr vo a[2] nn *pa


bng 33, do ++*pa bng 34, do vy x bng 34.

x = *pa++;

Ni dung ca *pa c t vo bin x trc nn x


bng 34, sau pa c tng mt n v v by gi
n tr vo a[3].

Qua phn tch v d trn ta thy rng: Nu con tr pa tr ti phn t a[k]


no th:
pa + i tr ti phn t th i sau a[k], tc l phn t a[k+i].
pa i tr ti phn t th i trc a[k], tc l phn t a[k-i].
*(pa + i) tng ng vi pa[i].
5.2.2. Con tr v mng hai chiu
Trong mng nhiu chiu ni chung php ton ly a ch & khng s
dng c, chng hn cu lnh:
48

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

&a[i][j];
l khng hp l v gy ra li (ring i vi mng hai chiu nguyn th c th
s dng c cu lnh trn).
Nh ta bit trong b nh mng l cc nh xp theo th t lin tip
nhau, chng hn nu khai bo:
float a[2][3];
th s c 6 phn t c xp th t (theo hng) nh sau:
phn t:

a[0][0]

a[0][1]

a[0][2]

a[1][0]

a[1][1]

a[1][2]

a ch :

ln lt duyt trn cc phn t ca mng hai chiu, c th dng con


tr theo cch sau:
float *pa, a[2][3];
pa = (float*) a;
Khi :
pa + 0 tr ti a[0][0]
pa + 1 tr ti a[0][1]
pa + 2 tr ti a[0][2]
pa + 3 tr ti a[1][0]
pa + 4 tr ti a[1][1]
pa + 5 tr ti a[1][2]
V d chng trnh 5.3 sau y s minh ho cho cc iu trn.
# include <iostream.h>
# include <conio.h>
void main()
{
float *pa, a[2][3] = {{ 1, 3, 5 },
{ 2, 4, 6 }};
pa = (float*) a;
clrscr();
for (int i=0; i<6; i++)
cout << pa+i << " " << *(pa+i) << endl;
getch();
}

49

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

5.2.3. Mng con tr


Mng con tr l s m rng ca khi nim con tr. Mng con tr l mt
mng m mi phn t ca n c th cha c mt a ch no . Cng
ging nh con tr, mng con tr c nhiu kiu, mi phn t ca n cha c
cc a ch kiu tng ng.
Mng con tr c khai bo nh sau:
type *name[N];
Trong type l kiu c th l: int, float, double, char ..., name l tn ca
mng, N l hng s nguyn ch ln ca mng.
Khi gp khai bo trn, my s cp pht N khong nh lin tip cho N
phn t ca mng. Mi phn t name[i] s lu tr mt a ch theo kiu
khai bi.
V d chng trnh 5.4: Tm tn trn mng con tr.
# include <iostream.h>
# include <conio.h>
# include <string.h>
# define max 5
void find(char *name)
{
char *list[max] = { "Lan",
"Nam",
"Hung",
"Tien",
"Van" };
char ok = 0;
for (int i=0; i<max; i++)
if (strcmp(list[i], name) == 0) ok = 1;
if (ok == 1)
cout << "\nBan da co trong danh sach.";
else
cout << "\nBan chua co trong danh sach.";
}
void main()
{
char ten[7];
clrscr();
cout << "Cho ten ban: "; cin >> ten;
find(ten);
getch();
}

50

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

5.3. Hm c i con tr
Nu i ca hm l con tr kiu int (float, double ...) th tham s thc
tng ng phi l a ch ca bin hoc a ch ca phn t mng kiu int
(float, double ...).
V d chng trnh 5.5: Xy dng chng trnh hon v hai s bng cch
s dng i con tr.
# include <iostream.h>
# include <conio.h>
void hoan_vi(int *x, int *y)
{
int z;
z = *x;
*x = *y;
*y = z;
}
void main()
{
int a =5 ,b = 10;
clrscr();
hoan_vi(&a, &b);
cout << "\na = " << a ;
cout << "\nb = " << b;
getch();
}

5.4. Con tr ti hm
Con tr hm dng cha a ch ca hm. Mun vy ta phi thc hin
php gn tn hm cho con tr hm. php gn c ngha th kiu hm v kiu
con tr phi tng thch nhau. Sau php gn, ta c th dng tn con tr thay
cho tn hm.
V d chng trnh 5.6: Xy dng chng trnh tm s ln hn bng cch
s dng con tr hm.
# include <iostream.h>
double fmax(double x, double y)
{ return (x>y ? x:y); }

// ham tinh max

// khai bao con tro ham


double (*pf)(double, double) = fmax;
void main()
{ cout << "\nmax = " << pf(5.5, 99.75); }

51

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

5.5. Con tr void


Con tr void l mt dng c bit ca khi nim con tr, l con tr
khng c kiu v n c th nhn bt k kiu a ch no.
Con tr void thng c dng lm i trong cc hm, nhn bt k
kiu a ch no t tham s tht, v th trong thn hm phi dng php quy hi
kiu chuyn sang dng a ch cn x l.
V d chng trnh 5.7: Xy dng chng trnh nhp cc ma trn ri tnh
tng ca chng.
# include
# include
# include
const N =
void
void
void
void

<iostream.h>
<conio.h>
<iomanip.h>
50;

NHAP(char name, float *a, int n, int m);


INRA(float *a, int n, int m);
CONG(void *a, void *b, void *c, int n, int m);
FORMAT(int n); // qui dinh so chu so thap phan

void main()
{
float x[N][N], y[N][N], z[N][N];
int n = 3, m = 4; // so hang, cot thuc te cua MT
clrscr();
NHAP('x', *x, n, m);
NHAP('y', *y, n, m);
CONG(*x, *y, *z, n, m);
clrscr();
FORMAT(3);
cout << "\nMa tran X:";
INRA(*x, n, m);
cout << "\nMa tran Y:";
INRA(*y, n, m);
cout << "\nMa tran tong X + Y:";
INRA(*z, n, m);
getch();
}
void NHAP(char name, float *a, int n, int m)
{
cout << "\n";
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)

52

i hc Thi Nguyn-Trng HSP. Khoa Ton-Tin


Nguyn Mnh c Ngn ng lp trnh C++

{
cout<<name<<"["<<i+1<<"]["<<j+1<<"] = ";
cin >> *(a+i*m+j);
}

void INRA(float *a, int n, int m)


{
for (int i=0; i<n; i++)
{
cout << "\n";
for (int j=0; j<m; j++)
cout << setw(12) << *(a+i*m+j);
}
}
void CONG(void *a, void *b, void *c, int n, int m)
{
float *pa, *pb, *pc;
// quy hoi kieu
pa=(float*)a; pb=(float*)b; pc=(float*)c;
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
*(pc+i*m+j) = *(pa+i*m+j) + *(pb+i*m+j);
}
void FORMAT(int n)
{
cout << setprecision(n) << setiosflags(ios::fixed);
cout.setf(ios::showpoint);
}

53

You might also like