Professional Documents
Culture Documents
Khoa Ton-Tin
Nguyn Mnh 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.
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
Ghi tp
Ghi vi tn khc
: File Save as
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
: 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
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
}
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 { ... }.
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.
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
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
float x, y;
char ch1;
// khai bo bin x
// khai bo hng n = 10
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
\f
\b
: li li mt bc.
\t
: du tab
: k t n.
%s
: chui
%d
: s nguyn c du.
%f
%e
%x
%u
%o
10
th s in ra l:
12 759.24
11
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;
i = i +1;
logic AND
12
||
logic OR
logic NOT
logic XOR
a&&b
a||b
!a
a^b
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
Tnh kt hp
tri sang phi
tri sang phi
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
15
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.
btL
16
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();
}
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
19
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();
}
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
21
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();
}
23
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
S =
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
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
// thn hm
}
V d:
float max(float x, float y)
{ if ( x > y ) return x;
else return y; }
27
28
31
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();
}
32
- Bc tranh quy.
- Biu thc quy: i = i + 1;
1
-
nu n= 0
n! =
n(n-1)! nu n > 0
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
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();
}
36
37
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
Chng 4
Mng v chui
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
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
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]
40
41
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
...
42
# 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);
}
43
Chng 5
Con tr (Pointer)
44
int i, j, *p;
i = 5;
p = &i;
j = *p;
*p = j + 4;
//
//
//
//
//
(1)
(2)
(3)
(4)
(5)
100
102
114
i
j
p
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
# 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 "
// Error
// p tr ti st[3]
// p tr ti st[4]
// p tr ti st[7]
// p tr ti st[1]
46
a[0] = 1; ...
pa = &a[0];
47
x = *pa;
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;
x = *pa + 1;
Cho x gi tr a[1] + 1, do x c gi tr l 22 + 1 =
23.
x = *(pa + 1);
x = *++pa;
x = ++*pa;
x = *pa++;
&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 :
49
50
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); }
51
<iostream.h>
<conio.h>
<iomanip.h>
50;
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
{
cout<<name<<"["<<i+1<<"]["<<j+1<<"] = ";
cin >> *(a+i*m+j);
}
53