SlideShare a Scribd company logo
C Ngôn ngữ lập trình số 1 thế giới
Giảng viên: Th.S Dương Thành Phết
Email: phetcm@gmail.com
Website: http://www.thayphet.net
Mobile: 0918158670
MẢNG HAI CHIỀU
Bài giảng:
KỸ THUẬT LẬP TRÌNH
KHOA CÔNG NGHỆ THÔNG TIN
Bài 2:
Bài 2: Mảng hai chiều - http://www.thayphet.net
MỤC TIÊU
 Trình bày được các khái niệm cơ bả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;
 Thực hiện được các giải thuật trên mảng 2 chiều như
tìm kiếm, sắp xếp, thêm phần tử, xóa phần tử...
2
Bài 2: Mảng hai chiều - http://www.thayphet.net
NỘI DUNG
1. Khái niệm mảng 2 chiều
2. Khia báo mảng 2 chiều
3. Nhập dữ liệu cho mảng 2 chiều
4. Xuất dữ liệu cho mảng 2 chiều
5. Một vài thuật toán trên mảng 2 chiều
6. Ma trận vuông
7. Bài tập
3
Bài 2: Mảng hai chiều - http://www.thayphet.net
2.1. KHÁI NIỆM MẢNG 2 CHIỀU
 Mảng là một dãy liên tiếp các phần tử, có cùng một kiểu
dữ liệu.
 Kích thước của mảng là số phần tử của mảng.
 Mảng nhiều chiều là mảng có từ 2 chiều trở lên. Điều
đó có nghĩa là mỗi phần tử của mảng là một mảng.
 Sử dụng mảng nhiều chiều để lưu các ma trận, các tọa
độ 2 chiều, 3 chiều…
4
Bài 2: Mảng hai chiều - http://www.thayphet.net
5
2.2. CÁCH KHAI BÁO MẢNG HAI CHIỀU
Cú pháp:
<kiểu cơ sở> <tên mảng> [<số dòng >] [<số cột >]
 Tên mảng: Được đặt đúng theo quy tắc đặt tên định danh.
 Số dòng: là một hằng số nguyên, cho biết số lượng dòng tối đa
 Số cột: là một hằng số nguyên, cho biết số lượng cột tối đa
 Số phần tử: số dòng nhân số cột .5.
 Kiểu cơ sở : là kiểu dữ liệu của mỗi phần tử của mảng.
int sn [8][14]; //8 dòng, 14 cột số nguyên
float st [10][5]; //10 dòng, 5 cột số thực
char str[12][30]; //12 dòng, 30 cột ký tự
Bài 2: Mảng hai chiều - http://www.thayphet.net
6
2.2. CÁCH KHAI BÁO MẢNG HAI CHIỀU
Truy cập vào các phần tử của mảng 2 chiều:
<Tên biến mảng>[<Chỉ số dòng>] [<Chỉ số cột>]
Cho mảng a [4][8]  Mảng gồm 4 x 8= 32 phần tử
Bài 2: Mảng hai chiều - http://www.thayphet.net
7
2.3. NHẬP DỮ LIỆU CHO MẢNG HAI CHIỀU
Nhập dữ liệu cho mảng hai chiều các số nguyên
Khai báo hằng:
#define m 30 // m là số dòng
#define n 30 // n là số cột
Khai báo mảng 2 chiều các số nguyên:
int a [ m ][ n ];
Bài 2: Mảng hai chiều - http://www.thayphet.net
8
2.3. NHẬP DỮ LIỆU CHO MẢNG HAI CHIỀU
Hàm nhập mảng 2 chiều các số nguyên gồm m dòng n cột:
void Nhapmatran(int a[][],int m, int n)
{
for ( int i =0 ; i<m ; i++)
{
for ( int j=0; j< n ; j++)
{
printf ( “ Nhap a[%d][%d] : “ , i ,j ) ;
scanf ( “ %d ”, & a[i][j] );
}
}
}
Bài 2: Mảng hai chiều - http://www.thayphet.net
9
2.4. XUẤT DỮ LIỆU CHO MẢNG HAI CHIỀU
Hàm xuất mảng 2 chiều các số nguyên gồm m dòng n cột:
void Xuatmatran(int a[][],int m, int n)
{
for ( int i =0 ; i<m ; i++)
{
for ( int j=0; j< n ; j++)
printf ( “%3d“ ,a[i][j]) ;
printf("n");
}
}
Bài 2: Mảng hai chiều - http://www.thayphet.net
10
2.5. MỘT SỐ THUẬT TOÁN TRÊN MẢNG 2 CHIỀU
 Tính tổng các phần tử trong mảng hai chiều:
long Tinhtong ( int a[ ][] , int m, int n )
{ long s =0 ;
for ( int i = 0 ; i<m ; i++ )
for ( int j=0; j< n ; j++ )
s=s+ a[i][j] ;
return s;
}
Bài 2: Mảng hai chiều - http://www.thayphet.net
11
2.5. MỘT SỐ THUẬT TOÁN TRÊN MẢNG 2 CHIỀU
 Tính tổng các phần tử chẵn trong mảng hai chiều.
long Tinhtongchan ( int a[ ][] , int m, int n )
{ long s =0 ;
for ( int i = 0 ; i<m ; i++ )
for ( int j=0; j< n ; j++ )
if ( a[i][j] % 2 == 0 )
s=s+ a[i][j] ;
return s;
}
Bài 2: Mảng hai chiều - http://www.thayphet.net
12
2.5. MỘT SỐ THUẬT TOÁN TRÊN MẢNG 2 CHIỀU
 Xóa dòng trong mảng hai chiều.
void Xoadong ( int a[ ][] , int &m, int n, int vtdong)
{
for(int i=vtdong;i<m;i++)
for(int j = 0 ; j < n ; j++)
a[i][j]=a[i+1][j];
m--;
}
Bài 2: Mảng hai chiều - http://www.thayphet.net
13
2.5. MỘT SỐ THUẬT TOÁN TRÊN MẢNG 2 CHIỀU
 Xóa cột trong mảng hai chiều.
void Xoacot( int a[ ][] , int m, int &n, int vtcot)
{
for(int i=0;i<m;i++)
for(int j = vtcot; j < n ; j++)
a[i][j]=a[i][j+1];
n--;
}
Bài 2: Mảng hai chiều - http://www.thayphet.net
14
2.6. MA TRẬN VUÔNG
 Là mảng 2 chiều có: Số dòng = Số cột
 Đường chéo chính của ma trận vuông:
chỉ số dòng = chỉ số cột
 Đường chéo phụ của ma trận vuông:
chỉ số cột + chỉ số dòng = kích thước - 1
Chéo chính
Chéo phụ
Bài 2: Mảng hai chiều - http://www.thayphet.net
15
2.6. MA TRẬN VUÔNG
 Nhập ma trận vuông:
void Nhapmatranvuong(int a[][],int n)
{
for ( int i =0 ; i<n ; i++)
{
for ( int j=0; j<n ; j++)
{
printf ( “ Nhap a[%d][%d]:“ ,i,j);
scanf ( “ %d ”, & a[i][j] );
}
}
}
Bài 2: Mảng hai chiều - http://www.thayphet.net
16
2.6. MA TRẬN VUÔNG
 Xuất ma trận vuông:
void Xuatmtranvuong(int a[][],int n)
{
for ( int i =0 ; i<n ; i++)
{
for ( int j=0; j<n ; j++)
printf ( “%3d:“ a[i][j]);
printf(“n”);
}
}
Bài 2: Mảng hai chiều - http://www.thayphet.net
17
2.6. MA TRẬN VUÔNG
 Xuất các phần tử của đường chéo chính:
void Xuatcheochinh(int a[][],int n)
{
for ( int i =0 ; i<n ; i++)
printf ( “%3d:“ a[i][i]);
}
Bài 2: Mảng hai chiều - http://www.thayphet.net
18
2.6. MA TRẬN VUÔNG
 Tổng giá trị các phần tử ở đường chéo phụ:
long Tongcheophu(int a[][],int n)
{
long s=0;
for ( int i =0 ; i<n ; i++)
s=s+a[i][n-1];
return s;
}
Bài 2: Mảng hai chiều - http://www.thayphet.net
19
2.7. BÀI TẬP
Bài tập 1.
1. Viết hàm nhập vào một mảng hai chiều các số nguyên
gồm m dòng, n cột (0<m,n<100) .
2. Viết hàm xuất mảng hai chiều các số nguyên mxn
phần tử vừa nhập ở trên.
3. Tính tổng các phần tử có trong mảng .
4. Tính tổng các phần tử chẵn có trong mảng .
5. Tính tổng các phần tử nguyên tố có trong mảng .
6. Sắp xếp mảng tăng dần
Bài 2: Mảng hai chiều - http://www.thayphet.net
20
2.7. BÀI TẬP
Bài tập 2.
1. Viết hàm nhập vào một mảng hai chiều các số thực
gồm m dòng, n cột (0<m,n<100) .
2. Viết hàm xuất mảng hai chiều các số thực mxn phần
tử vừa nhập ở trên.
3. Tính tổng các phần tử nằm trên đường biên mảng .
4. In ra vị trí của phần tử lớn nhất đầu tiên
5. Tính tổng các phần tử nằm trên một dòng .
6. Tìm dòng có tổng lớn nhất
7. Xoá dòng
8. Xoá cột
9. Xoay mảng về trái, phải
Bài 2: Mảng hai chiều - http://www.thayphet.net
21
2.7. BÀI TẬP
Bài tập 3.
1. Viết hàm nhập vào một ma trận vuộng cấp n:
2. Viết hàm xuất ma trận vuông vừa nhập ở trên.
3. Tính tổng các phần tử nằm trên đường chéo chính có.
4. Tính tổng các phần tử nằm trên đường chéo phụ có.
5. Tìm phần tử nguyên tố đầu tiên
6. Tìm phần tử chẵn cuối cùng
7. Tìm phần tử chính phương cuối cùng
C Ngôn ngữ lập trình số 1 thế giới
MẢNG HAI CHIỀU
Bài giảng:
KỸ THUẬT LẬP TRÌNH
KHOA CÔNG NGHỆ THÔNG TIN
HẾT BÀI 2

More Related Content

PDF
Nmlt c08 mang2_chieu_in
PPT
Nmlt c08 mang2_chieu
DOCX
Bài tập thực hành số 1
PDF
01.Bai1.Mang1Chieu-cac-bai-tap-mang-mot-chieu.pdf
PPT
PDF
Nmlt c07 mang1_chieu_in
PPT
Nmlt C08 Mang2 Chieu
PDF
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Nmlt c08 mang2_chieu_in
Nmlt c08 mang2_chieu
Bài tập thực hành số 1
01.Bai1.Mang1Chieu-cac-bai-tap-mang-mot-chieu.pdf
Nmlt c07 mang1_chieu_in
Nmlt C08 Mang2 Chieu
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules

Similar to bai giang mang mot chieu trong lap trinh C (20)

PDF
HÀM_NoCoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapy.pdf
PDF
PPTX
NMLT_C07_Mang1Chieu.pptx
DOCX
Bai tap c.doc (đã phục hồi)
PDF
Bài tập CTDL và GT 1
PPT
Nmlt C07 Mang1 Chieu
PDF
Session 4
PDF
Chuan viet code va thiet ke giao dien trong C#
PDF
Nmlt c15 ham_nangcao_phan2_in
PPT
Nmlt c07 mang1_chieu
DOC
Chuong 1
PPTX
Lớp 11 --chương 4 -- bài 11 --Kiểu mảng
DOC
Bài tập CTDL và GT 4
PDF
ky-thuat-lap-trinh__chuong4_mang-mot-chieu - [cuuduongthancong.com].pdf
PDF
Bai thi Nghiem ky thuat dien tu
PPT
Chapter04_Array_chinhsua
DOC
De kiem tra 1 tiet tin 7
PDF
matlab co ban
PDF
Lap trinh matlab_co_ban_1731
PDF
Nmlt c06 ham_in
HÀM_NoCoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapy.pdf
NMLT_C07_Mang1Chieu.pptx
Bai tap c.doc (đã phục hồi)
Bài tập CTDL và GT 1
Nmlt C07 Mang1 Chieu
Session 4
Chuan viet code va thiet ke giao dien trong C#
Nmlt c15 ham_nangcao_phan2_in
Nmlt c07 mang1_chieu
Chuong 1
Lớp 11 --chương 4 -- bài 11 --Kiểu mảng
Bài tập CTDL và GT 4
ky-thuat-lap-trinh__chuong4_mang-mot-chieu - [cuuduongthancong.com].pdf
Bai thi Nghiem ky thuat dien tu
Chapter04_Array_chinhsua
De kiem tra 1 tiet tin 7
matlab co ban
Lap trinh matlab_co_ban_1731
Nmlt c06 ham_in
Ad

bai giang mang mot chieu trong lap trinh C

  • 1. C Ngôn ngữ lập trình số 1 thế giới Giảng viên: Th.S Dương Thành Phết Email: phetcm@gmail.com Website: http://www.thayphet.net Mobile: 0918158670 MẢNG HAI CHIỀU Bài giảng: KỸ THUẬT LẬP TRÌNH KHOA CÔNG NGHỆ THÔNG TIN Bài 2:
  • 2. Bài 2: Mảng hai chiều - http://www.thayphet.net MỤC TIÊU  Trình bày được các khái niệm cơ bả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;  Thực hiện được các giải thuật trên mảng 2 chiều như tìm kiếm, sắp xếp, thêm phần tử, xóa phần tử... 2
  • 3. Bài 2: Mảng hai chiều - http://www.thayphet.net NỘI DUNG 1. Khái niệm mảng 2 chiều 2. Khia báo mảng 2 chiều 3. Nhập dữ liệu cho mảng 2 chiều 4. Xuất dữ liệu cho mảng 2 chiều 5. Một vài thuật toán trên mảng 2 chiều 6. Ma trận vuông 7. Bài tập 3
  • 4. Bài 2: Mảng hai chiều - http://www.thayphet.net 2.1. KHÁI NIỆM MẢNG 2 CHIỀU  Mảng là một dãy liên tiếp các phần tử, có cùng một kiểu dữ liệu.  Kích thước của mảng là số phần tử của mảng.  Mảng nhiều chiều là mảng có từ 2 chiều trở lên. Điều đó có nghĩa là mỗi phần tử của mảng là một mảng.  Sử dụng mảng nhiều chiều để lưu các ma trận, các tọa độ 2 chiều, 3 chiều… 4
  • 5. Bài 2: Mảng hai chiều - http://www.thayphet.net 5 2.2. CÁCH KHAI BÁO MẢNG HAI CHIỀU Cú pháp: <kiểu cơ sở> <tên mảng> [<số dòng >] [<số cột >]  Tên mảng: Được đặt đúng theo quy tắc đặt tên định danh.  Số dòng: là một hằng số nguyên, cho biết số lượng dòng tối đa  Số cột: là một hằng số nguyên, cho biết số lượng cột tối đa  Số phần tử: số dòng nhân số cột .5.  Kiểu cơ sở : là kiểu dữ liệu của mỗi phần tử của mảng. int sn [8][14]; //8 dòng, 14 cột số nguyên float st [10][5]; //10 dòng, 5 cột số thực char str[12][30]; //12 dòng, 30 cột ký tự
  • 6. Bài 2: Mảng hai chiều - http://www.thayphet.net 6 2.2. CÁCH KHAI BÁO MẢNG HAI CHIỀU Truy cập vào các phần tử của mảng 2 chiều: <Tên biến mảng>[<Chỉ số dòng>] [<Chỉ số cột>] Cho mảng a [4][8]  Mảng gồm 4 x 8= 32 phần tử
  • 7. Bài 2: Mảng hai chiều - http://www.thayphet.net 7 2.3. NHẬP DỮ LIỆU CHO MẢNG HAI CHIỀU Nhập dữ liệu cho mảng hai chiều các số nguyên Khai báo hằng: #define m 30 // m là số dòng #define n 30 // n là số cột Khai báo mảng 2 chiều các số nguyên: int a [ m ][ n ];
  • 8. Bài 2: Mảng hai chiều - http://www.thayphet.net 8 2.3. NHẬP DỮ LIỆU CHO MẢNG HAI CHIỀU Hàm nhập mảng 2 chiều các số nguyên gồm m dòng n cột: void Nhapmatran(int a[][],int m, int n) { for ( int i =0 ; i<m ; i++) { for ( int j=0; j< n ; j++) { printf ( “ Nhap a[%d][%d] : “ , i ,j ) ; scanf ( “ %d ”, & a[i][j] ); } } }
  • 9. Bài 2: Mảng hai chiều - http://www.thayphet.net 9 2.4. XUẤT DỮ LIỆU CHO MẢNG HAI CHIỀU Hàm xuất mảng 2 chiều các số nguyên gồm m dòng n cột: void Xuatmatran(int a[][],int m, int n) { for ( int i =0 ; i<m ; i++) { for ( int j=0; j< n ; j++) printf ( “%3d“ ,a[i][j]) ; printf("n"); } }
  • 10. Bài 2: Mảng hai chiều - http://www.thayphet.net 10 2.5. MỘT SỐ THUẬT TOÁN TRÊN MẢNG 2 CHIỀU  Tính tổng các phần tử trong mảng hai chiều: long Tinhtong ( int a[ ][] , int m, int n ) { long s =0 ; for ( int i = 0 ; i<m ; i++ ) for ( int j=0; j< n ; j++ ) s=s+ a[i][j] ; return s; }
  • 11. Bài 2: Mảng hai chiều - http://www.thayphet.net 11 2.5. MỘT SỐ THUẬT TOÁN TRÊN MẢNG 2 CHIỀU  Tính tổng các phần tử chẵn trong mảng hai chiều. long Tinhtongchan ( int a[ ][] , int m, int n ) { long s =0 ; for ( int i = 0 ; i<m ; i++ ) for ( int j=0; j< n ; j++ ) if ( a[i][j] % 2 == 0 ) s=s+ a[i][j] ; return s; }
  • 12. Bài 2: Mảng hai chiều - http://www.thayphet.net 12 2.5. MỘT SỐ THUẬT TOÁN TRÊN MẢNG 2 CHIỀU  Xóa dòng trong mảng hai chiều. void Xoadong ( int a[ ][] , int &m, int n, int vtdong) { for(int i=vtdong;i<m;i++) for(int j = 0 ; j < n ; j++) a[i][j]=a[i+1][j]; m--; }
  • 13. Bài 2: Mảng hai chiều - http://www.thayphet.net 13 2.5. MỘT SỐ THUẬT TOÁN TRÊN MẢNG 2 CHIỀU  Xóa cột trong mảng hai chiều. void Xoacot( int a[ ][] , int m, int &n, int vtcot) { for(int i=0;i<m;i++) for(int j = vtcot; j < n ; j++) a[i][j]=a[i][j+1]; n--; }
  • 14. Bài 2: Mảng hai chiều - http://www.thayphet.net 14 2.6. MA TRẬN VUÔNG  Là mảng 2 chiều có: Số dòng = Số cột  Đường chéo chính của ma trận vuông: chỉ số dòng = chỉ số cột  Đường chéo phụ của ma trận vuông: chỉ số cột + chỉ số dòng = kích thước - 1 Chéo chính Chéo phụ
  • 15. Bài 2: Mảng hai chiều - http://www.thayphet.net 15 2.6. MA TRẬN VUÔNG  Nhập ma trận vuông: void Nhapmatranvuong(int a[][],int n) { for ( int i =0 ; i<n ; i++) { for ( int j=0; j<n ; j++) { printf ( “ Nhap a[%d][%d]:“ ,i,j); scanf ( “ %d ”, & a[i][j] ); } } }
  • 16. Bài 2: Mảng hai chiều - http://www.thayphet.net 16 2.6. MA TRẬN VUÔNG  Xuất ma trận vuông: void Xuatmtranvuong(int a[][],int n) { for ( int i =0 ; i<n ; i++) { for ( int j=0; j<n ; j++) printf ( “%3d:“ a[i][j]); printf(“n”); } }
  • 17. Bài 2: Mảng hai chiều - http://www.thayphet.net 17 2.6. MA TRẬN VUÔNG  Xuất các phần tử của đường chéo chính: void Xuatcheochinh(int a[][],int n) { for ( int i =0 ; i<n ; i++) printf ( “%3d:“ a[i][i]); }
  • 18. Bài 2: Mảng hai chiều - http://www.thayphet.net 18 2.6. MA TRẬN VUÔNG  Tổng giá trị các phần tử ở đường chéo phụ: long Tongcheophu(int a[][],int n) { long s=0; for ( int i =0 ; i<n ; i++) s=s+a[i][n-1]; return s; }
  • 19. Bài 2: Mảng hai chiều - http://www.thayphet.net 19 2.7. BÀI TẬP Bài tập 1. 1. Viết hàm nhập vào một mảng hai chiều các số nguyên gồm m dòng, n cột (0<m,n<100) . 2. Viết hàm xuất mảng hai chiều các số nguyên mxn phần tử vừa nhập ở trên. 3. Tính tổng các phần tử có trong mảng . 4. Tính tổng các phần tử chẵn có trong mảng . 5. Tính tổng các phần tử nguyên tố có trong mảng . 6. Sắp xếp mảng tăng dần
  • 20. Bài 2: Mảng hai chiều - http://www.thayphet.net 20 2.7. BÀI TẬP Bài tập 2. 1. Viết hàm nhập vào một mảng hai chiều các số thực gồm m dòng, n cột (0<m,n<100) . 2. Viết hàm xuất mảng hai chiều các số thực mxn phần tử vừa nhập ở trên. 3. Tính tổng các phần tử nằm trên đường biên mảng . 4. In ra vị trí của phần tử lớn nhất đầu tiên 5. Tính tổng các phần tử nằm trên một dòng . 6. Tìm dòng có tổng lớn nhất 7. Xoá dòng 8. Xoá cột 9. Xoay mảng về trái, phải
  • 21. Bài 2: Mảng hai chiều - http://www.thayphet.net 21 2.7. BÀI TẬP Bài tập 3. 1. Viết hàm nhập vào một ma trận vuộng cấp n: 2. Viết hàm xuất ma trận vuông vừa nhập ở trên. 3. Tính tổng các phần tử nằm trên đường chéo chính có. 4. Tính tổng các phần tử nằm trên đường chéo phụ có. 5. Tìm phần tử nguyên tố đầu tiên 6. Tìm phần tử chẵn cuối cùng 7. Tìm phần tử chính phương cuối cùng
  • 22. C Ngôn ngữ lập trình số 1 thế giới MẢNG HAI CHIỀU Bài giảng: KỸ THUẬT LẬP TRÌNH KHOA CÔNG NGHỆ THÔNG TIN HẾT BÀI 2