SlideShare a Scribd company logo
CTDL - C – Trang 1
Chương 1. CÁC KHÁI NIỆM CƠ BẢN
1.1. Thuật toán và cấu trúc dữ liệu
- Dữ liệu: nói chung là bất kỳ những gì mà máy tính xử lý
- Kiểu dữ liệu: Mỗi kiểu dữ liệu gồm các giá trị có cùng chung các tính chất nào đó và
trên đó xác định các phép toán
- Cấu trúc dữ liệu: là cách tổ chức và lưu trữ dữ liệu trong máy tính
- Thuật toán (hay giải thuật): là tập hợp các bước theo một trình tự nhất định để giải một
bài toán
- Giữa cấu trúc dữ liệu và thuật toán có quan hệ mật thiết. Nếu ta biết các tổ chức cấu trúc
dữ liệu hợp lý thì thuật toán sẽ đơn giản hơn. Khi cấu trúc dữ liệu thay đổi thì thuật toán
sẽ thay đổi theo
1.2. Các kiểu dữ liệu cơ bản trong ngôn ngữ C
1.2.1. Các kiểu dữ liệu đơn giản
Có giá trị là đơn,
- Kiểu ký tự: có giá trị là một ký tự bất kỳ đặt giữa hai dấu nháy đơn, có kích
thước 1 Byte và biểu diễn được một ký tự thông qua bảng mã ASCII, gồm 2 kiểu:
Kiểu Phạm vi biểu diễn Kích thước
char từ -128 đến 127 1 Byte
unsigned char từ 0 đến 255 1 Byte
- Kiểu số nguyên: có giá trị là một số nguyên, gồm các kiểu:
Kiểu Phạm vi biểu diễn 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
Nhận xét: Các kiểu ký tự cũng có thể xem là một dạng của kiểu số nguyên
- Kiểu số thực: Có giá trị là một số thực, gồm các kiểu:
Kiểu Phạm vi biểu diễn 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 kiểu dữ liệu có cấu trúc
1.1.1.1. Kiểu mảng
Các thành phần có cùng kiểu dữ liệu, mỗi thành phần gọi là một phần tử, các phần
tử được đánh chỉ số từ 0 trở đi. Ví dụ với khai báo
float A[5]
Khai báo A là một mảng các số thực gồm 5 phần tử là A[0] , A[1] , A[2] , A[3] , A[4]
1.1.1.2. Kiểu bản ghi
Các thành phần có thể có kiểu dữ liệu khác nhau, mỗi thành phần gọi là một
trường
Ví dụ: struct SVIEN
{ char ten[7];
int namsinh;
float cao;
};
CTDL - C – Trang 2
Khai báo SVIEN là kiểu bản ghi gồm 3 trường ten, namsinh, cao
1.3. Kiểu con trỏ
1.3.1. Định nghĩa
Con trỏ là một biến mà nội dung của nó là địa chỉ của một đối tượng khác. Đối tượng ở
đây có thể là một biến hoặc một hàm
1.3.2. Khai báo kiểu con trỏ
kiểudữliệu *tênbiếncontrỏ ;
Vd char c, *pc; // pc là con trỏ kiểu 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ỉ của một biến trong bộ nhớ, ví dụ &n
1.3.4. Các phép toán trên kiểu con trỏ
- Phép gán: Ta có thể gán giá trị của hai biến con trỏ cùng kiểu cho nhau, hoặc gán địa
chỉ của một biến cho biến con trỏ cùng kiểu
- Phép cộng thêm vào con trỏ một số nguyên (đối với con trỏ liên quan đến mảng)
- Phép so sánh bằng nhau = = hoặc khác nhau !=
- Hằng 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 mọi biến con trỏ kiểu bất kỳ
- Phép cấp phát vùng nhớ
Lệnh biếncontrỏ = NEW kiểudữliệu;
Vd lệnh p = new int;
- Phép thu hồi vùng nhớ
Lệnh DELETE biếncontrỏ;
Vd lệnh delete p;
1.4. Kiểu tham chiếu
1.4.1. Định nghĩa
Trong C++ có 3 loại biến
Biến giá trị chứa một giá trị dữ liệu thuộc về một kiểu nào đó (nguyên, thực, ký tự . . . )
Biến con trỏ chứa địa chỉ của một đối tượng. Hai loại biến này đều được cấp bộ nhớ và
có địa chỉ
Loại thứ ba là biến tham chiếu, là biến không được cấp phát bộ nhớ, không có địa chỉ
riêng, được dùng làm bí danh cho một biến khác và dùng chung bộ nhớ của biến này
1.4.2. Khai báo kiểu tham chiếu
Cú pháp: kiểu dữ liệu &tên biến tham chiếu = tên biến;
Tên biến là tên biến cùng kiểu với biến tham chiếu đang được khai báo, biến tham chiếu
sẽ tham chiếu đến biến cùng kiểu này
Vd float u, v;
Float &x=u;
Khai báo 2 biến thực u và v
Biến tham chiếu x tham chiếu đến biến u cùng kiểu thực, dùng chung vùng nhớ với biến
u. Khi đó những thay đổi của biến u cũng là những thay đổi của biến x và ngược lại
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 dụng kiểu 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
Một chương trình gọi ngay chính nó thực hiện gọi là tính đệ qui của chương trình
1.5.2. Các nguyên lý khi dùng kỹ thuật đệ qui
- Tham số hóa bài toán: để thể hiện kích cỡ của bài toán
- Tìm trường hợp dễ nhất: mà ta biết ngay kết quả
- Tìm trường hợp tổng quát: để đưa bài toán với kích cỡ lớn về bài toán có
kích cỡ nhỏ hơn
1.5.3. Ví dụ
Bài toán Tháp Hà Nội: Cần chuyển n đĩa từ cọc A (trong đó đĩa lớn ở dưới, đĩa nhỏ ở
trên) sang cọc B với các điều kiện:
. Mỗi lần chỉ được chuyển một đĩa
. Trên các cọc, luôn luôn đĩa lớn ở dưới, đĩa nhỏ ở trên
. Được dùng cọc trung gian thứ ba C
Giải: - Tham số hóa bài toán:
Gọi n: là số lượng đĩa cần chuyển
x: cọc xuất phát
y: cọc đích
z: cọc 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---

More Related Content

PDF
Programming technique 1_2_7921
PPT
kiểu xâu ( 2 tiết)
PPT
Hoatdongbaiday-HaNgoc
PPT
DOC
Kieu xau tiet 1 da soan
PPT
Gioi Thieu
PDF
Chuong6 (2)
PPT
Ctdl C09
Programming technique 1_2_7921
kiểu xâu ( 2 tiết)
Hoatdongbaiday-HaNgoc
Kieu xau tiet 1 da soan
Gioi Thieu
Chuong6 (2)
Ctdl C09

What's hot (20)

PPTX
Lớp 11 --chương 4 -- bài 11 --Kiểu mảng
PDF
csdl bai-thuchanh_01
PPT
BáO CáO Lý ThuyếT Java
PPT
Chapter 3 (cont)
PDF
csdl bai-thuchanh_02
PPT
Chuong2 de qui
PPT
Ctdl C11
PPTX
Kịch bản dạy học - Lớp 11 - Bài 5
PPTX
Bai1 nhom6
PDF
Pplthdt c00 gioi_thieumonhoc_v13.09a
PDF
Python Beginner Class day-02-strings
PDF
Python Beginner Class day-03-flow
PPTX
Bài 4&5: Một số kiểu dữ liệu chuẩn và khai báo biến
PPTX
Bài 4,5:Một số kiểu dữ liệu chuẩn,Khai báo biến
PPTX
Một số kiểu dữ liệu chuẩn
PPT
Ctdl C06
PPT
Ctdl C10
PPTX
Bài 12: Kiểu xâu (Bùi Thị Duyên - Nguyễn Thị Lệ Ngân)
PDF
Bài 1: Tổng quan về cấu trúc và giải thuật - Giáo trình FPT
Lớp 11 --chương 4 -- bài 11 --Kiểu mảng
csdl bai-thuchanh_01
BáO CáO Lý ThuyếT Java
Chapter 3 (cont)
csdl bai-thuchanh_02
Chuong2 de qui
Ctdl C11
Kịch bản dạy học - Lớp 11 - Bài 5
Bai1 nhom6
Pplthdt c00 gioi_thieumonhoc_v13.09a
Python Beginner Class day-02-strings
Python Beginner Class day-03-flow
Bài 4&5: Một số kiểu dữ liệu chuẩn và khai báo biến
Bài 4,5:Một số kiểu dữ liệu chuẩn,Khai báo biến
Một số kiểu dữ liệu chuẩn
Ctdl C06
Ctdl C10
Bài 12: Kiểu xâu (Bùi Thị Duyên - Nguyễn Thị Lệ Ngân)
Bài 1: Tổng quan về cấu trúc và giải thuật - Giáo trình FPT
Ad

Viewers also liked (19)

PPTX
Suite Software for RITMARE
PPTX
Filipino men’s familial roles and domestic violence
PDF
Miriam College eLearning Moodle Experience & the Bigger Picture
PPT
Product slide
PPTX
Vernacular Architecture, Robertus Nugroho and Moediartianto
PPTX
Workshop Greenwich BV
PPT
Photoblogging
PDF
Heathcare brochure v3
PPTX
At udl project -science
PPTX
Inovação e Tendências em Mídias Digitais - 11/4/16
PDF
Cawasa e source newsletter - 3rd Quarter 2014
PPTX
GIS Day - Facilitare la creazione di servizi web OGC: la suite software open ...
PPT
Workshop social media 16 mei 2011
PDF
Catalogo golf ed. 2011 incipit
PPTX
Designing medea
PPTX
Presentacion tijuana inovadora
ODP
Communication over the time
PPTX
Inovação e Tendências em Mídias Digitais - 28/3/16
PPTX
Lezing Jean-Pierre Wilken #srhRINO jubileumcongres
Suite Software for RITMARE
Filipino men’s familial roles and domestic violence
Miriam College eLearning Moodle Experience & the Bigger Picture
Product slide
Vernacular Architecture, Robertus Nugroho and Moediartianto
Workshop Greenwich BV
Photoblogging
Heathcare brochure v3
At udl project -science
Inovação e Tendências em Mídias Digitais - 11/4/16
Cawasa e source newsletter - 3rd Quarter 2014
GIS Day - Facilitare la creazione di servizi web OGC: la suite software open ...
Workshop social media 16 mei 2011
Catalogo golf ed. 2011 incipit
Designing medea
Presentacion tijuana inovadora
Communication over the time
Inovação e Tendências em Mídias Digitais - 28/3/16
Lezing Jean-Pierre Wilken #srhRINO jubileumcongres
Ad

Similar to Ctdl c1 (20)

PDF
02 - Gioi thieu ngon ngu lap trinh Java (tt).pdf
PPTX
ky thuat lap tirnh giao tiep ky thuat lap tirnh giao tiep
PDF
Ngon ngu c theo chuan ansi
PDF
cpp chương 1 cấu trúc dữ liệu và giải thuật
PDF
Bai02 java introduction
PPTX
Pointer
PPTX
More about structure - Tìm hiểu sâu về kiểu struct
PDF
Bài 2 : Các khái niệm và nguyên tắc cơ bản của NET Framework - NỀN TẢNG LẬP T...
PPT
Bai 1 tong quan ve ctdl&amp;gt
PPTX
Tổng quan về cấu trúc dữ liệu và thuật toán.pptx
PPTX
PDF
LAP TRINH C - SESSION 2
PPTX
Python Programming basic document for beginners
DOC
Tin11 chuong04 bai_13
DOC
Bài tập CTDL và GT 3
PDF
Baigiang022 bien va kieu
DOC
Chuong 2
DOCX
Giao an tin hoc 11 - Tuan 08 - On tap chuong 04 - vtq ngoc
PPTX
FPLSP25G29Bai thuc hanh tin hoccs 2 LCAS0401.pptx.pptx
PDF
Lect05 array
02 - Gioi thieu ngon ngu lap trinh Java (tt).pdf
ky thuat lap tirnh giao tiep ky thuat lap tirnh giao tiep
Ngon ngu c theo chuan ansi
cpp chương 1 cấu trúc dữ liệu và giải thuật
Bai02 java introduction
Pointer
More about structure - Tìm hiểu sâu về kiểu struct
Bài 2 : Các khái niệm và nguyên tắc cơ bản của NET Framework - NỀN TẢNG LẬP T...
Bai 1 tong quan ve ctdl&amp;gt
Tổng quan về cấu trúc dữ liệu và thuật toán.pptx
LAP TRINH C - SESSION 2
Python Programming basic document for beginners
Tin11 chuong04 bai_13
Bài tập CTDL và GT 3
Baigiang022 bien va kieu
Chuong 2
Giao an tin hoc 11 - Tuan 08 - On tap chuong 04 - vtq ngoc
FPLSP25G29Bai thuc hanh tin hoccs 2 LCAS0401.pptx.pptx
Lect05 array

Ctdl c1

  • 1. CTDL - C – Trang 1 Chương 1. CÁC KHÁI NIỆM CƠ BẢN 1.1. Thuật toán và cấu trúc dữ liệu - Dữ liệu: nói chung là bất kỳ những gì mà máy tính xử lý - Kiểu dữ liệu: Mỗi kiểu dữ liệu gồm các giá trị có cùng chung các tính chất nào đó và trên đó xác định các phép toán - Cấu trúc dữ liệu: là cách tổ chức và lưu trữ dữ liệu trong máy tính - Thuật toán (hay giải thuật): là tập hợp các bước theo một trình tự nhất định để giải một bài toán - Giữa cấu trúc dữ liệu và thuật toán có quan hệ mật thiết. Nếu ta biết các tổ chức cấu trúc dữ liệu hợp lý thì thuật toán sẽ đơn giản hơn. Khi cấu trúc dữ liệu thay đổi thì thuật toán sẽ thay đổi theo 1.2. Các kiểu dữ liệu cơ bản trong ngôn ngữ C 1.2.1. Các kiểu dữ liệu đơn giản Có giá trị là đơn, - Kiểu ký tự: có giá trị là một ký tự bất kỳ đặt giữa hai dấu nháy đơn, có kích thước 1 Byte và biểu diễn được một ký tự thông qua bảng mã ASCII, gồm 2 kiểu: Kiểu Phạm vi biểu diễn Kích thước char từ -128 đến 127 1 Byte unsigned char từ 0 đến 255 1 Byte - Kiểu số nguyên: có giá trị là một số nguyên, gồm các kiểu: Kiểu Phạm vi biểu diễn 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 Nhận xét: Các kiểu ký tự cũng có thể xem là một dạng của kiểu số nguyên - Kiểu số thực: Có giá trị là một số thực, gồm các kiểu: Kiểu Phạm vi biểu diễn 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 kiểu dữ liệu có cấu trúc 1.1.1.1. Kiểu mảng Các thành phần có cùng kiểu dữ liệu, mỗi thành phần gọi là một phần tử, các phần tử được đánh chỉ số từ 0 trở đi. Ví dụ với khai báo float A[5] Khai báo A là một mảng các số thực gồm 5 phần tử là A[0] , A[1] , A[2] , A[3] , A[4] 1.1.1.2. Kiểu bản ghi Các thành phần có thể có kiểu dữ liệu khác nhau, mỗi thành phần gọi là một trường Ví dụ: struct SVIEN { char ten[7]; int namsinh; float cao; };
  • 2. CTDL - C – Trang 2 Khai báo SVIEN là kiểu bản ghi gồm 3 trường ten, namsinh, cao 1.3. Kiểu con trỏ 1.3.1. Định nghĩa Con trỏ là một biến mà nội dung của nó là địa chỉ của một đối tượng khác. Đối tượng ở đây có thể là một biến hoặc một hàm 1.3.2. Khai báo kiểu con trỏ kiểudữliệu *tênbiếncontrỏ ; Vd char c, *pc; // pc là con trỏ kiểu 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ỉ của một biến trong bộ nhớ, ví dụ &n 1.3.4. Các phép toán trên kiểu con trỏ - Phép gán: Ta có thể gán giá trị của hai biến con trỏ cùng kiểu cho nhau, hoặc gán địa chỉ của một biến cho biến con trỏ cùng kiểu - Phép cộng thêm vào con trỏ một số nguyên (đối với con trỏ liên quan đến mảng) - Phép so sánh bằng nhau = = hoặc khác nhau != - Hằng 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 mọi biến con trỏ kiểu bất kỳ - Phép cấp phát vùng nhớ Lệnh biếncontrỏ = NEW kiểudữliệu; Vd lệnh p = new int; - Phép thu hồi vùng nhớ Lệnh DELETE biếncontrỏ; Vd lệnh delete p; 1.4. Kiểu tham chiếu 1.4.1. Định nghĩa Trong C++ có 3 loại biến Biến giá trị chứa một giá trị dữ liệu thuộc về một kiểu nào đó (nguyên, thực, ký tự . . . ) Biến con trỏ chứa địa chỉ của một đối tượng. Hai loại biến này đều được cấp bộ nhớ và có địa chỉ Loại thứ ba là biến tham chiếu, là biến không được cấp phát bộ nhớ, không có địa chỉ riêng, được dùng làm bí danh cho một biến khác và dùng chung bộ nhớ của biến này 1.4.2. Khai báo kiểu tham chiếu Cú pháp: kiểu dữ liệu &tên biến tham chiếu = tên biến; Tên biến là tên biến cùng kiểu với biến tham chiếu đang được khai báo, biến tham chiếu sẽ tham chiếu đến biến cùng kiểu này Vd float u, v; Float &x=u; Khai báo 2 biến thực u và v Biến tham chiếu x tham chiếu đến biến u cùng kiểu thực, dùng chung vùng nhớ với biến u. Khi đó những thay đổi của biến u cũng là những thay đổi của biến x và ngược lại Vd int m; int &n=m; m=25; cout << “n m=” << m; cout << “n n=” << n;
  • 3. CTDL - C – Trang 3 n=n+10; 1.4.3. Ứng dụng kiểu 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 Một chương trình gọi ngay chính nó thực hiện gọi là tính đệ qui của chương trình 1.5.2. Các nguyên lý khi dùng kỹ thuật đệ qui - Tham số hóa bài toán: để thể hiện kích cỡ của bài toán - Tìm trường hợp dễ nhất: mà ta biết ngay kết quả - Tìm trường hợp tổng quát: để đưa bài toán với kích cỡ lớn về bài toán có kích cỡ nhỏ hơn 1.5.3. Ví dụ Bài toán Tháp Hà Nội: Cần chuyển n đĩa từ cọc A (trong đó đĩa lớn ở dưới, đĩa nhỏ ở trên) sang cọc B với các điều kiện: . Mỗi lần chỉ được chuyển một đĩa . Trên các cọc, luôn luôn đĩa lớn ở dưới, đĩa nhỏ ở trên . Được dùng cọc trung gian thứ ba C Giải: - Tham số hóa bài toán: Gọi n: là số lượng đĩa cần chuyển x: cọc xuất phát y: cọc đích z: cọc 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);
  • 4. 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---