Lập trình C - Chương 2: Mảng hai chiều
Cho ma trận số nguyên, viết các hàm:
Tìm phần tử lớn nhất
Tìm vị trí phần tử lớn nhất
Tìm vị trí xuất hiện đầu tiên của phần tử có giá trị x
Tìm dòng có tổng lớn nhất
Tìm cột có tổng nhỏ nhất
33 trang |
Chia sẻ: huyhoang44 | Lượt xem: 731 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Lập trình C - Chương 2: Mảng hai chiều, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Lập trình CChương 2. Mảng hai chiều(3 tiết)Trần Minh TháiEmail: minhthai@huflit.edu.vn Website: www.minhthai.edu.vn Cập nhật: 21/02/20171Nội dungKhái niệmKhai báoCác thao tác cơ bản trên ma trậnThao tác trên ma trận vuôngBài tậpKHÁI NIỆM VÀ KHAI BÁO3Khái niệmDòng 0Dòng 1Dòng 2Dòng 3Cột 0Cột 1Cột 2Cột 3Cột 4Cột 5Ma trận có 4 dòng 6 cột (kích thước 4 x 6)Khái niệmKiểu dữ liệu mảng 2 chiều được tổ chức theo dạng bảng. Mỗi dòng là mảng 1 chiềuKích thước được xác định bởi số dòng và số cộtChỉ số dòng và cột được tính từ 0Khai báo ma trận Cú pháp tên ma trận [số dòng][số cột];VD1: khai báo ma trận số nguyên a có 10 dòng và 15 cột int a[10][15];VD2: khai báo ma trận số thực b có 25 dòng và 10 cột float b[25][10];Định nghĩa kiễu dữ liệuĐể đơn giản trong việc khai báo ma trận:#define MAX 100typedef matran[MAX][MAX]; VD: Khai báo ma trận các số nguyên a#define MAX 100typedef int matran[MAX][MAX];matran a;Khai báo và khởi gán tên ma trận[số dòng][số cột]={{gt11, gt12, }, {gt21, gt22, }, {gtk1, gtk2, }};VD: int a[3][4] = {{2,3,9,4}, {5,6,7,6}, {2,9,4,7} };Truy xuất phần tử Để truy xuất các thành phần của ma trận ta dựa vào chỉ số dòng và chỉ số cộtCú pháp: tên ma trận[chỉ số dòng][chỉ số cột]VD: x = a[1][2]; // x = 7 // Cập nhật giá trị tại chỉ số dòng 2, cột 3 thành 10 a[2][3] = 10; CÁC THAO TÁC XỬ LÝ CƠ BẢN10Các thao tácNhập/ xuấtTìm kiếmĐếmTính tổng/ trung bìnhSắp xếp dòng/ cộtXóa dòng/ cộtChèn thêm dòng/ cộtCấu trúc lệnh xử lý phổ biếnSử dụng 2 vòng lặp lồng nhau để duyệt ma trậnMỗi lần lặp sẽ duyệt từng dòng của ma trậnGọi sd là số dòng, sc là số cột và a là ma trận. Cấu trúc duyệt tổng quát: for(int d=0; d#include#define MAX 100typedef int matran[MAX][MAX];void NhapKichThuoc(int &sd, int &sc);void Nhap(matran a, int sd, int sc);void Xuat(matran a, int sd, int sc);Nhập/xuất ma trận số nguyênvoid NhapKichThuoc(int &sd, int &sc){ printf("Nhap so dong: "); scanf("%d", &sd); printf("Nhap so cot: "); scanf("%d", &sc);}Nhập/xuất ma trận số nguyênvoid Nhap(matran a, int sd, int sc) { for (int d = 0; d < sd; d++) { for (int c = 0; c < sc; c++) { printf("Nhap gia tri [%d][%d]: ", d, c); scanf("%d", &a[d][c]); } }}Nhập/xuất ma trận số nguyênvoid Xuat(matran a, int sd, int sc) { for (int d = 0; d < sd; d++) { for (int c = 0; c < sc; c++) { printf("%d\t", a[d][c]); } printf("\n"); }}Nhập/xuất ma trận số nguyênint main(){ matran a; int sd, sc; NhapKichThuoc(sd, sc); printf("Nhap gia tri cho ma tran:\n"); Nhap(a, sd, sc); printf("Cac phan tu trong ma tran\n"); Xuat(a, sd, sc); getch(); return 0;}Minh họa thực thi của chương trìnhNhap so dong cua ma tran: 3Nhap so cot cua ma tran: 4Nhap gia tri cho ma tran: Nhap gia tri [0][0]: 1 Nhap gia tri [0][1]: 2 Nhap gia tri [0][2]: 3 Nhap gia tri [0][3]: 4 Nhap gia tri [1][0]: 5 Nhap gia tri [1][1]: 6 Nhap gia tri [1][2]: 7 Nhap gia tri [1][3]: 8 Nhap gia tri [2][0]: 9 Nhap gia tri [2][1]: 10 Nhap gia tri [2][2]: 11 Nhap gia tri [2][3]: 12Cac phan tu trong ma tran1 2 3 45 6 7 89 10 11 12Bài tập nhập/xuấtCho ma trận số nguyên a gồm sd dòng và sc cột. Viết các hàm sau:Phát sinh giá trị ngẫu nhiên cho ma trậnXuất các phần tử lẻXuất các phần tử là số nguyên tốXuất các phần tử có giá trị lớn hơn xPhát sinh giá trị ngẫu nhiênvoid PhatSinh(matran a, int sd, int sc){ for (int d = 0; d <= sd - 1; d++) { for (int c = 0; c <= sc - 1; c++) { a[d][c] = rand() % MAX; } }}21Bài tập tìm kiếmCho ma trận số nguyên, viết các hàm:Tìm phần tử lớn nhấtTìm vị trí phần tử lớn nhấtTìm vị trí xuất hiện đầu tiên của phần tử có giá trị xTìm dòng có tổng lớn nhấtTìm cột có tổng nhỏ nhấtTính tổng của 1 dòng trong ma trận aDòng 0Dòng 1Dòng 2Dòng sd-1Cột 0Cột 1Cột 2Cột 3Cột sc-1Tổng dòng 2 = a[2][0] + a[2][1] + a[2][2] + + a[2][sc-1] Tổng dòng k = a[k][0] + a[k][1] + a[k][2] + + a[k][sc-1] Tính tổng của 1 dòng trong ma trận aGọi s là tổng dòng ks = a[k][0] + a[k][1] + a[k][2] + + a[k][sc-1] int s = 0;for(int i=0; i<=sc -1; i++){ s = s + a[k][i];}Tính tổng của 1 cột trong ma trận aDòng 0Dòng 1Dòng 2Dòng sd-1Cột 0Cột 1Cột 2Cột 3Cột sc-1Tổng cột 2 = a[0][2] + a[1][2] + a[2][2] + + a[sd-1][2] Tổng cột k = a[0][k] + a[1][k] + a[2][k] + + a[sd-1][k] Tính tổng của 1 cột trong ma trận aGọi s là tổng cột ks = a[0][k] + a[1][k] + a[2][k] + + a[sd-1][k] int s = 0;for(int i=0; i<=sd -1; i++){ s = s + a[i][k];}26Bài tập xóaCho ma trận số nguyên, viết các hàm:Xóa dòng có chứa giá trị lớn nhấtXóa cột có chứa giá trị xMA TRẬN VUÔNG27Ma trận vuông Ma trận có số dòng và số cột bằng nhauĐường chéo chính: chỉ số dòng = chỉ số cộtĐường chéo phụ: chỉ số cột+chỉ số dòng = k/thước - 10,00,51,11,42,22,33,23,34,14,45,05,5Bài tập nhập/xuấtCho ma trận vuông số nguyên kích thước n, viết các hàm:Nhập ma trậnXuất ma trậnXuất các phần tử thuộc đường chéo chínhXuất các phần tử thuộc đường chéo phụBài tập nhập/xuấtCho ma trận vuông số nguyên kích thước n, viết các hàm:Xuất các phần tử thuộc phần tam giác phía dưới của đường chéo chínhBài tập nhập/xuấtCho ma trận vuông số nguyên kích thước n, viết các hàm:Xuất các phần tử thuộc phần tam giác phía trên đường chéo phụBài tậpCho ma trận vuông số nguyên kích thước n, viết các hàm:Nhập ma trận có các phần tử đối xứng qua đường chéo chínhTính tổng các phần tử không thuộc đường chéo chính Tính giá trị trung bình các phần tử thuộc đường chéo phụ Tìm phần tử có giá trị lớn nhất thuộc đường chéo chínhQ&A
Các file đính kèm theo tài liệu này:
- ky_thuat_lap_trinhchuong2_mang2chieu_1738.pptx