Lập trình C++

6 bài tập về mảng cực hay trong C++ có đáp án

Mảng là một cấu trúc dữ liệu rất quan trọng và được sử dụng rộng rãi trong ngôn ngữ C++. Để giúp các bạn hiểu rõ hơn về mảng, Isinhvien sẽ chia sẻ đến các bạn những bài tập về mảng cực hay kèm đáp án chi tiết mà Isinhvien đã tổng hợp và chọn lọc từ nhiều nguồn khác nhau. Trước khi bước vào làm bài tập, hãy chắc rằng bạn đã hiểu được các kiến thức cơ bản về mảng trong C++, nếu chưa thì tham khảo bài viết Tất tần tật về mảng trong C++ của Isinhvien ngay nhé!

bài tập về mảng trong C++

Bài tập mảng 1 chiều trong C++

Dưới đây là 4 bài tập về mảng 1 chiều trong C++ cùng với đáp án vô cùng chi tiết sẽ giúp bạn luyện tập về mảng 1 chiều dễ dàng hơn.

1. Tính tổng, tích và giá trị trung bình của một mảng

Đề bài: Nhập vào số lượng phần tử và giá trị từng phần tử của mảng. In ra màn hình tổng, tích và giá trị trung bình của mảng đó.


Đáp án:

#include<iostream>
using namespace std;

int main()
{
    int n;
    cout << "Nhap so luong phan tu cua mang: ";
    cin >> n;

    int a[n];
    //nhập các phần tử mảng
    for(int i=0; i<n; i++){
         cout << "Nhap vao phan tu a[" << i << "]: ";
         cin >> a[i];
    }
   
    long tong=0, tich=1;
    double tb;

    for(int i=0; i<n; i++){
        tong+=a[i];
        tich*=a[i];
    }
    tb=tong/n;

    cout << "Tong cac phan tu cua mang: " << tong << endl;
    cout << "Tich cac phan tu cua mang: " << tich << endl;
    cout << "Gia tri trung binh cac phan tu cua mang: " << tb << endl;

    return 0;
}

Kết quả thực thi:

Nhap so luong phan tu cua mang: 7
Nhap vao phan tu a[0]: 4
Nhap vao phan tu a[1]: 3
Nhap vao phan tu a[2]: 5
Nhap vao phan tu a[3]: 3
Nhap vao phan tu a[4]: 2
Nhap vao phan tu a[5]: 4
Nhap vao phan tu a[6]: 6
Tong cac phan tu cua mang: 27
Tich cac phan tu cua mang: 8640
Gia tri trung binh cac phan tu cua mang: 3

2. Tìm giá trị lớn nhất và nhỏ nhất của mảng

Đề bài: Nhập vào số lượng phần tử và giá trị từng phần tử của mảng, in ra màn hình giá trị lớn nhất, nhỏ nhất của mảng vừa nhập.


Đáp án:

#include<iostream>
using namespace std;

int main()
{
    int n;
    cout << "Nhap so luong phan tu cua mang: ";
    cin >> n;

    int a[n];
    //nhap cac phan tu mang
    for(int i=0; i<n; i++){
         cout << "Nhap vao phan tu a[" << i << "]: ";
         cin >> a[i];
    }
   
    //khởi tạo 2 biến min max có giá trị ban đầu là a[0]
    int min=a[0], max=a[0];
   
    //Tìm min max
    for(int i=1; i<n; i++){
        if(a[i]>max) max=a[i];
        if(a[i]<min) min=a[i];
    }

    cout << "Gia tri lon nhat cua mang la: " << max << endl;
    cout << "Gia tri nho nhat cua mang la: " << min;
}

Kết quả thực thi:

Nhap so luong phan tu cua mang: 5
Nhap vao phan tu a[0]: 3
Nhap vao phan tu a[1]: 5
Nhap vao phan tu a[2]: 7
Nhap vao phan tu a[3]: 6
Nhap vao phan tu a[4]: 3
Gia tri lon nhat cua mang la: 7
Gia tri nho nhat cua mang la: 3

3. Sắp xếp mảng theo giá trị tăng dần

Đề bài: Nhập vào số phần tử và giá trị từng phần tử của mảng. Sắp xếp mảng trên và in ra màn hình kết quả theo chiều tăng dần.


Đáp án:

#include<iostream>
using namespace std;

void Swap(int *x, int *y)
{ int temp;
  temp=*x;
  *x=*y;
  *y=temp;
}

int main()
{
    int n;
    cout << "Nhap so luong phan tu cua mang: ";
    cin >> n;

    int a[n];
    //nhập các phần tử mảng
    for(int i=0; i<n; i++){
         cout << "Nhap vao phan tu a[" << i << "]: ";
         cin >> a[i];
    }
   
    //sắp xếp mảng
    for(int i = 0; i < n; i++){
        int min=i,j;
        for(int j = i+1; j <= n; j++){
            if(a[j]<a[min]) min=j; //tìm vị trí phần tử nhỏ nhất
        }
        Swap(&a[i],&a[min]); // hoán đổi a[min] với a[i]
    }

    //Xuất mảng
    for(int i=0; i<n; i++){
         cout << a[i] << " ";
    }
}

Kết quả thực thi:

Nhap so luong phan tu cua mang: 5
Nhap vao phan tu a[0]: 6
Nhap vao phan tu a[1]: 5
Nhap vao phan tu a[2]: 3
Nhap vao phan tu a[3]: 4
Nhap vao phan tu a[4]: 2
2 3 4 5 6

Trong bài này, Isinhvien sử dụng phương pháp sắp xếp chọn. Còn rất nhiều phương pháp sắp xếp mảng khác nữa rất thú vị trong C++ nên nếu các bạn muốn tìm hiểu thêm thì hãy tham khảo ngay bài viết Tổng hợp các thuật toán sắp xếp trong C/C++ của Isinhvien nhé!


4. Tìm phần tử có tần suất xuất hiện nhiều nhất trong mảng và xuất hiện bao nhiêu lần

Đề bài: Nhập vào số phần tử và giá trị từng phần tử của mảng. Tìm phần tử có tần suất xuất hiện nhiều nhất trong mảng và xuất hiện bao nhiêu lần, sau đó in ra màn hình

Đáp án

#include<iostream>
using namespace std;

void Swap(int *x, int *y)
{ int temp;
  temp=*x;
  *x=*y;
  *y=temp;
}

int main()
{
    int n;
    cout << "Nhap so luong phan tu cua mang: ";
    cin >> n;

    int a[n];
    //nhập các phần tử mảng
    for(int i=0; i<n; i++){
         cout << "Nhap vao phan tu a[" << i << "]: ";
         cin >> a[i];
    }
   
    //sắp xếp mảng
    for(int i = 0; i < n; i++){
        int min=i,j;
        for(int j = i+1; j <= n; j++){
            if(a[j]<a[min]) min=j; //tìm vị trí phần tử nhỏ nhất
        }
        Swap(&a[i],&a[min]); // hoán đổi a[min] với a[i]
    }
    //khoi tao mang 2 chieu de sap xep tan suat va gia tri
    int mode[n][2];
    for(int i=0;i<2;i++)
    for(int j=0;j<10;j++) mode[j][i]=0;
     mode[0][0]=1;
 
    //tim tan suat
    for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
    if(a[i]==a[j+1]) {++mode[i][0];mode[i][1]=a[i];}
   
    //tim so lan suat hien nhieu nhat
    int max;
    int k=0;
    max=mode[0][0];
    for(int j=0;j<10;j++)
    if(max<mode[j][0]){max=mode[j][0];k=j;}
   
    //in ket qua
    cout<<"Gia tri xuat hien nhieu nhat la:"<<mode[k][1]<<"\n";
    cout<<"Xuat hien "<<max<<" lan.";
}

Kết quả thực thi:


Nhap so luong phan tu cua mang: 10
Nhap vao phan tu a[0]: 3
Nhap vao phan tu a[1]: 2
Nhap vao phan tu a[2]: 32
Nhap vao phan tu a[3]: 143
Nhap vao phan tu a[4]: 24
Nhap vao phan tu a[5]: 32
Nhap vao phan tu a[6]: 2
Nhap vao phan tu a[7]: 3
Nhap vao phan tu a[8]: 2
Nhap vao phan tu a[9]: 2
Gia tri xuat hien nhieu nhat la:2
Xuat hien 4 lan.

Bài tập mảng 2 chiều trong C++

Dưới đây là 1 bài tập về mảng 2 chiều trong C++ (1 bài cơ bản và 1 bài nâng cao) cùng với đáp án vô cùng chi tiết sẽ giúp bạn luyện tập về mảng 2 chiều dễ dàng hơn.

5. Tính tổng 2 ma trận

Đề bài: Nhập vào kích thước và giá trị của từng ma trận. Kiểm tra xem 2 ma trận có cùng kích thước không và in ra màn hình ma trận tổng của 2 ma trận trên.

Đáp án:

#include <iostream>
#include <iomanip>
using namespace std;
 
int main() {
   int i, j, matrix1[100][100], matrix2[100][100], matrix3[100][100];
   int row1, col1, row2, col2;
 
   cout << "Nhap so hang cua matrix1: ";
   cin >> row1;
   cout << "Nhap so cot cua matrix1: ";
   cin >> col1;
 
   cout << "Nhap so hang cua matrix2: ";
   cin >> row2;
   cout << "Nhap so cot cua matrix2: ";
   cin >> col2;
 
   /*
   * Truoc khi nhap cac phan tu, kiem tra xem so hang va so cot
   * cua hai ma tran co bang nhau khong
   */
   if (row1 != row2 || col1 != col2) {
      cout << "\nHai ma tran khong cung kich co!";
      exit(0);
   }
 
   //Nhap cac phan tu cua ma tran 1
   cout<<"\nNhap ma tran 1\n";
   for (i = 0; i < row1; i++) {
      for (j = 0; j < col1; j++) {
         cout<<"Nhap phan tu matrix1["<<i<<"]["<<j<<"]: ";
         cin >> matrix1[i][j];
      }
   }
 
   //Nhap cac phan tu cua ma tran 2
   cout<<"\nNhap ma tran 2\n";
   for (i = 0; i < row2; i++)
      for (j = 0; j < col2; j++) {
         cout<<"Nhap phan tu matrix2["<<i<<"]["<<j<<"]: ";
         cin >> matrix2[i][j];
      }
 
   //cong hai ma tran
   for (i = 0; i < row1; i++)
      for (j = 0; j < col1; j++) {
         matrix3[i][j] = matrix1[i][j] + matrix2[i][j];
      }
 
   //Hien thi ma tran ket qua
   cout<<"\nKet qua cua phep cong hai ma tran la: \n";
   for (i = 0; i < row1; i++) {
      for (j = 0; j < col1; j++) {
         cout<<"\t"<< matrix3[i][j];
      }
     cout<<endl;
   }
 
   return 0;
}

Kết quả thực thi:


  • Nhập kích cỡ không hợp lệ:
hap so hang cua matrix1: 4
Nhap so cot cua matrix1: 4
Nhap so hang cua matrix2: 3
Nhap so cot cua matrix2: 3
Hai ma tran khong cung kich co!
  • Nhập kích cỡ hợp lệ
Nhap so hang cua matrix1: 3
Nhap so cot cua matrix1: 3
Nhap so hang cua matrix2: 3
Nhap so cot cua matrix2: 3
Nhap ma tran 1
Nhap phan tu matrix1[0][0]: 2
Nhap phan tu matrix1[0][1]: 1
Nhap phan tu matrix1[0][2]: 2
Nhap phan tu matrix1[1][0]: 3
Nhap phan tu matrix1[1][1]: 4
Nhap phan tu matrix1[1][2]: 5
Nhap phan tu matrix1[2][0]: 4
Nhap phan tu matrix1[2][1]: 2
Nhap phan tu matrix1[2][2]: 0
Nhap ma tran 2
Nhap phan tu matrix2[0][0]: 2
Nhap phan tu matrix2[0][1]: 4
Nhap phan tu matrix2[0][2]: 5
Nhap phan tu matrix2[1][0]: 3
Nhap phan tu matrix2[1][1]: 4
Nhap phan tu matrix2[1][2]: 5
Nhap phan tu matrix2[2][0]: 3
Nhap phan tu matrix2[2][1]: 4
Nhap phan tu matrix2[2][2]: 5
Ket qua cua phep cong hai ma tran la:
4 5 7
6 8 10
7 6 5

6. Tính định thức của ma trận

Đề bài: Nhập vào kích thước và giá trị các phần tử của ma trận. In ra màn hình định thức của ma trận vừa nhập.


Đáp án:

#include <iostream>
#include <math.h>
using namespace std;

void doidong (double a[10][10], int n, int x ,int y){
    int i;
    for(int i=1 ; i<=n ; i++){
      double  t=a[x][i];
              a[x][i]=a[y][i];
              a[y][i]=t;
    }
}

void tinhdt(double a[10][10],int n){
        double dt=1;
        int dem=0;
        int i,j,k;
        for (int i=1; i<n; i++){
            if(a[i][i]==0) {
                for(int j=i+1; j<=n; j++){
                    if(a[j][i]!=0 && j<=n) {
                    doidong(a,n,i,j);
                    dem++;  break;
                }
                     else if(a[j][i] == 0 && j==n) {
                        dt=0; goto b;
                    }
                }
            }
            for(int j=i+1; j<=n; j++){
                double m=-a[j][i]/a[i][i];
                for(int k=i; k<=n; k++){
                    a[j][k]=a[j][k]+a[i][k]*m;
                }
            }
        }
        for(int i=1; i<=n; i++){
            dt*=a[i][i];
        }
        dt*=pow(-1,dem);
    b:  cout <<"Dinh thuc cua ma tran la: " << dt;
    }
 
int main() {
    double a[10][10];
    int n;

    cout << "Nhap cap cua ma tran: ";
    cin >> n;
   
    cout<<"\nNhap ma tran \n";
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= n; j++) {
         cout<<"Nhap phan tu a["<<i<<"]["<<j<<"]: ";
         cin >> a[i][j];
      }
    }
   
    tinhdt(a,n);
    return 0;
}

Kết quả thực thi:


Nhap cap cua ma tran: 2
Nhap ma tran
Nhap phan tu a[1][1]: 1
Nhap phan tu a[1][2]: 2
Nhap phan tu a[2][1]: 3
Nhap phan tu a[2][2]: 4
Dinh thuc cua ma tran la: -2

Hy vọng những bài tập này sẽ giúp các bạn thành thạo hơn về sử dụng mảng trong C++! Nếu thấy bài viết này của Isinhvien hay và bổ ích thì hãy chia sẻ nó đến với bạn bè của mình để ủng hộ cho Isinhvien và giúp Isinhvien ngày càng phát triển hơn nhé! Chúc các bạn thành công!

Mới nhất cùng chuyên mục

Back to top button
Close