c语言编程单位矩阵程序,c语言——综合程序九——矩阵运算

综合程序九——矩阵运算

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值