CTDL - C – Trang 1
Chương 1. CÁC KHÁI NIM CƠ BN
1.1. Thut toán và cu trúc d liu
- D liu: nói chung là bt k nhng gì mà máy tính x
- Kiu d liu: Mi kiu d liu gm các giá tr có cùng chung các tính cht nào đó và
trên đó xác định các phép toán
- Cu trúc d liu: là cách t chc và lưu tr d liu trong máy tính
- Thut toán (hay gii thut): là tp hp các bước theo mt trình t nht định để gii mt
bài toán
- Gia cu trúc d liu và thut toán có quan h mt thiết. Nếu ta biết các t chc cu trúc
d liu hp lý thì thut toán s đơn gin hơn. Khi cu trúc d liu thay đổi thì thut toán
s thay đổi theo
1.2. Các kiu d liu cơ bn trong ngôn ng C
1.2.1. Các kiu d liu đơn gin
Có giá trđơn,
- Kiu ký t: có giá tr là mt ký t bt k đặt gia hai du nháy đơn, có kích
thước 1 Byte và biu din được mt ký t thông qua bng mã ASCII, gm 2 kiu:
Kiu Phm vi biu din Kích thước
char t -128 đến 127 1 Byte
unsigned char t 0 đến 255 1 Byte
- Kiu s nguyên: có giá tr là mt s nguyên, gm các kiu:
Kiu Phm vi biu din Kích thước
int t -32768 đến 32767 2 Byte
unsigned int t 0 đến 65535 2 Byte
long t -2147483648 đến 2147483647 4 Byte
unsigned long t 0 đến 4294967295 4 Byte
Nhn xét: Các kiu ký t cũng có th xem là mt dng ca kiu s nguyên
- Kiu s thc: Có giá tr là mt s thc, gm các kiu:
Kiu Phm vi biu din Kích thước
float t 3.4E-38 đến 3.4E+38 4 Byte
double t 1.7E-308 đến 1.7E+308 8 Byte
long double t 3.4E-4932 đến 1.1E4932 10 Byte
1.2.2. Các kiu d liu có cu trúc
1.1.1.1. Kiu mng
Các thành phn có cùng kiu d liu, mi thành phn gi là mt phn t, các phn
t được đánh ch s t 0 tr đi. Ví d vi khai báo
float A[5]
Khai báo A là mt mng các s thc gm 5 phn t là A[0] , A[1] , A[2] , A[3] , A[4]
1.1.1.2. Kiu bn ghi
Các thành phn có th có kiu d liu khác nhau, mi thành phn gi là mt
trường
Ví d: struct SVIEN
{ char ten[7];
int namsinh;
float cao;
};
CTDL - C – Trang 2
Khai báo SVIEN là kiu bn ghi gm 3 trường ten, namsinh, cao
1.3. Kiu con tr
1.3.1. Định nghĩa
Con tr là mt biến mà ni dung ca nó là địa ch ca mt đối tượng khác. Đối tượng
đây có th là mt biến hoc mt hàm
1.3.2. Khai báo kiu con tr
kiudliu *tênbiếncontr ;
Vd char c, *pc; // pc là con tr kiu ký t char
int i, n, *p, *p2;
float f, r, *pf;
1.3.3. Hàm địa ch
&biến
Tr v địa ch ca mt biến trong b nh, ví d &n
1.3.4. Các phép toán trên kiu con tr
- Phép gán: Ta có th gán giá tr ca hai biến con tr cùng kiu cho nhau, hoc gán địa
ch ca mt biến cho biến con tr cùng kiu
- Phép cng thêm vào con tr mt s nguyên (đối vi con tr liên quan đến mng)
- Phép so sánh bng nhau = = hoc khác nhau !=
- Hng con tr NULL: cho biết con tr không ch đến đối tượng nào c, giá tr này có th
được gán cho mi biến con tr kiu bt k
- Phép cp phát vùng nh
Lnh biếncontr = NEW kiudliu;
Vd lnh p = new int;
- Phép thu hi vùng nh
Lnh DELETE biếncontr;
Vd lnh delete p;
1.4. Kiu tham chiếu
1.4.1. Định nghĩa
Trong C++ có 3 loi biến
Biến giá tr cha mt giá tr d liu thuc v mt kiu nào đó (nguyên, thc, ký t . . . )
Biến con tr cha địa ch ca mt đối tượng. Hai loi biến này đều được cp b nh
địa ch
Loi th ba là biến tham chiếu, là biến không được cp phát b nh, không có địa ch
riêng, được dùng làm bí danh cho mt biến khác và dùng chung b nh ca biến này
1.4.2. Khai báo kiu tham chiếu
Cú pháp: kiu d liu &tên biến tham chiếu = tên biến;
Tên biến là tên biến cùng kiu vi biến tham chiếu đang được khai báo, biến tham chiếu
s tham chiếu đến biến cùng kiu này
Vd float u, v;
Float &x=u;
Khai báo 2 biến thc u và v
Biến tham chiếu x tham chiếu đến biến u cùng kiu thc, dùng chung vùng nh vi biến
u. Khi đó nhng thay đổi ca biến u cũng là nhng thay đổi ca biến x và ngược li
Vd int m;
int &n=m;
m=25;
cout << “\n m=” << m;
cout << “\n n=” << n;
CTDL - C – Trang 3
n=n+10;
1.4.3. ng dng kiu tham chiếu
#include <iostream.h>
#include <conio.h>
void doi(int x, int &y, int *z)
{ x=x+1;
y=y+2;
*z=*z+4;
}
void main()
{ int i=10, j=20, k=30;
cout << "\n Truoc khi goi:" << i << j << k;
doi(i,j,&k);
cout << "\n Sau khi goi:" << i << j << k;
getch();
}
1.5. Đệ qui
1.5.1. Định nghĩa
Mt chương trình gi ngay chính nó thc hin gi là tính đệ qui ca chương trình
1.5.2. Các nguyên lý khi dùng k thut đệ qui
- Tham s hóa bài toán: để th hin kích c ca bài toán
- Tìm trường hp d nht: mà ta biết ngay kết qu
- Tìm trường hp tng quát: để đưa bài toán vi kích c ln v bài toán có
kích c nh hơn
1.5.3. Ví d
Bài toán Tháp Hà Ni: Cn chuyn n đĩa t cc A (trong đó đĩa ln dưới, đĩa nh
trên) sang cc B vi các điu kin:
. Mi ln ch được chuyn mt đĩa
. Trên các cc, luôn luôn đĩa ln dưới, đĩa nh trên
. Được dùng cc trung gian th ba C
Gii: - Tham s hóa bài toán:
Gi n: là s lượng đĩa cn chuyn
x: cc xut phát
y: cc đích
z: cc trung gian
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
int i;
void chuyen(int &n, char x, char y, char z)
{ if (n==1)
{ i++;
cout << "\n" << i << ":" << x << "->" << y;
}
else
{ chuyen(n-1,x,z,y);
CTDL - C – Trang 4
chuyen(1,x,y,z);
chuyen(n-1,z,y,x);
}
}
void main()
{ int n;
cout <<"\n Nhap n:";
cin >> n;
chuyen(n,'A','B','C');
getch();
}
---o-O-o---