矩阵运算C语言实现.docx

上传人:b****6 文档编号:4412760 上传时间:2022-12-01 格式:DOCX 页数:16 大小:323.58KB
下载 相关 举报
矩阵运算C语言实现.docx_第1页
第1页 / 共16页
矩阵运算C语言实现.docx_第2页
第2页 / 共16页
矩阵运算C语言实现.docx_第3页
第3页 / 共16页
矩阵运算C语言实现.docx_第4页
第4页 / 共16页
矩阵运算C语言实现.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

矩阵运算C语言实现.docx

《矩阵运算C语言实现.docx》由会员分享,可在线阅读,更多相关《矩阵运算C语言实现.docx(16页珍藏版)》请在冰豆网上搜索。

矩阵运算C语言实现.docx

矩阵运算C语言实现

 

矩阵运算——C语言实现

#include"stdafx.h"

#include

//结构体

typedefstruct{

double**mat;

introw;

intcol;

}Matrix;

voidInitialMatrix(Matrix*T,introw,intcol);//只分配空间不初始化;

voidInitialMatrixZero(Matrix*T,introw,intcol);//初始化为0

voidInitialMatrixRand(Matrix*T,introw,intcol);//初始化为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;

测试程序参考界面如下所示:

矩阵函数测试,请选择功能,输入对应的数字:

***************************************************

1:

输入一个矩阵,求矩阵均值;

2:

产生一个随机数矩阵,求矩阵均值;

3:

输入两个个矩阵,求矩阵和;

4:

输入两个个矩阵,求矩阵差;

5:

输入两个个矩阵,求矩阵积;

6:

产生两个个随机数矩阵,求矩阵和;

7:

产生两个个随机数矩阵,求矩阵差;

8:

产生两个个随机数矩阵,求矩阵积;

9:

求矩阵的子阵,如矩阵的2-4行,1-3列的子阵;

0:

结束!

#include

#include

//结构体

typedefstruct{

double**mat;

introw;

intcol;

}Matrix;

//函数声明

voidInitialMatrix(Matrix*T,introw,intcol);

voidInitialMatrixZero(Matrix*T,introw,intcol);

voidInitialMatrixRand(Matrix*T,introw,intcol);

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;

voidNMatrix(void);//求逆矩阵

//主函数

intmain()

{

intinputevent;

//inti,j;

introw,col;

MatrixT;

MatrixA;

MatrixB;

MatrixC;

printf("矩阵函数测试,请选择功能,输入对应的数字:

\n");

printf("***************************************************\n\n");

printf("1:

输入一个矩阵,求矩阵均值;\n");

printf("2:

产生一个随机数矩阵,求矩阵均值;\n");

printf("3:

输入两个个矩阵,求矩阵和;\n");

printf("4:

输入两个个矩阵,求矩阵差;\n");

printf("5:

输入两个矩阵,求矩阵积;");

printf("\n6:

产生两个随机数矩阵,求矩阵和;\n");

printf("7:

产生两个随机数矩阵,求矩阵差;\n");

printf("8:

产生两个随机数矩阵,求矩阵积;\n");

printf("9:

求矩阵的子阵,如矩阵的2-4行D,1-3列的子阵;\n");

printf("10:

输入一个方阵,求其逆矩阵\n");

printf("0:

结束!

\n");

printf("\n\n选择:

");

scanf("%d",&inputevent);

while(inputevent!

=0)

{

if(inputevent==1){

printf("您要输入的矩阵的行数和列数e.g:

5,6:

");

scanf("%d,%d",&row,&col);

InitialMatrix(&T,row,col);

InitialMatrixZero(&T,T.row,T.col);

InputMatrix(&T);

printf("\n矩阵的平均值为:

\n%lf\n\n",MeanMatrix(&T));

DestroyMatrix(&T);

}

if(inputevent==2){

printf("输入您要产生的矩阵的行数和列数e.g:

5,6:

");

scanf("%d,%d",&row,&col);

InitialMatrix(&T,row,col);

InitialMatrixRand(&T,row,col);

MeanMatrix(&T);

PrintfMatrix(&T);

printf("\n矩阵的平均值为:

\n%lf\n\n",MeanMatrix(&T));

DestroyMatrix(&T);

}

if(inputevent==3){

printf("您要输入的矩阵A的行数和列数e.g:

5,6:

");

scanf("%d,%d",&row,&col);

InitialMatrix(&A,row,col);

InitialMatrixZero(&A,A.row,A.col);

InputMatrix(&A);

printf("您要输入的矩阵B的行数和列数e.g:

5,6:

");

scanf("%d,%d",&row,&col);

InitialMatrix(&B,row,col);

InitialMatrixZero(&B,B.row,B.col);

InputMatrix(&B);

InitialMatrix(&C,B.row,B.col);

InitialMatrixZero(&C,C.row,C.col);

if(AddMatrix(&A,&B,&C)==1){

printf("\n\n矩阵的和为:

A*B\n\n");

PrintfMatrix(&C);

}

elseprintf("\n\n无法计算!

\n\n");

DestroyMatrix(&A);

DestroyMatrix(&B);

DestroyMatrix(&C);

}

if(inputevent==4){

printf("您要输入的矩阵A的行数和列数e.g:

5,6:

");

scanf("%d,%d",&row,&col);

InitialMatrix(&A,row,col);

InitialMatrixZero(&A,A.row,A.col);

InputMatrix(&A);

printf("您要输入的矩阵B的行数和列数e.g:

5,6:

");

scanf("%d,%d",&row,&col);

InitialMatrix(&B,row,col);

InitialMatrixZero(&B,B.row,B.col);

InputMatrix(&B);

InitialMatrix(&C,B.row,B.col);

InitialMatrixZero(&C,C.row,C.col);

if(MinusMatrix(&A,&B,&C)==1){

printf("\n矩阵的差为:

A-B=\n\n");

PrintfMatrix(&C);

}

elseprintf("\n\n无法计算!

\n\n");

DestroyMatrix(&A);

DestroyMatrix(&B);

DestroyMatrix(&C);

}

if(inputevent==5){

intable;

printf("您要输入的矩阵A的行数和列数e.g:

5,6:

");

scanf("%d,%d",&row,&col);

InitialMatrix(&A,row,col);

InitialMatrixZero(&A,A.row,A.col);

InputMatrix(&A);

printf("您要输入的矩阵B的行数和列数e.g:

5,6:

");

scanf("%d,%d",&row,&col);

InitialMatrix(&B,row,col);

InitialMatrixZero(&B,B.row,B.col);

InputMatrix(&B);

InitialMatrix(&C,A.row,B.col);

InitialMatrixZero(&C,C.row,C.col);

able=MultiMatrix(&A,&B,&C);

if(able==1){

printf("\n积为:

A*B\n\n");

PrintfMatrix(&C);

}

elseprintf("\n\n无法计算!

\n\n");

DestroyMatrix(&A);

DestroyMatrix(&B);

DestroyMatrix(&C);

}

if(inputevent==6){

printf("您要产生的矩阵A的行数和列数e.g:

5,6:

");

scanf("%d,%d",&row,&col);

InitialMatrix(&A,row,col);

InitialMatrixRand(&A,row,col);

printf("A为:

\n\n");

PrintfMatrix(&A);

printf("您要产生的矩阵B的行数和列数e.g:

5,6:

");

scanf("%d,%d",&row,&col);

InitialMatrix(&B,row,col);

InitialMatrixRand(&B,row,col);

printf("B为:

\n\n");

PrintfMatrix(&B);

InitialMatrix(&C,A.row,A.col);

InitialMatrixZero(&C,C.row,C.col);

if(AddMatrix(&A,&B,&C)==1){

printf("\n矩阵的和为:

A+B=\n\n");

PrintfMatrix(&C);

}

elseprintf("\n\n无法计算!

\n\n");

DestroyMatrix(&A);

DestroyMatrix(&B);

DestroyMatrix(&C);

}

if(inputevent==7){

printf("您要产生的矩阵A的行数和列数e.g:

5,6:

");

scanf("%d,%d",&row,&col);

InitialMatrix(&A,row,col);

InitialMatrixRand(&A,row,col);

printf("您要产生的矩阵B的行数和列数e.g:

5,6:

");

scanf("%d,%d",&row,&col);

InitialMatrix(&B,row,col);

InitialMatrixRand(&B,row,col);

InitialMatrix(&C,A.row,A.col);

InitialMatrixZero(&C,C.row,C.col);

if(MinusMatrix(&A,&B,&C)==1){

printf("\n矩阵的差为:

A-B=\n\n");

PrintfMatrix(&C);

}

elseprintf("\n\n无法计算!

\n\n");

DestroyMatrix(&A);

DestroyMatrix(&B);

DestroyMatrix(&C);

}

if(inputevent==8){

printf("您要产生的矩阵A的行数和列数e.g:

5,6:

\n");

scanf("%d,%d",&row,&col);

InitialMatrix(&A,row,col);

InitialMatrixRand(&A,row,col);

printf("A为:

\n\n");

PrintfMatrix(&A);

printf("您要产生的矩阵B的行数和列数e.g:

5,6:

\n");

scanf("%d,%d",&row,&col);

InitialMatrix(&B,row,col);

InitialMatrixRand(&B,row,col);

printf("B为:

\n\n");

PrintfMatrix(&B);

InitialMatrix(&C,A.row,A.col);

InitialMatrixZero(&C,C.row,C.col);

if(MultiMatrix(&A,&B,&C)==1){

printf("\n积为:

A*B=\n\n");

PrintfMatrix(&C);;

}

elseprintf("\n\n无法计算;\n\n");

DestroyMatrix(&A);

DestroyMatrix(&B);

DestroyMatrix(&C);

}

if(inputevent==9)printf("对不起,该函数尚在完善中\n\n");

if(inputevent==10)NMatrix();

if(inputevent==0)

break;

printf("矩阵函数测试,请选择功能,输入对应的数字:

\n");

printf("***************************************************\n\n");

printf("1:

输入一个矩阵,求矩阵均值;\n");

printf("2:

产生一个随机数矩阵,求矩阵均值;\n");

printf("3:

输入两个个矩阵,求矩阵和;\n");

printf("4:

输入两个个矩阵,求矩阵差;\n");

printf("5:

输入两个矩阵,求矩阵积;");

printf("\n6:

产生两个随机数矩阵,求矩阵和;\n");

printf("7:

产生两个随机数矩阵,求矩阵差;\n");

printf("8:

产生两个随机数矩阵,求矩阵积;\n");

printf("9:

求矩阵的子阵,如矩阵的2-4行D,1-3列的子阵;\n");

printf("10:

输入一个方阵,求其逆矩阵\n");

printf("0:

结束!

\n");

printf("\n\n选择:

");

scanf("%d",&inputevent);

}

return0;

}

//其他函数

voidInitialMatrix(Matrix*T,introw,intcol)

{

//printf("分配内存中......\n");

inti;

intsucc=1;

//T=(Matrix*)malloc(sizeof(Matrix));

T->row=row;

T->col=col;

T->mat=(double**)malloc(T->row*sizeof(double*));

if(T->mat==NULL){

succ=0;

}

else{

for(i=0;irow;i++){

T->mat[i]=(double*)malloc(T->col*sizeof(double));

if(T->mat[i]==NULL){

succ=0;

break;

}

}

//if(succ==1)

//printf("内存分配成功|;

\n");

//elseprintf("内存分配失败;\n");

}

}

voidInitialMatrixZero(Matrix*T,introw,intcol){

//printf("矩阵初始化为零中......\n");

inti,j;

for(i=0;i

for(j=0;j

T->mat[i][j]=0;

//printf("矩阵初始化为零矩阵成功;\n");

}

voidInitialMatrixRand(Matrix*T,introw,intcol){

inti,j;

for(i=0;i

for(j=0;j

(*T).mat[i][j]=rand()%50;

}

voidInputMatrix(Matrix*T){

printf("输入矩阵:

\n");

inti,j;

for(i=0;i<(*T).row;i++)

for(j=0;j<(*T).col;j++)

scanf("%lf",&(*T).mat[i][j]);

}

voidDestroyMatrix(Matrix*T)

{

inti;

for(i=0;i<(*T).row;i++)

free((*T).mat[i]);

}

voidPrintfMatrix(Matrix*T)

{

inti,j;

for(i=0;i<(*T).row;i++)

{

for(j=0;j<(*T).col;j++)

printf("%lf",(*T).mat[i][j]);

printf("\n");

}

}

intAddMatrix(Matrix*A,Matrix*B,Matrix*C)

{

inti,j;

if((*A).row==(*B).row&&(*A).col==(*B).col)

{

for(i=0;i<(*A).row;i++)

for(j=0;j<(*A).col;j++)

(*C).mat[i][j]=(*A).mat[i][j]+(*B).mat[i][j];

for(i=0;i<(*A).row;i++)

for(j=0;j<(*A).col;j++)

return1;

}

else{

printf("这两个矩阵不能相加!

\n");

return0;

}

}

intMinusMatrix(Matrix*A,Matrix*B,Matrix*C)

{

inti,j;

if((*A).row==(*B).row&&(*A).col==(*B).col)

{

for(i=0;i<(*A).row;i++)

for(j=0;j<(*A).col;j++)

(*C).mat[i][j]=(*A).mat[i][j]-(*B).mat[i][j];

return1;

}

else

printf("这两个矩阵不能相减!

\n");

return0;

}

intMultiMatrix(Matrix*A,Matrix*B,Matrix*C)

{

inti=0,j=0;

intk=0;

if((*A).col==(*B).row)

{

for(i=0;i<(*A).row;i++){

for(j=0;j<(*B).col;j++)

for(k=0;k<(A->col);k++)

(*C).mat[i][j]+=(*A).mat[i][k]*(*B).mat[k][j];

}

return1;

}

else

printf("这两个矩阵不能

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1