Dưới đây là các bài tập về mảng hai chiều (ma trận) rất phổ biến trong C/ C++, các bạn có thể tham khảo các bài tập về mảng 2 chiều này sẽ giúp ích cho chúng ta luyện tập C/ C++
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
#include<stdio.h>
#include<conio.h>
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<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%d",&a[i][j]);
}
}
printf("ma tran vua nhap la:\n");
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
}
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 viết dưới dạng hàm
#include <stdio.h>
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);
}
Tính tổng các phần tử trong mảng 2 chiều
Thường bài tập này có yêu cầu như sau: 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. Tính tổng các phần tử trong mảng
#include<stdio.h>
#include<conio.h>
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<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%d",&a[i][j]);
}
}
//hien thi ma tran vua nhap duoi dang bang
printf("ma tran vua nhap la:\n");
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
// tinh tong pt tren hang chan cua mang
float s=0;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
s=s+a[i][j];
}
}
printf("\nTong pt cua mang la: %5f",s);
getch();
}
Tìm giá trị lớn nhất/ nhỏ nhất trong mảng 2 chiều
#include <stdio.h>
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));
}
Tìm giá trị theo hàng, cột. Tìm giá trị lớn nhất/nhỏ nhất theo hàng, cột
Thường bài tập này có yêu cầu như sau: 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
Code viết dạng chương trình như sau:
#include<stdio.h>
#include<conio.h>
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<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%d",&a[i][j]);
}
}
//hien thi ma tran vua nhap duoi dang bang
printf("ma tran vua nhap la:\n");
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
// tinh tong pt tren hang chan cua mang
float s=0;
for(i=0;i<n;i=i+2)
{
for(j=0;j<m;j++)
{
s=s+a[i][j];
}
}
printf("\nTong pt tren hang chan cua mang la: %5f",s);
// tim max tren cot 1 cua mang
int max;
max=a[0][0];
for(i=1;i<n;i++)
{
if(a[i][0]>max)
{
max=a[i][0];
}
}
printf("\nGia tri max tren cot 1 cua mang la %5d",max);
getch();
}
Tính tổng 2 ma trận có cùng kích thước
#include<stdio.h>
#include<conio.h>
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 1:\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
printf("nhap vao ma tran 2:\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&b[i][j]);
}
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
c[i][j]=a[i][j]+b[i][j];
}
}
printf("\nMa tran sau cong:\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%5d",c[i][j]);
}
printf("\n");
}
getch();
}
Sắp xếp ma trận tăng/ giảm dần
Yêu cầu thường phát biểu như sau: 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 1 hàng, 1 cột, …
Ví dụ sau sắp xếp hàng 2 theo chiều giảm dần
#include<stdio.h>
#include<conio.h>
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<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%d",&a[i][j]);
}
}
// in ra ma tran vua nhap duoi dang bang
printf("ma tran vua nhap la:\n");
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
//sap xep hang 2 trong mang theo chieu giam dan
int tg,k;
for(j=0;j<m-1;j++)
{
for(k=j+1;k<m;k++)
{
if(a[1][j]<a[1][k])
{
tg=a[1][j];
a[1][j]=a[1][k];
a[1][k]=tg;
}
}
}
printf("\nma tran vua sap xep hang 2 la\n");
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
getch();
}
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;
}
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
#include<stdio.h>
#include<conio.h>
#include<math.h>
int SoNguyenTo(int soA)
{
if (soA < 2)
{
return 0;
}
else
{
for (int i = 2; i <= sqrt((float)soA); i ++)
{
if (soA%i==0)
{
return 0;
}
}
}
return 1;
}
int DemSoLuongSNT(int a[][50], 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[][50], 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]);
}
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<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%d",&a[i][j]);
}
}
// in ra ma tran vua nhap duoi dang bang
printf("ma tran vua nhap la:\n");
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
printf("Cac so nguyen to:\n");
LietKeSNT(a,n,m);
getch();
}
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<m-1;i++)
for(int j=0;j<n;j++)
a[i][j]=a[i+1][j];
m--;
}
void XoaCot(int a[][100], int m, int &n, int c)
{
for(int i=0;i<m;i++)
for(int j=c;j<n-1;j++)
a[i][j]=a[i][j+1];
n--;
}
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<m)&&(row2>=0 && row2<m))
for(int j=0;j<n;j++)
swap(a[row1][j],a[row2][j]);
}
void DoiChoHaiCot(int a[][100], int m, int n, int column1, int column2)
{
if((column1>=0 && column1<n)&&(column2>=0 && column2<n))
for(int i=0;i<m;i++)
swap(a[i][column1],a[i][column2]);
}
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.
//Tìm max
int Max(int a[][100], int n)
{
int max = a[0][0];
for(int i = 1; i < n; i++)
if(a[i][i] > max)
max = a[i][i];
return max;
}
//Tìm min
int Min(int a[][100], int n)
{
int min = a[0][0];
for(int i = 1; i < n; i++)
if(a[i][i] < min)
min = a[i][i];
return min;
}
ở cuối trang, hay nút màu XANH
ở gần giữa trang, coi chừng nhầm nút