综合程序九——矩阵运算
1.
编写矩阵定义、初始化函数;
2.
编写矩阵加法函数;
3.
编写矩阵减法函数;
4.
编写矩阵乘法函数;
5.
编写求矩阵均值函数;
6.
编写求一个矩阵的子阵函数;
7.
编写矩阵输出函数;
8.
编写主控函数;
主要函数和结构参考原型如下:
typedefstruct{
double**mat;
introw;
intcol;
}Matrix;
voidInitialMatrix(Matrix*T,introw,intcol);//只分配空间不初始化;
voidInitialMatrixZero(Matrix*T,introw,intcol);//初始化为0
voidInitialMatrixRand(Matrix *T,int row, int col);
//初始化为50以内随机正整数
voidInputMatrix(Matrix*T); //键盘输入矩阵
voidDestroyMatrix(Matrix*T); //释放矩阵空间
voidPrintfMatrix(Matrix*T); //矩阵输出
intAddMatrix(Matrix*A,Matrix*B,Matrix*C);//矩阵加
intMinusMatrix(Matrix*A,Matrix*B,Matrix*C);
//矩阵减
intMultiMatrix(Matrix*A,Matrix*B,Matrix*C);
//矩阵乘法
doubleMeanMatrix(Matrix*T); //矩阵元素均值
intSubMatrix(Matrix*T1,Matrix*T2,intBeginRow,intBeginCol,intEndRow,intEndCol);
//求T1的子矩阵T2;
void PrintMatrix(Matrix*T); //矩阵输出
测试程序参考界面如下所示:
矩阵函数测试,请选择功能,输入对应的数字:
***************************************************
1:输入一个矩阵,求矩阵均值;
2:产生一个随机数矩阵,求矩阵均值;
3:输入两个个矩阵,求矩阵和;
4:输入两个个矩阵,求矩阵差;
5:输入两个个矩阵,求矩阵积;
6:产生两个个随机数矩阵,求矩阵和;
7:产生两个个随机数矩阵,求矩阵差;
8:产生两个个随机数矩阵,求矩阵积;
9:求矩阵的子阵,如矩阵的2-4行,1-3列的子阵;
0:结束!
源程序清单如下:
#include
#include
#include
#include
//by 郑元帅 UESTC c语言——EXERCISE
typedef struct{
double**mat;
int
row;
int
col;
}Matrix;
void InitialMatrix(Matrix*T,int row,int
col)//只分配空间不初始化;
{
int
i;
T->mat=(double**)malloc(row*sizeof(double*));
for(i=0;i
T->mat[i]=(double*)malloc(col*sizeof(double));
T->row=row;
T->col=col;
}
void InitialMatrixZero(Matrix*T,int row,int
col)//初始化为0
{
int
i,j;
InitialMatrix(T,row,col);
for(i=0;i
for(j=0;j
T->mat[i][j]=0;
T->row=row;
T->col=col;
}
void InitialMatrixRand(Matrix *T,int row, int col)
//初始化为50以内随机正整数
{
int
i,j;
// srand((unsigned) time(NULL));
InitialMatrix(T,row,col);
for(i=0;i
for(j=0;j
T->mat[i][j]=rand()P+1;
T->row=row;
T->col=col;
}
void InputMatrix(Matrix*T,int row,int
col) //键盘输入矩阵
{
InitialMatrix(T,T->row,T->col);
int
i,j;
for(i=0;irow;i++)
for(j=0;jcol;j++)
scanf("%lf",&T->mat[i][j]);
T->row=row;
T->col=col;
}
void
DestroyMatrix(Matrix*T) //释放矩阵空间
{
int
i;
for(i=0;irow;i++)
free(T->mat[i]);
free(T->mat);
}
void
PrintfMatrix(Matrix*T) //矩阵输出
{
int
i,j;
for(i=0;irow;i++)
{
for(j=0;jcol;j++)
printf("%.2lf\t",T->mat[i][j]);
printf("\n");
}
}
void
AddMatrix(Matrix*A,Matrix*B,Matrix*C)//矩阵加
{
int
i,j;
for(i=0;irow;i++)
for(j=0;jcol;j++)
C->mat[i][j]=A->mat[i][j]+B->mat[i][j];
}
void MinusMatrix(Matrix*A,Matrix*B,Matrix*C)
//矩阵减
{
int
i,j;
for(i=0;irow;i++)
for(j=0;jcol;j++)
C->mat[i][j]=A->mat[i][j]-B->mat[i][j];
}
void MultiMatrix(Matrix*A,Matrix*B,Matrix*C)
//矩阵乘法
{
int
i,j,sum=0;
int
n;
for(i=0;irow;i++)
{
for(j=0;jcol;j++)
{
for(n=0;nrow;n++)
sum=A->mat[i][n]*B->mat[n][j]+sum;
C->mat[i][j]=sum;
sum=0;
}
}
}
double
MeanMatrix(Matrix*T) //矩阵元素均值
{
int
i,j;
double sum=0;
double ave=0;
for(i=0;irow;i++)
for(j=0;jrow;j++)
sum=T->mat[i][j]+sum;
ave=sum/(T->row*T->row);
return ave;
}
void SubMatrix(Matrix*T1,Matrix*T2,int
BeginRow,int BeginCol,int EndRow,int EndCol) //求T1的子矩阵T2;
{
int
i,j;
for(i=BeginRow-1;i
for(j=BeginCol-1;j
T2->mat[i-BeginRow+1][j-BeginCol+1]=T1->mat[i][j];
T2->row=EndRow-BeginRow+1;
T2->col=EndCol-BeginCol+1;
}
int main()
{
int
p=1;
double t;
int
row,col;
int
BeginRow,BeginCol,EndRow,EndCol;
Matrix*A = (Matrix*)malloc(sizeof(Matrix));
Matrix*B = (Matrix*)malloc(sizeof(Matrix));
Matrix*C = (Matrix*)malloc(sizeof(Matrix));
InitialMatrixZero(A,row,col);
InitialMatrixZero(B,row,col);
InitialMatrixZero(C,row,col);
while(p!=0)
{
printf("矩阵函数测试,请选择功能,输入对应的数字:\n");
printf("***************************************************\n1:输入一个矩阵,求矩阵均值;\n2:产生一个随机数矩阵,求矩阵均值:\n3:输入两个个矩阵,求矩阵和;\n4:输入两个个矩阵,求矩阵差;\n5:输入两个个矩阵,求矩阵积;\n6:产生两个个随机数矩阵,求矩阵和;\n7:产生两个个随机数矩阵,求矩阵差;\n8:产生两个个随机数矩阵,求矩阵积;\n9:求矩阵的子阵,如矩阵的2-4行,1-3列的子阵;\n0:结束!\n");
scanf("%d",&p);
if(p==1)
{
printf("请输入矩阵的行数与列数\n");
scanf("%d%d",&row,&col);
printf("请输入一个矩阵:\n");
InitialMatrixZero(A,row,col);
InputMatrix(A,row,col);
t=MeanMatrix(A);
printf("\n均值:%lf\n",t);
}
else
if(p==2)
{
printf("请输入矩阵的行数与列数\n");
scanf("%d%d",&row,&col);
InitialMatrixRand(A,row,col);
printf("随机矩阵如下\n");
PrintfMatrix(A);
t=MeanMatrix(A);
printf("\n均值:%lf\n",t);
}
else
if(p==3)
{
printf("请输入矩阵的行数与列数\n");
scanf("%d%d",&row,&col);
InitialMatrix(A,row,col);
printf("\n请输入第一个矩阵:\n");
InputMatrix(A,row,col);
InitialMatrix(B,row,col);
printf("\n请输入第二个矩阵:\n");
InputMatrix(B,row,col);
InitialMatrix(C,row,col);
AddMatrix(A,B,C);
printf("和为:\n");
PrintfMatrix(C);
}
else
if(p==4)
{
printf("请输入矩阵的行数与列数\n");
scanf("%d%d",&row,&col);
InitialMatrix(A,row,col);
printf("\n请输入第一个矩阵:\n");
InputMatrix(A,row,col);
InitialMatrix(B,row,col);
printf("\n请输入第二个矩阵:\n");
InputMatrix(B,row,col);
InitialMatrix(C,row,col);
MinusMatrix(A,B,C);
printf("差为:\n");
PrintfMatrix(C);
}
else
if(p==5)
{
printf("请输入矩阵的行数与列数\n");
scanf("%d%d",&row,&col);
InitialMatrix(A,row,col);
printf("\n请输入第一个矩阵:\n");
InputMatrix(A,row,col);
InitialMatrix(B,row,col);
printf("\n请输入第二个矩阵:\n");
InputMatrix(B,row,col);
InitialMatrix(C,row,col);
MultiMatrix(A,B,C);
printf("积为:\n");
PrintfMatrix(C);
}
else
if(p==6)
{
printf("请输入矩阵的行数与列数\n");
scanf("%d%d",&row,&col);
InitialMatrix(A,row,col);
InitialMatrix(B,row,col);
InitialMatrixRand(A,row,col);
printf("A:\n");
PrintfMatrix(A);
InitialMatrixRand(B,row,col);
printf("B:\n");
PrintfMatrix(B);
InitialMatrix(C,row,col);
AddMatrix(A,B,C);
printf("和为:\n");
PrintfMatrix(C);
}
else
if(p==7)
{
printf("请输入矩阵的行数与列数\n");
scanf("%d%d",&row,&col);
srand(0);
InitialMatrixRand(A,row,col);
printf("A:\n");
PrintfMatrix(A);
srand(1);
InitialMatrixRand(B,row,col);
printf("B:\n");
PrintfMatrix(B);
InitialMatrix(C,row,col);
MinusMatrix(A,B,C);
printf("差为:\n");
PrintfMatrix(C);
}
else
if(p==8)
{
printf("请输入矩阵的行数与列数\n");
scanf("%d%d",&row,&col);
InitialMatrixRand(A,row,col);
printf("A:\n");
PrintfMatrix(A);
InitialMatrixRand(B,row,col);
printf("B:\n");
PrintfMatrix(B);
InitialMatrix(C,row,col);
MultiMatrix(A,B,C);
printf("积为:\n");
PrintfMatrix(C);
}
else
if(p==9)
{
printf("请输入矩阵的行数与列数\n");
scanf("%d%d",&row,&col);
printf("请输入一个矩阵:\n");
InitialMatrixZero(A,row,col);
InputMatrix(A,row,col);
printf("请输入起始行和终止行:\n");
scanf("%d%d",&BeginRow,&EndRow);
printf("请输入起始列和终止列:\n");
scanf("%d%d",&BeginCol,&EndCol);
InitialMatrix(B,EndRow-BeginRow+1,EndCol-BeginCol+1);
SubMatrix(A,B,BeginRow,BeginCol,EndRow,EndCol);
PrintfMatrix(B);
}
else
if(p==0)
break;
else
printf("输入错误!");
}
return 0;
}
2.
测试
矩阵函数测试,请选择功能,输入对应的数字:
***************************************************
1:输入一个矩阵,求矩阵均值;
2:产生一个随机数矩阵,求矩阵均值:
3:输入两个个矩阵,求矩阵和;
4:输入两个个矩阵,求矩阵差;
5:输入两个个矩阵,求矩阵积;
6:产生两个个随机数矩阵,求矩阵和;
7:产生两个个随机数矩阵,求矩阵差;
8:产生两个个随机数矩阵,求矩阵积;
9:求矩阵的子阵,如矩阵的2-4行,1-3列的子阵;
0:结束!
1
请输入矩阵的行数与列数
3 3
请输入一个矩阵:
2 2 2 3 3 3 2 2 2
均值:2.333333
矩阵函数测试,请选择功能,输入对应的数字:
***************************************************
1:输入一个矩阵,求矩阵均值;
2:产生一个随机数矩阵,求矩阵均值:
3:输入两个个矩阵,求矩阵和;
4:输入两个个矩阵,求矩阵差;
5:输入两个个矩阵,求矩阵积;
6:产生两个个随机数矩阵,求矩阵和;
7:产生两个个随机数矩阵,求矩阵差;
8:产生两个个随机数矩阵,求矩阵积;
9:求矩阵的子阵,如矩阵的2-4行,1-3列的子阵;
0:结束!
2
请输入矩阵的行数与列数
3 3
随机矩阵如下
42.00 18.00 35.00
1.00 20.00 25.00
29.00 9.00 13.00
均值:21.333333
矩阵函数测试,请选择功能,输入对应的数字:
***************************************************
1:输入一个矩阵,求矩阵均值;
2:产生一个随机数矩阵,求矩阵均值:
3:输入两个个矩阵,求矩阵和;
4:输入两个个矩阵,求矩阵差;
5:输入两个个矩阵,求矩阵积;
6:产生两个个随机数矩阵,求矩阵和;
7:产生两个个随机数矩阵,求矩阵差;
8:产生两个个随机数矩阵,求矩阵积;
9:求矩阵的子阵,如矩阵的2-4行,1-3列的子阵;
0:结束!
3
请输入矩阵的行数与列数
3 3
请输入第一个矩阵:
2 2 2 2 2 2 2 2 2
请输入第二个矩阵:
3 3 3 3 3 3 3 3 3
和为:
5.00 5.00 5.00
5.00 5.00 5.00
5.00 5.00 5.00
矩阵函数测试,请选择功能,输入对应的数字:
***************************************************
1:输入一个矩阵,求矩阵均值;
2:产生一个随机数矩阵,求矩阵均值:
3:输入两个个矩阵,求矩阵和;
4:输入两个个矩阵,求矩阵差;
5:输入两个个矩阵,求矩阵积;
6:产生两个个随机数矩阵,求矩阵和;
7:产生两个个随机数矩阵,求矩阵差;
8:产生两个个随机数矩阵,求矩阵积;
9:求矩阵的子阵,如矩阵的2-4行,1-3列的子阵;
0:结束!
4
请输入矩阵的行数与列数
3 3
请输入第一个矩阵:
2 2 2 2 2 2 2 2 2
请输入第二个矩阵:
3 3 3 3 3 3 3 3 3
差为:
-1.00 -1.00 -1.00
-1.00 -1.00 -1.00
-1.00 -1.00 -1.00
矩阵函数测试,请选择功能,输入对应的数字:
***************************************************
1:输入一个矩阵,求矩阵均值;
2:产生一个随机数矩阵,求矩阵均值:
3:输入两个个矩阵,求矩阵和;
4:输入两个个矩阵,求矩阵差;
5:输入两个个矩阵,求矩阵积;
6:产生两个个随机数矩阵,求矩阵和;
7:产生两个个随机数矩阵,求矩阵差;
8:产生两个个随机数矩阵,求矩阵积;
9:求矩阵的子阵,如矩阵的2-4行,1-3列的子阵;
0:结束!
5
请输入矩阵的行数与列数
3 3
请输入第一个矩阵:
2 2 2 2 2 2 2 2 2
请输入第二个矩阵:
4 4 4 4 4 4 4 4 4
积为:
24.00
24.00 24.00
24.00 24.00 24.00
24.00 24.00 24.00
矩阵函数测试,请选择功能,输入对应的数字:
***************************************************
1:输入一个矩阵,求矩阵均值;
2:产生一个随机数矩阵,求矩阵均值:
3:输入两个个矩阵,求矩阵和;
4:输入两个个矩阵,求矩阵差;
5:输入两个个矩阵,求矩阵积;
6:产生两个个随机数矩阵,求矩阵和;
7:产生两个个随机数矩阵,求矩阵差;
8:产生两个个随机数矩阵,求矩阵积;
9:求矩阵的子阵,如矩阵的2-4行,1-3列的子阵;
0:结束!
6
请输入矩阵的行数与列数
3 3
A:
15.00 6.00 46.00
32.00 28.00 12.00
42.00 46.00 43.00
B:
28.00 37.00 42.00
5.00 3.00 4.00
43.00 33.00 22.00
和为:
43.00 43.00 88.00
37.00 31.00 16.00
85.00 79.00 65.00
矩阵函数测试,请选择功能,输入对应的数字:
***************************************************
1:输入一个矩阵,求矩阵均值;
2:产生一个随机数矩阵,求矩阵均值:
3:输入两个个矩阵,求矩阵和;
4:输入两个个矩阵,求矩阵差;
5:输入两个个矩阵,求矩阵积;
6:产生两个个随机数矩阵,求矩阵和;
7:产生两个个随机数矩阵,求矩阵差;
8:产生两个个随机数矩阵,求矩阵积;
9:求矩阵的子阵,如矩阵的2-4行,1-3列的子阵;
0:结束!
7
请输入矩阵的行数与列数
3 3
A:
39.00 20.00 39.00
38.00 6.00 48.00
16.00 36.00 1.00
B:
42.00 18.00 35.00
1.00 20.00 25.00
29.00 9.00 13.00
差为:
-3.00 2.00 4.00
37.00 -14.00 23.00
-13.00 27.00 -12.00
矩阵函数测试,请选择功能,输入对应的数字:
***************************************************
1:输入一个矩阵,求矩阵均值;
2:产生一个随机数矩阵,求矩阵均值:
3:输入两个个矩阵,求矩阵和;
4:输入两个个矩阵,求矩阵差;
5:输入两个个矩阵,求矩阵积;
6:产生两个个随机数矩阵,求矩阵和;
7:产生两个个随机数矩阵,求矩阵差;
8:产生两个个随机数矩阵,求矩阵积;
9:求矩阵的子阵,如矩阵的2-4行,1-3列的子阵;
0:结束!
8
请输入矩阵的行数与列数
3 3
A:
15.00 6.00 46.00
32.00 28.00 12.00
42.00 46.00 43.00
B:
28.00 37.00 42.00
5.00 3.00 4.00
43.00 33.00 22.00
积为:
2428.00 2091.00 1666.00
1552.00 1664.00 1720.00
3255.00 3111.00 2894.00
矩阵函数测试,请选择功能,输入对应的数字:
***************************************************
1:输入一个矩阵,求矩阵均值;
2:产生一个随机数矩阵,求矩阵均值:
3:输入两个个矩阵,求矩阵和;
4:输入两个个矩阵,求矩阵差;
5:输入两个个矩阵,求矩阵积;
6:产生两个个随机数矩阵,求矩阵和;
7:产生两个个随机数矩阵,求矩阵差;
8:产生两个个随机数矩阵,求矩阵积;
9:求矩阵的子阵,如矩阵的2-4行,1-3列的子阵;
0:结束!
9
请输入矩阵的行数与列数
3 3
请输入一个矩阵:
3 5 6
2 3 6
5 7 8
请输入起始行和终止行:
1 2
请输入起始列和终止列:
2 3
5.00 6.00
3.00 6.00
矩阵函数测试,请选择功能,输入对应的数字:
***************************************************
1:输入一个矩阵,求矩阵均值;
2:产生一个随机数矩阵,求矩阵均值:
3:输入两个个矩阵,求矩阵和;
4:输入两个个矩阵,求矩阵差;
5:输入两个个矩阵,求矩阵积;
6:产生两个个随机数矩阵,求矩阵和;
7:产生两个个随机数矩阵,求矩阵差;
8:产生两个个随机数矩阵,求矩阵积;
9:求矩阵的子阵,如矩阵的2-4行,1-3列的子阵;
0:结束!
0