Chuỗi 100 toán đề tự luyện trong 50 ngày

Trong bài này, Nguyễn Văn Hiếu sẽ cung cấp cho các bạn loạt bài tập mảng 2 chiều có lời giải. Tôi mong rằng bài chia sẻ này giúp các bạn có thể tập luyện và học tốt hơn về phần kiến thức mảng hai chiều. Không dài dòng nữa, chúng ta sẽ bắt đầu với loạt bài tập này ngay thôi nào.

Nội dung bài viết này yêu cầu người đọc cần có kiến thức về mảng 2 chiều trong C/C++. Do đó, nếu bạn cần bổ sung kiến thức thì hãy đọc bài học Mảng 2 chiều trong C/C++ trước khi đọc bài này nhé.

NỘI DUNG BÀI VIẾT

Nhập xuất là bài tập mảng 2 chiều cơ bản nhất mà chúng ta cần phải làm. Mọi bài toán liên quan tới mảng 2 chiều chúng ta đều cần 2 chức năng này.

BT1. Nhập vào mảng 2 chiều có kích thước m x n. Hiển thị ma trận vừa nhập ra màn hình.

Lời giải:

include

include

main() {

int a[50][50];  
int i,j,m,n;  
printf("nhap so hang n="); scanf("%d",&n);  
printf("nhap so cot m="); scanf("%d",&m);  
printf("nhap vao ma tran:\n");  
for(i=0;i
}


BT2. Viết hàm nhập, xuất 1 ma trận kích thước m x n

Lời giải:

include

void NhapMaTran(int a[][100], int m, int n) { for(int i = 0; i < m; i++)

  for(int j = 0; j < n; j++)  
  {  
     printf("A[%d][%d] = ", i, j);  
     scanf("%d", &a[i][j]);  
  }  
} void XuatMaTran(int a[][100], int m, int n) { for(int i = 0; i < m; i++) {
  for(int j = 0; j < n; j++)  
     printf("%d\t", a[i][j]);  
  printf("\n");  
} } int main(){
int a[100][100];  
int m,n;  
printf("nhap so hang n = "); scanf("%d",&n);  
printf("nhap so cot m = "); scanf("%d",&m);  
printf("nhap vao ma tran:\n");  
NhapMaTran(a, m , n);  
XuatMaTran(a, m, n);  
}

Dạng 2. Tìm giá trị lớn nhất/ nhỏ nhất trong mảng 2 chiều

Đây là dạng bài tập mảng 2 chiều cơ bản nhất giúp các bạn luyện tập kiến thức, các bạn khi đã hiểu mảng 2 chiều thì hoàn toán có thể áp dụng các kiến thức từ bài tập mảng 1 chiều để dùng cho mảng 2 chiều.

BT3. Nhập vào một ma trận n x m, in ra ma trận vừa nhập dưới dạng bảng. Hiển thị và tính tổng các phần tử trên hàng chẵn của ma trận. Tìm giá trị lớn nhất trên cột 1 của ma trận

Lời giải:

include

include

main() {

int a[50][50];  
int i,j,m,n;  
printf("nhap so hang n="); scanf("%d",&n);  
printf("nhap so cot m="); scanf("%d",&m);  
printf("nhap vao ma tran:\n");  
for(i=0;i
//hien thi ma tran vua nhap duoi dang bang
printf("ma tran vua nhap la:\n");  
for(i=0;i
// tinh tong pt tren hang chan cua mang
float s=0;  
for(i=0;i
// tim max tren cot 1 cua mang
int max;  
max=a[0][0];  
for(i=1;imax)  
    {  
        max=a[i][0];  
    }  
}  
printf("\nGia tri max tren cot 1 cua mang la %5d",max);  
getch();  
}


BT4. Viết hàm tìm giá trị lớn nhất, nhỏ nhất trong ma trận

Lời giải:

include

void NhapMaTran(int a[][100], int m, int n) { for(int i = 0; i < m; i++)

  for(int j = 0; j < n; j++)  
  {  
     printf("A[%d][%d] = ", i, j);  
     scanf("%d", &a[i][j]);  
  }  
} void XuatMaTran(int a[][100], int m, int n) { for(int i = 0; i < m; i++) {
  for(int j = 0; j < n; j++)  
     printf("%d\t", a[i][j]);  
  printf("\n");  
} } int PhanTuLonNhat(int a[][100], int m, int n) { int max = a[0][0]; for(int i = 0; i < m; i++)
  for(int j = 0; j < n; j++)  
     if(a[i][j]>max)  
        max = a[i][j];  
return max; } int main(){
int a[100][100];  
int m,n;  
printf("nhap so hang n = "); scanf("%d",&n);  
printf("nhap so cot m = "); scanf("%d",&m);  
printf("nhap vao ma tran:\n");  
NhapMaTran(a, m , n);  
XuatMaTran(a, m, n);  
printf("\nPhan tu lon nhat la %d", PhanTuLonNhat(a, m, n));  
}

Dạng 3. Tính tổng 2 ma trận có cùng kích thước

BT5. Tính tổng hai ma trận có cùng kích thước.

Lời giải:

include

include

main() {

int a[10][10],b[10][10],c[10][10];  
int i,j,m,n;  
printf("nhap so hang m="); scanf("%d",&m);  
printf("nhap so cot n="); scanf("%d",&n);  
printf("nhap vao ma tran:\n");  
for(i=0;i
}

Dạng 4. Sắp xếp ma trận tăng/ giảm dần

Dạng bài tập mảng 2 chiều: sắp xếp mảng, sắp xếp 1 hàng, 1 cột, …

BT6. Nhập vào một ma trận n x m, in ra ma trận vừa nhập dưới dạng bảng. Sắp xếp hàng 2 theo chiều giá trị các phần tử giảm dần. Đưa ra màn hình tổng các phần tử trong ma trận. Tìm giá trị lớn nhất trong mảng. Tìm giá trị nhỏ nhất chia hết cho 3 có trong mảng.

Lời giải:

include

include

main() {

int a[50][50];  
int m,n,i,j;  
printf("nhap so hang n="); scanf("%d",&n);  
printf("nhap so cot m="); scanf("%d",&m);  
printf("nhap vao ma tran:\n");  
for(i=0;i
// in ra ma tran vua nhap duoi dang bang
printf("ma tran vua nhap la:\n");  
for(i=0;i
//sap xep hang 2 trong mang theo chieu giam dan
int tg,k;  
for(j=0;j
// Dua ra man hinh tong cac phan tu ma tran
int s=0;  
for(i=0;i
// gia tri nho nhat chia het cho 3 trong mang
int min, kt=0;  
for(i=0;i
}

Một số bài tập mảng 2 chiều khác

Bắt đầu ở đây, để cho ngắn gọn bài viết. Mình sẽ chỉ đưa ra hàm con giải quyết phần đề bài của bài tập mảng 2 chiều tương ứng. Các bạn sẽ tự thêm nó vào hàm main nhé. Mẫu code sử dụng hàm có thể xem ở BT2 và BT4.

BT7. Viết hàm tính tổng các số chẵn trong ma trận

int TongCacSoChan(int a[][100], int m, int n) { int sum = 0; for(int i = 0; i < m; i++)

  for(int j = 0; j < n; j++)  
     if(a[i][j]%2==0)  
        sum += a[i][j];  
return sum; }


BT8. Viết hàm liệt kê các số nguyên tố trong ma trận, đếm các số nguyên tố có trong ma trận

bool SoNguyenTo(int soA) {

if (soA < 2)  
{  
    return false;  
}  
else  
{  
    for (int i = 2; i <= sqrt((float)soA); i ++)  
    {  
        if (soA%i==0)  
        {  
            return false;  
        }  
    }  
}  
return true;  
} int DemSoLuongSNT(int a[][100], int m, int n) { int dem = 0; for(int i = 0; i < m; i++)
  for(int j = 0; j < n; j++)  
     if(SoNguyenTo(a[i][j])) dem++;  
return dem; } void LietKeSNT(int a[][100], int m, int n) { int dem = 0; for(int i = 0; i < m; i++)
  for(int j = 0; j < n; j++)  
     if(SoNguyenTo(a[i][j])) printf("%d\t", a[i][j]);  
}


BT9. Viết hàm xóa một dòng của ma trận. Viết hàm xóa một cột của ma trận

void XoaDong(int a[][100], int &m, int n, int r) { for(int i=r;i for(int j=0;j m--; } void XoaCot(int a[][100], int m, int &n, int c) { for(int i=0;i for(int j=c;j n--; }


BT10. Viết hàm đổi chỗ 2 hàng của 1 ma trận. Viết hàm đổi chỗ 2 cột của ma trận.

void swap(int &a, int &b) {    int temp = a;    a = b;    b = temp; } void DoiCho2Hang(int a[][100], int m, int n, int row1, int row2) {    if((row1>=0 && row1=0 && row2=0 && column1=0 && column2


BT12. Viết hàm tìm giá trị lớn nhất/ nhỏ nhất trên đường chéo chính của ma trận.

include

void NhapMaTran(int a[][100], int m, int n) { for(int i = 0; i < m; i++)

  for(int j = 0; j < n; j++)  
  {  
     printf("A[%d][%d] = ", i, j);  
     scanf("%d", &a[i][j]);  
  }  
} void XuatMaTran(int a[][100], int m, int n) { for(int i = 0; i < m; i++) {
  for(int j = 0; j < n; j++)  
     printf("%d\t", a[i][j]);  
  printf("\n");  
} } int main(){
int a[100][100];  
int m,n;  
printf("nhap so hang n = "); scanf("%d",&n);  
printf("nhap so cot m = "); scanf("%d",&m);  
printf("nhap vao ma tran:\n");  
NhapMaTran(a, m , n);  
XuatMaTran(a, m, n);  
}

0

Trên đây là một số bài tập mảng 2 chiều do mình tổng hợp lại. Mình sẽ tiếp tục cập nhật các bài tập về mảng 2 chiều tại bài viết này khi có bài tập mới. Chúc các bạn học tập tốt!

Xem ngay bộ sưu tập tài liệu lập trình do Lập trình không khó biên soạn: https://github.com/NguyenVanHieuBlog/tai-lieu-lap-trinh