theo ki u con tr.. quy, các ki quy.. Hàm có côn3.. putc ch hình.. Cú pháp: char *strncpychar *Des, const char *Source, size_t n 11.. Cú pháp: char toupper char c 15.
Trang 1I H C CÔNG NGH TP.HCM
Biên
Trang 3I IV
U 1
1.1 KHÁI 1
1.1 1
2
3
4
6
1.1.6 7
1.2 KÝ CÁC KÝ 9
9
11
1.2.3 Các thao tác trên chu i ký t 13
1.2.4 M t s hàm x lý chu i (trong < string.h>) 13
TÓM T 21
CÂU ÔN 21
U 23
2.1 KHÁI 23
2.2 CÁCH KHAI BÁO HAI 23
2.2.1 Cú pháp 23
24
24
2.3 L CHO HAI 25
25
27
2.4 CHO HAI 28
28
30
2.5 VÀI TOÁN TRÊN HAI 32
2.5.1 Bài toán 1 32
2.5.2 Bài toán 2 33
TÓM 34
CÂU ÔN 35
36
3.1 KHÁI 36
3.2 CÁCH KHAI BÁO TRÚC 37
3.2.1 Cú pháp 37
37
38
38
3.3 TRUY VÀO TRÚC 39
3.3.1 Cú pháp 39
39
Trang 439
3.4 CHO CÓ TRÚC 40
40
41
3.5 42
42
42
3.6 TRÚC 42
3.6.1 Bài toán 1 42
3.6.2 Bài toán 2 44
3.7 VÀI TRÊN TRÚC 44
3.7.1 Bài toán 1 44
3.7.2 Bài toán 2 44
TÓM 45
CÂU ÔN 45
47
4.1 KHÁI Ô VÀ CON 47
4.2 KHAI BÁO VÀ S CON TR 48
4.2.1 Khai báo bi con tr 48
48
4.3 CÁC PHÉP TOÁN TRÊN CON 51
4.3.1 Phép gán 51
52
52
4.3.4 Phép so sánh 53
4.4 CON PHÁT VÀ THU 53
54
56
56
4.5 CON VÀ 57
4.5.1 Truy p các ph ng theo d 57
ng ph qu n lý b theo ng m ng 58
4.6 CON VÀ HAI 62
4.6.1 Bài toán 2 62
4.6.2 Cách 1 63
4.6.3 Cách 2 66
4.7 CON CÓ TRÚC (STRUCT ) 69
69
70
71
TÓM 73
CÂU ÔN 73
77
5.1 KHÁI 77
5.2 PHÂN HÀM QUY 79
79
81
82
83
5.3 BÀI TOÁN QUY 84
85
Trang 55.4 XÉT 87
5.5 TRÚC VÀ QUY 88
TÓM 88
CÂU ÔN 89
BÀI 6: T P TIN (FILE) 90
6.1 KHÁI 90
6.2 CÁC THAO TÁC TRÊN TIN 91
6.2.1 Khai báo bi n t p tin 91
6.2.2 M t p tin 92
óng p tin 93
6.2.4 Ki tra i t p tin hay a? 93
6.2.5 Di chuy con tr t p tin v u p tin - Hàm rewind() 93
6.3 TRUY C P TIN V B N 94
6.3.1 Ghi d li lên p tin v n n 94
6.3.2 c li t t p tin v 95
6.4 TRUY C P TIN PHÂN 98
6.4.1 Ghi d li lên t p tin phân - Hàm fwrite() 98
c li t t p tin nh phân - Hàm fread() 98
6.4.3 Di ch con tr t p tin - Hàm fseek() 98
TÓM 105
CÂU ÔN 105
TÀI THAM 108
Trang 6Môn K L p Trình cung c cho sinh viên ng k th b và
Trang 7tìm ki m, s p x p, thêm ph n t , xóa ph n t theo ki u con tr Con tr v i ki u
d li u có c u trúc
Bài 5
phân
Trang 8Trang 9
BÀI 1:
Khái ni m v ki u d li u m ng d ng c a nó;
Cách khai báo bi n ki u m ng và các phép toán trên các ph n t c a m ng;
i thu t trên m ng 1 chi m, s p x p, thêm ph n
ta s d ng ki u m ng làm ki u ph n t cho m t m ng (trong tr ng h p này
ta g i là m ng c a m ng hay m ng nhi u chi u)
Ta có th chia m ng làm 2 lo i: m ng 1 chi u và m ng nhi u chi u
c a m ng m t chi u có giá tr không ph i là m t m ng khác
Trang 10- S ph n t : là m t h ng s nguyên, cho bi t s l ng ph n t t i trong
songuyen int songuyen [10] ;
sothuc float sothuc [15] ;
daykytu char daykytu [30] ;
Cú pháp
Khi khai báo, không cho bi t rõ s ph n t c a m ng, ki u khai báo này
m ng là tham s hình th c c a hàm
Trang 11Cách 1 V a khai báo v a gán giá tr
Cú pháp:
<Ki u> <Tên m ng> []= {Các giá tr cách nhau b i d u ph y}
N u v a khai báo v a gán giá tr thì m c nhiên C s hi u s ph n t c a
m ng là s giá tr mà chúng ta gán cho m ng trong c p d u {}
M i ph n t c a m ng c truy xu t thông qua Tên bi n m ng theo sau
là ch s n m trong c p d u ngo c vuông [ ]
Ch s c a ph n t m ng là m t bi u th c mà giá tr là ki u s nguyên
V i cách truy xu t theo ki u này, Tên bi n m ng[Ch s ] có th coi n là
m t bi n có ki u d li u là ki u c ch ra trong khai báo bi n m ng
float t=10.0;
Trang 13for ( int i =0 ; i<n ; i++)
Trang 16}
Trang 17for ( int i= 0 ; i<n ; i++ )
if ( a[i] < 0 )
Trang 19Chú ý: Chu i c khai báo là m t m ng các ký t nên các thao tác trên
m ng có th áp d ng i v i chu i ký t
1.2.2.2 Cách khai báo chu i
1 Khai báo chu i :
Cú pháp : char < tên bi n > [ chi u dài t i ]
Trang 20Ví d : char Hoten [20];
Cú pháp: char <Bi n> ng chu
Trang 211.2.3 Các thao tác trên chu i ký t
1.2.3.1 Nh p xu t chu n < stdio.h>
1 Nh p : scanf
Ví d : scanf
chu i không có kho ng tr ng
hàm gets fflush ( stdin) hay flushall ( )
1.2.4 M t s hàm x lý chu i (trong < string.h>)
Trang 22Cú pháp: void gotoxy( int x,int y)
4 Nh p xu t chu i v i hàm scanf và printf
printf("\nNhap chuoi 1 : "); gets(s1);
printf("Nhap chuoi 2 : "); gets(s2);
strcat(s1,s2);
printf("Xuat chuoi 1 : %s",s1);
Trang 23if (p != NULL) printf("\nchi so cua ky tu : %d",(int)(p-s));
else printf("\nKhong tim thay!");
Trang 243
8 So sánh chu i - Hàm stricmp()
Hàm này th c hi n vi c so sánh trong n ký t u tiên c a 2 chu i s1 và
Cú pháp: int stricmp (const char *s1, const char *s2)
9 Hàm strcpy :
Cú pháp: char *strcpy (char *Des, const char *Source)
#include "stdio.h"
#include "string.h"
void main() {
char s[50];
strcpy(s,"Truong Dai hoc Ky thuat");
printf("\nXuat chuoi : %s",s);
}
10 Hàm strncpy () : Sao chép m t ph n chu i
Cú pháp: char *strncpy(char *Des, const char *Source, size_t n)
11 Hàm strchr() : Trích m t ph n chu i
Cú pháp : char *strchr (const char *str, int c)
Trang 25
Ghi chú:
N u ký t ã ch nh không có trong chu i, k t qu tr v là NULL
K t qu tr v c a hàm là m t con tr , con tr này ch n ký t c c tìm
th y u tiên trong chu i str
12 Tìm ki m n i dung chu i - hàm strstr()
Hàm strstr() c s d ng tìm ki m s xu t hi n u tiên c a chu i s2 trong chu i s1
Cú pháp: char *strstr(const char *s1, const char *s2)
có ch a chu i s2 ho c giá tr NULL n u chu i s2 không có trong chu i s1
trich ra:
getch();
return 0;
}
13 L y chi u dài chu i v i hàm strlen()
Cú pháp : int strlen ( const char *s );
#include <stdio.h>
Trang 26#include <string.h>
void main( ) {
char string [ ] = "Borland International";
printf("%d\n", strlen(string)); // k t qu 21 getch ( );
char Chuoi [255];
int Dodai;
printf("Nhap chuoi: ");gets(Chuoi);
Dodai = strlen(Chuoi) printf("Chuoi vua nhap: ");puts(Chuoi);
char newstr [35];
i h c Công Ngh for(int i = 0; i<strlen(str); i++)
newstr[i] = str[i];
getch () ; }
Trang 2714 i m t ký t th ng thành ký t hoa - Hàm toupper()
ký t hoa
Cú pháp: char toupper (char c)
Ví d : Vi t ch ng trình nh p vào m t chu i ký t t bàn phím Sau ó s
#include<conio.h>
#include<stdio.h>
#include<string.h>
int main() {
Mu n chuy n i chu i ch hoa thành chu i toàn ch th ng, ta s d ng
Trang 2817 i t chu i ra s , hàm atoi(), atof(), atol() (trong stdlib.h)
Cú pháp :
int atoi(const char *s): chuy n chu i thành s nguyên
long atol(const char *s): chuy n chu i thành s nguyên dài float
atof(const char *s) : chuy n chu i thành s th c
Ví d :
#include <string.h>
void main() {
char s[80] , *p ; gets(s);
p = strtok(s," ");
while(p) {
p = strtok(NULL," ");
} }
19 c chu i : char* strrev(char *s)
Ngoài ra, th vi n string.h còn h tr các hàm x lý chu i khác, ta có th
c thêm trong ph n tr giúp
Trang 31BÀI 2:
-
- Cách khai báo bi n ki u m ng và các phép toán trên các ph n t c a m ng;
Trang 32ch s n m trong c p d u ngo c vuông [ ][ ]
Ch s c a ph n t m ng là m t bi u th c mà giá tr là ki u s nguyên
V i cách truy xu t theo ki u này, Tên bi n m ng[Ch s ] [Ch s ] có th coi
n là m t bi n có ki u d li u là ki u c ch ra trong khai báo bi n m ng
Trang 41long tinhtong ( int a[ ][100] , int m, int n )
{
long s =0 ;
for ( int i = 0 ; i<m ; i++ )
for ( int j=0; j< n ; j++ ) s=s+ a[i][j] ;
Trang 42}
-
Trang 44BÀI 3: K
-
- Cách tìm ki m và s p x p d li ucó c u trúc trên m ng m t chi u;
Trang 451 <Tên c u trúc>: là m t tên c t theo quy t c t tên c a danh
bi u; tên này mang ý ngh a s là tên ki u c u trúc
2 <Ki u> <Tr ng i > (i=1 n): m i ng trong c u trúc có d li u thu c
Trang 47typedef struct phanso PS;
void nhapphanso (ps &x)
Trang 48typedef struct phanso PS;
void nhapphanso (ps &x)
Trang 49typedef struct DiemThi Diem ;
void nhapdiem (Diem &sv)
Trang 50printf("\nMa so sinh vien : %s",sv.masv);
printf("\nMa mon hoc : %s",sv.mamh);
printf("\nLan thi : %d",sv.lanthi);
printf("\nDiem thi : %.1f ",sv.diem);
Trang 55BÀI 4:
Khái ni m v con tr ;
Cách khai báo và s d ng bi n ki u con tr ;
M ng và các phép toán trên m ng m t chi u theo ki u con tr ;
M ng và các phép toán trên m ng hai chi u theo ki u con tr ;
i thu t trên m ng 1 chi u , 2 chi m, s p x p, thêm ph n t , xóa ph n t theo ki u con tr ;
Trang 564.2 KHAI BÁO VÀ S D NG BI N CON TR
Trang 60NULL: là con tr a h Ta có th r ULL
Trang 61
te
Trang 62{ printf("Not enough memory to allocate buffer\n");
exit(1); /* terminate program if out of memory */
}
strcpy(str, "Hello"); /* copy "Hello" into string */
printf("String is %s\n", str); /* display string */
free(str); /* free memory */
return 0;
}
Trang 63/* allocate memory for string */
str = (char *) calloc(10, sizeof(char));
strcpy(str, "Hello"); /* copy "Hello" into string */
printf("String is %s\n", str); /* display string */
free(str); /* free memory */
Trang 65typedef float KieuThuc;
Trang 66printf("Phan tu thu %d: ",i);
Trang 74: *a, *(a+1), *(a+2) ,
*(a+m-1)
void capphat ( int **a , int m ,int n)
Trang 75: *a, *(a+1), *(a+2) ,
*(a+m-1)
void capphat ( int **a , int m ,int n)
Trang 79printf("diem :");
scanf("%f ", &tam);
p->diem=tam;
printf("\nKet qua:");
printf("\nMa so sinh vien :%s", (*p).masv);
printf("\nMa mon hoc : %s", (*p).mamh);
printf("\nLan thi :%d", (*p).lanthi);
void nhap( DIEMTHI *px);
void xuat( DIEMTHI x);
void main()
Trang 80printf("\nDiem thi:%.2f", x.diem); }
void nhap( DIEMTHI *px)
Trang 81- Khái ni m v con tr ;
- Cách khai báo và s d ng bi n ki u con tr ;
- M ng và các phép toán trên m ng m t chi u theo ki u con tr ;
- M ng và các phép toán trên m ng hai chi u theo ki u con tr ;
- i thu t trên m ng 1 chi u , 2 chi m, s p x p, thêm ph n t , xóa ph n t theo ki u con tr ;
Trang 86printf("\nGoi ham de quy: %d != %d ",n,giaithua_dequy(n));
printf("\nGoi ham khong de quy: %d != %d ",n,giaithua_khongdequy(n)); getch();
return 0;
}
Ta có :
S(n) = 1 + 2 + 3 + 4 + + (n-1)+ n = S(n-1) + n ;
Trang 87long tinhtong (int n)
Trang 95void MergeSort (int a[], int Left, int Right)
Trang 96Cách khai báo và vi t hàm theo ki quy
m ng 1 chi u b quy
Trang 98BÀI 6: T P TIN (FILE)
các ký t này c tr d i d ng mã Ascii m c bi t là d li u c a t p tin
c l u tr thành các dòng, m i dòng c k t thúc b ng ký t xu ng dòng (new
dòng, mã Ascii là 13) và LF (Line Feed - Xu ng dòng, mã Ascii là 10) M i t p tin
c k t thúc b i ký t EOF (End Of File) có mã Ascii là 26 (xác nh b i t h p phím Ctrl + Z)
T p tin v b n ch có th truy xu t theo ki u tu n t
2 T p tin nh ki u (Typed File): là lo i t p tin bao g m nhi u ph n t
có cùng ki u: char, int, long, c u tr và c l u tr trên a d i d ng m t
Trang 99chu i các byte liên t c
tác ng lên t p tin mà thôi
Bi n t p tin: là m t bi n thu c ki u d li u t p tin dùng i di n cho m t
s là bi n t p tin i di n cho t p tin ó
có m t v trí c a t p tin mà t i ó vi c c/ghi thông tin s x y ra Ng i ta hình dung có m t con tr ang ch n v trí ó và t tên nó là con tr t p tin
Sau khi c/ghi xong d li u, con tr s chuy n d ch thêm m t ph n t v phía cu i t p tin Sau ph n t d li u cu i cùng c a t p tin là d u k t thúc t p tin EOF (End Of File)
6.2 CÁC THAO TÁC TRÊN T P TIN
1 Khai báo bi n t p tin
2 M t p tin b ng hàm fopen()
3 Th c hi n các thao tác x lý d li u c a t p tin b ng các hàm c/ghi d
li u
6.2.1 Khai báo bi n t p tin
Ví d : FILE *f1,*f2;
Trang 1006.2.2 M t p tin
Cú pháp: FILE *fopen(char *Path, const char *Mode)
Trong ó:
- Type: chu i xác nh cách th c mà t p tin s m Các giá tr có th c a Mode:
Trang 101Trong ví d trên, ta có s d ng câu l ki tra k xác nh m tin có thành công hay không?
6.2.5 D i chuy con tr t p tin v u p tin - Hàm rewind()
c i t p tin Mu n cho con tr quay v u tin nh khi m nó, ta s d ng
hàm rewind()
Trang 102Trong ó, tham c c a mã Ascii c a m t ký nào ó Mã này c ghi lên
2 Hàm fputs()
Trong ó, buffer là con có k char ch v trí tiên c a chu i ký
Trang 103fputs("Em oi Ha Noi pho.\n",f);
fputs("Ta con em, mui hoang lan; ta con em, mui hoa sua.",f);
Trang 104Cú pháp: int getc ( FILE *f )
i con tr
2 Hàm fgets()
Cú pháp: char *fgets (char *buffer, int n, FILE *f)
này c ng c a vào chu i k qu hay g ký t k thúc EOF (ký t này
Trang 105Ví d : Vi ch trình chép t tin D:\Baihat.txt trên sang p tin D:\Baica.txt
return 0;
}
Trang 1066.4 TRUY C P T P TIN NH PHÂN
Cú pháp: size_t fwrite(const void *ptr, size_t size, size_t n, FILE*f)
Cú pháp: size_t fread (const void *ptr, size_t size, size_t n, FILE *f)
Trang 107Ta c ng có th i u khi v di chuy n con tr t p tin v trí ch nh bhàm fseek()
Cú pháp: int fseek ( FILE *f, long offset, int whence )
Ví d 1: Vi ch trình ghi lên t tin CacSo.Dat 3 giá tr s (th c,
Trang 108Ví d 2: M i sinh viên c qu n lý ít 2 thông tin: mã sinh viên và h
t bàn phím r i ghi lên t tin SinhVien.dat, c d li u t tin SinhVien.dat r i
th sách lên màn hình, tìm ki h tên c a m t sinh viên nào ó d a
Trang 110printf("Bam phim bat ky de tiep tuc");
Trang 111printf("Tim khong thay sinh vien co ma %s",MSSV);
printf("\nBam phim bat ky de tiep tuc!!!");
Trang 1132 Ten (Tên hàng: char[20])
Câu 124: ch ng trình cho phép nh bàn phím và ghi vào 1 p tin tên
Trang 115Câu 127: Cho file :
Trang 116[8] Brain W Kernighan & Dennis Ritchie, The C Programming Language, Prentice Hall Publisher, 1988