Microsoft PowerPoint IP 07 Array in C MảngMảng GV GV NguyễnNguyễn Minh Minh HuyHuy MảngMảng 1Nhập môn lập trình GV Nguyễn Minh Huy NộiNội dungdung �� KháiKhái niệmniệm mảngmảng �� ThaoThao táctác trên[.]
Mảng GV Nguyễn Minh Huy Nhập mơn lập trình - GV Nguyễn Minh Huy Nội dung Khái niệm mảng mảng Thao tác mảng mảng Chuỗi ký tự tự Nhập mơn lập trình - GV Nguyễn Minh Huy Nội dung Khái niệm mảng mảng Thao tác mảng mảng Chuỗi ký tự tự Nhập mơn lập trình - GV Nguyễn Minh Huy Khái niệm mảng Xét chương trình sau: sau: Nhập số nguyên nguyên,, sau xuất số vừa nhập nhập Khai báo biến int a, b, c, d, e Nhập 50 số nguyên nguyên,, sau xuất 50 số vừa nhập nhập Khai báo 50 biến int!! int!! Làm khai báo nhiều biến lúc? lúc? Mảng Mảng Nhập mơn lập trình - GV Nguyễn Minh Huy Khái niệm mảng Mảng ngôn ngữ C: Mảng dãy biến có kiểu kiểu Các biến dãy phần tử mảng mảng Khai báo báo:: > [ mảng>[ tử> ]; : tử>: phải số số int m1[ m1[ 10 ]];; float m2[ m2[ 50 ]];; // Dãy 10 số nguyên nguyên // Dãy 50 số thực thực int N; float m3[ m3[ N ]];; // Sai const int K = 100; float m4[ m4[ K ]];; // Đúng Nhập môn lập trình - GV Nguyễn Minh Huy Khái niệm mảng Mảng ngôn ngữ C: Sau khai báo báo,, phần tử mảng có giá trị nhiêu? ? int m[ ]];; m ? ? ? ? ? Khởi tạo giá trị mảng mảng:: > [ mảng>[< tử>] = { , PT1>, , PT2>, Y }; int m1[5] = { 1, 2, 3, 4, }; m1 // Khởi tạo tất phần tử int m2[5] = { 1, }; m2 0 // Khởi tạo vài phần tử đầu // phần tử sau tất = int m3[5] = { }; m3 0 0 // Khởi tạo tất = int m3[ ] = { 1, 2, 3, 4, }; m3 // Tự động biết số phần tử Nhập mơn lập trình - GV Nguyễn Minh Huy Khái niệm mảng Mảng ngôn ngữ C: Truy xuất phần tử mảng mảng:: > [ mảng> ] : >: số nguyên từ đến tử> - int a[ 10 ] = { }; a 0 a[ ] = 5; a[ ] = 6; a[ ] = a a[[ ] + a a[[ ]; a[ -1 ] = 7; a[ 10 ] = 8; Nhập mơn lập trình - GV Nguyễn Minh Huy // Sai // Sai Khái niệm mảng Mảng ngôn ngữ C: Truyền tham số mảng mảng:: Khai báo tham số mảng giống biến mảng mảng void foo( foo( int a[ 100 ], int size ); Khai báo tham số mảng bỏ số phần tử tử void foo( foo( int a[ ], int size ); Phần tử mảng bị thay đổi sau khỏi hàm hàm void foo( foo( int a[ ], int size ) { a[ ] = 9; a[ ] = 8; } void main() { int a[ 100 ] = { }; foo foo(( a, 100 ); // a[2], a[5] bị thay đổi đổi } Nhập mơn lập trình - GV Nguyễn Minh Huy Nội dung Khái niệm mảng mảng Thao tác mảng mảng Chuỗi ký tự tự Nhập mơn lập trình - GV Nguyễn Minh Huy Thao tác mảng Cách thức chung chung:: B1: Duyệt mảng mảng Dùng vòng lặp + biến đếm đếm Mỗi vòng lặp xét phần tử tử B2: Thao tác phần tử tử Dùng biến đếm truy xuất phần tử tử // Duyệt mảng M có kích thước N for ( int i = 0; i < N; i++ ) { ; } Nhập mơn lập trình - GV Nguyễn Minh Huy 10 Thao tác mảng Nhập mảng mảng:: // Nhập mảng số nguyên a, kích thước n void nhapMang nhapMang(( int a[ ], int &n ) { printf(“ printf (“Nhap Nhap kich thuoc = “); scanf(“%d”, scanf (“%d”, &n); &n); for (int (int i = 0; i < n; i++ ++)) { printf(“ printf (“Nhap Nhap phan tu %d = “, i); scanf(“%d”, scanf (“%d”, &a[ i ]); } #define MAX 100 void main() { int a[ MAX ], size1; int b[ MAX ], size2; nhapMang(a, size1); nhapMang(a, nhapMang(b, nhapMang (b, size2); } } Nhập mơn lập trình - GV Nguyễn Minh Huy 11 Thao tác mảng Xuất mảng mảng:: // Xuất mảng số nguyên a, kích thước n void xuatMang xuatMang(( int a[ ], int n ) { for ( int i = 0; i < n; i++ ) printf(“%d printf (“%d “, a[ i ]); } #define MAX 100 void main() { int a[ MAX ], size1; int b[ MAX ], size2; nhapMang(a, size1); nhapMang(a, nhapMang(b, nhapMang (b, size2); xuatMang(a, size1); xuatMang(a, xuatMang(b, xuatMang (b, size2); } Nhập mơn lập trình - GV Nguyễn Minh Huy 12 Thao tác mảng Tính tổng phần tử mảng mảng:: // Tính tổng mảng a, kích thước n long tinhTong tinhTong(( int a[ ], int n ) { long tong = 0; for ( int i = 0; i < n; i++ ) tong += a[ i ]; #define MAX 100 void main() { int a[ MAX ], size1; int b[ MAX ], size2; nhapMang(a, size1); nhapMang(a, nhapMang(b, nhapMang (b, size2); return tong; } long tong1 = tinhTong tinhTong(a, (a, size1); long tong2 = tinhTong tinhTong(b, (b, size2); } Nhập mơn lập trình - GV Nguyễn Minh Huy 13 Nội dung Khái niệm mảng mảng Thao tác mảng mảng Chuỗi ký tự tự Nhập mơn lập trình - GV Nguyễn Minh Huy 14 Chuỗi ký tự Chuỗi ký tự C: Chuỗi ký tự = mảng ký tự + phần tử cuối ‘\0’ 0’ Chiều dài chuỗi = số phần tử mảng – 1; Khai báo chuỗi chuỗi:: char chuỗi> [ > + ]; s1 ? char s1[ s1[ ]];; ? ? ? \0 Khởi tạo chuỗi chuỗi:: char [ ] = “< “” tạo>”;; char s2[ ] = “Hello”; Nhập mơn lập trình - GV Nguyễn Minh Huy s1 H e l l o \0 // Khởi tạo chuỗi 15 Chuỗi ký tự Thao tác chuỗi ký tự: tự: Nhập chuỗi chuỗi:: scanf(“%s”, & scanf(“%s”, &chuoi chuoi) ) Chỉ nhập từ tiên gets(chuoi gets( chuoi); ); Nhập nguyên chuỗi chuỗi #define MAX void main() { char s1[ s1[ MAX ]; char s2[ s2[ MAX ]; printf(“Nhap printf(“ Nhap chuoi s1 = “); scanf(“%s”, scanf (“%s”, &s1); printf(“ printf (“Nhap Nhap chuoi s2 = “); gets(s1); Xuất chuỗi chuỗi:: 100 printf(“%s”, chuoi) printf(“%s”, chuoi) puts(chuoi puts( chuoi) ) printf(“Chuoi s1 = %s”, printf( %s”, s1) s1);; puts(s2); } Nhập mơn lập trình - GV Nguyễn Minh Huy 16 Chuỗi ký tự Thao tác chuỗi ký tự: tự: Thư viện : >: #include string.h> strlen((chuoi strlen chuoi): ): đếm chiều dài chuỗi chuỗi char s1[ ] = “Hello World”; World”; // Tự thêm ‘\0’ cuối cuối char s2[ ] = “Hello World\ World\n”; // Tự thêm ‘\0’ cuối cuối char s3[ ] = { ‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘ ‘, ‘W’, ‘o’, ‘r’, ‘l’, ‘d’, ‘\ ‘\n’, ‘\ ‘\0’ }; int chieuDai1 = strlen strlen(s1) (s1);; int chieuDai2 = strlen strlen(s2) (s2);; int chieuDai3 = strlen(s3) strlen(s3);; Nhập môn lập trình - GV Nguyễn Minh Huy // chieuDai1 = 11 // chieuDai2 = 12 // chieuDai3 = 12 17 Chuỗi ký tự Thao tác chuỗi ký tự: tự: Viết hoa chữ đầu từ: từ: #include #define MAX 100 void vietHoa vietHoa(( char s[ ] ) { for (int (int i = 0; i < strlen strlen(s) (s);; i++) if ( s[ i ] >= ‘a’ && s[ i ] ) Nhập mơn lập trình - GV Nguyễn Minh Huy 19 Bài tập Bài tập 7.1: Viết chương trình C sau sau:: (tổ chức theo dạng hàm chia làm nhiều file): - Nhập vào mảng N số nguyên nguyên - Hãy cho biết biết:: a) Có số chẵn mảng mảng b) Có số âm mảng mảng c) Có số ngun tố mảng mảng Nhập mơn lập trình - GV Nguyễn Minh Huy 20