Chương 2 Các kiểu dữ liệu cơ bản - Pdf 12

1
Các kiểu dữ liệu cơ bản
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
N


i dung
i dung
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki


u chu
u chu




ch
ch
í
í
nh
nh
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki


u chu
u chu


i (String)
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

á
á
c c
c c


u tr
u tr
ú
ú
c lưu tr
c lưu tr


trên b
trên b


nh
nh


ch
ch
í
í
nh
nh
3/11/2010
www.lhu.edu.vn

C
á
á
c ki
c ki


u d
u d


li
li


u c
u c
ó
ó
c
c


u tr
u tr
ú
ú
c
c
 So sánh 2 chuỗi: strcmp



ch
ch
í
í
nh
nh
2
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki


u m
u m


ng (Array)
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

á
á
c c
c c


u tr
u tr
ú
ú
c lưu tr
c lưu tr


trên b
trên b


nh
nh


ch
ch
í
í
nh
nh
3/11/2010
www.lhu.edu.vn

c ki
c ki


u d
u d


li
li


u c
u c
ó
ó
c
c


u tr
u tr
ú
ú
c
c
C
C
á
á

Ki


u h
u h


p (Union)
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
á
á
c ki
c ki


u d
u d


li
li



trên b
trên b


nh
nh


ch
ch
í
í
nh
nh
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki


u h
u h


p (Union):
p (Union):
Khai b


u c
u c
ó
ó
c
c


u tr
u tr
ú
ú
c
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 c
c c



u c
u c


u tr
u tr
ú
ú
c (Structure)
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
á
á
c ki
c ki


u d
u d



c lưu tr
c lưu tr


trên b
trên b


nh
nh


ch
ch
í
í
nh
nh
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki


u c
u c


u tr

C
á
á
c ki
c ki


u d
u d


li
li


u c
u c
ó
ó
c
c


u tr
u tr
ú
ú
c
c
Ví dụ, ta có thể định nghĩa kiểu cấu



ch
ch
í
í
nh
nh
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki


u c
u c


u tr
u tr
ú
ú
c (Structure):
c (Structure):
Truy xu
Truy xu


t d

c


u tr
u tr
ú
ú
c
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ành phầ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 c
c c


u tr
u tr
ú
ú
c lưu tr

ú
ú
c (Structure):
c (Structure):
H
H
à
à
m v
m v
à
à
ki
ki


u c
u c


u tr
u tr
ú
ú
c
c
C
C
á
á

- 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 c
c c


u tr
u tr
ú
ú
c lưu tr
c lưu tr


trên b
trên b


nh
nh


ch
ch

c ki


u d
u d


li
li


u c
u c
ó
ó
c
c


u tr
u tr
ú
ú
c
c
C
C
á
á
c c



u con tr
u con tr


(Pointer)
(Pointer)
Khai b
Khai b
á
á
o bi
o bi
ế
ế
n con tr
n con tr




Tr
Tr


c ti
c ti
ế
ế



Gi
Gi
á
á
n ti
n ti
ế
ế
p
p
: typedef <ki
: typedef <ki


ucơs
ucơs


T> *<tênki
T> *<tênki


ucontr
ucontr


>;
>;

á
á
o bi
o bi
ế
ế
n
n
C
C
á
á
c ki
c ki


u d
u d


li
li


u c
u c
ó
ó
c
c



ch
ch
í
í
nh
nh
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki


u con tr
u con tr


(Pointer)
(Pointer)
Khai b
Khai b
á
á
o bi
o bi
ế
ế
n con tr

ế
n X
n X
C
C
á
á
c ki
c ki


u d
u d


li
li


u c
u c
ó
ó
c
c


u tr
u tr
ú

í
nh
nh
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki


u con tr
u con tr


(Pointer)
(Pointer)
C
C
á
á
c thao t
c thao t
á
á
c
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ụ:

u tr
u tr
ú
ú
c
c
C
C
á
á
c c
c c


u tr
u tr
ú
ú
c lưu tr
c lưu tr


trên b
trên b


nh
nh



 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
á
á
c ki
c ki


u d
u d


li
li


u c
u c
ó
ó
c
c



ch
ch
í
í
nh
nh
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki


u con tr
u con tr


(Pointer)
(Pointer)
C
C
á
á
c ph
c ph
é
é
p to
p to

ó
ó
c
c


u tr
u tr
ú
ú
c
c
C
C
á
á
c c
c c


u tr
u tr
ú
ú
c lưu tr
c lưu tr


trên b
trên b

v
à
à
m
m


ng 1 chi
ng 1 chi


u
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
á
á
c ki
c ki



u tr
u tr
ú
ú
c lưu tr
c lưu tr


trên b
trên b


nh
nh


ch
ch
í
í
nh
nh
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki



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
á
á
c ki
c ki


u d
u d


li
li


u c
u c
ó
ó
c
c


u tr
u tr
ú

í
nh
nh
6
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki


u con tr
u con tr


(Pointer)
(Pointer)
Con tr
Con tr


v
v
à
à
m
m


ng 2 chi

u c
ó
ó
c
c


u tr
u tr
ú
ú
c
c
C
C
á
á
c c
c c


u tr
u tr
ú
ú
c lưu tr
c lưu tr


trên b

v
v
à
à
ki
ki


u c
u c


u tr
u tr
ú
ú
c
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
á
á

c c
c c


u tr
u tr
ú
ú
c lưu tr
c lưu tr


trên b
trên b


nh
nh


ch
ch
í
í
nh
nh
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki

á
á
c ki
c ki


u d
u d


li
li


u c
u c
ó
ó
c
c


u tr
u tr
ú
ú
c
c
C
C

Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki


u t
u t


p tin (File)
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
á
á
c ki
c ki


u d
u d


li

trên b


nh
nh


ngo
ngo
à
à
i
i
7
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki


u t
u t


p tin (File)
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)

u tr
u tr
ú
ú
c
c
C
C


u tr
u tr
ú
ú
c lưu tr
c lưu tr


trên b
trên b


nh
nh


ngo
ngo
à
à


p tin
p tin
1. Khai báo biến tập tin: FILE *ContrỏFile;
 File được kết thúc bởi ký tự có mã 26 (EOF)
2. Mở tập tin: ContrỏFile = fopen (char *têntậptin, char *kiểu);
C
C


u tr
u tr
ú
ú
c lưu tr
c lưu tr


trên b
trên b


nh
nh


ngo
ngo
à
à



c thao t
c thao t
á
á
c trên t
c trên t


p tin
p tin
V
V
í
í
d
d


:
:
FILE *fp;
FILE *fp;
fp = fopen(
fp = fopen(


C:
C:

);
);
exit(1);
exit(1);
}
}
C
C
á
á
c ki
c ki


u d
u d


li
li


u c
u c
ó
ó
c
c



i
i
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki


u t
u t


p tin (File)
p tin (File)
C
C
á
á
c bư
c bư


c thao t
c thao t
á
á
c trên t
c trên t




ngo
ngo
à
à
i
i
8
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki


u t
u t


p tin (File)
p tin (File)
C
C
á
á
c bư
c bư





nh
nh


ngo
ngo
à
à
i
i
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki


u t
u t


p tin (File)
p tin (File)
C
C
á
á
c bư

c lưu tr


trên b
trên b


nh
nh


ngo
ngo
à
à
i
i
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki


u t
u t


p tin (File)
p tin (File)



u tr
u tr
ú
ú
c lưu tr
c lưu tr


trên b
trên b


nh
nh


ngo
ngo
à
à
i
i
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki


 Xóa tập tin:
int remove (const char * path);
C
C


u tr
u tr
ú
ú
c lưu tr
c lưu tr


trên b
trên b


nh
nh


ngo
ngo
à
à
i
i
9
3/11/2010

4. Đóng tập tin
 int fclose (FILE *fp);
Nếu có lỗi hàm cho EOF ngược lại cho giá trị 0.
 int fcloseall ( );
Nếu có lỗi cho EOF nếu không cho số file được đóng.
C
C


u tr
u tr
ú
ú
c lưu tr
c lưu tr


trên b
trên b


nh
nh


ngo
ngo
à
à
i

fp = fopen(a[1], "wt");
while (( c = getchar()) != EOF) //hàm getchar() trả về EOF
{ putc( c, fp); sobyte++; } //khi có lỗi hoặc ấn F6
printf("\n\t 1 file copy \t\t %d bytes ", sobyte);
fclose(fp);
}
C
C


u tr
u tr
ú
ú
c lưu tr
c lưu tr


trên b
trên b


nh
nh


ngo
ngo
à
à

fp = fopen(a[1], "wt");
while ( gets(st)) != NULL) //hàm gets(st) trả về NULL khi có lỗi
{ fputs( st, fp); fputs("\n", fp); //hoặc ấn F6
sobyte+=strlen(st);
}
printf("\n\t 1 file copy \t\t %d bytes ", sobyte);
fclose(fp);
}
C
C


u tr
u tr
ú
ú
c lưu tr
c lưu tr


trên b
trên b


nh
nh


ngo
ngo

Polygol P;
void main(void)
{
FILE *fp;
char c; int n,i;
fp = fopen("c:\\dagiac.dat","rt");
fscanf(fp,"%d",&n);
printf("%d\n",n);
for (i=0; i<n; i++) fscanf(fp,"%d %d",&P[i].x,&P[i].y);
fclose(fp);
}
C
C


u tr
u tr
ú
ú
c lưu tr
c lưu tr


trên b
trên b


nh
nh



t to
t to
á
á
n
n


L
L
à
à
s
s


l
l


nh c
nh c


n thi
n thi
ế
ế
t m

nh s


d
d


ng thu
ng thu


t to
t to
á
á
n
n


Th
Th


i gian th
i gian th


c hi
c hi


í
ch thư
ch thư


c d
c d


li
li


u v
u v
à
à
o, ký hi
o, ký hi


u T(n),
u T(n),
T(n)
T(n)


0
0


c hi


n
n
trong trư
trong trư


ng h
ng h


p x
p x


u nh
u nh


t
t
Đ
Đ
á
á
nh gi
nh gi
á

l
l


tăng c
tăng c


a h
a h
à
à
m (Growth Rate)
m (Growth Rate)


Cho hai h
Cho hai h
à
à
m không âm T
m không âm T
1
1
(n) v
(n) v
à
à
T
T

(n) n
(n) n
ế
ế
u t
u t


n t
n t


i c
i c
á
á
c h
c h


ng
ng
s
s


c v
c v
à
à

V
V
í
í
d
d


: T
: T
ì
ì
m t
m t


l
l


gia tăng c
gia tăng c


a h
a h
à
à
m T
m T

2
2
+n
+n
2
2
=4n
=4n
2
2
v
v


i m
i m


i n
i n


1
1


ch
ch



2
2
(n) =n
(n) =n
2
2
Đ
Đ
á
á
nh gi
nh gi
á
á
đ
đ


ph
ph


c t
c t


p thu
p thu



t to
á
á
n (Complexity)
n (Complexity)


Cho hai h
Cho hai h
à
à
m T
m T
1
1
(n) v
(n) v
à
à
T
T
2
2
(n)
(n)


T
T
1

u t


n t
n t


i c
i c
á
á
c h
c h


ng s
ng s


c v
c v
à
à
n
n
0
0
: T
: T
1


u: T
u: T
1
1
(n) =
(n) =
O(
O(
T
T
2
2
(n)
(n)
)
)
đ
đ


c l
c l
à
à


ô c
ô c


à
m đã bi
m đã bi
ế
ế
t như
t như
: log
: log
2
2
n, n,
n, n,
nlog
nlog
2
2
n, n
n, n
2
2
, n
, n
3
3
, 2
, 2
n
n
, n!, n

á
á
n
n
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Đ
Đ


ph
ph


c t
c t


p c
p c


a thu
a thu


t to
t to
á

á
n
n
O(1)
n
T(n)
11
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
C
C
á
á
ch t
ch t
í
í
nh đ
nh đ


ph
ph


c t
c t



n chương tr
n chương tr
ì
ì
nh P1v
nh P1v
à
à
P2
P2
l
l


ng nhau
ng nhau
; T1(n) = O(f(n)),
; T1(n) = O(f(n)),
T2(n) = O(g(n)) th
T2(n) = O(g(n)) th
ì
ì
th
th


i gian th
i gian th



T(n) = O(
T(n) = O(
f(n).g(n)
f(n).g(n)
)
)


Qui t
Qui t


c c
c c


ng
ng
:
:


Cho hai đo
Cho hai đo


n chương tr
n chương tr
ì
ì



c hi
c hi


n c
n c


a đo
a đo


n hai
n hai
chương tr
chương tr
ì
ì
nh đ
nh đ
ó
ó
l
l
à
à
T(n)=O(
T(n)=O(

á
á
n
n
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
C
C
á
á
ch t
ch t
í
í
nh đ
nh đ


ph
ph


c t
c t


p c
p c


for (j =N
-
-
1; j >i ; j
1; j >i ; j)
)
{3}
{3}
if(a[j]< a[j
if(a[j]< a[j
-
-
1])
1])
// n
// n
ế
ế
u sai v
u sai v


tr
tr
í
í
th

-
1] = temp;
1] = temp;
}
}
}
}


đ
đ


ph
ph


c t
c t


p l
p l
à
à
O(n
O(n
2
2
)

n


Nhờ tải bản gốc
Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status