Bài giảng Kỹ thuật lập trình - Chương 5: Kiểu cấu trúc - Kiểu mảng, chuỗi cung cấp cho người học các kiến thức: Từ khóa Typedef, cấu trúc, mảng, chuỗi ký tự. Đây là một tài liệu hữu ọc dành cho các bạn sinh viên ngành Công nghệ thông tin và những ai quan tâm dùng làm tài liệu học tập và nghiên cứu.
Ch ng 06 Ki u c u trúc Ki u m ng – chu i Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Array - struct https://fb.com/tailieudientucntt K thu t l p trình N i dung T khoá typedef C u trúc M ng Chu i ký t Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Array - struct https://fb.com/tailieudientucntt K thu t l p trình nh ngh a ki u m i v i typedef typedef cho phép ng i l p trình t o tên m i cho m t ki u d li u có Tên m i mang l i tính d hi u h n, ng c nh c a toán xét Tên m i giúp rút ng n mã ngu n Cú pháp typedef ; Ví d typedef unsigned char BYTE; BYTE a, b; Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Array - struct https://fb.com/tailieudientucntt K thu t l p trình ki u c u trúc (struct) Là ki u d li u ph c h p, bao g m nhi u thành ph n có th thu c ki u d li u khác Các thành ph n g i là: tr ng d li u (field) M t bi n thu c ki u c u trúc đ c xem m t t p h p nhi u bi n đ n l thành m t bi n nh t Ví d M i sinh viên c n l u thông tin: Tr n Quang © 2016 Mã s sinh viên H tên Ngày sinh Email, … CuuDuongThanCong.com Ch ng 06: Array - struct https://fb.com/tailieudientucntt K thu t l 4p trình ki u c u trúc (struct) T t c d li u m t bi n c u trúc có quan h v i t o thành m t kh i Luôn c p phát s p x p liên t c b nh Luôn đ c hu kh i b nh Các m nh d li u thành ph n có th truy xu t đ c l p, thông quan tên field Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Array - struct https://fb.com/tailieudientucntt K thu t l p trình Khai báo ki u d li u c u trúc Khai báo ki u c u trúc struct { } Ví d struct sinhvien { char mssv[8]; char hoten[30]; float dtb; } Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Array - struct https://fb.com/tailieudientucntt K thu t l p trình Khai báo bi n c u trúc Cú pháp: struct ; Ví d : struct sinhvien sv1, sv2, sv3; Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Array - struct https://fb.com/tailieudientucntt K thu t l 7p trình Khai báo bi n c u trúc Cú pháp: struct ; Ví d : struct sinhvien sv1, sv2, sv3; K t h p khai báo bi n v i khai báo c u trúc struct [tên c u trúc] { ; } ; Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Array - struct https://fb.com/tailieudientucntt K thu t l 8p trình Gán giá tr kh i t o khai báo struct sinhvien { char mssv[8]; char hoten[30]; float dtb; S1: Không đ c kh i đ ng }; s2: đ c kh i đ ng không đ y đ void main() { s3: đ c kh i đ ng đ y đ struct sinhvien s1; struct sinhvien s2 = { "001", "Nguyen Van An" }; struct sinhvien s3 = { "001", "Nguyen Van An", 9.5f }; printf("MSSV: %s\n", s3.mssv); printf("Ho Ten: %s\n", s3.hoten); Truy xu t d li u thành ph n qua tên g i } Quy t c: . Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Array - struct https://fb.com/tailieudientucntt K thu t l p trình K t h p typedef v i struct B t khoá “struct” khai báo bi n có ki u struct Ví d : typedef struct sPoint3D { float x, y, z; } Point3D; cách đ nh ngh a m t tên ki u m i Point3D thông qua typedef void main(){ struct sPoint3D p1 = {1.0f, 2.0f, 3.0f}; Point3D p2 = {1.0f, 2.0f, 3.0f}; printf("p1 = (%4.1f,%4.1f,%4.1f)\n", p1.x, p1.y, p1.z); printf("p2 = (%4.1f,%4.1f,%4.1f)\n", p2.x, p2.y, p2.z); } Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Array - struct https://fb.com/tailieudientucntt K thu t l p trình 10 L uý Tr ng h p s ph n t c a m ng ch a bi t tr (ch xác đ nh ch ng trình th c hi n) c Khai báo m ng v i kích th c t i đa S d ng bi n l u s ph n t th c s c a m ng Ví d : int a[100]; int n, i; printf ("Cho biet so phan tu cua mang: "); scanf (“%d”,&n); for(i = 0; i < n; i++){ printf (“a[%d] = ", i); scanf ("%d",&a[i]); } Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Array - struct https://fb.com/tailieudientucntt 23 K thu t l p trình 23 Duy t m ng chi u Dùng bi n ch s (ki u s nguyên) u tiên gán ch s b ng Ch đ n ph n t đ u tiên c a m ng Dùng vòng l p đ t qua m i ph n t c a m ng int arr[MAX_SIZE]; int n = 5; Nh p m ng In ph n t m ng for(int i=0; i m ng nhi u chi u Ví d int a[6][5] ; m ng a g m ph n t m i ph n t l i m t m ng g m s nguyên int T ng đ ng ma tr n dòng x c t a[0]: ph n t đ u tiên c a m ng a, m ng chi u a[i][j]: ph n t th j+1 c a m ng a[i] Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Array - struct https://fb.com/tailieudientucntt K thu t l 25 p trình 25 Mơ hình l u tr c a m ng chi u 10 20 30 40 50 60 70 80 90 100 110 120 Mơ hình m t m ng chi u có: hàng x c t 10 20 30 40 50 60 70 80 90 100 110 120 L u tr b nh c a m ng chi u: n tính hố m ng chi u Ph ng pháp: l u h t hàng đ n hàng Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Array - struct https://fb.com/tailieudientucntt K thu t l p trình 26 Khai báo m ng hai chi u int a[3][4]; int b[3][4] = { {10, 20, 30} }; int c[3][4] = { {10, 20, 30, 40}, {50, 60} }; int d[3][4] = { {10, 20, 30, 40}, {50, 60, 70, 80}, {90, 100, 110, 120} }; Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Array - struct https://fb.com/tailieudientucntt K thu t l p trình 27 Nh p vào m t ma tr n void main(){ int A[20][20], n, m, i, j; printf("Nhap n va m:"); scanf("%d%d",&n, &m); for ( i=0; i < n; i++ ) for (j=0; j < m; j++) { printf("Nhap A[%d,%d]:", i, j); scanf("%d", &A[i][j] ); } // … } Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Array - struct https://fb.com/tailieudientucntt K thu t l p trình 28 28 Xu t ma tr n hình void main(){ // printf ("Ma tran da nhap:\n"); for ( i=0; i < n; i++ ) { for ( j=0; j < m; j++ ) printf( "%4d" ,A[i][j]); printf("\n"); } Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Array - struct https://fb.com/tailieudientucntt K thu t l p trình 29 29 Chu i Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Array - struct https://fb.com/tailieudientucntt K thu t l p trình 30 Mơ hình chu i C Trong C, chu i m ng c a ký t chu i k t thúc b ng ký t đ c bi t „\0‟ => M ng có kích th c N ph n t ch có th ch a t i đa (N-1) ký t Ví d : chu i “LAP TRINH” Chi u dài: ký t S l ng ô nh c n thi t: 10 ’L’ ’A’ ’P’ ’ ’ ’T’ ’R’ ’I’ ’N’ ’H’ ’\0’ Chu i k t thúc b ng ký t đ c bi t Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Array - struct https://fb.com/tailieudientucntt K thu t l p trình 31 Khai báo chu i void main(){ const int MAX = 50; char s1[MAX]; char s2[MAX] = {'L', 'A', 'P', ' ', 'T', 'R', 'I', 'N', 'H', '\0'}; char s3[MAX] = "LAP TRINH"; char s4[] = { 'L', 'A', 'P', ' ', 'T', 'R', 'I', 'N', 'H', '\0'}; char s5[] = "LAP TRINH"; printf("%s\n%s\n%s\n%s\n", s2,s3,s4,s5); } Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Array - struct https://fb.com/tailieudientucntt K thu t l p trình 32 Các hàm thao tác v i chu i Hàm in chu i Hàm: printf v i đ c t %s #include #include In hai chu i bi n s1 s2 int main(){ const int MAX_LEN = 50; char s1[MAX_LEN] = {'L', 'A', 'P', ' ', 'T', 'R', 'I', 'N', 'H', '\0'}; char s2[] = "LAP TRINH"; printf("%s\n%s\n", s1,s2); return 0; } Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Array - struct https://fb.com/tailieudientucntt K thu t l p trình 33 Các hàm thao tác v i chu i Hàm đ c chu i: đ c t (read a word) Hàm: scanf v i đ c t %s #include #include int main(){ const int MAX_LEN = 50; char str[MAX_LEN]; printf("Enter a word, %d character max:", MAX_LEN); scanf("%s", str); printf("%s\n", str); return 0; } scanf: Tr n Quang © 2016 CuuDuongThanCong.com Ch c đ n g p kho ng tr ng đ c t (word) ng 06: Array - struct https://fb.com/tailieudientucntt K thu t l p trình 34 Các hàm thao tác v i chu i Hàm đ c chu i: đ c c dòng (read a line) Hàm: gets đ c m t dòng, đ n g p ký t xu ng hàng (ENTER) #include #include int main(){ const int MAX_LEN = 50; char str[MAX_LEN]; printf("Enter a line, %d characters max:", MAX_LEN); gets(str); printf("%s\n", str); return 0; } gets: Tr n Quang © 2016 CuuDuongThanCong.com c đ n g p ký t xu ng hàng đ c dòng (line) Ch ng 06: Array - struct https://fb.com/tailieudientucntt K thu t l p trình 35 Các hàm thao tác v i chu i Hàm đ c chu i: đ c c dòng (read a line) Dùng hàm getchar(), đ n g p ký t xu ng hàng (ENTER) void main(){ const int max_len = 50; char str[max_len], ch = '\0'; int i=0; printf("Enter a string, %d chars max:", max_len); while(ch!='\n'){ ch=getchar(); str[i]=ch; i++; } str[i]='\0'; //ending string printf("line: %s",str); } getchar: Tr n Quang © 2016 CuuDuongThanCong.com c t ng ký t Ch ng 06: Array - struct https://fb.com/tailieudientucntt K thu t l p trình 36 Các hàm thao tác v i chu i Các hàm khác: Hàm Công d ng strlen L y chi u dài chu i strcpy Copy m t chu i sang chu i khác strcmp So sánh hai chu i strstr Tìm chu i m t chu i Xem thêm t i: http://www.cplusplus.com/reference/cstring/ Tr n Quang © 2016 CuuDuongThanCong.com Ch ng 06: Array - struct https://fb.com/tailieudientucntt K thu t l p trình 37 ... p2.z); } Tr n Quang © 20 16 CuuDuongThanCong.com Ch ng 06: Array - struct https://fb.com/tailieudientucntt K thu t l p trình 10 M ng Tr n Quang © 20 16 CuuDuongThanCong.com Ch ng 06: Array - struct... } Tr n Quang © 20 16 CuuDuongThanCong.com Ch ng 06: Array - struct https://fb.com/tailieudientucntt K thu t l p trình 29 29 Chu i Tr n Quang © 20 16 CuuDuongThanCong.com Ch ng 06: Array - struct... 40, 50, 60 Tr n Quang © 20 16 CuuDuongThanCong.com Ch ng 06: Array - struct https://fb.com/tailieudientucntt K thu t l p trình 18 M ng chi u Hình nh b nh c a m ng a, b, c Tr n Quang © 20 16 CuuDuongThanCong.com