矩阵计算C语言源代码.docx

上传人:b****6 文档编号:8086209 上传时间:2023-01-28 格式:DOCX 页数:19 大小:17.40KB
下载 相关 举报
矩阵计算C语言源代码.docx_第1页
第1页 / 共19页
矩阵计算C语言源代码.docx_第2页
第2页 / 共19页
矩阵计算C语言源代码.docx_第3页
第3页 / 共19页
矩阵计算C语言源代码.docx_第4页
第4页 / 共19页
矩阵计算C语言源代码.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

矩阵计算C语言源代码.docx

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

矩阵计算C语言源代码.docx

矩阵计算C语言源代码

//#include"matrix.h"

#defineEX_TRUE(0)

#defineEX_FALSE

(1)

#defineEX_MALLOC

(2)

typedefstructtagMatrix

{

unsignedcharucRow;

unsignedcharucCol;

unsignedshortusRev;

float*pfDataAdd;

}Matrix_s;

externintInputRowColInfo(unsignedchar*pucRow,unsignedchar*pucCol);

externintCreateMatrixMem(void*pvData);

externintInputMatrixData(void*pvData);

externintPrintMatrixData(void*pvData);

externintPrintInverseMatrixData(void*pvData);

externintShow_matrix(Matrix_s*pstMatrixA,Matrix_s*pstMatrixB);

 

//#include"operate_matrix.h"

#defineEX_MATRIX_INIT

(1)

#defineEX_MATRIX_UNINIT(0)

typedefenum

{

EX_INPUT_MATRIX=1,

EX_ADD_MATRIX,

EX_SUBTRACT_MATRIX,

EX_MULTIPLY_MATRIX,

EX_INVERSE_MATRIX,

EX_QUIT_MATRIX,

EX_BOTTOM_MATRIX

}Matrix_opcode_en;

externintOperateMatrix(intiOpCode,Matrix_s*pstMatrixA,Matrix_s*pstMatrix);

externintShowMatrixMenu();

externintCheckMatrix(intiOpCode,Matrix_s*pstMatrixA,Matrix_s*pstMatrixB);

externintAddMatrix(intiOpCode,Matrix_s*pstMatrixA,Matrix_s*pstMatrixB,Matrix_s*pstMatrixC);

externintSubtractMatrix(intiOpCode,Matrix_s*pstMatrixA,Matrix_s*pstMatrixB,Matrix_s*pstMatrixC);

externintMultiplyMatrix(intiOpCode,Matrix_s*pstMatrixA,Matrix_s*pstMatrixB,Matrix_s*pstMatrixC);

externintCreateResultMatrix(unsignedcharucRow,unsignedcharucCol,void*pvData);

externintInverseMatrix(floata[],intn);

/*GuanlinLuoID:

10529749*/

#include

#include

#include

#include

#include"matrix.h"/*Wehavealreadydonethisheader.*/

#include"operate_matrix.h"/*Wehavealreadydonethisheader.*/

charg_cFlag=EX_MATRIX_UNINIT;

intmain()

{

intiInputOpCode;

intiRet=EX_FALSE;

Matrix_sstMatrixA,stMatrixB;

memset(&stMatrixA,0,sizeof(stMatrixA));

memset(&stMatrixB,0,sizeof(stMatrixB));

while

(1)

{

/*showmenu*/

(void)ShowMatrixMenu();

/*operetematrix*/

scanf("%d",&iInputOpCode);

iRet=OperateMatrix(iInputOpCode,&stMatrixA,&stMatrixB);

if(EX_TRUE==iRet)

{

if(EX_QUIT_MATRIX==iInputOpCode)

{

break;

}

}

}

if(NULL!

=stMatrixA.pfDataAdd)

{

free(stMatrixA.pfDataAdd);

}

if(NULL!

=stMatrixB.pfDataAdd)

{

free(stMatrixB.pfDataAdd);

}

returnEX_TRUE;

}

intShowMatrixMenu()/*choicesforusers.*/

{

printf("1-EntermatricesA&B\r\n");

printf("2-Addmatrices\r\n");

printf("3-Subtractmatrices\r\n");

printf("4-Multiplymatrices\r\n");

printf("5-InverseofA\r\n");

printf("6-Quitprogram\r\n");

printf("Option:

");

returnEX_TRUE;

}

intOperateMatrix(intiOpCode,Matrix_s*pstMatrixA,Matrix_s*pstMatrixB)

{

intiRet=EX_FALSE;

Matrix_sstMatrixC;

float*pfTmpBuf=NULL;

memset(&stMatrixC,0,sizeof(Matrix_s));

switch(iOpCode)

{

caseEX_INPUT_MATRIX:

iRet=Show_matrix(pstMatrixA,pstMatrixB);

if(EX_FALSE==iRet)

{

printf("errinputmatrixinfo!

\n");

returniRet;

}

else

{

/*atfirst,weneedinputmatrixdata*/

g_cFlag=EX_MATRIX_INIT;

}

break;

caseEX_ADD_MATRIX:

/*Additionpart.*/

iRet=AddMatrix(EX_ADD_MATRIX,pstMatrixA,pstMatrixB,&stMatrixC);

if(EX_TRUE!

=iRet)/*Forchecking.*/

{

printf("errmultiplymatrixoperation!

\n");

if(EX_MALLOC==iRet)

{

;

}

else

{

free(stMatrixC.pfDataAdd);

}

returniRet;

}

printf("\r\nA+B=:

\r\n");

iRet=PrintMatrixData(&stMatrixC);

if(iRet==EX_FALSE)

{

printf("errprintMatrixresult!

\r\n");

free(stMatrixC.pfDataAdd);

returniRet;

}

free(stMatrixC.pfDataAdd);

break;

caseEX_SUBTRACT_MATRIX:

/*Subtracttwomatrices*/

iRet=SubtractMatrix(EX_SUBTRACT_MATRIX,pstMatrixA,pstMatrixB,&stMatrixC);

if(EX_TRUE!

=iRet)/*Forchecking.*/

{

printf("errsubtractmatrixoperation!

\r\n");

if(EX_MALLOC==iRet)

{

;

}

else

{

free(stMatrixC.pfDataAdd);

}

returniRet;

}

printf("\r\nA-B=:

\r\n");

iRet=PrintMatrixData(&stMatrixC);

if(iRet==EX_FALSE)

{

printf("errprintMatrixresult!

\r\n");

free(stMatrixC.pfDataAdd);

returniRet;

}

free(stMatrixC.pfDataAdd);

break;

caseEX_MULTIPLY_MATRIX:

/*multiplicationpart.*/

iRet=MultiplyMatrix(EX_MULTIPLY_MATRIX,pstMatrixA,pstMatrixB,&stMatrixC);

if(EX_TRUE!

=iRet)/*Forchecking.*/

{

printf("\r\nerrmultiplymatrixoperation!

\r\n");

if(EX_MALLOC==iRet)

{

;

}

else

{

free(stMatrixC.pfDataAdd);

}

returniRet;

}

printf("\r\nA*B=:

\r\n");

iRet=PrintMatrixData(&stMatrixC);

if(EX_TRUE!

=iRet)

{

printf("errprintMatrixresult!

\r\n");

free(stMatrixC.pfDataAdd);

returniRet;

}

free(stMatrixC.pfDataAdd);

break;

caseEX_INVERSE_MATRIX:

/*inverse.*/

if(EX_MATRIX_UNINIT==g_cFlag)/*Forcheckingtheinput.*/

{

printf("pleasechoose1operationatfirst.\r\n");

returnEX_FALSE;

}

pfTmpBuf=(float*)malloc(pstMatrixA->ucRow*pstMatrixA->ucCol*sizeof(float));

if(pfTmpBuf==NULL)/*Forchecking.*/

{

printf("errmallocmemory.\r\n");

returnEX_MALLOC;

}

else

{

memset(pfTmpBuf,0,(pstMatrixA->ucRow*pstMatrixA->ucCol*sizeof(float)));

memcpy(pfTmpBuf,pstMatrixA->pfDataAdd,(pstMatrixA->ucRow*pstMatrixA->ucCol*sizeof(float)));

}

stMatrixC.ucCol=pstMatrixA->ucCol;

stMatrixC.ucRow=pstMatrixA->ucRow;

stMatrixC.pfDataAdd=pfTmpBuf;

iRet=InverseMatrix(stMatrixC.pfDataAdd,stMatrixC.ucRow);

if(EX_TRUE!

=iRet)/*Forchecking.*/

{

printf("\r\nerrinversematrixoperation!

\r\n");

if(EX_MALLOC==iRet)

{

;

}

else

{

free(stMatrixC.pfDataAdd);

}

returniRet;

}

printf("\r\nInverseofA=:

\r\n");

iRet=PrintInverseMatrixData(&stMatrixC);

if(EX_TRUE!

=iRet)/*Forchecking.*/

{

printf("errprintMatrixresult!

\r\n");

free(stMatrixC.pfDataAdd);

returniRet;

}

free(stMatrixC.pfDataAdd);

break;

caseEX_QUIT_MATRIX:

/*userschosetoendthisprogram.*/

printf("willquitmatrixmenu!

\r\n");

break;

default:

/*Forchecking.*/

printf("erroperatecode!

\r\n");

returnEX_FALSE;

}

returnEX_TRUE;

}

intCheckMatrix(intiOpCode,Matrix_s*pstMatrixA,Matrix_s*pstMatrixB)

{

if((pstMatrixA==NULL)||(pstMatrixB==NULL))

{

printf("matrixparaisnull.\r\n");

returnEX_FALSE;

}

if(EX_MATRIX_UNINIT==g_cFlag)

{

printf("pleasechoose1operationatfirst.\r\n");

returnEX_FALSE;

}

switch(iOpCode)

{

caseEX_ADD_MATRIX:

caseEX_SUBTRACT_MATRIX:

if((pstMatrixA->ucCol==pstMatrixB->ucCol)

&&(pstMatrixA->ucRow==pstMatrixB->ucRow))

{

;

}

else

{

/*ADD/Subtractoperation*/

printf("\r\nAdd/Subtractoperationisinvalid!

\r\n");

returnEX_FALSE;

}

break;

caseEX_INVERSE_MATRIX:

if((2==pstMatrixA->ucRow)

&&(2==pstMatrixA->ucCol))

{

;

}

else

{

/*Inverseoperation*/

printf("\r\nMultiply/Inverseoperationisinvalid!

\r\n");

returnEX_FALSE;

}

break;

caseEX_MULTIPLY_MATRIX:

if((pstMatrixA->ucRow==pstMatrixB->ucCol)

&&(pstMatrixA->ucCol==pstMatrixB->ucRow))

{

;

}

else

{

/*Multiplyoperation*/

printf("\r\nMultiplyoperationisinvalid!

\r\n");

returnEX_FALSE;

}

break;

default:

printf("erroperatecode!

\r\n");

returnEX_FALSE;

}

returnEX_TRUE;

}

intAddMatrix(intiOpCode,Matrix_s*pstMatrixA,Matrix_s*pstMatrixB,Matrix_s*pstMatrixC)

{

intiRet=EX_FALSE;

unsignedcharucRow;

unsignedcharucCol;

unsignedchari,j;

floatfTmpData=0.0;

if((pstMatrixA==NULL)||(pstMatrixB==NULL))

{

printf("matrixparaisnull.\r\n");

returnEX_FALSE;

}

iRet=CheckMatrix(iOpCode,pstMatrixA,pstMatrixB);

if(EX_FALSE==iRet)

{

returniRet;

}

else

{

ucRow=pstMatrixA->ucRow;

ucCol=pstMatrixA->ucCol;

}

/*createresultmatrixC*/

iRet=CreateResultMatrix(ucRow,ucCol,pstMatrixC);

if(iRet!

=EX_TRUE)

{

returniRet;

}

for(i=0;i

{

for(j=0;j

{

fTmpData=(*(pstMatrixA->pfDataAdd+i*ucCol+j)+*(pstMatrixB->pfDataAdd+i*ucCol+j));

*(pstMatrixC->pfDataAdd+i*ucCol+j)=fTmpData;

}

}

returnEX_TRUE;

}

intSubtractMatrix(intiOpCode,Matrix_s*pstMatrixA,Matrix_s*pstMatrixB,Matrix_s*pstMatrixC)

{

intiRet=EX_FALSE;

unsignedcharucRow;

unsignedcharucCol;

unsignedchari,j;

floatfTmpData=0.0;

if((pstMatrixA==NULL)||(pstMatrixB==NULL))

{

printf("matrixparaisnull.\r\n");

returnEX_FALSE;

}

iRet=CheckMatrix(iOpCode,pstMatrixA,pstMatrixB);

if(EX_FALSE==iRet)

{

returniRet;

}

else

{

ucRow=pstMatrixA->ucRow;

ucCol=pstMatrixA->ucCol;

}

/*createresultmatrixC*/

iRet=CreateResultMatrix(ucRow,ucCol,pstMatrixC);

if(iRet!

=EX_TRUE)

{

returniRet;

}

for(i=0;i

{

for(j=0;j

{

fTmpData=(*(pstMatrixA->pfDataAdd+i*ucCol+j)-*(pstMatrixB->pfDataAdd+i*ucCol+j));

*(pstMatrixC->pfDataAdd+i*ucCol+j)=fTmpData;

}

}

returnEX_TRUE;

}

intMultiplyMatrix(intiOpCode,Matrix_s*pstMatrixA,Matrix_s*pstMatrixB,Matrix_s*pstMatrixC)

{

intiRet=EX_FALSE;

unsignedcharucRow;

unsignedcharucCol;

unsignedchari,j,k;

floatfTmpData=0.0;

if((pstMatrixA==NULL)||(pstMatrixB==NULL))

{

printf("matrixparaisnull.\r\n");

returnEX_FALSE;

}

iRet=CheckMatrix(iOpCode,pstMatrixA,pstMatrixB);

if(EX_FALSE==iRet)

{

returniRet;

}

else

{

ucRow=pstMatrixA->ucRow;

ucCol=pstMatrixB->ucCol;

}

/*createresultmatrixC*/

iRet=CreateResultMatrix(ucRow,ucCol,pstMatrixC);

if(iRet!

=EX_TRUE)

{

returniRet;

}

for(i=0;i

{

for(j=0;j

{

for(k=0;

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

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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