Bài tập ôn 

I) Mảng 1 chiều 

1) Viết chương trình nhập , xuất mảng 1 chiều 

#include <iostream>

using namespace std;

const int MAX = 100; // số phần tử tối đa trong mảng

void NhapMang(int a[], int n) {

    for (int i = 0; i < n; i++) {

        cout << "Nhap phan tu a[" << i << "]: ";

        cin >> a[i];

    }

}

void XuatMang(int a[], int n) {

    for (int i = 0; i < n; i++) {

        cout << a[i] << " ";

    }

    cout << endl;

}

int main() {

    int n;

    int a[MAX];

    cout << "Nhap so phan tu cua mang: ";

    cin >> n;

    NhapMang(a, n);

    cout << "Mang vua nhap la: ";

    XuatMang(a, n);

    return 0;

}


2) Tìm giá trị lớn nhất , giá trị nhỏ nhất của mảng A

#include<iostream>

using namespace std;

const int MAX=1000;


void nhapmang(int a[],int n)

{

    for(int i=0;i<n;i++)

    {

        cout<<"Nhap phan tu a["<<i<<"]: ";

        cin>>a[i];

    }

}

void timMaxMin(int a[],int n,int& max,int& min)

{

    max = min = a[0];

    for(int i=1;i<n;i++)

    {

        if(a[i]>max)

        {

            max=a[i];

        }

        if(a[i]<min)

        {

            min=a[i];

        }

    }

}

int main()

{

    int n,a[MAX],max,min;

    cout<<"Nhap so phan tu: ";

    cin>>n;

    nhapmang(a,n);

    timMaxMin(a,n,max,min);

    cout<<"Max= "<<max<<endl;

    cout<<"Min= "<<min<<endl;

    return 0;

}



3) tìm số nguyên tố trong mảng A

#include <iostream>

using namespace std;

const int MAX = 1000;

bool isPrime(int n) {

    if (n <= 1) {

        return false;

    }

    for (int i = 2; i * i <= n; i++) {

        if (n % i == 0) {

            return false;

        }

    }

    return true;

}

void nhapmang(int a[], int n) {

    for (int i = 0; i < n; i++) {

        cout << "Nhap phan tu a[" << i << "]: ";

        cin >> a[i];

    }

}

void inSNT(int a[], int n) {

    cout << "Cac so nguyen to trong mang la: ";

    for (int i = 0; i < n; i++) {

        if (isPrime(a[i])) {

            cout << a[i] << " ";

        }

    }

}

int main() {

    int n, a[MAX];

    cout << "Nhap so phan tu: ";

    cin >> n;

    nhapmang(a, n);

    inSNT(a, n);

    return 0;

}

4) kiểm tra mảng A có toàn số chẵn

#include <iostream>

using namespace std;

const int MAX = 1000;

void nhapmang(int a[], int n) {

    for (int i = 0; i < n; i++) {

        cout << "Nhap phan tu a[" << i << "]: ";

        cin >> a[i];

    }

}

bool kiemtra(int a[], int n) {

    for (int i = 0; i < n; i++) {

        if (a[i] % 2 != 0) {

            return false;

        }

    }

    return true;

}

int main() {

    int n, a[MAX];

    cout << "Nhap so phan tu: ";

    cin >> n;

    nhapmang(a, n);

    if (kiemtra(a, n)) {

        cout << "Mang A chi chua cac so chan.\n";

    } else {

        cout << "Mang A khong chi chua cac so chan.\n";

    }

    return 0;

}


5)  kiểm tra mảng A có toàn số nguyên tố

#include <iostream>

using namespace std;


const int MAX = 1000;


bool isPrime(int n) {

    if (n <= 1) {

        return false;

    }

    for (int i = 2; i * i <= n; i++) {

        if (n % i == 0) {

            return false;

        }

    }

    return true;

}


void nhapmang(int a[], int n) {

    for (int i = 0; i < n; i++) {

        cout << "Nhap phan tu a[" << i << "]: ";

        cin >> a[i];

    }

}


bool kiemtra(int a[], int n) {

    for (int i = 0; i < n; i++) {

        if (!isPrime(a[i])) {

            return false;

        }

    }

    return true;

}


int main() {

    int n, a[MAX];

    cout << "Nhap so phan tu: ";

    cin >> n;

    nhapmang(a, n);

    if (kiemtra(a, n)) {

        cout << "Mang A chi chua cac so nguyen to.\n";

    } else {

        cout << "Mang A khong chi chua cac so nguyen to.\n";

    }


    return 0;

}


II )  Mảng 2 chiều 

1 )Cho mảng 2 chiều có m hàng và n cột , viết hàm nhập và hàm xuất 

#include <iostream>

using namespace std;

const int MAX_ROWS = 100; // Giới hạn số hàng của mảng

const int MAX_COLS = 100; // Giới hạn số cột của mảng

// Hàm nhập mảng

void NhapMang(int A[][MAX_COLS], int m, int n) {

    cout << "Nhap cac phan tu cua mang:\n";

    for (int i = 0; i < m; i++) {

        for (int j = 0; j < n; j++) {

            cout << "A[" << i << "][" << j << "] = ";

            cin >> A[i][j];

        }

    }

}

// Hàm xuất mảng

void XuatMang(int A[][MAX_COLS], int m, int n) {

    cout << "Cac phan tu cua mang la:\n";

    for (int i = 0; i < m; i++) {

        for (int j = 0; j < n; j++) {

            cout << A[i][j] << " ";

        }

        cout << endl;

    }

}

int main() {

    int m, n;

    int A[MAX_ROWS][MAX_COLS];

    cout << "Nhap so hang cua mang: ";

    cin >> m;

    cout << "Nhap so cot cua mang: ";

    cin >> n;

    NhapMang(A, m, n);

    XuatMang(A, m, n);

    return 0;

}


2 )Tính tổng của từng cột trong mảng 2 chiều 

Ví dụ khi tôi nhập như sau :

1 5 3

2 7 1

9 1 0

5 1 3

In ra màn hình: 17 14 7 

#include <iostream>

using namespace std;

const int MAX_ROWS = 100; // Giới hạn số hàng của mảng

const int MAX_COLS = 100; // Giới hạn số cột của mảng

// Hàm nhập mảng

void NhapMang(int A[][MAX_COLS], int m, int n) {

    cout << "Nhap cac phan tu cua mang:\n";

    for (int i = 0; i < m; i++) {

        for (int j = 0; j < n; j++) {

            cout << "A[" << i << "][" << j << "] = ";

            cin >> A[i][j];

        }

    }

}

// Hàm xuất mảng

void XuatMang(int A[][MAX_COLS], int m, int n) {

    cout << "Cac phan tu cua mang la:\n";

    for (int i = 0; i < m; i++) {

        for (int j = 0; j < n; j++) {

            cout << A[i][j] << " ";

        }

        cout << endl;

    }

}

// Hàm tính tổng của từng cột

void TinhTongCot(int A[][MAX_COLS], int m, int n) {

    int tong[MAX_COLS] = {0}; // Khởi tạo mảng chứa tổng của từng cột

    for (int j = 0; j < n; j++) {

        for (int i = 0; i < m; i++) {

            tong[j] += A[i][j]; // Cộng phần tử thứ j của mỗi hàng vào tổng của cột thứ j

        }

    }

    // In ra tổng của từng cột

    cout << "Tong cua tung cot la: ";

    for (int j = 0; j < n; j++) {

        cout << tong[j] << " ";

    }

    cout << endl;

}

int main() {

    int m, n;

    int A[MAX_ROWS][MAX_COLS];

    cout << "Nhap so hang cua mang: ";

    cin >> m;

    cout << "Nhap so cot cua mang: ";

    cin >> n;

    NhapMang(A, m, n);

    XuatMang(A, m, n);

    TinhTongCot(A, m, n);

    return 0;

}


3 )Tính tổng của từng hàng trong mảng 2 chiều 

Ví dụ khi tôi nhập như sau :

1 5 3

2 7 1

9 1 0

5 1 3

In ra màn hình: 9 10 10 9

#include <iostream>

using namespace std;

const int MAX_ROWS = 100; // Giới hạn số hàng của mảng

const int MAX_COLS = 100; // Giới hạn số cột của mảng

// Hàm nhập mảng

void NhapMang(int A[][MAX_COLS], int m, int n) {

    cout << "Nhap cac phan tu cua mang:\n";

    for (int i = 0; i < m; i++) {

        for (int j = 0; j < n; j++) {

            cout << "A[" << i << "][" << j << "] = ";

            cin >> A[i][j];

        }

    }

}

// Hàm xuất mảng

void XuatMang(int A[][MAX_COLS], int m, int n) {

    cout << "Cac phan tu cua mang la:\n";

    for (int i = 0; i < m; i++) {

        for (int j = 0; j < n; j++) {

            cout << A[i][j] << " ";

        }

        cout << endl;

    }

}

// Hàm tính tổng của từng hàng

void TinhTongHang(int A[][MAX_COLS], int m, int n) {

    int tong[MAX_ROWS] = {0}; // Khởi tạo mảng chứa tổng của từng hàng

    for (int i = 0; i < m; i++) {

        for (int j = 0; j < n; j++) {

            tong[i] += A[i][j]; // Cộng phần tử thứ i của mỗi cột vào tổng của hàng thứ i

        }

    }

    // In ra tổng của từng hàng

    cout << "Tong cua tung hang la: ";

    for (int i = 0; i < m; i++) {

        cout << tong[i] << " ";

    }

    cout << endl;

}

int main() {

    int m, n;

    int A[MAX_ROWS][MAX_COLS];

    cout << "Nhap so hang cua mang: ";

    cin >> m;

    cout << "Nhap so cot cua mang: ";

    cin >> n;

    NhapMang(A, m, n);

    XuatMang(A, m, n);

    TinhTongHang(A, m, n);

    return 0;

}

III )String 

1) viết chương trình c++ nhập chuỗi và sau đó chuyển tất cả các tự tự trong chuỗi thành in thường , ví dụ khi tôi nhập "HeLLo WorlD" thì nó sẽ thành "hello world" 

#include <iostream>

#include <string>

#include <cctype>

using namespace std;

int main()

{

    string str;

    cout << "Nhap chuoi: ";

    getline(cin, str);

    // Chuyen tat ca ky tu thanh chu thuong

    for (int i = 0; i < str.length(); i++) {

        str[i] = tolower(str[i]);

    }

    cout << "Chuoi sau khi chuyen thanh chu thuong: " << str << endl;


    return 0;

}

2) viết chương trình c++ nhập chuỗi và sau đó chuyển tất cả các tự tự trong chuỗi thành in thường , ví dụ khi tôi nhập "HeLLo WorlD" thì nó sẽ thành "HELLO WORLD

#include <iostream>

#include <string>

#include <cctype>

using namespace std;

int main()

{

    string str;

    cout << "Nhap chuoi: ";

    getline(cin, str);

    // Chuyen tat ca ky tu thanh chu in hoa

    for (int i = 0; i < str.length(); i++) {

        str[i] = toupper(str[i]);  

    cout << "Chuoi sau khi chuyen thanh chu in hoa: " << str << endl;

    return 0;

}

3) viết chương trình c++ nhập 2 chuỗi S1 và S2 , viết chương trình kiểm tra S1 có chứa S2 hay không , hàm trả về True nếu S1 chưa S2 

Ví dụ ta nhập S1= "HellO THERE!" và S2="llO", kết quả chương trình là TRUE 

#include <iostream>

#include <string>

using namespace std;

int main()

{

    string S1, S2;

    cout << "Nhap chuoi S1: ";

    getline(cin, S1);

    cout << "Nhap chuoi S2: ";

    getline(cin, S2);

    if (S1.find(S2) != string::npos) {

        cout << "S1 chua S2" << endl;

    } else {

        cout << "S1 khong chua S2" << endl;

    }

    return 0;

}

IV ) Struct

1) Định nghĩa một cấu trúc struct trong C+ cho hình chữ nhật trong hệ tọa độ Descartes.

struct HinhChuNhat {

    double chieuDai;

    double chieuRong;

    double dienTich;

    double chuVi;

};

2) Viết hàm nhập mảng n hình chữ nhật 

void nhapMangHinhChuNhat(HinhChuNhat mangHinhChuNhat[], int n) {

    for (int i = 0; i < n; i++) {

        cout << "Nhap thong tin hinh chu nhat thu " << i + 1 << ":" << endl;

        cout << "Chieu dai: ";

        cin >> mangHinhChuNhat[i].chieuDai;

        cout << "Chieu rong: ";

        cin >> mangHinhChuNhat[i].chieuRong;

        mangHinhChuNhat[i].dienTich = mangHinhChuNhat[i].chieuDai * mangHinhChuNhat[i].chieuRong;

        mangHinhChuNhat[i].chuVi = 2 * (mangHinhChuNhat[i].chieuDai + mangHinhChuNhat[i].chieuRong);

    }

}

3) Viết hàm nhập mảng n hình tam giác 

void nhapMangHinhTamGiac(HinhTamGiac mangHinhTamGiac[], int n) {

    for (int i = 0; i < n; i++) {

        cout << "Nhap thong tin hinh tam giac thu " << i + 1 << ":" << endl;

        cout << "Canh A: ";

        cin >> mangHinhTamGiac[i].canhA;

        cout << "Canh B: ";

        cin >> mangHinhTamGiac[i].canhB;

        cout << "Canh C: ";

        cin >> mangHinhTamGiac[i].canhC;


        mangHinhTamGiac[i].chuVi = mangHinhTamGiac[i].canhA + mangHinhTamGiac[i].canhB + mangHinhTamGiac[i].canhC;

        double p = mangHinhTamGiac[i].chuVi / 2;

        mangHinhTamGiac[i].dienTich = sqrt(p * (p - mangHinhTamGiac[i].canhA) * (p - mangHinhTamGiac[i].canhB) * (p - mangHinhTamGiac[i].canhC));

    }


phần thêm :

full code cho cấu trúc hình chữ nhật và hàm nhập mảng n hình chữ nhật trong C++: 

#include <iostream>

using namespace std;

struct HinhChuNhat {

    double chieuDai;

    double chieuRong;

    double dienTich;

    double chuVi;

};

void nhapMangHinhChuNhat(HinhChuNhat mangHinhChuNhat[], int n) {

    for (int i = 0; i < n; i++) {

        cout << "Nhap thong tin hinh chu nhat thu " << i + 1 << ":" << endl;

        cout << "Chieu dai: ";

        cin >> mangHinhChuNhat[i].chieuDai;

        cout << "Chieu rong: ";

        cin >> mangHinhChuNhat[i].chieuRong;

        mangHinhChuNhat[i].dienTich = mangHinhChuNhat[i].chieuDai * mangHinhChuNhat[i].chieuRong;

        mangHinhChuNhat[i].chuVi = 2 * (mangHinhChuNhat[i].chieuDai + mangHinhChuNhat[i].chieuRong);

    }

}

int main() {

    int n;

    cout << "Nhap so luong hinh chu nhat: ";

    cin >> n;

    HinhChuNhat mangHinhChuNhat[n];

    nhapMangHinhChuNhat(mangHinhChuNhat, n);

    cout << "Cac hinh chu nhat vua nhap:" << endl;

    for (int i = 0; i < n; i++) {

        cout << "Hinh chu nhat " << i + 1 << ":" << endl;

        cout << "Chieu dai: " << mangHinhChuNhat[i].chieuDai << endl;

        cout << "Chieu rong: " << mangHinhChuNhat[i].chieuRong << endl;

        cout << "Dien tich: " << mangHinhChuNhat[i].dienTich << endl;

        cout << "Chu vi: " << mangHinhChuNhat[i].chuVi << endl;

    }

    return 0;

}

Nhập xuất mảng 2 chiều , tính tổng hàng , snt và chuyển sang mảng 1 chiều

#include<iostream>

using namespace std;

const int MAX_ROW =100;

const int MAX_COL =100;

bool check(int n)

{

    if(n<=1)

    {

        return false;

    }

    for(int i=2;i*i<=n;i++)

    {

        if(n%i==0)

        {

            return false;

        }

    }

    return true;

}

void nhapmang(int a[][MAX_COL],int m, int n)

{

    for(int i=0;i<m;i++)

    {

        for(int j=0;j<n;j++)

        {

            cout<<"Nhap phan tu a["<<i<<"]["<<j<<"]: ";

            cin>>a[i][j];

        }

    }

}

void xuatmang(int a[][MAX_COL],int m, int n)

{

    int sum=0;

    cout<<"Cac so da nhap la: ";

    for(int i=0;i<m;i++)

    {

        for(int j=0;j<n;j++)

        {

            cout<<a[i][j]<<" ";

            if(check(a[i][j]))

            {

                sum+=a[i][j];

            }

        }

        cout<<endl;

    }

    cout<<"Tong cac so nguyen to la: "<<sum<<endl;

}

void tong(int a[][MAX_COL],int m, int n)

{

    int tong[MAX_ROW]={0};

    for(int i=0;i<m;i++)

    {

        for(int j=0;j<n;j++)

        {

            tong[i]+=a[i][j];

        }

    }

    cout<<"Tong cua tung hang la: "<<endl;

    for(int i=0;i<m;i++)

    {

        cout<<tong[i]<<" ";

    }

    cout<<endl;

}

void chuyen2dto1d(int a[][MAX_COL],int m ,int n,int b[])

{

    int c=0;

    for(int i=0;i<m;i++)

    {

        for(int j=0;j<n;j++)

        {

            b[c]=a[i][j];

            c++;

        }

    }

}

int main()

{

    int a[MAX_ROW][MAX_COL],m,n;

    cout<<"Nhap hang: "; cin>>m;

    cout<<"Nhap cot:  "; cin>>n;

    nhapmang(a,m,n);

    xuatmang(a,m,n);

    tong(a,m,n);

    

    int b[MAX_COL*MAX_ROW];

    chuyen2dto1d(a,m,n,b);

    cout<<"Mang 1 chieu la: ";

    for(int i=0;i<m*n;i++)

    {

        cout<<b[i]<<" ";

    }

    cout<<endl;

}