theo ki u con tr.. Thi th c hành trên máy.. Hàm kbhit: Cú pháp : int kbhit void Hàm 2.. Cú pháp: char *strncpychar *Des, const char *Source, size_t n 11.
Trang 1I H C CÔNG NGH TP.HCM
Biên
Trang 25
Trang 3I IV
U 1
1.1 KHÁI 1
1
2
3
4
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 12
1.2.4 M t s hàm x lý chu i (trong < string.h>) 13
TÓM 22
CÂU ÔN 22
U 28
2.1 KHÁI 28
2.2 CÁCH KHAI BÁO HAI 28
2.2.1 Cú pháp 28
29
29
2.3 CHO HAI 30
30
32
2.4 CHO HAI 34
34
35
2.5 VÀI TOÁN TRÊN M HAI 37
2.5.1 Bài toán 1 37
2.5.2 Bài toán 2 38
TÓM 40
CÂU ÔN 40
43
3.1 KHÁI 43
3.2 CÁCH KHAI BÁO TRÚC 44
Trang 43.2.1 Cú pháp 44
3 44
45
45
3.3 TRUY VÀO TRÚC 46
3.3.1 Cú pháp 46
46
46
3.4 CHO CÓ TRÚC 47
47
48
3.5 49
49
49
3.6 TRÚC 49
3.6.1 Bài toán 1 49
3.6.2 Bài toán 2 51
3.7 VÀI TRÊN TRÚC 51
3.7.1 Bài toán 1 51
3.7.2 Bài toán 2 52
TÓM 52
CÂU ÔN 53
57
4.1 KHÁI Ô VÀ CON 57
4.2 KHAI BÁO VÀ S CON TR 58
4.2.1 Khai báo bi con tr 58
59
4.3 CÁC PHÉP TOÁN TRÊN CON 61
4.3.1 Phép gán 61
4.3.2 Ph 62
62
4.3.4 Phép so sánh 63
4.4 CON PHÁT VÀ THU 63
64
66
66
4.5 CON VÀ 67
4.5.1 Truy p các ph ng theo d 67
ng ph qu n lý b theo ng m ng 68
4.6 CON VÀ HAI 72
4.6.1 Bài toán 2 72
Trang 54.6.2 Cách 1 73
4.6.3 Cách 2 76
4.7 CON CÓ TRÚC (STRUCT) 79
79
79
81
TÓM 83
CÂU ÔN 83
95
5.1 KHÁI 95
5.2 PHÂN HÀM QUY 97
98
99
100
101
5.3 BÀI TOÁN QUY 102
103
5.4 XÉT 106
5.5 TRÚC VÀ QUY 106
TÓM 107
CÂU ÔN 107
BÀI 6: T P TIN (FILE) 110
6.1 KHÁI 110
6.2 CÁC THAO TÁC TRÊN TIN 111
6.2.1 Khai báo bi n t p tin 112
6.2.2 M t p tin 112
óng p tin 113
6.2.4 Ki tra i t p tin hay a? 113
6.2.5 Di chuy con tr t p tin v u p tin - Hàm rewind() 114
6.3 TRUY C P TIN V B N 114
6.3.1 Ghi d li lên p tin v n n 114
6.3.2 c li t t p tin v 116
6.4 TRUY C P TIN PHÂN 118
6.4.1 Ghi d li lên p tin phân - Hàm fwrite() 118
c li t t p tin nh phân - Hàm fread() 118
6.4.3 Di ch con tr t p tin - Hàm fseek() 118
TÓM 125
CÂU ÔN 125
TÀI THAM 128
Trang 6L p Trình cung c cho sinh viên ng k th b và nâng cao v trình thông qua ngôn ng l p trình C Môn h c này là thu
h môn c khác trong trình ào t o khác, ng môn này là c s các bài toán và các ng d
H c xong môn này, sinh viên ph i n c các v sau:
- X lý các bài toán trên m ng m t chi u
- X lý các bài toán trên m ng hai chi u
- K thu t dùng con tr
- Bi t k thu t vi quy và kh qui
- Bi t xây d ng và x lý các bài toán trên d li u có c nh
- và x lý các file trong C
- Tìm hi t m t s
tu bài toán tám h quy quay
pháp sinh d li u
Trang 7- Bài 1 M ng m t chi u: Bài này cung c p cho h c viên khái ni m v m ng m t chi u, cách nh p, xu trên m ng m t chi u v i các d li u ki u s và ki u chu i, x lý các bà ng các giá tr trên m ng m t chi u các s nguyên, s th c, tìm ph n t nh nh t, l n nh t, thêm, xóa, s p x p các ph n t trên m ng d li u ki u s , x lý các bài toán trên d li u ki u chu i
- Bài 2 M ng hai chi u: Bài này cung c p cho h c viên khái ni m v m ng hai chi u, cách nh p, xu trên m ng hai chi u, x
t ng các giá tr trên m ng s nguyên, s th c, tìm ph n t nh nh t, l n nh t, s p
x p các ph n t trên m ng d li u ki u s , ki u chu i
- Bài 3 Ki u d li u có c u trúc: Bài này cung c p cho h c viên khái ni n
v ki u d li u có c t Nh p Xu t d li u có
c u trúc cho m t ph n t Bi t Nh p, Xu t d li u có c ng
m t chi u Cách tìm ki m và s p x p d li u trên m ng m t chi u v i t ng thành
ph n c a d li i thu t trên m ng m t chi m, s p
x p, thêm ph n t , xóa ph n t
- Bài 4 Ki u con tr : Bài này cung c p cho h c viên khái ni n v ki u d
li u 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
tì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 quy: Bài này cung c p cho h c viên khái ni n v ki u l p trình
hàm b quy Gi i quy t m t s n b
quy X lý các gi i thu t trên m ng 1 chi u b quy
- Bài 6 T p tin: Bài này cung c p cho h c viên m t s khái ni m v t p tin Các
b c thao tác v i t p tin Thao tác trên t p tin v n b n Thao tác trên t p tin nh phân
Trang 9BÀI 1:
Sau khi h
- Hi u c khái ni m v ki u d li u c a m ng d ng c a nó;
- Bi t 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;
Ta có th chia m ng làm 2 lo i: m ng m t chi u và m ng nhi u chi u
M ng là ki u d li u c s d ng r t th ng xuyên Ch ng h n, ng i ta c n
qu n lý m t danh sách h và tên c a kho ng 100 sinh viên trong m t l p Nh n
th y r ng m i h và tên l u tr ta c n 1 bi n ki u chu i, n v y 100 h và tên thì c n khai báo 100 bi n ki u chu i N u khai báo nh th này thì o n khai báo
c ng nh thao tác trên các h tên s r t dài dòng và r c r i Vì th , ki u d
li u m ng giúp ích ta trong tr ng h p này; ch c n khai báo 1 bi n, bi n này có th coi nh là ng ng v i 100 bi n ki u chu i ký t ; ó là 1 m ng mà các ph n
t c a nó là chu i ký t Hay nh l u tr các t khóa c a ngôn ng l p trình C,
ta c ng dùng n m t m ng l u tr chúng
Trang 10N toán h c, m ng 1 chi u gi m t vector M i ph n t
c a m ng m t chi u có giá tr không ph i là m t m ng khác
1.1.2 Cách khai báo m ng m t chi u
- <Ki >: là ki u d li u c a m i ph n t c a m ng
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 ng
c áp d ng trong các ng h p: v a khai báo v a gán giá tr , ho c khai báo
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 {}
Ví d : float x[] = {12.1 , 7.23 , 5.0 , 27.6 , 87.9 , 9.31};
Chúng ta có th s d ng hàm sizeof() bi t s ph n t c a m
S ph n t =sizeof(tên m ng)/ sizeof(ki u)
Cách 2 Khai báo m ng là tham s hình th c c a hàm, trong tr ng h p này
ta không c n ch nh s ph n t c a m ng là bao nhiêu
Ví d : void nhapmang ( int a[ ], int n )
1.1.3 Truy c p vào các ph n t c a m ng
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 ng h n a[0] là ph n t u tiên c a m ng a c khai báo trên
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
float a [5] ;
a [0], a [1], a [2], a [3], a [4] float
oán : float t=10.0;
Trang 12a[0] a[1] a[2] a[3] a[4] a[n-3] a[n-2] a[n-1]
a [ 1 ]
a [ n- -1 ] );
Trang 13for ( int i =0 ; i<n ; i++)
a[0] a[1] a[2] a[3] a[4] a[n-3] a[n-2] a[n-1]
Trang 141.1.5 Xu t d li u cho m ng m t chi u
0 1 2 3 4 n-3 n-2 n-1 a[ ] 7 3 9 4 5 8 12 2
a[0] a[1] a[2] a[3] a[4] a[n-3] a[n-2] a[n-1]
a[0] a[1] a[2] a[3] a[4] a[n-3] a[n-2] a[n-1]
Trang 150 1 2 3 4 n-3 n-2 n-1 a[ ] 7 3 9 4 5 8 12 2
a[0] a[1] a[2] a[3] a[4] a[n-3] a[n-2] a[n-1]
- 1]
for ( int i= 0 ; i<n ; i++ )
S= S + a[i] ;
Trang 16long tinhtong ( int a[ ] , int n )
{
long s =0 ;
for ( int i = 0 ; i<n ; i++ )
s=s+ a[i] ; return s;
}
Bài toán 2
0 1 2 3 4 n-3 n-2 n-1 a[ ] 7 3 -9 4 5 8 12 2
for ( int i= 0 ; i<n ; i++ )
}
Trang 191.2.2 Chu i
1.2.2.1 Khái ni m
Trong
c k t thúc b ng ký t \ c g i là ký t NULL trong b ng mã Ascii )
Các h ng chu i ký t c t trong c p d u nháy kép
1.2.2.2 Cách khai báo chu i
1 Khai báo chu i :
Ví d : char Hoten [20];
2 V a khai báo v a gán giá tr :
Ví d : char chu thu t l
\
\
\
Trang 201.2.2.3 L i khi t o m t chu i
1 Chú ý: Không s d ng toán t chép n i dung c a m t chu i này sang chu i khác
Char char b[4];
i v i hàm scanf khi g p phím space, tab, new line, Enter thì d ng, cho nên ch
nh p chu i không có kho ng tr ng
Trang 211.2.3.2 Nh p xu t chu n <string.h>
1 Nh p: gets (Hoten);
Ti p nh c space, tab, new line
G p Enter thì d ng, ph i khai báo hàm xóa b m c khi dùng hàm gets : fflush ( stdin) hay flushall ( )
1.2.4 M t s hàm x lý chu i (trong < string.h>)
Cú pháp: void gotoxy( int x,int y)
4 Nh p xu t chu i v i hàm scanf và printf
Trang 22printf("\nNhap chuoi 1 : "); gets(s1);
printf("Nhap chuoi 2 : "); gets(s2);
Trang 23if (p != NULL) printf("\nchi so cua ky tu : %d",(int)(p-s));
else printf("\nKhong tim thay!");
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à s2,
gi a ch th ng và ch hoa không phân bi t
K t qu tr v ng t k t qu tr v c a hàm strcmp()
9 Hàm strcpy :
Hàm c dùng sao chép toàn b n i dung c a chu i ngu n vào chu i ích
Cú pháp: char *strcpy (char *Des, const char *Source)
#include "stdio.h"
Trang 24#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
Hàm này cho phép chép n ký t u tiên c a chu i ngu n sang chu i ích
Cú pháp: char *strncpy(char *Des, const char *Source, size_t n)
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)
K t qu tr v c a hàm là m t con tr ch n ph n t u tiên c a chu i s1 có
ch a chu i s2 ho c giá tr NULL n u chu i s2 không có trong chu i s1
b t u t chu hoc
Trang 25- 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>
#include <string.h>
void main( ) {
char string [ ] = "Borland International";
printf("%d\n", strlen(string)); // k t qu 21 getch ( );
}
Trang 26S d ng hàm strlen xác nh dài m t chu i nh p t bàn phím
#include<conio.h>
#include<stdio.h>
#include<string.h>
int main() {
char Chuoi [255];
int Dodai;
printf("Nhap chuoi: ");gets(Chuoi);
Dodai = strlen(Chuoi) printf("Chuoi vua nhap: ");puts(Chuoi);
do dai getch();
clrscr() ;
char newstr [35];
i h c Công Ngh for(int i = 0; i<strlen(str); i++)
newstr[i] = str[i];
Trang 27\getch () ; }
8 i m t ký t th ng thành ký t hoa - Hàm toupper()
Hàm toupper() (trong ctype.h) c dùng chuy n i m t ký t th ng thành ký t hoa
9 i chu i ch ng thành chu i ch hoa - Hàm strupr()
Hàm strupper() c dùng chuy n i chu i ch th ng thành chu i ch hoa,
k t qu tr v c a hàm là m t con tr ch n a ch chu c chuy n i
Cú pháp: char *strupr(char *s)
hàm strupr() chuy n i chúng thành chu i ch hoa
#include<conio.h>
#include<stdio.h>
#include<string.h>
int main() {
Trang 2810 i chu i ch hoa thành chu i ch ng - Hàm strlwr()
Mu n chuy n i chu i ch hoa thành chu i toàn ch th ng, ta s d ng hàm strlwr(), các tham s c ng t strupr()
Cú pháp: char *strlwr (char *s)
11 i t chu i ra s , hàm atoi(), atof(), atol() (trong stdlib.h)
chuy n i chu i ra s , ta s d ng các hàm trên
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
N u chuy n i không thành công, k t qu tr v c a các hàm là 0
12 char* strtok (char *s1 , const char *s2)
Xem s1 là 1 lo t chu i 1 hay nhi u ký t có trong s2
Ví d :
#include <string.h>
void main() {
char s[80] , *p ; gets(s);
p = strtok(s," ");
p);
while(p) {
p = strtok(NULL," ");
} }
Trang 2913 c chu i : char* strrev(char *s)
thêm trong ph n tr giúp
Trang 30TÓM T
- Bài này cung c p cho h c viên khái ni m v m ng m t chi u, cách nh p, xu
các giá tr trên m ng m t chi u các s nguyên, s th c, tìm ki m các ph n t nh
li u ki u s
- Cung c p cho h c viên khái ni m v cách nh p, xu trên m ng m t chi u
v i các d li u ki u ký t , x lý các bài toán tìm ki m, so sánh, c t chu i ( m ng
Trang 32BÀI 1
- Sinh viên ph i bi t cách nh p, xu trên m ng m t chi u v i các d li u
ki u s , x ng các giá tr trên m ng m t chi u các s nguyên, s th c, tìm ki m các ph n t nh nh t, l n nh t, ch u, l
cu i thêm, xóa, s p x p các ph n t trên m ng d li u ki u s
- Sinh viên ph i bi t cách nh p, xu trên m ng m t chi u v i các d li u
ki u ký t , x lý các bài toán tìm ki m, so sánh, c t chu i
Trang 36BÀI 2:
- Hi u c các khái ni n v Nh p, Xu t d li u trên m ng 2 chi u;
- Bi t 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 2 chi m, s p x p, thêm ph n t , xóa ph n t
2.1 KHÁI NI M
- c c a m ng là s ph n t c a m c này ph c bi t ngay khi khai báo m ng
- M ng nhi u chi u là m ng có t 2 chi u tr lên u ó có ngh a là m i ph n t
c a m ng là m t m ng khác
- Ng i ta th ng s d ng m ng nhi u chi u các ma tr n, các t a 2 chi u, 3 chi
Trang 374 S ph n t : là m t h ng s nguyên, cho bi t s l ng ph n t t i trong
m ng là bao nhiêu (hay nói khác c c a m ng) S ph n t c a
char str[12][30];
2.2.3 Truy c p vào các ph n t c a m ng
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 ng h n a[0][ 0 ] là ph n t u tiên c a m ng a c khai báo trên
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
Trang 382.3 NH P D LI U CHO M NG HAI CHI U
2.3.1 Nh p d li u cho m ng hai chi u các s nguyên
Trang 422.4 XU T D LI U CHO M NG HAI CHI U
2.4.1 Xu t d li u cho m ng hai chi u các s nguyên
Trang 44
a [ 0 ][ n- -1] ); for ( int j=0 ; j< n ; j++ )
- Xu t d li u cho dòng th hai
a [ 1 ][ n- -1] ); for ( int j=0 ; j< n ; j++ )
pri -1][j] );
Trang 45for ( int i =0 ; i<m ; i++)