Tải bản đầy đủ (.ppt) (42 trang)

Tài liệu Chương 2: Các kiểu dữ liệu cơ bản doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (814.66 KB, 42 trang )


Các kiểu dữ liệu cơ bản
Chương 2
Kiểu tập tin
4
Kiểu mảng và chuỗi
1
Kiểu cấu trúc
2
Kiểu con trỏ
3
Độ phức tạp thuật toán
5
Nội dung
Nội dung
Nội dung
Nội dung
02/21/14
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Kiểu chuỗi (String)
Kiểu chuỗi (String)

Một chuỗi là dãy liên tiếp các ký tự kết thúc bằng
ký tự \0 có mã ASCII bằng 0 (NULL character)

Trong C chuỗi có tối đa 65535 ký tự

Các hàm xử lý chuỗi được đặt trong thư viện
string.h của C.
Các cấu trúc lưu trữ trên bộ nhớ chính


Các cấu trúc lưu trữ trên bộ nhớ chính
02/21/14
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Kiểu chuỗi (String)
Kiểu chuỗi (String)
Khai báo chuỗi: có thể dùng các cách sau

char S[10]; //Khai báo một chuỗi ký tự S có chiều dài
// tối đa 10 (kể cả kí tự kết thúc)

char S[]="ABC";// Khai báo một chuỗi ký tự S có
chiều
// dài bằng chiều dài của chuỗi "ABC"
// và giá trị khởi đầu của S là "ABC"

char *S ="ABC";//Giống cách khai báo trên.
Các kiểu dữ liệu có cấu trúc
Các kiểu dữ liệu có cấu trúc
Các cấu trúc lưu trữ trên bộ nhớ chính
Các cấu trúc lưu trữ trên bộ nhớ chính
02/21/14
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Kiểu chuỗi (String)
Kiểu chuỗi (String)
Một số thao tác trên chuỗi
Một số thao tác trên chuỗi
Các kiểu dữ liệu có cấu trúc
Các kiểu dữ liệu có cấu trúc


So sánh 2 chuỗi: strcmp

Sao chép chuỗi: strcpy

Độ dài chuỗi: strlen

Kiểm tra 1 chuỗi nằm trong chuỗi kia: strstr

Cắt 1 từ ra khỏi 1 chuỗi: strtok

Đổi 1 số ra chuỗi: itoa

Đổi 1 chuỗi ra số: atoi, atof,

Nhập một chuỗi: gets

Xuất một chuỗi: puts
Các cấu trúc lưu trữ trên bộ nhớ chính
Các cấu trúc lưu trữ trên bộ nhớ chính
02/21/14
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Kiểu mảng (Array)
Kiểu mảng (Array)

Mảng là một tập hợp các biến có cùng tên và
kiểu dữ liệu, được lưu trữ liên tiếp trong bộ nhớ

Mỗi phần tử được đánh chỉ số (Index), phần tử

đầu tiên có chỉ số là 0

Trong C, một mảng n chiều có thể coi là mảng 1
chiều trong đó mỗi phần tử là 1 mảng n-1 chiều.
Các kiểu dữ liệu có cấu trúc
Các kiểu dữ liệu có cấu trúc
Các cấu trúc lưu trữ trên bộ nhớ chính
Các cấu trúc lưu trữ trên bộ nhớ chính
02/21/14
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Kiểu mảng (Array):
Kiểu mảng (Array):
Khai báo mảng
Khai báo mảng
<Kiểu dữ liệu> <Tên biến>[<Số phần tử1>][<Số phần tử2>] ;
Ví dụ, ta có thể khai báo:

Float a[10]; //khai báo mảng 1 chiều có 10 phần tử

int a[100][150];//khai báo mảng 2 chiều

int a[][]={{1, 7, -3, 8, 19},{4, 5, 2, 8, 9},{21, -7, 45, -3, 4}};
Các kiểu dữ liệu có cấu trúc
Các kiểu dữ liệu có cấu trúc
Các cấu trúc lưu trữ trên bộ nhớ chính
Các cấu trúc lưu trữ trên bộ nhớ chính
02/21/14
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản

Kiểu hợp (Union)
Kiểu hợp (Union)

Union là một kiểu dữ liệu đặc biệt trong C, nó
tương tự kiểu struct nhưng các phần tử lại dùng
chung một vùng nhớ

Cách thức truy xuất đến các thành phần trong
kiểu Union giống như kiểu cấu trúc

Dùng kiểu Union khi cần lưu trữ dữ liệu thay đổi
theo trạng thái
Các kiểu dữ liệu có cấu trúc
Các kiểu dữ liệu có cấu trúc
Các cấu trúc lưu trữ trên bộ nhớ chính
Các cấu trúc lưu trữ trên bộ nhớ chính
02/21/14
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Kiểu hợp (Union):
Kiểu hợp (Union):
Khai báo kiểu union
Khai báo kiểu union
typedef union <tên kiểu union>
{
<KDL> <tên trường>;
<KDL> <tên trường>;
………
}[<Name>];
Các kiểu dữ liệu có cấu trúc

Các kiểu dữ liệu có cấu trúc
Ví dụ, ta có thể định nghĩa kiểu số sau:
typedef union tagNumber
{
int i;
long l;
}Number;
Number N;
Khi gán N.l=0xFF09 thì thành phần N.i sẽ nhận giá trị là 9
Các cấu trúc lưu trữ trên bộ nhớ chính
Các cấu trúc lưu trữ trên bộ nhớ chính
02/21/14
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Kiểu cấu trúc (Structure)
Kiểu cấu trúc (Structure)

Kiểu cấu trúc (hay kiểu mẫu tin) là một tập hợp
các biến khác tên và có thể khác nhau về kiểu
dữ liệu

Cách thức truy xuất đến các thành phần trong
kiểu cấu trúc: Têncấutrúc.Tênthànhphần

Dùng kiểu cấu trúc khi muốn lưu trữ thông tin
của các đối tượng phức tạp và đa dạng
Các kiểu dữ liệu có cấu trúc
Các kiểu dữ liệu có cấu trúc
Các cấu trúc lưu trữ trên bộ nhớ chính
Các cấu trúc lưu trữ trên bộ nhớ chính

02/21/14
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Kiểu cấu trúc (Structure):
Kiểu cấu trúc (Structure):
Khai báo kiểu cấu trúc
Khai báo kiểu cấu trúc
typedef struct <tên cấu trúc>
{
<KDL> <tên trường>;
<KDL> <tên trường>;
………
}[<TênKiểucấutrúc>];
Các kiểu dữ liệu có cấu trúc
Các kiểu dữ liệu có cấu trúc
Ví dụ, ta có thể định nghĩa kiểu cấu
trúc ngày tháng như sau:
typedef struct
{
int ngay;
int thang;
int nam;
}Ngaythang;
Ngaythang N;//khai báo biến
Các cấu trúc lưu trữ trên bộ nhớ chính
Các cấu trúc lưu trữ trên bộ nhớ chính
02/21/14
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Kiểu cấu trúc (Structure):

Kiểu cấu trúc (Structure):
Truy xuất dữ liệu
Truy xuất dữ liệu
Các kiểu dữ liệu có cấu trúc
Các kiểu dữ liệu có cấu trúc

Cách thức truy xuất đến các thành phần trong kiểu
cấu trúc: Têncấutrúc.Tênthànhphần

Để lấy địa chỉ của một thành phần trong cấu trúc, ta
dùng toán tử &: &Têncấutrúc.Tênthànhphần
Vd: Ngaythang N,M;
printf(“Nhập ngày tháng: ”);
scanf(“%d/%d/%d”,&N.ngay,&N.thang,&N.nam);
M=N;//gán biến cấu trúc N vào biến M
Các cấu trúc lưu trữ trên bộ nhớ chính
Các cấu trúc lưu trữ trên bộ nhớ chính
02/21/14
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Kiểu cấu trúc (Structure):
Kiểu cấu trúc (Structure):
Hàm và kiểu cấu trúc
Hàm và kiểu cấu trúc
Các kiểu dữ liệu có cấu trúc
Các kiểu dữ liệu có cấu trúc

Đối của hàm có thể là:
-
Biến mẫu tin: khi đó tham số thực tương ứng là một giá trị mẫu

tin
-
Tham chiếu mẫu tin: khi đó tham số thực tương ứng là một địa
chỉ mẫu tin
-
Con trỏ mẫu tin: khi đó tham số thực là địa chỉ của biến cấu trúc.

Hàm có thể trả về:
-
Giá trị mẫu tin: Ngaythang tênhàm( )
-
Con trỏ mẫu tin: Ngaythang *tênhàm( )
Các cấu trúc lưu trữ trên bộ nhớ chính
Các cấu trúc lưu trữ trên bộ nhớ chính
02/21/14
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Kiểu con trỏ (Pointer)
Kiểu con trỏ (Pointer)

Kiểu con trỏ là một kiểu dữ liệu đặc biệt trong C,
có kích thước 2 bytes và dùng để chứa địa chỉ
của một biến đã được cấp phát bộ nhớ

Khi biến con trỏ chứa địa chỉ của biến A ta nói nó
đang trỏ tới biến (vùng nhớ) A

Nếu con trỏ chứa giá trị NULL nghĩa là nó không
trỏ đến vùng nhớ nào hết
Các kiểu dữ liệu có cấu trúc

Các kiểu dữ liệu có cấu trúc
Các cấu trúc lưu trữ trên bộ nhớ chính
Các cấu trúc lưu trữ trên bộ nhớ chính
02/21/14
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Kiểu con trỏ (Pointer)
Kiểu con trỏ (Pointer)
Khai báo biến con trỏ
Khai báo biến con trỏ



Trực tiếp
Trực tiếp
: <tênkiểucơsở> *<tênbiếncontrỏ>;
: <tênkiểucơsở> *<tênbiếncontrỏ>;
Vd: int *P,*Q;//khai báo biến
Vd: int *P,*Q;//khai báo biến



Gián tiếp
Gián tiếp
: typedef <kiểucơsởT> *<tênkiểucontrỏ>;
: typedef <kiểucơsởT> *<tênkiểucontrỏ>;
<tênkiểucontrỏ> <tênbiếncontrỏ>;
<tênkiểucontrỏ> <tênbiếncontrỏ>;
Vd: typedef int *intPointer;//khai báo kiểu
Vd: typedef int *intPointer;//khai báo kiểu

intPointer P,Q;//khai báo biến
intPointer P,Q;//khai báo biến
Các kiểu dữ liệu có cấu trúc
Các kiểu dữ liệu có cấu trúc
Các cấu trúc lưu trữ trên bộ nhớ chính
Các cấu trúc lưu trữ trên bộ nhớ chính
02/21/14
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Kiểu con trỏ (Pointer)
Kiểu con trỏ (Pointer)
Khai báo biến con trỏ
Khai báo biến con trỏ

Con trỏ void: con trỏ được khai báo kiểu void có
thể chứa địa chỉ của bất kỳ kiểu nào. Tuy nhiên
trước khi sử dụng phải ép về một kiểu cụ thể
Vd: int X; float Y;
void *P;
P=&X; //P trỏ đến X
(float*) P=&Y;
(float*) P=&Y;
//P trỏ đến Y
//P trỏ đến Y


(int*) P=&X;
(int*) P=&X;
//P trỏ đến X
//P trỏ đến X

Các kiểu dữ liệu có cấu trúc
Các kiểu dữ liệu có cấu trúc
Các cấu trúc lưu trữ trên bộ nhớ chính
Các cấu trúc lưu trữ trên bộ nhớ chính
02/21/14
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Kiểu con trỏ (Pointer)
Kiểu con trỏ (Pointer)
Các thao tác
Các thao tác

Gán địa chỉ một biến cho con trỏ
tênbiếncontrỏ = &tênbiếncầnlấyđịachỉ;
tênbiếncontrỏ = NULL;
Ví dụ:

Chứa địa chỉ của mảng 1 chiều:
int *P , A[10]; > P = A;

Chứa địa chỉ của mảng 2 chiều:
float *P, B[3][4]; > P = (float*) B;

Chứa địa chỉ của 1 biến cấu trúc:
struct HocSinh *P, hs; > P = &hs;
Các kiểu dữ liệu có cấu trúc
Các kiểu dữ liệu có cấu trúc
Các cấu trúc lưu trữ trên bộ nhớ chính
Các cấu trúc lưu trữ trên bộ nhớ chính
02/21/14

www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Kiểu con trỏ (Pointer)
Kiểu con trỏ (Pointer)
Các thao tác
Các thao tác

Truy xuất nội dung 1 biến do biến con trỏ trỏ đến
Cú pháp:*tênbiếncontrỏ
Lưu ý: toán tử * và & có cùng độ ưu tiên
Ví dụ: int X, *P;
X=10; P=&X; //P trỏ đến X
printf(“Giá trị X là: %d”,X);
printf(“Giá trị do P trỏ đến: %d”,*P);
Các kiểu dữ liệu có cấu trúc
Các kiểu dữ liệu có cấu trúc
Các cấu trúc lưu trữ trên bộ nhớ chính
Các cấu trúc lưu trữ trên bộ nhớ chính
02/21/14
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Kiểu con trỏ (Pointer)
Kiểu con trỏ (Pointer)
Các phép toán
Các phép toán

So sánh địa chỉ chứa trong hai con trỏ, dùng
toán tử == hoặc !=

Khi sử dụng con trỏ trên mảng, ta có thể thực

hiện các phép toán sau

Cộng địa chỉ con trỏ: pt + i
==>Cộng địa chỉ vùng nhớ lưu trong pt với i*sizeof(T)

Trừ hai con trỏ: pt1-pt2
==>số phần tử có kích thước sizeof(T) giữa 2 địa chỉ.
Các kiểu dữ liệu có cấu trúc
Các kiểu dữ liệu có cấu trúc
Các cấu trúc lưu trữ trên bộ nhớ chính
Các cấu trúc lưu trữ trên bộ nhớ chính
02/21/14
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Kiểu con trỏ (Pointer)
Kiểu con trỏ (Pointer)
Con trỏ và mảng 1 chiều
Con trỏ và mảng 1 chiều

Tên mảng là hằng địa chỉ của phần tử đầu tiên trong
mảng, có thể thực hiện phép cộng địa chỉ với tên mảng.
Khi đó (A+i) tương ứng với &A[i]

Ta cũng có thể sử dụng con trỏ trên mảng với các phép
toán sau

Lấy địa chỉ phần tử thứ i : &A[i]

Cộng địa chỉ
Vd: int i, *p, A[3]={10,20,30}; p=A;// hoặc p=&A[0];

for (i=0;i<3;i++) printf(“A[%d]=%d”,i,*(A+i));
for (i=0;i<3;i++) printf(“A[%d]=%d”,i,*(p+i));
Các kiểu dữ liệu có cấu trúc
Các kiểu dữ liệu có cấu trúc
Các cấu trúc lưu trữ trên bộ nhớ chính
Các cấu trúc lưu trữ trên bộ nhớ chính
02/21/14
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Kiểu con trỏ (Pointer)
Kiểu con trỏ (Pointer)
Con trỏ và mảng 2 chiều
Con trỏ và mảng 2 chiều

Tên mảng là hằng địa chỉ của phần tử đầu tiên trong
mảng, có thể thực hiện phép cộng địa chỉ với tên mảng.
Khi đó (A+i) tương ứng với &A[i][0]
Vd: float A[3][2]; ta có A ứng với &A[0][0];
(A+1) ứng với &A[1][0]; (A+2) ứng với &A[2][0]

Ta cũng có thể sử dụng con trỏ trên mảng với các phép
toán sau

Lấy địa chỉ phần tử A[i][j] : p+i*sốcột+j

Cộng địa chỉ
Các kiểu dữ liệu có cấu trúc
Các kiểu dữ liệu có cấu trúc
Các cấu trúc lưu trữ trên bộ nhớ chính
Các cấu trúc lưu trữ trên bộ nhớ chính

02/21/14
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Kiểu con trỏ (Pointer)
Kiểu con trỏ (Pointer)
Con trỏ và mảng 2 chiều
Con trỏ và mảng 2 chiều
Vd: int i,j,k;
float *p, A[3][3];
p=(float*)A;// hoặc p=(float*)&A[0][0];
for (i=0;i<3;i++) //In theo mảng 2 chiều
for (j=0;j<3;j++)
printf(“A[%d][%d]=%d”,i,j,*(p+i*3+j));
for (k=0;k<3*3;k++) //In theo mảng 1 chiều
printf(“A[%d]=%d”,k,*(p+k));
Các kiểu dữ liệu có cấu trúc
Các kiểu dữ liệu có cấu trúc
Các cấu trúc lưu trữ trên bộ nhớ chính
Các cấu trúc lưu trữ trên bộ nhớ chính
02/21/14
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Kiểu con trỏ (Pointer)
Kiểu con trỏ (Pointer)
Con trỏ và kiểu cấu trúc
Con trỏ và kiểu cấu trúc

Lấy địa chỉ của một phần tử trong cấu trúc ta
dùng toán tử &
Vd :struct Ngay{ int ngay,thang,nam;}X;

struct Ngay *p;
p=&X; //p trỏ đến cấu trúc X

Để truy xuất giá trị của pt trong cấu trúc ta có thể

Cách 1: *(p).ngay, *(p).thang, *(p).nam

Cách 2: pngay, pthang, pnam
Các kiểu dữ liệu có cấu trúc
Các kiểu dữ liệu có cấu trúc
Các cấu trúc lưu trữ trên bộ nhớ chính
Các cấu trúc lưu trữ trên bộ nhớ chính
02/21/14
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Kiểu con trỏ (Pointer)
Kiểu con trỏ (Pointer)
Con trỏ hàm
Con trỏ hàm

Là con trỏ dùng để chứa địa chỉ của hàm

Khai báo hàm và con trỏ hàm phải trung khớp với nhau
về các đối số và kiểu dữ liệu trả về

Trước khi dùng phải gán tên hàm cho con trỏ hàm
Vd : int Hoanvi( int *x, int *y); //khai báo hàm
int (*p)( int*, int*)=Hoanvi; //khai báo con trỏ hàm
int x=2, y=3;
Hoanvi(&x, &y); //dùng tên hàm

p(&x, &y); //dùng con trỏ hàm
Các kiểu dữ liệu có cấu trúc
Các kiểu dữ liệu có cấu trúc
Các cấu trúc lưu trữ trên bộ nhớ chính
Các cấu trúc lưu trữ trên bộ nhớ chính
02/21/14
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Kiểu tập tin (File)
Kiểu tập tin (File)

Ưu điểm của RAM: truy xuất nhanh

Nhược điểm của RAM: kích thước hạn chế,
không lưu trữ thông tin khi mất điện
 Giải pháp: lưu trữ trên bộ nhớ ngoài (ổ đĩa)

Ưu: kích thước lớn, lưu trữ lâu dài

Nhược: truy xuất chậm do sử dụng thiết bị cơ khí
Các kiểu dữ liệu có cấu trúc
Các kiểu dữ liệu có cấu trúc
Cấu trúc lưu trữ trên bộ nhớ ngoài
Cấu trúc lưu trữ trên bộ nhớ ngoài
02/21/14
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Kiểu tập tin (File)
Kiểu tập tin (File)


Có 2 loại tập tin

Tập tin văn bản (Text file)

Tập tin nhị phân (Binary file)

Các bước làm việc với tập tin
1. Khai báo biến tập tin
2. Mở tập tin
3. Truy xuất nội dung tập tin
4. Đóng tập tin

Trong C, các hàm xử lý tập tin có trong thư viện stdio.h
Các kiểu dữ liệu có cấu trúc
Các kiểu dữ liệu có cấu trúc
Cấu trúc lưu trữ trên bộ nhớ ngoài
Cấu trúc lưu trữ trên bộ nhớ ngoài

×