系列文章目录
文章目录
前言
《数据结构基础》c语言版 第2版,Ellis Horowitz著,朱仲涛译
2.2节,page46,习题3、4、5、6
一、c++代码
1.动态存储分配方法写矩阵加法函数
代码如下:
#include <iostream>
#include "stdlib.h"
using namespace std;
int main()
{
int **a=NULL,**b=NULL,**c=NULL;
int rows,cols;
printf("enter the rows:");
scanf("%d",&rows);
printf("enter the cols:");
scanf("%d",&cols);
a=(int**)malloc(rows*sizeof(int*));
b=(int**)malloc(rows*sizeof(int*));
c=(int**)malloc(rows*sizeof(int*));
for(int i=0;i<rows;i++)
{
a[i]=(int*)malloc(cols*sizeof(int));
b[i]=(int*)malloc(cols*sizeof(int));
c[i]=(int*)malloc(cols*sizeof(int));
}
for(int i=0;i<rows;i++)
{
for(int j=0;j<cols;j++)
{
a[i][j]=i+j;
b[i][j]=i+j;
c[i][j]=a[i][j]+b[i][j];
printf("%3d",c[i][j]);
}
printf("\n");
}
for(int i=0;i<rows;i++){
free(a[i]);
free(b[i]);
free(c[i]);
}
free(a);
free(b);
free(c);
return 0;
}
2.动态存储分配方式写矩阵乘法
代码如下:
#include <iostream>
#include "stdlib.h"
using namespace std;
int main()
{
int **a=NULL,**b=NULL,**c=NULL;
int rows;
printf("enter the rows:");
scanf("%d",&rows);
a=(int**)malloc(rows*sizeof(int*));
b=(int**)malloc(rows*sizeof(int*));
c=(int**)malloc(rows*sizeof(int*));
for(int i=0;i<rows;i++)
{
a[i]=(int*)malloc(rows*sizeof(int));
b[i]=(int*)malloc(rows*sizeof(int));
c[i]=(int*)malloc(rows*sizeof(int));
}
for(int i=0;i<rows;i++)
{
for(int j=0;j<rows;j++)
{
a[i][j]=i+j;
b[i][j]=i+j;
c[i][j]=a[i][j]*b[i][j];
printf("%5d",c[i][j]);
}
printf("\n");
}
for(int i=0;i<rows;i++){
free(a[i]);
free(b[i]);
free(c[i]);
}
free(a);
free(b);
free(c);
return 0;
}
3.动态存储分配方式写矩阵乘法(矩阵为方阵)
#include <iostream>
#include "stdlib.h"
using namespace std;
void transpose(int **a,int rows)
{
int temp;
for(int i=0;i<rows;i++)
{
for(int j=0;j<rows;j++)
{
temp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=temp;
}
}
}
int main()
{
int n;
printf("enter the rows:");
scanf("%d",&n);
int **array=NULL;
array=(int**)malloc(n*sizeof(int*));
for(int i=0;i<n;i++) {
array[i] = (int *) malloc(n * sizeof(int));
}
printf("the original matrix is:\n");
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
array[i][j]=i+3;
printf("%4d",array[i][j]);
}
printf("\n");
}
printf("the transpose matrix is:\n");
transpose(array,n);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
printf("%4d",array[i][j]);
}
printf("\n");
}
for(int i=0;i<n;i++)
free(array[i]);
free(array);
return 0;
}
4.动态存储分配方式写矩阵乘法(矩阵不是方阵)
#include <iostream>
#include "stdlib.h"
using namespace std;
void transpose(int **a,int **b,int rows,int cols)
{
for(int i=0;i<rows;i++)
{
for(int j=0;j<cols;j++)
{
b[j][i]=a[i][j];
}
}
}
int main()
{
int n,m;
printf("enter the rows:");
scanf("%d",&n);
printf("enter the cols:");
scanf("%d",&m);
int **array=NULL;
int **tran_array=NULL;
array=(int**)malloc(n*sizeof(int*));
tran_array=(int**)malloc(m*sizeof(int*));
for(int i=0;i<n;i++) {
array[i] = (int *) malloc(m * sizeof(int));
}
for(int i=0;i<m;i++)
{
tran_array[i] = (int *) malloc(n * sizeof(int));
}
printf("the original matrix is:\n");
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
array[i][j]=i+3;
printf("%4d",array[i][j]);
}
printf("\n");
}
printf("the transpose matrix is:\n");
transpose(array,tran_array,n,m);
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
printf("%4d",tran_array[i][j]);
}
printf("\n");
}
for(int i=0;i<n;i++) {
free(array[i]);
free(tran_array[i]);
}
free(array);
free(tran_array);
return 0;
}