Microsoft PowerPoint IP 08 Array of Array and Struct in C MảngMảng nhiềunhiều chiềuchiều KiểuKiểu cấucấu trúctrúc GV GV NguyễnNguyễn Minh Minh HuyHuy KiểuKiểu cấucấu trúctrúc 1Nhập môn lập trình GV Ng[.]
Mảng nhiều chiều Kiểu cấu trúc GV Nguyễn Minh Huy Nhập mơn lập trình - GV.Nguyễn Minh Huy Nội dung Mảng nhiều chiều chiều Kiểu cấu trúc trúc Nhập mơn lập trình - GV.Nguyễn Minh Huy Nội dung Mảng nhiều chiều chiều Kiểu cấu trúc trúc Nhập mơn lập trình - GV.Nguyễn Minh Huy Mảng nhiều chiều Xét chương trình sau: sau: Nhập xuất ma trận x 10 Khai báo mảng mảng:: int a1[10], a2[10], a3[10], a4[10], a5[10] Nhập xuất ma trận 50 x 10 Khai báo 50 mảng mảng!! !! Làm biểu diễn ma trận M x N? Nhập môn lập trình - GV.Nguyễn Minh Huy Mảng nhiều chiều Giải pháp 1: Dùng mảng chiều!! chiều!! Biểu diễn ma trận M x N: Khai báo mảng chiều M x N phần tử tử Để truy xuất dòng i cột j Truy xuất phần tử [ i * N + j ] Nhập mơn lập trình - GV.Nguyễn Minh Huy Mảng nhiều chiều Giải pháp 2: Dùng mảng mảng mảng Từ khóa typedef typedef:: Đặt tên khác cho kiểu liệu liệu Cú pháp pháp:: typedef > >; typedef int SoNguyen SoNguyen;; typedef float MangThuc MangThuc[[ 10 ]; SoNguyen a, b, c; MangThuc m; printf(“%d %d %d”, a, b, c); printf(“%d m[ ] = 123; Nhập môn lập trình - GV.Nguyễn Minh Huy Mảng nhiều chiều Giải pháp 2: Biểu diễn ma trận M x N: Đặt tên cho mảng chiều N phần tử tử Khai báo mảng chiều M phần tử kiểu đặt tên tên Để truy xuất dòng i cột j Truy xuất phần tử [ i ] [ j ] Nhập mơn lập trình - GV.Nguyễn Minh Huy Mảng nhiều chiều Giải pháp 3: Dùng mảng nhiều chiều chiều Khai báo báo:: > [ mảng>[< >] [[< > ]; , >, < cột> phải số số int int m1[ m1[ ][ 10 ]; ]; // Ma trận x 10 số nguyên nguyên m2[ m2[ M ][ N ]];; // Sai Sai Truy xuất phần tử: tử: > [ dòng> ] [ cột> ] : >: số nguyên từ đến dòng> - : >: số nguyên từ đến cột> - m1[ m1[ ][ ] = 5; m1[ m1[ ][ ] = 6; m1[ m1[ -1 ][ 10 ] = 7; Nhập mơn lập trình - GV.Nguyễn Minh Huy // Sai Sai Mảng nhiều chiều Giải pháp 3: Dùng mảng nhiều chiều chiều Khởi tạo: tạo: > [ mảng>[< >] [[< >] = { , , f }; // Khởi tạo tất phần tử tử int m1[ m1[ ][ ] = { { 1, 1, 1, 1, }, { 1, 2, 3, 4, }, { 5, 4, 3, 2, } }; Nhập mơn lập trình - GV.Nguyễn Minh Huy // Khởi tạo vài phần tử tử int m1[ m1[ 3][ ] = { { 1, }, { 1, 2, }, {0} }; // Tự động biết số dòng dòng int m1[ ][ ] = { { 1, }, { 1, 2, }, {0} }; Khái niệm mảng Giải pháp 3: Dùng mảng nhiều chiều chiều 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[5][10] ); Khai báo tham số mảng bỏ số dòng dòng void foo( foo( int a[ ][10] ); Phần tử mảng bị thay đổi sau khỏi hàm hàm void foo( foo( int a[ ][10] ) { a[2][2] = 9; a[2][5] = 8; } void main() { int a[5][10] = { { } }; foo foo(a); (a); // a[2][2], a[2][5] bị thay đổi đổi } Nhập mơn lập trình - GV.Nguyễn Minh Huy 10 Nội dung Mảng nhiều chiều chiều Kiểu cấu trúc trúc Nhập mơn lập trình - GV.Nguyễn Minh Huy 11 Kiểu cấu trúc Xét chương trình sau: sau: Thông tin học sinh gồm gồm:: Họ tên tên Ngày sinh sinh Giới tính tính Điểm văn văn,, tốn tốn,, ngoại ngữ ngữ Viết chương trình trình:: Nhập vào học sinh sinh Xuất thông tin học sinh vừa nhập nhập Nhập mơn lập trình - GV.Nguyễn Minh Huy 12 Kiểu cấu trúc Kiểu cấu trúc C: Kiểu liệu phức hợp hợp Gom nhóm liệu với nhau Khai báo kiểu cấu trúc trúc:: struct > { ; ; f }; Khai báo biến cấu trúc trúc:: > ; >; Nhập mơn lập trình - GV.Nguyễn Minh Huy struct HocSinh { char hoten hoten[50]; [50]; char ngaysinh[11]; ngaysinh[11]; bool gioitinh gioitinh;; float diemvan; diemvan; float diemtoan; diemtoan; }; void main() { HocSinh hs1, hs2; } 13 Kiểu cấu trúc Kiểu cấu trúc C: Khởi tạo biến cấu trúc trúc:: > >= { , , f }; Truy xuất thành phần phần:: > phần> void main() { HocSinh hs = { “Nguyen Van A”, “01/01/1997”, 1, 7, 8, }; hs.diemvan hs.diemvan = 5; hs.diemToan hs.diemToan = 9; } Nhập mơn lập trình - GV.Nguyễn Minh Huy 14 Kiểu cấu trúc Kiểu cấu trúc C: Truyền tham số: số: Giống kiểu bình thường thường Truyền tham trị Giá trị thành phần không đổi đổi Truyền tham chiếu Giá trị thành phần thay đổi đổi void cong1( cong1(HocSinh hs hs)) { hs.diemvan++; hs.diemvan ++; hs.diemtoan++; hs.diemtoan ++; } void cong2( cong2(HocSinh &hs hs)) { hs.diemvan++; hs.diemvan ++; hs.diemtoan++; hs.diemtoan ++; } void main main() () { HocSinh hs1 hs1;; cong1(hs1); cong2(hs1); } Nhập mơn lập trình - GV.Nguyễn Minh Huy 15 Tóm tắt Mảng nhiều chiều chiều:: Giải pháp 1: mảng chiều chiều Giải pháp 2: mảng mảng mảng Giải pháp 3: mảng nhiều chiều thật sự Kiểu cấu trúc trúc:: Kiểu liệu phức hợp hợp Gom nhóm liệu với nhau Khai báo báo:: từ khóa “struct” struct” Truy xuất phần tử: tử: dấu “.” “.” Nhập mơn lập trình - GV.Nguyễn Minh Huy 16 Bài tập Bài tập 8.1: Viết chương trình C thao tác ma trận sau sau:: - Nhập vào ma trận vuông N x N chứa số nguyên nguyên - Hãy cho biết biết:: a) Tổng phần tử nằm đường chéo chính//phụ phụ b) Dịng có tổng lớn nhất,, nhỏ nhất c) Ma trận có ma phương hay khơng khơng Nhập mơn lập trình - GV.Nguyễn Minh Huy 17 Bài tập Bài tập 8.2: Viết chương trình C thao tác ma trận sau sau:: - Nhập vào ma trận M x N N x K chứa số nguyên nguyên - Hãy Hãy:: a) Tính tích ma trận vừa nhập nhập b) Trích danh sách số xuất ma trận trận Nhập mơn lập trình - GV.Nguyễn Minh Huy 18 Bài tập Bài tập 8.3: Viết chương trình C thao tác phân số sau sau:: - Khai báo kiểu cấu trúc phân số số - Nhập vào phân số số - Tính xuất kết tổng tổng,, hiệu, hiệu, tích, tích, thương, thương, nghịch đảo đảo,, rút gọn phân số vừa nhập nhập Nhập mơn lập trình - GV.Nguyễn Minh Huy 19 Bài tập Bài tập 8.4: Viết chương trình C thao tác đơn thức sau sau:: - Khai báo kiểu cấu trúc đơn thức thức - Nhập vào đơn thức (có dạng axN) - Tính xuất kết tích tích,, thương, thương, đạo hàm hàm,, nguyên hàm hai đơn thức vừa nhập nhập Nhập mơn lập trình - GV.Nguyễn Minh Huy 20