c语言动态二维数组实现矩阵相乘
- 如何申请动态二维数组,代码如下
该方法是最灵活的,可以任意指定行数和列数
/*
*申请a数组的内存*
*/
/*先申请每一行指针的内存*/
a = (int **)malloc(sizeof(int *)*a_row);
/*申请各行内存*/
for(i=0; i<a_row; i++) {
*(a+i)=(int *)malloc(sizeof(int)*a_column);
}
2 . 动态数组的释放,必须按步骤来释放,先释放指针的指针内存,接着释放指针的内存。
free(a);
for(i=0; i<a_column; i++) {
free(*(a+i));
}
3 . 矩阵的相乘算法,a_row是矩阵a的行数,b_row是矩阵b的行数,a_column,b_column是列数,使用一个c矩阵来存储结果。
/*初始化*/
for(i=0; i<a_row; i++) {
for(j=0; j<b_column; j++) {
c[i][j]=0;
}
}
for(i=0; i<a_row; i++) {
for(j=0; j<b_column; j++) {
for(k=0; k<a_row; k++) {
c[i][j]+=a[i][k]*b[k][j];
}
}
}
4 . 完整的代码
#include<stdio.h>
#include<stdlib.h>
int main() {
/*a矩阵的行数*/
int a_row;
/*a矩阵的列数*/
int a_column;
/*b矩阵的行数*/
int b_row;
/*b矩阵的列数*/
int b_column;
/*提示输入数据*/
printf("请输入a_row\n");
scanf("%d",&a_row);
printf("请输入a_column\n");
scanf("%d",&a_column);
printf("请输入b_row\n");
scanf("%d",&b_row);
printf("请输入b_column\n");
scanf("%d",&b_column);
if(a_row!=b_column){
printf("您输入的数组不符合要求!");
exit(0);
}
/*定义循环需要的变量*/
int i,j,k;
/*定义申请内存需要的指针*/
int **a=NULL,**b=NULL,**c=NULL;
/*
*申请a数组的内存*
*/
/*先申请每一行指针的内存*/
a = (int **)malloc(sizeof(int *)*a_row);
/*申请各行内存*/
for(i=0; i<a_row; i++) {
*(a+i)=(int *)malloc(sizeof(int)*a_column);
}
/*
*申请b数组的内存*
*/
/*先申请每一行指针的内存*/
b = (int **)malloc(sizeof(int *)*b_row);
/*申请各行内存*/
for(i=0; i<a_row; i++) {
*(b+i)=(int *)malloc(sizeof(int)*b_column);
}
/*
*申请c数组的内存*
*/
/*先申请每一行指针的内存*/
c = (int **)malloc(sizeof(int *)*a_row);
/*申请各行内存*/
for(i=0; i<a_row; i++) {
*(c+i)=(int *)malloc(sizeof(int)*b_column);
}
/*输入a矩阵的数据*/
printf("输入矩阵a:\n");
for(i=0; i<a_row; i++) {
for(j=0; j<a_column; j++) {
scanf("%d",&a[i][j]);
}
}
/*输入b矩阵的数据*/
printf("输入矩阵b:\n");
for(i=0; i<b_row; i++) {
for(j=0; j<b_column; j++) {
scanf("%d",&b[i][j]);
}
}
/*
*计算结果矩阵c
*/
/*初始化*/
for(i=0; i<a_row; i++) {
for(j=0; j<b_column; j++) {
c[i][j]=0;
}
}
for(i=0; i<a_row; i++) {
for(j=0; j<b_column; j++) {
for(k=0; k<a_row; k++) {
c[i][j]+=a[i][k]*b[k][j];
}
}
}
/*输出结果矩阵C*/
printf("结果是:\n");
for(i=0; i<a_row; i++) {
for(j=0; j<b_column; j++) {
printf("%d ",c[i][j]);
}
printf("\n");
}
/*
*释放内存
*/
free(a);
for(i=0; i<a_column; i++) {
free(*(a+i));
}
free(b);
for(i=0; i<b_column; i++) {
free(*(b+i));
}
free(c);
for(i=0; i<b_column; i++) {
free(*(c+i));
}
return 0;
}
5 .