【c语言】矩阵乘法
1.N*N矩阵
A[N][N]*B[N][N]=C[N][N]
#include<stdio.h>
#define N 2
int main()
{int A[N][N] = {}, B[N][N] = {}, C[N][N] = {};printf_s("请输入矩阵A:\n");int i, j;for (i = 0; i < N; i++) {for (j = 0; j < N; j++) {scanf_s("%d", &A[i][j]);}}printf_s("\n");printf_s("A[N][N]为:\n");for (i = 0; i < N; i++) {for (j = 0; j < N; j++) {printf_s("%d\t", A[i][j]);}printf_s("\n");}printf_s("\n");printf_s("请输入矩阵B:\n");for (i = 0; i < N; i++) {for (j = 0; j < N; j++) {scanf_s("%d", &B[i][j]);}}printf_s("\n");printf_s("B[N][N]为:\n");for (i = 0; i < N; i++) {for (j = 0; j < N; j++) {printf_s("%d\t", B[i][j]);}printf_s("\n");}for (i = 0; i < N; i++) {for (j = 0; j < N; j++) {for (int k = 0; k < N; k++) {/*矩阵乘法是A的行元素分别×B的列元素再相加【前提是A列数=B行数(不等的话无法一对一相乘),结果是C的行数=A的行数,C的列数=B的列数】,C的单个元素计算时i和j不变,变化的是k*/C[i][j] += A[i][k] * B[k][j];}}}printf_s("\n");printf_s("C[N][N]为:\n");for (i = 0; i < N; i++) {for (j = 0; j < N; j++) {printf_s("%d\t", C[i][j]);}printf_s("\n");}}
2.非N*N矩阵
#include<stdio.h>
#define N 100int main()
{int a, b, c;/*区分a,b,c关系*/printf_s("分别输入矩阵A的行和列以及矩阵B的列:\n");/*矩阵A的列数=矩阵B的行数*/scanf_s("%d %d %d", &a, &b, &c);int A[N][N] = {}, B[N][N] = {}, C[N][N] = {};printf_s("请输入矩阵A:\n");int i, j;for (i = 0; i < a; i++) {for (j = 0; j < b; j++) {scanf_s("%d", &A[i][j]);}}printf_s("\n");printf_s("A[a][b]为:\n");for (i = 0; i < a; i++) {for (j = 0; j < b; j++) {printf_s("%d\t", A[i][j]);}printf_s("\n");}printf_s("\n");printf_s("请输入矩阵B:\n");/*矩阵A的列数=矩阵B的行数*/for (i = 0; i < b; i++) {for (j = 0; j < c; j++) {scanf_s("%d", &B[i][j]);}}printf_s("\n");printf_s("B[b][c]为:\n");for (i = 0; i < b; i++) {for (j = 0; j < c; j++) {printf_s("%d\t", B[i][j]);}printf_s("\n");}for (i = 0; i < a; i++) {/*C的行数=A的行数,C的列数=B的列数*/for (j = 0; j < c; j++) {for (int k = 0; k < b; k++) {/*b个AB乘积之和=C矩阵元素*/C[i][j] += A[i][k] * B[k][j];}}}printf_s("\n");printf_s("C[a][c]为:\n");for (i = 0; i < a; i++) {for (j = 0; j < c; j++) {printf_s("%d\t", C[i][j]);}printf_s("\n");}}