1. Bài tập cộng hai ma trận bằng ngôn ngữ lập trình C

Bài tập này chúng ta sẽ sử dụng các kiến thức từ ngôn ngữ lập trình C như: cách nhập xuất cơ bản, cách sử dụng mảng hai chiều và cách sử dụng hàm trong ngôn ngữ lập trình C.

Yêu cầu của bài tập đưa ra cho chúng ta là tính tồng hai ma trận bằng ngôn ngữ C.

2. Lời giải

Ví dụ ta có 2 ma trận A và B có số hàng và số cột bằng nhau thì:

Trong trường hợp đó, tổng của hai ma trận A và B sẽ là ma trận có cùng số hàng và số cột như  A và B. Tổng của A và B, được biểu thị  A + B, được tính bằng cách cộng các phần tử tương ứng của A và B.

Lưu ý: Hai ma trận phải có số hàng và số cột bằng nhau thì mới có thể tính tổng.

Giả sử A + B = C thì ta có: c[i][j] = a[i][j] + b[i][j]

Để thực hiện bài toán này chúng ta cần có kiến thức cơ bản về ngôn ngữ lập trình C, các cách nhập xuất cơ bản trong C, mảng hai nhiều trong C và cách sử dụng hàm trong ngôn ngữ lập trình C.

Các bước thực hiện yêu cầu của bài tập tính tồng hai ma trận bằng ngôn ngữ C như sau:

Bước 1: Ta khai báo một mảng 2 chều tĩnh số nguyên có tối đa 100 dòng và 100 cột int a[100][100].

Bước 2: Ta khai báo số nguyên int m là số dòng của ma trận với điều kiện m>1 hoặc m<100 nếu không thỏa mãn thì yêu cầu nhập lại m, int n là số cột của ma trận với điều kiện n>1 hoặc n<100 nếu không thỏa mãn thì yêu cầu nhập lại n(Vì phép cộng 2 ma trận chỉ có thể xảy ra khi số hàng và cột của 2 ma trận bằng nhau nên tôi sẽ dùng chung số hàng và số cột cho 2 ma trận).

Bước 3: Ta khỏi tạo hàm void NhapA(int a[][100], int m,int n) dùng để nhập dữ liệu từ bàn phím cho ma trận A. Trong hàm ta sử dụng vòng for bắt đầu từ int i =0 và kết thúc khi i<m và mỗi lần i tăng lên một để duyệt các hàng của ma trận, trong vòng for i ta khởi tạo vòng for bắt đầu từ int j =0, kết thúc khi j<n và mỗi lần lặp j tăng lên 1, trong vòng for j thì nhập vào dữ liệu của a[i][j].

Bước 4: Ta khởi tạo hàm void XuatA(int a[][100], int m, int n) dùng để hiển thị dữ liệu từ ma trận A ra màn hình. Trong hàm ta sử dụng vòng for bắt đầu từ int i = 0 và kết thúc khi i<m và mỗi lần i tăng lên một để duyệt các hàng của ma trận, trong vòng for j ta khởi tạo vòng for bắt đầu từ int j =0, kết thúc khi j<n và mỗi lần lặp j tăng lên 1, trong vòng for j thì ta hiển thị a[i][j] ra màn hình.

Bước 5: Ta khỏi tạo hàm void NhapB(int b[][100], int m,int n) dùng để nhập dữ liệu từ bàn phím cho ma trận B. Trong hàm ta sử dụng vòng for bắt đầu từ int i =0 và kết thúc khi i<m và mỗi lần i tăng lên một để duyệt các hàng của ma trận, trong vòng for i ta khởi tạo vòng for bắt đầu từ int j =0, kết thúc khi j<n và mỗi lần lặp j tăng lên 1, trong vòng for j thì nhập vào dữ liệu của b[i][j].

Bước 6: Ta khởi tạo hàm void XuatB(int b[][100], int m, int n) dùng để hiển thị dữ liệu từ ma trận B ra màn hình. Trong hàm ta sử dụng vòng for bắt đầu từ int i = 0 và kết thúc khi i<m và mỗi lần i tăng lên một để duyệt các hàng của ma trận, trong vòng for j ta khởi tạo vòng for bắt đầu từ int j =0, kết thúc khi j<n và mỗi lần lặp j tăng lên 1, trong vòng for j thì ta hiển thị b[i][j] ra màn hình.

Bước 7: Ta khởi tạo hàm void Sum(int a[][100], int b[][100], int m, int n) dùng để tính tổng 2 ma trận A và B.Ta khai báo ma trận int c[100][100] để tính giá trị tổng của ma trận. Trong hàm ta sử dụng vòng for bắt đầu từ int i = 0 và kết thúc khi i<m và mỗi lần i tăng lên một để duyệt các hàng của ma trận, trong vòng for j ta khởi tạo vòng for bắt đầu từ int j =0, kết thúc khi j<n và mỗi lần lặp j tăng lên 1, trong vòng for j thì ta gán c[i][j] = a[i][j] + b[i][j] .Kết thúc lặp ta in ma trận c ra màn hình ra màn hình.

Bước 8: Trong hàm main ta gọi các hàm rồi chạy chương trình.

Chương trình giải bài tập tính tồng hai ma trận bằng ngôn ngữ C như sau:

#include<stdio.h>
void NhapA(int a[][100],int m, int n){//Ham nhap ma tranA
    for(int i = 0; i<m; i++){//duyet hang cua ma tran
        for(int j = 0 ; j<n; j++){//duyet cot cua ma tran
            printf("Nhap a[%d][%d] = ", i, j);
            scanf("%d", &a[i][j]);//nhap vao cac phan tu cua ma tran
        }
    }
}
void XuatA(int a[][100],int m, int n){
    for(int i =0; i<m; i++){//duyet hang cua ma tran
        for(int j = 0; j<n; j++){//duyet cot cua ma tran
            printf("%5d", a[i][j]);//in ma tran ra man hinh
        }
        printf("\n");
    }
}
void NhapB(int b[][100],int m, int n){//Ham nhap ma tranB
    for(int i = 0; i<m; i++){//duyet hang cua ma tran
        for(int j = 0 ; j<n; j++){//duyet cot cua ma tran
            printf("Nhap b[%d][%d] = ", i, j);
            scanf("%d", &b[i][j]);//nhap vao cac phan tu cua ma tran
        }
    }
}
void XuatB(int b[][100],int m, int n){
    for(int i =0; i<m; i++){//duyet hang cua ma tran
        for(int j = 0; j<n; j++){//duyet cot cua ma tran
            printf("%5d", b[i][j]);//in ma tran ra man hinh
        }
        printf("\n");
    }
}
void Sum(int a[][100], int b[][100], int m, int n){// Ham tinh tong 2 ma tran
    int c[100][100];//khai bao ma tran tong
    for(int i =0; i<m; i++){//duyet hang cua ma tran
        for(int j = 0; j<n; j++){//duyet cot cua ma tran
            c[i][j] = a[i][j] + b[i][j];
        }
    }
    printf("\nTong cua 2 ma tran la:\n");
    for(int i =0; i<m; i++){//duyet hang cua ma tran
        for(int j = 0; j<n; j++){//duyet cot cua ma tran
            printf("%5d", c[i][j]);//in ma tran ra man hinh
        }
        printf("\n");
    }
}
int main(){
    int a[100][100];// khao bao ma tran A
    int b[100][100];// khao bao ma tran b
    int m,n;// khai bao so hang va so cot
    do{
        printf("Nhap so dong:");
        scanf("%d", &m);
        if(m<1 || m>100)
        {
            printf("Nhap lai:");
        }
    }while(m<1 || m>100);//dieu kien neu m<1 hoac m>100 yeu cau nhap lai
    
    do{
        printf("Nhap so cot:");
        scanf("%d", &n);
        if(n<1 || n>100)
        {
            printf("Nhap lai:");
        }
    }while(n<1 || n>100);//dieu kien neu n<1 hoac n>100 yeu cau nhap lai
    printf("\nNhap ma tran A:\n");
    NhapA(a,m,n);
    printf("\nMa tran A sau khi nhap la:\n");
    XuatA(a,m,n);
    printf("\nNhap ma tran B:\n");
    NhapB(b,m,n);
    printf("\nMa tran B sau khi nhap la:\n");
    XuatB(b,m,n);
    Sum(a,b,m,n);
}

Ví dụ tôi nhập 2 ma trận A và B có 3 dòng và 2 cột

Kết quả:

Nhap so dong:3
Nhap so cot:2

Nhap ma tran A:
Nhap a[0][0] = 1
Nhap a[0][1] = 2
Nhap a[1][0] = 3
Nhap a[1][1] = 4
Nhap a[2][0] = 5
Nhap a[2][1] = 6

Ma tran A sau khi nhap la:
1    2
3   4
5   6

Nhap ma tran B:
Nhap b[0][0] = 7
Nhap b[0][1] = 8
Nhap b[1][0] = 9
Nhap b[1][1] = 0
Nhap b[2][0] = 1
Nhap b[2][1] = 2

Ma tran B sau khi nhap la:
7    8
9   0
1    2

Tong cua 2 ma tran la:
8   10
12   4
6    8

3. Tổng kết

Sau khi làm bài tập này các bạn cần phải hiểu và nắm được những kiến thức sau:

  • Cách nhập xuất cơ bản trong ngôn ngữ lập trình C.
  • Cách sử dụng hàm trong ngôn ngữ lập trình C.
  • Cách sử dụng mảng hai chiều trong ngôn ngữ lập trình C.
  • Cách sử dụng vòng lặp for để duyệt các dòng và cột trong mảng hai chiều.
  • Cách tính tổng hai ma trận trong C.