SlideShare a Scribd company logo
1 of 70
Download to read offline
1
ỆỆ
ẤẤ
2
NNộộii dungdung
ĐĐịịnh nghnh nghĩĩa Kia Kiểểu du dữữ liliệệuu
CCáácc kikiểểuu ddữữ liliệệuu cơcơ bbảảnn
CCáác kic kiểểu du dữữ liliệệu cu cóó ccấấu tru trúúcc
MMộột st sốố kikiểểu du dữữ liliệệu cu cóó ccấấu tru trúúc cơ bc cơ bảảnn
MMảảngng
ChuChuỗỗii kýký ttựự
StructStruct
3
ĐĐịịnh nghnh nghĩĩa kia kiểểu du dữữ liliệệuu
KiKiểểu du dữữ liliệệuu TT đưđượợc xc xáác đc địịnh bnh bởởi mi mộột bt bộộ <<VV,,OO> v> vớới:i:
VV: t: tậập cp cáác gic giáá trtrịị hhợợp lp lệệ mmàà mmộột đt đốối tưi tượợng king kiểểuu TT ccóó
ththểể lưu trlưu trữữ..
OO: t: tậập cp cáác thao tc thao táác xc xửử lý clý cóó ththểể thi hthi hàành trên đnh trên đốốii
tưtượợng king kiểểuu T.T.
VVíí ddụụ:: kikiểểu du dữữ liliệệu su sốố nguyên= <Vnguyên= <Vii, O, Oii> v> vớớii
VVii={={--32768.. 32767}; O32768.. 32767}; Oii={+,={+, --, *, *, /, /, %, %}.}.
Như vNhư vậậy, muy, muốốn sn sửử ddụụng mng mộột KDL ct KDL cầần nn nắắm vm vữững cng cảả nnộộii
dung DL đươc phdung DL đươc phéép lưu trp lưu trữữ vvàà ccáác xc xửử lý tlý táác đc độộng trên nng trên nóó..
CCáác thuc thuộộc tc tíính 1 KDL gnh 1 KDL gồồm(Tên KDL, Mim(Tên KDL, Miềền gin giáá trtrịị, K, Kííchch
thưthướớc lưu trc lưu trữữ, t, tậập cp cáác toc toáán tn tửử ttáác đc độộng lên KDL).ng lên KDL).
4
ểể ữữ ệệ cơcơ ởở
5
CCáác kic kiểểu du dữữ liliệệu cơ su cơ sởở
KiKiểểu cu cóó ththứứ ttựự rrờời ri rạạcc: S: Sốố nguyên.nguyên.
KiKiểểu cu cóó ththứứ ttựự không rkhông rờời ri rạạcc: S: Sốố
ththựực.c.
6
CCáácc kikiểểuu ssốố nguyênnguyên ccủủaa CC
CC hhỗỗ trtrợợ khkháá nhinhiềềuu kikiểểuu ssốố nguyênnguyên
CCáácc gigiáá trtrịị llớớnn nhnhấấtt vvàà nhnhỏỏ nhnhấấtt đưđượợcc đđịịnhnh nghnghĩĩaa trongtrong thưthư
viviệệnn ““limits.hlimits.h””
Kiểu định dạng kích thước nhỏ nhất lớn nhất
char %c 1 CHAR_MIN CHAR_MAX
unsigned char %c 1 0 UCHAR_MAX
short [int] %hi 2 SHRT_MIN SHRT_MAX
unsigned short%hu 2 0 USHRT_MAX
int %i 2 or 4 INT_MIN INT_MAX
unsigned int %u 2 or 4 0 UINT_MAX
long [int] %li 4 LONG_MIN LONG_MAX
unsigned long %lu 4 0 ULONG_MAX
7
VVíí ddụụ vvềề ssốố nguyênnguyên
#include <stdio.h>
#include <limits.h>
int main()
{
unsigned long big = ULONG_MAX;
printf("minimum int = %i, ", INT_MIN);
printf("maximum int = %in", INT_MAX);
printf("maximum unsigned = %un", UINT_MAX);
printf("maximum long int = %lin", LONG_MAX);
printf("maximum unsigned long = %lun", big);
return 0;
} minimum int = -32768, maximum int = 32767
maximum unsigned = 65535
maximum long int = 2147483647
maximum unsigned long = 4294967295
8
#include <stdio.h>
#include <limits.h>
int main()
{
char lower_a = 'a';
char lower_m = 'm';
printf("minimum char = %i, ", CHAR_MIN);
printf("maximum char = %in", CHAR_MAX);
printf(“Sau '%c' la '%c'n", lower_a, lower_a + 1);
printf(“Ky tu in hoa '%c'n", lower_m - 'a' + 'A');
return 0;
} minimum char = -128, maximum char = 127
Sau 'a' la 'b'
Ky tu in hoa 'M'
In ra mã ASCII của ký tự
VVíí ddụụ kikiểểu ký tu ký tựự
Trong NNLT C,Trong NNLT C, ký tký tựự
chchíính lnh làà ssốố nguyênnguyên
9
SSốố nguyênnguyên trongtrong ccáácc cơcơ ssốố khkháácc
CCáácc hhệệ cơcơ ssốố ccóó ththểể ththựựcc hihiệệnn đưđượợcc:: cơcơ ssốố 8 (octal),8 (octal), cơcơ ssốố
10 (decimal),10 (decimal), cơcơ ssốố 16 (hexadecimal)16 (hexadecimal)
Số 0: số octal
0x: số
hexadecimal
#include <stdio.h>
int main(void)
{
int dec = 20, oct = 020, hex = 0x20;
printf("dec=%d, oct=%d, hex=%dn", dec, oct, hex);
printf("dec=%d, oct=%o, hex=%xn", dec, oct, hex);
return 0;
}
dec=20, oct=16, hex=32
dec=20, oct=20, hex=20
10
SSốố ththựựcc
CC hhỗỗ trtrợợ nhinhiềềuu kikiểểuu ssốố ththựựcc lưulưu trtrữữ ddấấuu chchấấmm đđộộngng..
CCáácc gigiáá trtrịị llớớnn nhnhấấtt vvàà nhnhỏỏ nhnhấấtt đưđượợcc đđịịnhnh nghnghĩĩaa trongtrong thưthư viviệệnn
““float.hfloat.h””
Kiểu định dạng kích thước nhỏ nhất lớn nhất
floatfloat %f %e %g 4 FLT_MIN FLT_MAX
doubledouble %lf %le %lg 8 DBL_MIN DBL_MAX
long doublelong double %Lf %Le %Lg 10 LDBL_MIN LDBL_MAX
11
VVíí ddụụ ssốố ththựựcc::
#include <stdio.h>
#include <float.h>
int main(void)
{
double f = 3.1416, g = 1.2e-5, h = 5000000000.0;
printf("f=%lftg=%lfth=%lfn", f, g, h);
printf("f=%letg=%leth=%len", f, g, h);
printf("f=%lgtg=%lgth=%lgn", f, g, h);
printf("f=%7.2lftg=%.2leth=%.4lgn", f, g, h);
return 0;
} f=3.141600 g=0.000012 h=5000000000.000000
f=3.141600e+00 g=1.200000e-05 h=5.000000e+09
f=3.1416 g=1.2e-05 h=5e+09
f= 3.14 g=1.20e-05 h=5e+09
12
ểể ữữ ệệ ấấ
13
ĐĐịịnh nghnh nghĩĩa kia kiểểu du dữữ liliệệu cu cóó ccấấuu
trtrúúcc
KiKiểểu du dữữ liliệệu đưu đượợc xây dc xây dựựng mng mớới di dựựa trêna trên
viviệệc tc tổổ chchứức liên kc liên kếết ct cáác thc thàành phnh phầần dn dữữ
liliệệu cu cóó kikiểểu du dữữ liliệệu đã đưu đã đượợc đc địịnh nghnh nghĩĩa.a.
NhNhữững KDL đưng KDL đượợc xây dc xây dựựng như thng như thếế ggọọii
llàà KDL cKDL cóó ccấấu tru trúúc.c.
14
MMộột st sốố kikiểểu du dữữ liliệệu cu cấấu tru trúúcc
KiKiểểu mu mảảngng
KiKiểểu chuu chuỗỗi ký ti ký tựự
KiKiểểu cu cấấu tru trúúc mc mẩẩu tinu tin
15
ảả
16
MMảảngng –– ArrayArray
MMộột st sốố ttíính chnh chấấtt
Khai bKhai bááo mo mảảng trong Cng trong C
Truy xuTruy xuấất ct cáác thc thàành phnh phầầnn
TruyTruyềền tham sn tham sốố kikiểểu mu mảảng cho hng cho hààmm
MMộột st sốố thao tthao táác cơ sc cơ sởở
MMảảng nhing nhiềều chiu chiềềuu
17
MMảảngng –– MMộột st sốố ttíính chnh chấấtt
MMảảng lng làà mmộột kit kiểểu du dữữ liliệệu cu cóó ccấấu tru trúúc do ngưc do ngườời li lậậpp
trtrìình đnh địịnh nghnh nghĩĩaa
DDùùng bing biểểu diu diễễn cn cáác đc đốối tưi tượợng dng dữữ liliệệuu ởở ddạạng mng mộộtt
dãy cdãy cáác thc thàành phnh phầần cn cóó ccùùng king kiểểu vu vớới nhaui nhau –– kikiểểu cơu cơ
ssởở
NNLT C luôn chNNLT C luôn chỉỉ đđịịnh mnh mộột kht khốối nhi nhớớ liên tliên tụục choc cho
mmộột bit biếến kin kiểểu mu mảảngng
KKíích thưch thướớc cc củủa ma mảảng đưng đượợc xc xáác đc địịnh ngay khi khainh ngay khi khai
bbááo vo vàà không bao gikhông bao giờờ thay đthay đổổii
18
MMảảngng –– Khai bKhai bááo trong Co trong C
typedeftypedef kikiểểucơsucơsởở TênkiTênkiểểuu[[SSốốththàànhphnhphầầnn]];;
kikiểểu cu củủa ma mỗỗi thi thàành phnh phầầnn hhằằng sng sốố, s, sốố ththàành phnh phầầnn
ttốối đa ci đa củủa ma mảảngng
do ldo lậập trp trìình viên đnh viên đặặt tênt tên
typedeftypedef intint AINT[AINT[100100];];
////AINTAINT llàà kikiểểu mu mảảng bing biểểu diu diễễn dãy gn dãy gồồm 100 thm 100 thàành phnh phầần intn int
AINTAINT a;a; //a: bi//a: biếến kin kiểểu AINTu AINT
19
MMảảngng –– VVíí ddụụ
#define SIZE 10
int a[5]; // a dãy gồm 5 số nguyên
long int big[100]; // big: chiếm 400 bytes!
double d[100]; // d: chiếm 800 bytes!
long double v[SIZE];// v:10 long doubles
20
MMảảngng –– VVíí ddụụ
int a[5] = { 10, 20, 30, 40, 50};
double d[100] = { 1.5, 2.7};
short primes[] = { 1, 2, 3, 5, 7, 11, 13};
long b[50] = { 0 };
int i = 7;
const int c = 5;
int a[i];
double d[c];
short primes[];
khởi trị cho 5
thành phần
2 thành phần
đầu tiên được
khởi trị, phần
còn lại: 0
compiler xác định
kích thước gồm 7
thành phần cách nhanh nhất để
khởi trị tất cả các
thành phần bằng 0
21
CCáác thc thàành phnh phầần cn củủa ma mảảng đưng đượợc truy xuc truy xuấất thông qua cht thông qua chỉỉ ssốố
ccủủa cha chúúngng 0..size0..size--11
Thao tThao táác truy xuc truy xuấất không kit không kiểểm tra gim tra giớới hi hạạn cn củủa cha chỉỉ ssốố
int main()
{
int a[6];
int i = 7;
a[0] = 59;
a[5] = -10;
a[i/2] = 2;
a[6] = 0;
a[-1] = 5;
return 0;
}
0
a
1
2
3
4
5
MMảảngng –– Truy xuTruy xuấất ct cáác phc phầần tn tửử
22
TruyTruyềền tham sn tham sốố MMảảng cho hng cho hààmm
Tham sTham sốố kikiểểu mu mảảng đưng đượợc truyc truyềền cho hn cho hààm chm chíính lnh làà đđịịa cha chỉỉ
ccủủa pha phầần tn tửử đđầầu tiên trên mu tiên trên mảảngng
SSốố ththàành phnh phầần trong tham sn trong tham sốố mmảảng cng cóó ththểể đđểể trtrốống.ng.
SSốố ththàành phnh phầần thn thựực sc sựự đưđượợc sc sửử ddụụng phng phảải truyi truyềền qua mn qua mộộtt
tham stham sốố khkháác (vd: size)c (vd: size)
int add_elements(int a[], int size)
{
int add_elements(int *p, int size)
{
23
VVíí ddụụ
#include <stdio.h>
void sum(long [], int);
int main(void) {
long primes[6] = { 1, 2,
3, 5, 7, 11 };
sum(primes, 6);
printf("%lin", primes[0]);
return 0;
}
void sum(long a[], int sz) {
int i;
long total = 0;
for(i = 0; i < sz; i++)
total += a[i];
a[0] = total;
}
1
2
3
5
7
11
primes
a
sz 6
tổng được lưu vào
phần tử đầu tiên
dùng để kiểm tra
giới hạn chỉ số
24
MMộột st sốố thao tthao táác cơ sc cơ sởở
NhNhậậpp
XuXuấấtt
Thêm mThêm mộột tht thàành phnh phầần dn dữữ liliệệuu
LoLoạại bi bỏỏ mmộột tht thàành phnh phầần dn dữữ liliệệuu
TTììm kim kiếếmm
SSắắp xp xếếpp
25
MMảảngng –– NhNhậập dp dữữ liliệệuu
void ReadData(int a[], int size)
{
int i;
for(i = 0; i < size; i++)
{
printf(“Nhap thanh phan %d: ”, i);
scanf(“%d”, &a[i]);
}
}
duyệt qua tất cả các
phần tử
nhập dữ liệu cho a[i]
26
MMảảngng –– XuXuấất dt dữữ liliệệu ra mu ra mààn hn hììnhnh
void WriteData(int a[], int size)
{
int i;
for(i = 0; i < size; i++)
printf(“%d ”, a[i]);
printf(“n”);
}
27
MMảảngng –– NhNhậập xup xuấất dt dữữ liliệệuu
#include <stdio.h>
void ReadData(int [], int );
void WriteData(int [], int );
void main()
{
int a[100], n;
clrscr();
printf(“Nhap so thanh phan cua day: “);
scanf(“%d”, &n);
printf(“Nhap cac thanh phan cua day: “);
ReadData(a, n);
printf(“Day vua nhap: n“);
WriteData(a, n);
}
28
MMảảngng –– TTììm vm vịị trtríí X trong dãyX trong dãy
//input: dãy (a, N), X
//output: Vị trí của X, -1 nếu không có
intint Search(int a[], int N, int X)Search(int a[], int N, int X)
{{
for (int i = 0; i < N; i ++)for (int i = 0; i < N; i ++)
if (a[i] == X)if (a[i] == X)
return i;return i;
returnreturn --1;1;
}}
BBàài toi toáán: Tn: Tììm vm vịị trtríí X trên mX trên mảảng a đang cng a đang cóó N thN thàành phnh phầần.n.
GiGiảải phi phááp: Tp: Tììm tum tuầần tn tựự
29
MMảảngng –– Thêm mThêm mộột tht thàành phnh phầần dn dữữ liliệệuu
BBàài toi toáán: cn: cầần thêm thn thêm thàành phnh phầần dn dữữ liliệệu X vu X vàào mo mảảng ang a
đang cđang cóó N thN thàành phnh phầần.n.
Hai trưHai trườờng hng hợợp cp cầần xem xn xem xéét:t:
Dãy chưa cDãy chưa cóó ththứứ ttựự
Thêm X vThêm X vàào cuo cuốối a.i a.
Dãy đã cDãy đã cóó ththứứ ttựự
TTììm vm vịị trtríí ththíích hch hợợp, chp, chèèn X vn X vààoo
30
MMảảngng –– Thêm X vThêm X vàào cuo cuốối dãyi dãy
Thêm 15 vào (a, 7)
N = 7N = 8
a[N] = X;
N ++;X
31
MMảảngng –– ChChèèn X vn X vàào dãy tăng do dãy tăng dầầnn
Chèn 6 vào (a, 7)
N = 7N = 8
X
Vị trí thích hợp: 4
pos
32
MMảảngng –– ChChèèn X vn X vàào dãy tăng do dãy tăng dầầnn
//input: dãy (a, N) tăng dần, X
//output: dãy (a, N) đã có X ở đúng vị trí
voidvoid Insert(int a[], int &N, int X)Insert(int a[], int &N, int X)
{{
int pos;int pos;
for (pos = N; (pos>0)&&(a[posfor (pos = N; (pos>0)&&(a[pos--1]>X); pos1]>X); pos ----))
a[pos] = a[posa[pos] = a[pos –– 1];1];
a[pos] = X;a[pos] = X;
N ++;N ++;
}}
33
MMảảngng –– LoLoạại bi bỏỏ mmộột tht thàành phnh phầần dn dữữ liliệệuu
BBàài toi toáán: lon: loạại bi bỏỏ ththàành phnh phầần dn dữữ liliệệu X ra khu X ra khỏỏii
mmảảng a đang cng a đang cóó N thN thàành phnh phầần.n.
HưHướớng ging giảải quyi quyếết: xt: xáác đc địịnh vnh vịị trtríí ccủủa X, na X, nếếu tu tììmm
ththấấy thy thìì ddồồn cn cáác phc phầần tn tửử ởở phphíía sau lên đa sau lên đểể llấấp vp vààoo
chchỗỗ trtrốống. 2ng. 2 trưtrườờng hng hợợp:p:
Dãy không cDãy không cóó ththứứ ttựự: l: lấấp php phầần tn tửử cucuốối lêni lên
Dãy đã thDãy đã thứứ ttựự: d: dờời ti tấất ct cảả ccáác phc phầần tn tửử ởở sau vsau víí
trtríí ccủủa X lên trưa X lên trướớc 1 vc 1 vịị trtríí..
34
N = 8
MMảảngng –– LoLoạại bi bỏỏ X ra khX ra khỏỏi dãy tăngi dãy tăng
Loại 5 khỏi (a, 8)
N = 7
pos
Tìm vị trí của 5
X
Dồn các vị trí 4, 5, 6, 7 lên
35
MMảảngng –– LoLoạại bi bỏỏ X ra khX ra khỏỏi dãy tăngi dãy tăng
//input: dãy (a, N), X
//output: dãy (a, N) đã loại bỏ 1 thành phần X
intint Remove(int a[], int &N, int X)Remove(int a[], int &N, int X)
{{
int pos = Search(a, N, X);int pos = Search(a, N, X);
if (pos ==if (pos == --1)1) //không c//không cóó X trong dãyX trong dãy
return 0;return 0;
NN ----;;
for (; (pos < N); pos ++)for (; (pos < N); pos ++)
a[pos] = a[pos + 1];a[pos] = a[pos + 1];
return 1;return 1;
}}
36
MMảảngng –– SSắắp xp xếếpp
BBàài toi toáán: Sn: Sắắp xp xếếp cp cáác thc thàành phnh phầần cn củủa (a (a,a, N)N) đđểể thuthu
đưđượợc dãy tăng dc dãy tăng dầầnn
GiGiảải phi phááp: Tp: Tììm cm cáách trich triệệt tiêu tt tiêu tấất ct cảả ccáác nghc nghịịch thch thếế
ccủủa dãya dãy
ThuThuậật tot toáán sn sắắp xp xếếpp ĐĐổổi chi chổổ trtrựực tic tiếếpp
37
MMảảngng –– SSắắp xp xếếp đp đổổi chi chổổ
i
j
38
i
j
MMảảngng –– SSắắp xp xếếp đp đổổi chi chổổ
39
i
j
MMảảngng –– SSắắp xp xếếp đp đổổi chi chổổ
40
i
j
MMảảngng –– SSắắp xp xếếp đp đổổi chi chổổ
41
MMảảngng –– SSắắp xp xếếp đp đổổi chi chổổ
42
MMảảngng –– SSắắp xp xếếp đp đổổi chi chổổ
void Swap(int &x, int &y)
{
int t = x; x = y; y = t;
}
void InterchangeSort(int a[], int N)
{
int i, j;
for (i = 0 ; i<N-1 ; i++)
for (j =i+1; j < N ; j++)
if(a[j]< a[i])
Swap(a[i],a[j]);
}
43
MMảảng nhing nhiềều chiu chiềềuu
C không hC không hỗỗ trtrợợ mmảảng nhing nhiềều chiu chiềều. Tuy nhiên cu. Tuy nhiên cóó ththểể titiếếpp
ccậận theo hưn theo hướớng: Mng: Mảảng 2 ching 2 chiềều lu làà mmảảng mng mộột chit chiềều mu màà mmỗỗii
ththàành phnh phầần cn củủa na nóó llàà mmộột mt mảảng mng mộột chit chiềều.u.
float rainfall[12][365];
“rainfall” là mảng gồm 12
thành phần, mỗi thành phần là
mảng gồm 365 số float
short exam_marks[500][10];
“exam_marks” là mảng gồm
500 thành phần, mỗi thành
phần là mảng 10 số short
const int brighton = 7;
int day_of_year = 238;
rainfall[brighton][day_of_year] = 0.0F;
44
TTóóm lưm lượợcc
Khai bKhai bááo mo mảảng trong Cng trong C
Truy xuTruy xuấất ct cáác phc phầần tn tửử
TruyTruyềền tham sn tham sốố kikiểểu mu mảảng cho hng cho hààmm
CCáác thao tc thao táác: nhc: nhậập, xup, xuấất, thêm/ht, thêm/hủủy 1 thy 1 thàành phnh phầần,n,
ttììm kim kiếếm, sm, sắắp xp xếếpp
MMảảng nhing nhiềều chiu chiềềuu
45
ỗỗ ựự
46
ChuChuỗỗi ký ti ký tựự –– StringsStrings
MMộột st sốố qui tqui tắắcc
NhNhậập / xup / xuấấtt
Con trCon trỏỏ vvàà chuchuỗỗi ký ti ký tựự
MMộột st sốố hhààm thư vim thư việệnn
47
ChuChuỗỗi ký ti ký tựự -- MMộột st sốố qui tqui tắắcc
ChuChuỗỗi ký ti ký tựự llàà mmảảng mng mộột chit chiềều cu cóó mmỗỗi thi thàành phnh phầần ln làà mmộộtt
ssốố nguyên đưnguyên đượợc kc kếết tht thúúc bc bởởi si sốố 0.0.
Ký tKý tựự kkếết tht thúúc (0)c (0) ởở cucuốối chui chuỗỗi ký ti ký tựự thưthườờng đưng đượợc gc gọọi li làà
ký tký tựự null (không ginull (không giốống con trng con trỏỏ NULL). CNULL). Cóó ththểể ghi lghi làà 00
hohoặặcc ‘‘00’’ (không ph(không phảải chi chữữ oo).).
ĐưĐượợc khai bc khai bááo vo vàà truytruyềền tham sn tham sốố như mnhư mảảng mng mộột chit chiềều.u.
char s[100];
unsigned char s1[1000];
48
char first_name[5] = { 'J', 'o', 'h', 'n', '0' };
char last_name[6] = "Minor";
char other[] = "Tony Blurt";
char characters[7] = "No null";
first_name
last_name
other
characters
ChuChuỗỗi ký ti ký tựự -- VVíí ddụụ
0'n''h''o''J'
0'r''o''n''i''M'
32 'B' 'l' 'u' 'r' 0't''y'‘n’'o''T'
'l' 'l' 0'u''n'32'o''N'
49
CCóó ththểể nhnhậập / xup / xuấất chut chuỗỗi ký ti ký tựự s bs bằằng cng cáách nhch nhậập tp từừng kýng ký
ttựự ccủủa sa s
HoHoặặc sc sửử ddụụng cng cáác hc hààmm scanfscanf vvàà printfprintf vvớới ký ti ký tựự đđịịnhnh
ddạạngng ““%%ss””
NhNhậập chup chuỗỗi ci cóó khokhoảảng trng trắắng dng dùùng hng hààm getsm gets
char name[100];
printf("Nhap mot chuoi ky tu %s: ");
gets(name);
ChuChuỗỗi ký ti ký tựự -- NhNhậập / xup / xuấấtt
char other[] = "Tony Blurt";
printf("%sn", other);
50
Lưu ýLưu ý: k: kếết tht thúúc chuc chuỗỗii
#include <stdio.h>
int main()
{
char other[] = "Tony Blurt";
printf("%sn", other);
other[4] = '0';
printf("%sn", other);
return 0;
}
Tony Blurt
Tony
other
"Blurt" sẽ không
được in ra
32 'B' 'l' 'u' 'r' 0't''y'‘n’'o''T'
51
ChuChuỗỗi ký ti ký tựự –– MMộột st sốố hhààm thư vim thư việệnn
LLấấy đy độộ ddàài chui chuỗỗii
l =l = strlenstrlen(s);(s);
ĐĐổổi toi toààn bn bộộ ccáác ký tc ký tựự ccủủa chua chuỗỗi thi thàành IN HOAnh IN HOA
struprstrupr(s);(s);
ĐĐổổi toi toààn bn bộộ ccáác ký tc ký tựự ccủủa chua chuỗỗi thi thàànhnh in thưin thườờngng
strlwrstrlwr(s);(s);
52
ChuChuỗỗi ký ti ký tựự –– MMộột st sốố hhààm thư vim thư việệnn
So sSo sáánh chunh chuỗỗi: so si: so sáánh theo thnh theo thứứ ttựự ttừừ điđiểểnn
Phân biPhân biệệt IN HOAt IN HOA –– in thưin thườờng:ng:
intint strcmpstrcmp(const char *s1, const char *s2);(const char *s1, const char *s2);
Không phân biKhông phân biệệt IN HOAt IN HOA –– in thưin thườờng:ng:
intint stricmpstricmp(const char *s1, const char *s2);(const char *s1, const char *s2);
53
#include <stdio.h>
int main()
{
char s1[] = "Minor";
char s2[] = "Tony";
int cmp = strcmp(s1, s2);
if (cmp < 0)
printf("%s < %s", s1, s2);
else
if (cmp == 0)
printf("%s = %s", s1, s2);
else
printf("%s > %s", s1, s2);
return 0;
}
ChuChuỗỗi ký ti ký tựự –– vvíí ddụụ strcmpstrcmp
Minor < Tony
54
ChuChuỗỗi ký ti ký tựự –– MMộột st sốố hhààm thư vim thư việệnn
GGáán nn nộội dung chui dung chuỗỗi:i:
oo ChChéép top toààn bn bộộ chuchuỗỗi source sang chui source sang chuỗỗi dest:i dest:
intint strcpystrcpy(char *dest, const char *src);(char *dest, const char *src);
oo ChChéép tp tốối đa n ký ti đa n ký tựự ttừừ source sang dest:source sang dest:
intint strncpystrncpy(char *dest,(char *dest,
const char *src, int n);const char *src, int n);
TTạạo chuo chuỗỗi mi mớới ti từừ chuchuỗỗi đã ci đã cóó::
char *char *strdupstrdup(const char *src);(const char *src);
55
#include <stdio.h>
int main()
{
char s[] = "Tony Blurt";
char s2[100], *s3;
strcpy(s2, s);
printf("%sn", s2);
strncpy(s2 + 2, "12345", 3);
printf("%sn", s2);
s3 = strdup(s + 5);
printf("%sn", s3);
free(s3);
return 0;
}
ChuChuỗỗi ký ti ký tựự –– vvíí ddụụ strcpystrcpy
Tony Blurt
To123Blurt
Blurt
56
ChuChuỗỗi ký ti ký tựự –– MM ộột st sốố hhààm thư vim thư việệnn
NNốối chui chuỗỗi:i:
char *char *strcatstrcat(char *dest,(char *dest,
const char *src);const char *src);
TTáách chuch chuỗỗi:i:
char *char *strtokstrtok(char *s,(char *s,
const char *sep);const char *sep);
TrTrảả vvềề đđịịa cha chỉỉ ccủủa đoa đoạạn đn đầầu tiên. Muu tiên. Muốốn tn táách đoch đoạạn kn kếế titiếếpp
tham stham sốố ththứứ nhnhấất st sẽẽ llàà NULLNULL
57
#include <stdio.h>
#define SEPARATOR "., "
int main()
{
char s[]= "Thu strtok: 9,123.45";
char *p;
p = strtok(s, SEPARATOR);
while (p != NULL) {
printf("%sn", p);
p = strtok(NULL, SEPARATOR);
}
return 0;
}
ChuChuỗỗi ký ti ký tựự –– vvíí ddụụ strtokstrtok
Thu
strtok:
9
123
45
58
ChuChuỗỗi ký ti ký tựự –– MMộột st sốố hhààm thư vim thư việệnn
TTììm mm mộột ký tt ký tựự trên chutrên chuỗỗi:i:
char *char *strchrstrchr(const char *s, int c);(const char *s, int c);
TTììm mm mộột đot đoạạn ký tn ký tựự trên chutrên chuỗỗi:i:
char *char *strstrstrstr(const char *s1,(const char *s1,
const char *s2);const char *s2);
59
#include <stdio.h>
int main()
{
char s[]= "Thu tim kiem chuoi";
char *p;
p = strchr(s, 'm');
printf("%sn", p);
p = strstr(s, "em");
printf("%sn", p);
return 0;
}
ChuChuỗỗi ký ti ký tựự –– vvíí ddụụ ttììm kim kiếếmm
m kiem chuoi
em chuoi
60
#include <stdio.h>
void StrIns(char *s, char *sub)
{
int len = strlen(sub);
memmove(s + len, s, strlen(s)+1);
strncpy(s, sub, len);
}
int main()
{
char s[]= "Thu chen";
StrIns(s, "123"); printf("%sn", s);
StrIns(s + 8, "45"); printf("%sn", p);
return 0;
}
ChuChuỗỗi ký ti ký tựự –– chchèèn mn mộột đot đoạạn ký tn ký tựự
123 Thu chen
123 Thu 45chen
61
#include <stdio.h>
void StrDel(char *s, int n)
{
memmove(s, s + n, strlen(s+n)+1);
}
int main()
{
char s[]= "Thu xoa 12345";
StrDel(s, 4); printf("%sn", s);
StrDel(s + 4, 3); printf("%sn", p);
return 0;
}
ChuChuỗỗi ký ti ký tựự –– xxóóa ma mộột đot đoạạn ký tn ký tựự
xoa 12345
xoa 45
62
TTóóm lưm lượợcc
Khai bKhai bááoo
NhNhậập / xup / xuấấtt
Con trCon trỏỏ vvàà chuchuỗỗi ký ti ký tựự
MMộột st sốố hhààm thư vim thư việệnn
ChChèèn / lon / loạại bi bỏỏ mmộột đot đoạạn conn con
63
ấấ
64
KiKiểểu cu cấấu tru trúúcc
KhKháái nii niệệmm
Khai bKhai bááoo
Truy xuTruy xuấất ct cáác thc thàành phnh phầầnn
CCấấu tru trúúc & mc & mảảngng
Con trCon trỏỏ đđếến cn cấấu tru trúúcc
65
KhKháái nii niệệmm
CCấấu tru trúúc lc làà kikiểểu du dữữ liliệệu gu gồồm mm mộột nht nhóóm cm cáácc
ththàành phnh phầần cn cóó kikiểểu không giu không giốống nhau, mng nhau, mỗỗii
ththàành phnh phầần đưn đượợc xc xáác đc địịnh bnh bằằng mng mộột tên riêngt tên riêng
bibiệệt.t.
KiKiểểu cu củủa ma mỗỗi thi thàành phnh phầần trong cn trong cấấu tru trúúclclàà mmộộtt
kikiếếu đã đưu đã đượợc đc địịnh nghnh nghĩĩa trưa trướớc, kc, kểể ccảả mmảảng vng vàà
ccáác cc cấấu tru trúúc khc kháác.c.
66
CCấấu tru trúúcc –– Khai bKhai bááo trong Co trong C
MMộột kit kiểểu cu cấấu tru trúúc đưc đượợc đc địịnh nghnh nghĩĩa va vớới ti từừ khkhóóaa structstruct..
typedeftypedef structstruct TênkiTênkiểểuu
{{
KiKiểểuthuthàànhphnhphầầnn TênthTênthàànhphnhphầần;n;
KiKiểểuthuthàànhphnhphầầnn TênthTênthàànhphnhphầần;n;
KiKiểểuthuthàànhphnhphầầnn TênthTênthàànhphnhphầần;n;
KiKiểểuthuthàànhphnhphầầnn TênthTênthàànhphnhphầần;n;
......
};};
67
CCấấu tru trúúcc –– vvíí ddụụ
typedef struct TBook
{
char title[80];
char author[80];
float price;
char isbn[20];
};
typedef struct TDate
{
char day;
char month;
int year;
};
typedef struct TStudent
{
char ID[10];
char firstname[10];
char lastname[20];
TDate dob;
float marks[10];
};
//khai báo các biến
TBook book;
TStudent list[100];
68
CCáác thc thàành phnh phầần cn củủa ma mộột bit biếến kin kiểểu cu cấấu tru trúúc đưc đượợc truy xuc truy xuấấtt
thông qua tên bithông qua tên biếến, dn, dấấu "." vu "." vàà tên thtên thàành phnh phầần.n.
void Print(TStudent m)
{
printf("Name : %s %sn",
m.firstname, m.lastname);
printf("Student ID : %sn", m.ID);
printf("Date of birth : %hi/%hi/%i",
m.dob.day, m.dob.month, m.dob.year);
printf("Marks : ");
for (int i=0; i<10; i++)
printf("%.2f ", m.marks[i]);
}
CCấấu tru trúúcc –– Truy xuTruy xuấất ct cáác thc thàành phnh phầầnn
69
void ReadInfo(TStudent &m)
{
printf("Type student ID: ");
scanf("%s", m.ID);
printf("Type first name: ");
gets(m.firstname);
printf("Type last name: ");
gets(m.lastname);
printf("Date of birth (d m y): ");
scanf("%hi %hi %i", &(m.dob.day),
&(m.dob.month), &(m.dob.year));
printf("Marks (10 floats): ");
for (int i=0; i<10; i++)
scanf("%f", &(m.marks[i]));
}
CCấấu tru trúúcc –– Truy xuTruy xuấất ct cáác thc thàành phnh phầầnn
70
TTóómm lưlượợcc
ĐĐịịnh nghnh nghĩĩa KDLa KDL
KiKiểểu du dữữ liliệệu cơ bu cơ bảản: Sn: Sốố nguyên, snguyên, sốố ththựựcc
KiKiểểu du dữữ liliệệu cu cấấu tru trúúc:c: ĐĐịịnh nghnh nghĩĩa, ma, mộột st sốố KiKiểểu cu cấấu tru trúúcc
cơ bcơ bảảnn
MMảảngng
ChuChuỗỗi ký ti ký tựự
StructStruct

More Related Content

What's hot

Chương 3 - Hàng đợi
Chương 3 - Hàng đợi Chương 3 - Hàng đợi
Chương 3 - Hàng đợi Hồ Lợi
 
Bản Tin BĐS Việt Nam Số 72 Tuần 1 Tháng 3 Năm 2009
Bản Tin BĐS Việt Nam Số 72 Tuần 1 Tháng 3 Năm 2009Bản Tin BĐS Việt Nam Số 72 Tuần 1 Tháng 3 Năm 2009
Bản Tin BĐS Việt Nam Số 72 Tuần 1 Tháng 3 Năm 2009internationalvr
 
VietRees_Newsletter_54_Tuan4_Thang10
VietRees_Newsletter_54_Tuan4_Thang10VietRees_Newsletter_54_Tuan4_Thang10
VietRees_Newsletter_54_Tuan4_Thang10internationalvr
 
CƠN ĐAU BÃO THẬN
CƠN ĐAU BÃO THẬNCƠN ĐAU BÃO THẬN
CƠN ĐAU BÃO THẬNSoM
 
Bản Tin BĐS Việt Nam Số 71 Tuần 4 Tháng 2 Năm 2009
Bản Tin BĐS Việt Nam Số 71 Tuần 4 Tháng 2 Năm 2009Bản Tin BĐS Việt Nam Số 71 Tuần 4 Tháng 2 Năm 2009
Bản Tin BĐS Việt Nam Số 71 Tuần 4 Tháng 2 Năm 2009internationalvr
 
VietRees_Newsletter_51_Tuan1_Thang10
VietRees_Newsletter_51_Tuan1_Thang10VietRees_Newsletter_51_Tuan1_Thang10
VietRees_Newsletter_51_Tuan1_Thang10internationalvr
 
Bản Tin BĐS Việt Nam Số 70 Tuần 3 Tháng 2 Năm 2009
Bản Tin BĐS Việt Nam Số 70 Tuần 3 Tháng 2 Năm 2009Bản Tin BĐS Việt Nam Số 70 Tuần 3 Tháng 2 Năm 2009
Bản Tin BĐS Việt Nam Số 70 Tuần 3 Tháng 2 Năm 2009internationalvr
 

What's hot (7)

Chương 3 - Hàng đợi
Chương 3 - Hàng đợi Chương 3 - Hàng đợi
Chương 3 - Hàng đợi
 
Bản Tin BĐS Việt Nam Số 72 Tuần 1 Tháng 3 Năm 2009
Bản Tin BĐS Việt Nam Số 72 Tuần 1 Tháng 3 Năm 2009Bản Tin BĐS Việt Nam Số 72 Tuần 1 Tháng 3 Năm 2009
Bản Tin BĐS Việt Nam Số 72 Tuần 1 Tháng 3 Năm 2009
 
VietRees_Newsletter_54_Tuan4_Thang10
VietRees_Newsletter_54_Tuan4_Thang10VietRees_Newsletter_54_Tuan4_Thang10
VietRees_Newsletter_54_Tuan4_Thang10
 
CƠN ĐAU BÃO THẬN
CƠN ĐAU BÃO THẬNCƠN ĐAU BÃO THẬN
CƠN ĐAU BÃO THẬN
 
Bản Tin BĐS Việt Nam Số 71 Tuần 4 Tháng 2 Năm 2009
Bản Tin BĐS Việt Nam Số 71 Tuần 4 Tháng 2 Năm 2009Bản Tin BĐS Việt Nam Số 71 Tuần 4 Tháng 2 Năm 2009
Bản Tin BĐS Việt Nam Số 71 Tuần 4 Tháng 2 Năm 2009
 
VietRees_Newsletter_51_Tuan1_Thang10
VietRees_Newsletter_51_Tuan1_Thang10VietRees_Newsletter_51_Tuan1_Thang10
VietRees_Newsletter_51_Tuan1_Thang10
 
Bản Tin BĐS Việt Nam Số 70 Tuần 3 Tháng 2 Năm 2009
Bản Tin BĐS Việt Nam Số 70 Tuần 3 Tháng 2 Năm 2009Bản Tin BĐS Việt Nam Số 70 Tuần 3 Tháng 2 Năm 2009
Bản Tin BĐS Việt Nam Số 70 Tuần 3 Tháng 2 Năm 2009
 

Viewers also liked

Ctdl 2005 chuong 2
Ctdl 2005 chuong 2Ctdl 2005 chuong 2
Ctdl 2005 chuong 2Hồ Lợi
 
C4 data structures
C4 data structuresC4 data structures
C4 data structuresHồ Lợi
 
Ctdl 2005 chuong 4
Ctdl 2005 chuong 4Ctdl 2005 chuong 4
Ctdl 2005 chuong 4Hồ Lợi
 
Bài tập CTDL và GT 2
Bài tập CTDL và GT 2Bài tập CTDL và GT 2
Bài tập CTDL và GT 2Hồ Lợi
 
C5 classes and objects
C5 classes and objectsC5 classes and objects
C5 classes and objectsHồ Lợi
 
Phân tích một số thuật toán
Phân tích một số thuật toánPhân tích một số thuật toán
Phân tích một số thuật toánHồ Lợi
 
Bài tập CTDL và GT 12
Bài tập CTDL và GT 12Bài tập CTDL và GT 12
Bài tập CTDL và GT 12Hồ Lợi
 
Bai tap thuc hanh nhap mon tin hoc
Bai tap thuc hanh nhap mon tin hocBai tap thuc hanh nhap mon tin hoc
Bai tap thuc hanh nhap mon tin hocHồ Lợi
 

Viewers also liked (19)

Cau 2
Cau 2Cau 2
Cau 2
 
Bai6 stacks
Bai6 stacksBai6 stacks
Bai6 stacks
 
C9 templates
C9 templatesC9 templates
C9 templates
 
Ctdl 2005 chuong 2
Ctdl 2005 chuong 2Ctdl 2005 chuong 2
Ctdl 2005 chuong 2
 
Gtrinh oop
Gtrinh oopGtrinh oop
Gtrinh oop
 
C4 data structures
C4 data structuresC4 data structures
C4 data structures
 
Ctdl 2005 chuong 4
Ctdl 2005 chuong 4Ctdl 2005 chuong 4
Ctdl 2005 chuong 4
 
Bài tập CTDL và GT 2
Bài tập CTDL và GT 2Bài tập CTDL và GT 2
Bài tập CTDL và GT 2
 
C5 classes and objects
C5 classes and objectsC5 classes and objects
C5 classes and objects
 
Ctdl lab01
Ctdl lab01Ctdl lab01
Ctdl lab01
 
Debug trong c
Debug trong cDebug trong c
Debug trong c
 
Phân tích một số thuật toán
Phân tích một số thuật toánPhân tích một số thuật toán
Phân tích một số thuật toán
 
Chuong2 c
Chuong2 c Chuong2 c
Chuong2 c
 
Chuong4 (2)
Chuong4 (2)Chuong4 (2)
Chuong4 (2)
 
Chuong5 (2)
Chuong5 (2)Chuong5 (2)
Chuong5 (2)
 
Chuong8 (2)
Chuong8 (2)Chuong8 (2)
Chuong8 (2)
 
Chuong 1
Chuong 1Chuong 1
Chuong 1
 
Bài tập CTDL và GT 12
Bài tập CTDL và GT 12Bài tập CTDL và GT 12
Bài tập CTDL và GT 12
 
Bai tap thuc hanh nhap mon tin hoc
Bai tap thuc hanh nhap mon tin hocBai tap thuc hanh nhap mon tin hoc
Bai tap thuc hanh nhap mon tin hoc
 

Similar to Bai1 kdl

Tim hieu ve lo hong web va cach phong chong
Tim hieu ve lo hong web va cach phong chongTim hieu ve lo hong web va cach phong chong
Tim hieu ve lo hong web va cach phong chongVu Trung Kien
 
Gioi thieu phan_mem_wincc
Gioi thieu phan_mem_winccGioi thieu phan_mem_wincc
Gioi thieu phan_mem_winccTrung Nguyen
 
Bai giang CADCAM-CNC Week01.pdf
Bai giang CADCAM-CNC Week01.pdfBai giang CADCAM-CNC Week01.pdf
Bai giang CADCAM-CNC Week01.pdfNguyenThanh196352
 
Slide môn Đảm bảo an toàn thông tin
Slide môn Đảm bảo an toàn thông tinSlide môn Đảm bảo an toàn thông tin
Slide môn Đảm bảo an toàn thông tinducmanhkthd
 
Access 18 263_634034061782634040
Access 18 263_634034061782634040Access 18 263_634034061782634040
Access 18 263_634034061782634040Học Huỳnh Bá
 
Tài liệu tự học Auto lisp
Tài liệu tự học Auto lispTài liệu tự học Auto lisp
Tài liệu tự học Auto lispTrung Thanh Nguyen
 
tiểu luận wincc
tiểu luận wincctiểu luận wincc
tiểu luận winccNamzekeng Nzk
 
Chuyen mach trong wan2
Chuyen mach trong wan2Chuyen mach trong wan2
Chuyen mach trong wan2VNG
 
C++ can ban(dung thu vien iostream)
C++ can ban(dung thu vien iostream)C++ can ban(dung thu vien iostream)
C++ can ban(dung thu vien iostream)Nguyễn Phụng
 
Tailieu.vncty.com lap trinh-c_cho_vi_dieu_khien
Tailieu.vncty.com   lap trinh-c_cho_vi_dieu_khienTailieu.vncty.com   lap trinh-c_cho_vi_dieu_khien
Tailieu.vncty.com lap trinh-c_cho_vi_dieu_khienTrần Đức Anh
 
Hướng dẫn sử dụng Pipetool.DOC
Hướng dẫn sử dụng Pipetool.DOCHướng dẫn sử dụng Pipetool.DOC
Hướng dẫn sử dụng Pipetool.DOCTranDinhThang3
 
Giaotrinh plc
Giaotrinh plcGiaotrinh plc
Giaotrinh plcHoanh Lee
 
Hướng dẫn sử dụng fx training
Hướng dẫn sử dụng  fx trainingHướng dẫn sử dụng  fx training
Hướng dẫn sử dụng fx trainingquanglocbp
 
Bai 1 tin hoc lop 12_kbdh
Bai 1 tin hoc lop 12_kbdhBai 1 tin hoc lop 12_kbdh
Bai 1 tin hoc lop 12_kbdhSunkute
 
Chuong02
Chuong02Chuong02
Chuong02na
 

Similar to Bai1 kdl (20)

Tim hieu ve lo hong web va cach phong chong
Tim hieu ve lo hong web va cach phong chongTim hieu ve lo hong web va cach phong chong
Tim hieu ve lo hong web va cach phong chong
 
Gioi thieu phan_mem_wincc
Gioi thieu phan_mem_winccGioi thieu phan_mem_wincc
Gioi thieu phan_mem_wincc
 
Bai giang CADCAM-CNC Week01.pdf
Bai giang CADCAM-CNC Week01.pdfBai giang CADCAM-CNC Week01.pdf
Bai giang CADCAM-CNC Week01.pdf
 
Slide môn Đảm bảo an toàn thông tin
Slide môn Đảm bảo an toàn thông tinSlide môn Đảm bảo an toàn thông tin
Slide môn Đảm bảo an toàn thông tin
 
C++ can ban
C++ can banC++ can ban
C++ can ban
 
Access 18 263_634034061782634040
Access 18 263_634034061782634040Access 18 263_634034061782634040
Access 18 263_634034061782634040
 
Chuong4
Chuong4Chuong4
Chuong4
 
Basic C programming
Basic C programmingBasic C programming
Basic C programming
 
Tài liệu tự học Auto lisp
Tài liệu tự học Auto lispTài liệu tự học Auto lisp
Tài liệu tự học Auto lisp
 
2 moi-truong-tt1
2 moi-truong-tt12 moi-truong-tt1
2 moi-truong-tt1
 
tiểu luận wincc
tiểu luận wincctiểu luận wincc
tiểu luận wincc
 
Chuyen mach trong wan2
Chuyen mach trong wan2Chuyen mach trong wan2
Chuyen mach trong wan2
 
C++ can ban(dung thu vien iostream)
C++ can ban(dung thu vien iostream)C++ can ban(dung thu vien iostream)
C++ can ban(dung thu vien iostream)
 
Tailieu.vncty.com lap trinh-c_cho_vi_dieu_khien
Tailieu.vncty.com   lap trinh-c_cho_vi_dieu_khienTailieu.vncty.com   lap trinh-c_cho_vi_dieu_khien
Tailieu.vncty.com lap trinh-c_cho_vi_dieu_khien
 
Hướng dẫn sử dụng Pipetool.DOC
Hướng dẫn sử dụng Pipetool.DOCHướng dẫn sử dụng Pipetool.DOC
Hướng dẫn sử dụng Pipetool.DOC
 
Giaotrinh plc
Giaotrinh plcGiaotrinh plc
Giaotrinh plc
 
Hướng dẫn sử dụng fx training
Hướng dẫn sử dụng  fx trainingHướng dẫn sử dụng  fx training
Hướng dẫn sử dụng fx training
 
Asm
AsmAsm
Asm
 
Bai 1 tin hoc lop 12_kbdh
Bai 1 tin hoc lop 12_kbdhBai 1 tin hoc lop 12_kbdh
Bai 1 tin hoc lop 12_kbdh
 
Chuong02
Chuong02Chuong02
Chuong02
 

More from Hồ Lợi

Tóm tắt các hàm chuẩn của c
Tóm tắt các hàm chuẩn của cTóm tắt các hàm chuẩn của c
Tóm tắt các hàm chuẩn của cHồ Lợi
 
Lect04 functions
Lect04 functionsLect04 functions
Lect04 functionsHồ Lợi
 
Ky thuatkhudequy
Ky thuatkhudequyKy thuatkhudequy
Ky thuatkhudequyHồ Lợi
 
Itt epc assignment
Itt epc assignmentItt epc assignment
Itt epc assignmentHồ Lợi
 
Huong danontapc
Huong danontapcHuong danontapc
Huong danontapcHồ Lợi
 
H hai epc_baitap
H hai epc_baitapH hai epc_baitap
H hai epc_baitapHồ Lợi
 
Giaotrinhbaitapkythuatlaptrinh
GiaotrinhbaitapkythuatlaptrinhGiaotrinhbaitapkythuatlaptrinh
GiaotrinhbaitapkythuatlaptrinhHồ Lợi
 
Giao trinh ky thuat lap trinh 2
Giao trinh ky thuat lap trinh 2Giao trinh ky thuat lap trinh 2
Giao trinh ky thuat lap trinh 2Hồ Lợi
 
Giao trinh c c++
Giao trinh c c++Giao trinh c c++
Giao trinh c c++Hồ Lợi
 
Epc assignment
Epc assignmentEpc assignment
Epc assignmentHồ Lợi
 
Epc test practical
Epc test practicalEpc test practical
Epc test practicalHồ Lợi
 
De thic++ --th
De thic++ --thDe thic++ --th
De thic++ --thHồ Lợi
 

More from Hồ Lợi (20)

Xu ly chuoi
Xu ly chuoiXu ly chuoi
Xu ly chuoi
 
Tóm tắt các hàm chuẩn của c
Tóm tắt các hàm chuẩn của cTóm tắt các hàm chuẩn của c
Tóm tắt các hàm chuẩn của c
 
T4
T4T4
T4
 
Nguyen lyoop
Nguyen lyoopNguyen lyoop
Nguyen lyoop
 
Lect04 functions
Lect04 functionsLect04 functions
Lect04 functions
 
Ky thuatkhudequy
Ky thuatkhudequyKy thuatkhudequy
Ky thuatkhudequy
 
Itt epc assignment
Itt epc assignmentItt epc assignment
Itt epc assignment
 
Huong danontapc
Huong danontapcHuong danontapc
Huong danontapc
 
H hai epc_baitap
H hai epc_baitapH hai epc_baitap
H hai epc_baitap
 
Giaotrinhbaitapkythuatlaptrinh
GiaotrinhbaitapkythuatlaptrinhGiaotrinhbaitapkythuatlaptrinh
Giaotrinhbaitapkythuatlaptrinh
 
Giao trinh ky thuat lap trinh 2
Giao trinh ky thuat lap trinh 2Giao trinh ky thuat lap trinh 2
Giao trinh ky thuat lap trinh 2
 
Giao trinh c c++
Giao trinh c c++Giao trinh c c++
Giao trinh c c++
 
File trong c_
File trong c_File trong c_
File trong c_
 
Epc assignment
Epc assignmentEpc assignment
Epc assignment
 
Epc test practical
Epc test practicalEpc test practical
Epc test practical
 
De thic++ --th
De thic++ --thDe thic++ --th
De thic++ --th
 
Dethi c++ -lt
Dethi c++ -ltDethi c++ -lt
Dethi c++ -lt
 
D05 stl
D05 stlD05 stl
D05 stl
 
Cpl test3
Cpl test3Cpl test3
Cpl test3
 
Cpl test2
Cpl test2Cpl test2
Cpl test2
 

Bai1 kdl

  • 2. 2 NNộộii dungdung ĐĐịịnh nghnh nghĩĩa Kia Kiểểu du dữữ liliệệuu CCáácc kikiểểuu ddữữ liliệệuu cơcơ bbảảnn CCáác kic kiểểu du dữữ liliệệu cu cóó ccấấu tru trúúcc MMộột st sốố kikiểểu du dữữ liliệệu cu cóó ccấấu tru trúúc cơ bc cơ bảảnn MMảảngng ChuChuỗỗii kýký ttựự StructStruct
  • 3. 3 ĐĐịịnh nghnh nghĩĩa kia kiểểu du dữữ liliệệuu KiKiểểu du dữữ liliệệuu TT đưđượợc xc xáác đc địịnh bnh bởởi mi mộột bt bộộ <<VV,,OO> v> vớới:i: VV: t: tậập cp cáác gic giáá trtrịị hhợợp lp lệệ mmàà mmộột đt đốối tưi tượợng king kiểểuu TT ccóó ththểể lưu trlưu trữữ.. OO: t: tậập cp cáác thao tc thao táác xc xửử lý clý cóó ththểể thi hthi hàành trên đnh trên đốốii tưtượợng king kiểểuu T.T. VVíí ddụụ:: kikiểểu du dữữ liliệệu su sốố nguyên= <Vnguyên= <Vii, O, Oii> v> vớớii VVii={={--32768.. 32767}; O32768.. 32767}; Oii={+,={+, --, *, *, /, /, %, %}.}. Như vNhư vậậy, muy, muốốn sn sửử ddụụng mng mộột KDL ct KDL cầần nn nắắm vm vữững cng cảả nnộộii dung DL đươc phdung DL đươc phéép lưu trp lưu trữữ vvàà ccáác xc xửử lý tlý táác đc độộng trên nng trên nóó.. CCáác thuc thuộộc tc tíính 1 KDL gnh 1 KDL gồồm(Tên KDL, Mim(Tên KDL, Miềền gin giáá trtrịị, K, Kííchch thưthướớc lưu trc lưu trữữ, t, tậập cp cáác toc toáán tn tửử ttáác đc độộng lên KDL).ng lên KDL).
  • 4. 4 ểể ữữ ệệ cơcơ ởở
  • 5. 5 CCáác kic kiểểu du dữữ liliệệu cơ su cơ sởở KiKiểểu cu cóó ththứứ ttựự rrờời ri rạạcc: S: Sốố nguyên.nguyên. KiKiểểu cu cóó ththứứ ttựự không rkhông rờời ri rạạcc: S: Sốố ththựực.c.
  • 6. 6 CCáácc kikiểểuu ssốố nguyênnguyên ccủủaa CC CC hhỗỗ trtrợợ khkháá nhinhiềềuu kikiểểuu ssốố nguyênnguyên CCáácc gigiáá trtrịị llớớnn nhnhấấtt vvàà nhnhỏỏ nhnhấấtt đưđượợcc đđịịnhnh nghnghĩĩaa trongtrong thưthư viviệệnn ““limits.hlimits.h”” Kiểu định dạng kích thước nhỏ nhất lớn nhất char %c 1 CHAR_MIN CHAR_MAX unsigned char %c 1 0 UCHAR_MAX short [int] %hi 2 SHRT_MIN SHRT_MAX unsigned short%hu 2 0 USHRT_MAX int %i 2 or 4 INT_MIN INT_MAX unsigned int %u 2 or 4 0 UINT_MAX long [int] %li 4 LONG_MIN LONG_MAX unsigned long %lu 4 0 ULONG_MAX
  • 7. 7 VVíí ddụụ vvềề ssốố nguyênnguyên #include <stdio.h> #include <limits.h> int main() { unsigned long big = ULONG_MAX; printf("minimum int = %i, ", INT_MIN); printf("maximum int = %in", INT_MAX); printf("maximum unsigned = %un", UINT_MAX); printf("maximum long int = %lin", LONG_MAX); printf("maximum unsigned long = %lun", big); return 0; } minimum int = -32768, maximum int = 32767 maximum unsigned = 65535 maximum long int = 2147483647 maximum unsigned long = 4294967295
  • 8. 8 #include <stdio.h> #include <limits.h> int main() { char lower_a = 'a'; char lower_m = 'm'; printf("minimum char = %i, ", CHAR_MIN); printf("maximum char = %in", CHAR_MAX); printf(“Sau '%c' la '%c'n", lower_a, lower_a + 1); printf(“Ky tu in hoa '%c'n", lower_m - 'a' + 'A'); return 0; } minimum char = -128, maximum char = 127 Sau 'a' la 'b' Ky tu in hoa 'M' In ra mã ASCII của ký tự VVíí ddụụ kikiểểu ký tu ký tựự Trong NNLT C,Trong NNLT C, ký tký tựự chchíính lnh làà ssốố nguyênnguyên
  • 9. 9 SSốố nguyênnguyên trongtrong ccáácc cơcơ ssốố khkháácc CCáácc hhệệ cơcơ ssốố ccóó ththểể ththựựcc hihiệệnn đưđượợcc:: cơcơ ssốố 8 (octal),8 (octal), cơcơ ssốố 10 (decimal),10 (decimal), cơcơ ssốố 16 (hexadecimal)16 (hexadecimal) Số 0: số octal 0x: số hexadecimal #include <stdio.h> int main(void) { int dec = 20, oct = 020, hex = 0x20; printf("dec=%d, oct=%d, hex=%dn", dec, oct, hex); printf("dec=%d, oct=%o, hex=%xn", dec, oct, hex); return 0; } dec=20, oct=16, hex=32 dec=20, oct=20, hex=20
  • 10. 10 SSốố ththựựcc CC hhỗỗ trtrợợ nhinhiềềuu kikiểểuu ssốố ththựựcc lưulưu trtrữữ ddấấuu chchấấmm đđộộngng.. CCáácc gigiáá trtrịị llớớnn nhnhấấtt vvàà nhnhỏỏ nhnhấấtt đưđượợcc đđịịnhnh nghnghĩĩaa trongtrong thưthư viviệệnn ““float.hfloat.h”” Kiểu định dạng kích thước nhỏ nhất lớn nhất floatfloat %f %e %g 4 FLT_MIN FLT_MAX doubledouble %lf %le %lg 8 DBL_MIN DBL_MAX long doublelong double %Lf %Le %Lg 10 LDBL_MIN LDBL_MAX
  • 11. 11 VVíí ddụụ ssốố ththựựcc:: #include <stdio.h> #include <float.h> int main(void) { double f = 3.1416, g = 1.2e-5, h = 5000000000.0; printf("f=%lftg=%lfth=%lfn", f, g, h); printf("f=%letg=%leth=%len", f, g, h); printf("f=%lgtg=%lgth=%lgn", f, g, h); printf("f=%7.2lftg=%.2leth=%.4lgn", f, g, h); return 0; } f=3.141600 g=0.000012 h=5000000000.000000 f=3.141600e+00 g=1.200000e-05 h=5.000000e+09 f=3.1416 g=1.2e-05 h=5e+09 f= 3.14 g=1.20e-05 h=5e+09
  • 13. 13 ĐĐịịnh nghnh nghĩĩa kia kiểểu du dữữ liliệệu cu cóó ccấấuu trtrúúcc KiKiểểu du dữữ liliệệu đưu đượợc xây dc xây dựựng mng mớới di dựựa trêna trên viviệệc tc tổổ chchứức liên kc liên kếết ct cáác thc thàành phnh phầần dn dữữ liliệệu cu cóó kikiểểu du dữữ liliệệu đã đưu đã đượợc đc địịnh nghnh nghĩĩa.a. NhNhữững KDL đưng KDL đượợc xây dc xây dựựng như thng như thếế ggọọii llàà KDL cKDL cóó ccấấu tru trúúc.c.
  • 14. 14 MMộột st sốố kikiểểu du dữữ liliệệu cu cấấu tru trúúcc KiKiểểu mu mảảngng KiKiểểu chuu chuỗỗi ký ti ký tựự KiKiểểu cu cấấu tru trúúc mc mẩẩu tinu tin
  • 16. 16 MMảảngng –– ArrayArray MMộột st sốố ttíính chnh chấấtt Khai bKhai bááo mo mảảng trong Cng trong C Truy xuTruy xuấất ct cáác thc thàành phnh phầầnn TruyTruyềền tham sn tham sốố kikiểểu mu mảảng cho hng cho hààmm MMộột st sốố thao tthao táác cơ sc cơ sởở MMảảng nhing nhiềều chiu chiềềuu
  • 17. 17 MMảảngng –– MMộột st sốố ttíính chnh chấấtt MMảảng lng làà mmộột kit kiểểu du dữữ liliệệu cu cóó ccấấu tru trúúc do ngưc do ngườời li lậậpp trtrìình đnh địịnh nghnh nghĩĩaa DDùùng bing biểểu diu diễễn cn cáác đc đốối tưi tượợng dng dữữ liliệệuu ởở ddạạng mng mộộtt dãy cdãy cáác thc thàành phnh phầần cn cóó ccùùng king kiểểu vu vớới nhaui nhau –– kikiểểu cơu cơ ssởở NNLT C luôn chNNLT C luôn chỉỉ đđịịnh mnh mộột kht khốối nhi nhớớ liên tliên tụục choc cho mmộột bit biếến kin kiểểu mu mảảngng KKíích thưch thướớc cc củủa ma mảảng đưng đượợc xc xáác đc địịnh ngay khi khainh ngay khi khai bbááo vo vàà không bao gikhông bao giờờ thay đthay đổổii
  • 18. 18 MMảảngng –– Khai bKhai bááo trong Co trong C typedeftypedef kikiểểucơsucơsởở TênkiTênkiểểuu[[SSốốththàànhphnhphầầnn]];; kikiểểu cu củủa ma mỗỗi thi thàành phnh phầầnn hhằằng sng sốố, s, sốố ththàành phnh phầầnn ttốối đa ci đa củủa ma mảảngng do ldo lậập trp trìình viên đnh viên đặặt tênt tên typedeftypedef intint AINT[AINT[100100];]; ////AINTAINT llàà kikiểểu mu mảảng bing biểểu diu diễễn dãy gn dãy gồồm 100 thm 100 thàành phnh phầần intn int AINTAINT a;a; //a: bi//a: biếến kin kiểểu AINTu AINT
  • 19. 19 MMảảngng –– VVíí ddụụ #define SIZE 10 int a[5]; // a dãy gồm 5 số nguyên long int big[100]; // big: chiếm 400 bytes! double d[100]; // d: chiếm 800 bytes! long double v[SIZE];// v:10 long doubles
  • 20. 20 MMảảngng –– VVíí ddụụ int a[5] = { 10, 20, 30, 40, 50}; double d[100] = { 1.5, 2.7}; short primes[] = { 1, 2, 3, 5, 7, 11, 13}; long b[50] = { 0 }; int i = 7; const int c = 5; int a[i]; double d[c]; short primes[]; khởi trị cho 5 thành phần 2 thành phần đầu tiên được khởi trị, phần còn lại: 0 compiler xác định kích thước gồm 7 thành phần cách nhanh nhất để khởi trị tất cả các thành phần bằng 0
  • 21. 21 CCáác thc thàành phnh phầần cn củủa ma mảảng đưng đượợc truy xuc truy xuấất thông qua cht thông qua chỉỉ ssốố ccủủa cha chúúngng 0..size0..size--11 Thao tThao táác truy xuc truy xuấất không kit không kiểểm tra gim tra giớới hi hạạn cn củủa cha chỉỉ ssốố int main() { int a[6]; int i = 7; a[0] = 59; a[5] = -10; a[i/2] = 2; a[6] = 0; a[-1] = 5; return 0; } 0 a 1 2 3 4 5 MMảảngng –– Truy xuTruy xuấất ct cáác phc phầần tn tửử
  • 22. 22 TruyTruyềền tham sn tham sốố MMảảng cho hng cho hààmm Tham sTham sốố kikiểểu mu mảảng đưng đượợc truyc truyềền cho hn cho hààm chm chíính lnh làà đđịịa cha chỉỉ ccủủa pha phầần tn tửử đđầầu tiên trên mu tiên trên mảảngng SSốố ththàành phnh phầần trong tham sn trong tham sốố mmảảng cng cóó ththểể đđểể trtrốống.ng. SSốố ththàành phnh phầần thn thựực sc sựự đưđượợc sc sửử ddụụng phng phảải truyi truyềền qua mn qua mộộtt tham stham sốố khkháác (vd: size)c (vd: size) int add_elements(int a[], int size) { int add_elements(int *p, int size) {
  • 23. 23 VVíí ddụụ #include <stdio.h> void sum(long [], int); int main(void) { long primes[6] = { 1, 2, 3, 5, 7, 11 }; sum(primes, 6); printf("%lin", primes[0]); return 0; } void sum(long a[], int sz) { int i; long total = 0; for(i = 0; i < sz; i++) total += a[i]; a[0] = total; } 1 2 3 5 7 11 primes a sz 6 tổng được lưu vào phần tử đầu tiên dùng để kiểm tra giới hạn chỉ số
  • 24. 24 MMộột st sốố thao tthao táác cơ sc cơ sởở NhNhậậpp XuXuấấtt Thêm mThêm mộột tht thàành phnh phầần dn dữữ liliệệuu LoLoạại bi bỏỏ mmộột tht thàành phnh phầần dn dữữ liliệệuu TTììm kim kiếếmm SSắắp xp xếếpp
  • 25. 25 MMảảngng –– NhNhậập dp dữữ liliệệuu void ReadData(int a[], int size) { int i; for(i = 0; i < size; i++) { printf(“Nhap thanh phan %d: ”, i); scanf(“%d”, &a[i]); } } duyệt qua tất cả các phần tử nhập dữ liệu cho a[i]
  • 26. 26 MMảảngng –– XuXuấất dt dữữ liliệệu ra mu ra mààn hn hììnhnh void WriteData(int a[], int size) { int i; for(i = 0; i < size; i++) printf(“%d ”, a[i]); printf(“n”); }
  • 27. 27 MMảảngng –– NhNhậập xup xuấất dt dữữ liliệệuu #include <stdio.h> void ReadData(int [], int ); void WriteData(int [], int ); void main() { int a[100], n; clrscr(); printf(“Nhap so thanh phan cua day: “); scanf(“%d”, &n); printf(“Nhap cac thanh phan cua day: “); ReadData(a, n); printf(“Day vua nhap: n“); WriteData(a, n); }
  • 28. 28 MMảảngng –– TTììm vm vịị trtríí X trong dãyX trong dãy //input: dãy (a, N), X //output: Vị trí của X, -1 nếu không có intint Search(int a[], int N, int X)Search(int a[], int N, int X) {{ for (int i = 0; i < N; i ++)for (int i = 0; i < N; i ++) if (a[i] == X)if (a[i] == X) return i;return i; returnreturn --1;1; }} BBàài toi toáán: Tn: Tììm vm vịị trtríí X trên mX trên mảảng a đang cng a đang cóó N thN thàành phnh phầần.n. GiGiảải phi phááp: Tp: Tììm tum tuầần tn tựự
  • 29. 29 MMảảngng –– Thêm mThêm mộột tht thàành phnh phầần dn dữữ liliệệuu BBàài toi toáán: cn: cầần thêm thn thêm thàành phnh phầần dn dữữ liliệệu X vu X vàào mo mảảng ang a đang cđang cóó N thN thàành phnh phầần.n. Hai trưHai trườờng hng hợợp cp cầần xem xn xem xéét:t: Dãy chưa cDãy chưa cóó ththứứ ttựự Thêm X vThêm X vàào cuo cuốối a.i a. Dãy đã cDãy đã cóó ththứứ ttựự TTììm vm vịị trtríí ththíích hch hợợp, chp, chèèn X vn X vààoo
  • 30. 30 MMảảngng –– Thêm X vThêm X vàào cuo cuốối dãyi dãy Thêm 15 vào (a, 7) N = 7N = 8 a[N] = X; N ++;X
  • 31. 31 MMảảngng –– ChChèèn X vn X vàào dãy tăng do dãy tăng dầầnn Chèn 6 vào (a, 7) N = 7N = 8 X Vị trí thích hợp: 4 pos
  • 32. 32 MMảảngng –– ChChèèn X vn X vàào dãy tăng do dãy tăng dầầnn //input: dãy (a, N) tăng dần, X //output: dãy (a, N) đã có X ở đúng vị trí voidvoid Insert(int a[], int &N, int X)Insert(int a[], int &N, int X) {{ int pos;int pos; for (pos = N; (pos>0)&&(a[posfor (pos = N; (pos>0)&&(a[pos--1]>X); pos1]>X); pos ----)) a[pos] = a[posa[pos] = a[pos –– 1];1]; a[pos] = X;a[pos] = X; N ++;N ++; }}
  • 33. 33 MMảảngng –– LoLoạại bi bỏỏ mmộột tht thàành phnh phầần dn dữữ liliệệuu BBàài toi toáán: lon: loạại bi bỏỏ ththàành phnh phầần dn dữữ liliệệu X ra khu X ra khỏỏii mmảảng a đang cng a đang cóó N thN thàành phnh phầần.n. HưHướớng ging giảải quyi quyếết: xt: xáác đc địịnh vnh vịị trtríí ccủủa X, na X, nếếu tu tììmm ththấấy thy thìì ddồồn cn cáác phc phầần tn tửử ởở phphíía sau lên đa sau lên đểể llấấp vp vààoo chchỗỗ trtrốống. 2ng. 2 trưtrườờng hng hợợp:p: Dãy không cDãy không cóó ththứứ ttựự: l: lấấp php phầần tn tửử cucuốối lêni lên Dãy đã thDãy đã thứứ ttựự: d: dờời ti tấất ct cảả ccáác phc phầần tn tửử ởở sau vsau víí trtríí ccủủa X lên trưa X lên trướớc 1 vc 1 vịị trtríí..
  • 34. 34 N = 8 MMảảngng –– LoLoạại bi bỏỏ X ra khX ra khỏỏi dãy tăngi dãy tăng Loại 5 khỏi (a, 8) N = 7 pos Tìm vị trí của 5 X Dồn các vị trí 4, 5, 6, 7 lên
  • 35. 35 MMảảngng –– LoLoạại bi bỏỏ X ra khX ra khỏỏi dãy tăngi dãy tăng //input: dãy (a, N), X //output: dãy (a, N) đã loại bỏ 1 thành phần X intint Remove(int a[], int &N, int X)Remove(int a[], int &N, int X) {{ int pos = Search(a, N, X);int pos = Search(a, N, X); if (pos ==if (pos == --1)1) //không c//không cóó X trong dãyX trong dãy return 0;return 0; NN ----;; for (; (pos < N); pos ++)for (; (pos < N); pos ++) a[pos] = a[pos + 1];a[pos] = a[pos + 1]; return 1;return 1; }}
  • 36. 36 MMảảngng –– SSắắp xp xếếpp BBàài toi toáán: Sn: Sắắp xp xếếp cp cáác thc thàành phnh phầần cn củủa (a (a,a, N)N) đđểể thuthu đưđượợc dãy tăng dc dãy tăng dầầnn GiGiảải phi phááp: Tp: Tììm cm cáách trich triệệt tiêu tt tiêu tấất ct cảả ccáác nghc nghịịch thch thếế ccủủa dãya dãy ThuThuậật tot toáán sn sắắp xp xếếpp ĐĐổổi chi chổổ trtrựực tic tiếếpp
  • 37. 37 MMảảngng –– SSắắp xp xếếp đp đổổi chi chổổ i j
  • 38. 38 i j MMảảngng –– SSắắp xp xếếp đp đổổi chi chổổ
  • 39. 39 i j MMảảngng –– SSắắp xp xếếp đp đổổi chi chổổ
  • 40. 40 i j MMảảngng –– SSắắp xp xếếp đp đổổi chi chổổ
  • 41. 41 MMảảngng –– SSắắp xp xếếp đp đổổi chi chổổ
  • 42. 42 MMảảngng –– SSắắp xp xếếp đp đổổi chi chổổ void Swap(int &x, int &y) { int t = x; x = y; y = t; } void InterchangeSort(int a[], int N) { int i, j; for (i = 0 ; i<N-1 ; i++) for (j =i+1; j < N ; j++) if(a[j]< a[i]) Swap(a[i],a[j]); }
  • 43. 43 MMảảng nhing nhiềều chiu chiềềuu C không hC không hỗỗ trtrợợ mmảảng nhing nhiềều chiu chiềều. Tuy nhiên cu. Tuy nhiên cóó ththểể titiếếpp ccậận theo hưn theo hướớng: Mng: Mảảng 2 ching 2 chiềều lu làà mmảảng mng mộột chit chiềều mu màà mmỗỗii ththàành phnh phầần cn củủa na nóó llàà mmộột mt mảảng mng mộột chit chiềều.u. float rainfall[12][365]; “rainfall” là mảng gồm 12 thành phần, mỗi thành phần là mảng gồm 365 số float short exam_marks[500][10]; “exam_marks” là mảng gồm 500 thành phần, mỗi thành phần là mảng 10 số short const int brighton = 7; int day_of_year = 238; rainfall[brighton][day_of_year] = 0.0F;
  • 44. 44 TTóóm lưm lượợcc Khai bKhai bááo mo mảảng trong Cng trong C Truy xuTruy xuấất ct cáác phc phầần tn tửử TruyTruyềền tham sn tham sốố kikiểểu mu mảảng cho hng cho hààmm CCáác thao tc thao táác: nhc: nhậập, xup, xuấất, thêm/ht, thêm/hủủy 1 thy 1 thàành phnh phầần,n, ttììm kim kiếếm, sm, sắắp xp xếếpp MMảảng nhing nhiềều chiu chiềềuu
  • 46. 46 ChuChuỗỗi ký ti ký tựự –– StringsStrings MMộột st sốố qui tqui tắắcc NhNhậập / xup / xuấấtt Con trCon trỏỏ vvàà chuchuỗỗi ký ti ký tựự MMộột st sốố hhààm thư vim thư việệnn
  • 47. 47 ChuChuỗỗi ký ti ký tựự -- MMộột st sốố qui tqui tắắcc ChuChuỗỗi ký ti ký tựự llàà mmảảng mng mộột chit chiềều cu cóó mmỗỗi thi thàành phnh phầần ln làà mmộộtt ssốố nguyên đưnguyên đượợc kc kếết tht thúúc bc bởởi si sốố 0.0. Ký tKý tựự kkếết tht thúúc (0)c (0) ởở cucuốối chui chuỗỗi ký ti ký tựự thưthườờng đưng đượợc gc gọọi li làà ký tký tựự null (không ginull (không giốống con trng con trỏỏ NULL). CNULL). Cóó ththểể ghi lghi làà 00 hohoặặcc ‘‘00’’ (không ph(không phảải chi chữữ oo).). ĐưĐượợc khai bc khai bááo vo vàà truytruyềền tham sn tham sốố như mnhư mảảng mng mộột chit chiềều.u. char s[100]; unsigned char s1[1000];
  • 48. 48 char first_name[5] = { 'J', 'o', 'h', 'n', '0' }; char last_name[6] = "Minor"; char other[] = "Tony Blurt"; char characters[7] = "No null"; first_name last_name other characters ChuChuỗỗi ký ti ký tựự -- VVíí ddụụ 0'n''h''o''J' 0'r''o''n''i''M' 32 'B' 'l' 'u' 'r' 0't''y'‘n’'o''T' 'l' 'l' 0'u''n'32'o''N'
  • 49. 49 CCóó ththểể nhnhậập / xup / xuấất chut chuỗỗi ký ti ký tựự s bs bằằng cng cáách nhch nhậập tp từừng kýng ký ttựự ccủủa sa s HoHoặặc sc sửử ddụụng cng cáác hc hààmm scanfscanf vvàà printfprintf vvớới ký ti ký tựự đđịịnhnh ddạạngng ““%%ss”” NhNhậập chup chuỗỗi ci cóó khokhoảảng trng trắắng dng dùùng hng hààm getsm gets char name[100]; printf("Nhap mot chuoi ky tu %s: "); gets(name); ChuChuỗỗi ký ti ký tựự -- NhNhậập / xup / xuấấtt char other[] = "Tony Blurt"; printf("%sn", other);
  • 50. 50 Lưu ýLưu ý: k: kếết tht thúúc chuc chuỗỗii #include <stdio.h> int main() { char other[] = "Tony Blurt"; printf("%sn", other); other[4] = '0'; printf("%sn", other); return 0; } Tony Blurt Tony other "Blurt" sẽ không được in ra 32 'B' 'l' 'u' 'r' 0't''y'‘n’'o''T'
  • 51. 51 ChuChuỗỗi ký ti ký tựự –– MMộột st sốố hhààm thư vim thư việệnn LLấấy đy độộ ddàài chui chuỗỗii l =l = strlenstrlen(s);(s); ĐĐổổi toi toààn bn bộộ ccáác ký tc ký tựự ccủủa chua chuỗỗi thi thàành IN HOAnh IN HOA struprstrupr(s);(s); ĐĐổổi toi toààn bn bộộ ccáác ký tc ký tựự ccủủa chua chuỗỗi thi thàànhnh in thưin thườờngng strlwrstrlwr(s);(s);
  • 52. 52 ChuChuỗỗi ký ti ký tựự –– MMộột st sốố hhààm thư vim thư việệnn So sSo sáánh chunh chuỗỗi: so si: so sáánh theo thnh theo thứứ ttựự ttừừ điđiểểnn Phân biPhân biệệt IN HOAt IN HOA –– in thưin thườờng:ng: intint strcmpstrcmp(const char *s1, const char *s2);(const char *s1, const char *s2); Không phân biKhông phân biệệt IN HOAt IN HOA –– in thưin thườờng:ng: intint stricmpstricmp(const char *s1, const char *s2);(const char *s1, const char *s2);
  • 53. 53 #include <stdio.h> int main() { char s1[] = "Minor"; char s2[] = "Tony"; int cmp = strcmp(s1, s2); if (cmp < 0) printf("%s < %s", s1, s2); else if (cmp == 0) printf("%s = %s", s1, s2); else printf("%s > %s", s1, s2); return 0; } ChuChuỗỗi ký ti ký tựự –– vvíí ddụụ strcmpstrcmp Minor < Tony
  • 54. 54 ChuChuỗỗi ký ti ký tựự –– MMộột st sốố hhààm thư vim thư việệnn GGáán nn nộội dung chui dung chuỗỗi:i: oo ChChéép top toààn bn bộộ chuchuỗỗi source sang chui source sang chuỗỗi dest:i dest: intint strcpystrcpy(char *dest, const char *src);(char *dest, const char *src); oo ChChéép tp tốối đa n ký ti đa n ký tựự ttừừ source sang dest:source sang dest: intint strncpystrncpy(char *dest,(char *dest, const char *src, int n);const char *src, int n); TTạạo chuo chuỗỗi mi mớới ti từừ chuchuỗỗi đã ci đã cóó:: char *char *strdupstrdup(const char *src);(const char *src);
  • 55. 55 #include <stdio.h> int main() { char s[] = "Tony Blurt"; char s2[100], *s3; strcpy(s2, s); printf("%sn", s2); strncpy(s2 + 2, "12345", 3); printf("%sn", s2); s3 = strdup(s + 5); printf("%sn", s3); free(s3); return 0; } ChuChuỗỗi ký ti ký tựự –– vvíí ddụụ strcpystrcpy Tony Blurt To123Blurt Blurt
  • 56. 56 ChuChuỗỗi ký ti ký tựự –– MM ộột st sốố hhààm thư vim thư việệnn NNốối chui chuỗỗi:i: char *char *strcatstrcat(char *dest,(char *dest, const char *src);const char *src); TTáách chuch chuỗỗi:i: char *char *strtokstrtok(char *s,(char *s, const char *sep);const char *sep); TrTrảả vvềề đđịịa cha chỉỉ ccủủa đoa đoạạn đn đầầu tiên. Muu tiên. Muốốn tn táách đoch đoạạn kn kếế titiếếpp tham stham sốố ththứứ nhnhấất st sẽẽ llàà NULLNULL
  • 57. 57 #include <stdio.h> #define SEPARATOR "., " int main() { char s[]= "Thu strtok: 9,123.45"; char *p; p = strtok(s, SEPARATOR); while (p != NULL) { printf("%sn", p); p = strtok(NULL, SEPARATOR); } return 0; } ChuChuỗỗi ký ti ký tựự –– vvíí ddụụ strtokstrtok Thu strtok: 9 123 45
  • 58. 58 ChuChuỗỗi ký ti ký tựự –– MMộột st sốố hhààm thư vim thư việệnn TTììm mm mộột ký tt ký tựự trên chutrên chuỗỗi:i: char *char *strchrstrchr(const char *s, int c);(const char *s, int c); TTììm mm mộột đot đoạạn ký tn ký tựự trên chutrên chuỗỗi:i: char *char *strstrstrstr(const char *s1,(const char *s1, const char *s2);const char *s2);
  • 59. 59 #include <stdio.h> int main() { char s[]= "Thu tim kiem chuoi"; char *p; p = strchr(s, 'm'); printf("%sn", p); p = strstr(s, "em"); printf("%sn", p); return 0; } ChuChuỗỗi ký ti ký tựự –– vvíí ddụụ ttììm kim kiếếmm m kiem chuoi em chuoi
  • 60. 60 #include <stdio.h> void StrIns(char *s, char *sub) { int len = strlen(sub); memmove(s + len, s, strlen(s)+1); strncpy(s, sub, len); } int main() { char s[]= "Thu chen"; StrIns(s, "123"); printf("%sn", s); StrIns(s + 8, "45"); printf("%sn", p); return 0; } ChuChuỗỗi ký ti ký tựự –– chchèèn mn mộột đot đoạạn ký tn ký tựự 123 Thu chen 123 Thu 45chen
  • 61. 61 #include <stdio.h> void StrDel(char *s, int n) { memmove(s, s + n, strlen(s+n)+1); } int main() { char s[]= "Thu xoa 12345"; StrDel(s, 4); printf("%sn", s); StrDel(s + 4, 3); printf("%sn", p); return 0; } ChuChuỗỗi ký ti ký tựự –– xxóóa ma mộột đot đoạạn ký tn ký tựự xoa 12345 xoa 45
  • 62. 62 TTóóm lưm lượợcc Khai bKhai bááoo NhNhậập / xup / xuấấtt Con trCon trỏỏ vvàà chuchuỗỗi ký ti ký tựự MMộột st sốố hhààm thư vim thư việệnn ChChèèn / lon / loạại bi bỏỏ mmộột đot đoạạn conn con
  • 64. 64 KiKiểểu cu cấấu tru trúúcc KhKháái nii niệệmm Khai bKhai bááoo Truy xuTruy xuấất ct cáác thc thàành phnh phầầnn CCấấu tru trúúc & mc & mảảngng Con trCon trỏỏ đđếến cn cấấu tru trúúcc
  • 65. 65 KhKháái nii niệệmm CCấấu tru trúúc lc làà kikiểểu du dữữ liliệệu gu gồồm mm mộột nht nhóóm cm cáácc ththàành phnh phầần cn cóó kikiểểu không giu không giốống nhau, mng nhau, mỗỗii ththàành phnh phầần đưn đượợc xc xáác đc địịnh bnh bằằng mng mộột tên riêngt tên riêng bibiệệt.t. KiKiểểu cu củủa ma mỗỗi thi thàành phnh phầần trong cn trong cấấu tru trúúclclàà mmộộtt kikiếếu đã đưu đã đượợc đc địịnh nghnh nghĩĩa trưa trướớc, kc, kểể ccảả mmảảng vng vàà ccáác cc cấấu tru trúúc khc kháác.c.
  • 66. 66 CCấấu tru trúúcc –– Khai bKhai bááo trong Co trong C MMộột kit kiểểu cu cấấu tru trúúc đưc đượợc đc địịnh nghnh nghĩĩa va vớới ti từừ khkhóóaa structstruct.. typedeftypedef structstruct TênkiTênkiểểuu {{ KiKiểểuthuthàànhphnhphầầnn TênthTênthàànhphnhphầần;n; KiKiểểuthuthàànhphnhphầầnn TênthTênthàànhphnhphầần;n; KiKiểểuthuthàànhphnhphầầnn TênthTênthàànhphnhphầần;n; KiKiểểuthuthàànhphnhphầầnn TênthTênthàànhphnhphầần;n; ...... };};
  • 67. 67 CCấấu tru trúúcc –– vvíí ddụụ typedef struct TBook { char title[80]; char author[80]; float price; char isbn[20]; }; typedef struct TDate { char day; char month; int year; }; typedef struct TStudent { char ID[10]; char firstname[10]; char lastname[20]; TDate dob; float marks[10]; }; //khai báo các biến TBook book; TStudent list[100];
  • 68. 68 CCáác thc thàành phnh phầần cn củủa ma mộột bit biếến kin kiểểu cu cấấu tru trúúc đưc đượợc truy xuc truy xuấấtt thông qua tên bithông qua tên biếến, dn, dấấu "." vu "." vàà tên thtên thàành phnh phầần.n. void Print(TStudent m) { printf("Name : %s %sn", m.firstname, m.lastname); printf("Student ID : %sn", m.ID); printf("Date of birth : %hi/%hi/%i", m.dob.day, m.dob.month, m.dob.year); printf("Marks : "); for (int i=0; i<10; i++) printf("%.2f ", m.marks[i]); } CCấấu tru trúúcc –– Truy xuTruy xuấất ct cáác thc thàành phnh phầầnn
  • 69. 69 void ReadInfo(TStudent &m) { printf("Type student ID: "); scanf("%s", m.ID); printf("Type first name: "); gets(m.firstname); printf("Type last name: "); gets(m.lastname); printf("Date of birth (d m y): "); scanf("%hi %hi %i", &(m.dob.day), &(m.dob.month), &(m.dob.year)); printf("Marks (10 floats): "); for (int i=0; i<10; i++) scanf("%f", &(m.marks[i])); } CCấấu tru trúúcc –– Truy xuTruy xuấất ct cáác thc thàành phnh phầầnn
  • 70. 70 TTóómm lưlượợcc ĐĐịịnh nghnh nghĩĩa KDLa KDL KiKiểểu du dữữ liliệệu cơ bu cơ bảản: Sn: Sốố nguyên, snguyên, sốố ththựựcc KiKiểểu du dữữ liliệệu cu cấấu tru trúúc:c: ĐĐịịnh nghnh nghĩĩa, ma, mộột st sốố KiKiểểu cu cấấu tru trúúcc cơ bcơ bảảnn MMảảngng ChuChuỗỗi ký ti ký tựự StructStruct