线性代数·矩阵的加法减法乘法运算简单实现

来源:互联网 发布:下载站系统源码 编辑:程序博客网 时间:2024/04/30 17:38
#include <stdio.h>#include <stdlib.h>typedef int Array_Size;typedef struct matrix{Array_Size ** array;int line;int cow;}Matrix;void Addition(Matrix &A,Matrix &B);//加法运算 A+B=C void Subtraction(Matrix &A,Matrix &B);//减法运算 A-B=C void Multiplication(Matrix &A,Matrix &B);//乘法运算 A*B=C void PrintSolution(Matrix &A,Matrix &B,Matrix &C,char op);//输出运算结果 void MatrixInit(Matrix &A,Matrix &B);//矩阵数据初始化 void PrintArray(Matrix &T);//打印一个矩阵信息 void DestroyArray(Matrix &T);//销毁一个矩阵 void Addition(Matrix &A,Matrix &B){int i,j;Matrix C;if(A.line != B.line || A.cow != B.cow){printf("Can't Match!\n");return;}C.line = A.line;C.cow = A.cow;C.array = (Array_Size **)malloc(C.line * sizeof(Array_Size *));for(i=0;i<C.line;i++)C.array[i] = (Array_Size *)malloc(C.line * sizeof(Array_Size));for(i=0;i<C.line;i++)for(j=0;j<C.cow;j++)C.array[i][j] = A.array[i][j] + B.array[i][j];PrintSolution(A,B,C,'+');DestroyArray(C);}void Subtraction(Matrix &A,Matrix &B){int i,j;Matrix C;if(A.line != B.line || A.cow != B.cow){printf("Can't Match!\n");return;}C.line = A.line;C.cow = A.cow;C.array = (Array_Size **)malloc(C.line * sizeof(Array_Size *));for(i=0;i<C.line;i++)C.array[i] = (Array_Size *)malloc(C.line * sizeof(Array_Size));for(i=0;i<C.line;i++)for(j=0;j<C.cow;j++)C.array[i][j] = A.array[i][j] - B.array[i][j];PrintSolution(A,B,C,'-');DestroyArray(C);}void Multiplication(Matrix &A,Matrix &B){int Aline,Acow,Bcow;int i;Array_Size sum;Matrix C;if(A.line != B.cow || A.cow != B.line){printf("Can't Match!\n");return;}C.line = C.cow = A.line;C.array = (Array_Size **)malloc(C.line * sizeof(Array_Size *));for(i=0;i<C.line;i++)C.array[i] = (Array_Size *)malloc(C.line * sizeof(Array_Size));//A.line == B.cow  A.cow == B.linefor(Aline = 0;Aline < A.line;Aline++){for(Bcow = 0;Bcow < B.cow;Bcow++){sum = 0;for(Acow = 0;Acow < A.cow;Acow++){//完成C矩阵一个数的处理 sum += A.array[Aline][Acow] * B.array[Acow][Bcow];}C.array[Aline][Bcow] = sum;}}PrintSolution(A,B,C,'*');DestroyArray(C);}void PrintArray(Matrix &T){int i,j;for(i=0;i<T.line;i++){printf("| ");for(j=0;j<T.cow;j++)printf("%d ",T.array[i][j]);printf("|\n");}}void PrintSolution(Matrix &A,Matrix &B,Matrix &C,char op){PrintArray(A);printf("%c\n",op);PrintArray(B);printf("==\n");PrintArray(C);printf("\n");}void MatrixInit(Matrix &A,Matrix &B){int line,cow;printf("input the A's line and cow:\n");scanf("%d%d",&A.line,&A.cow);A.array = (Array_Size **)malloc(A.line * sizeof(Array_Size *));for(line=0;line<A.line;line++)A.array[line] = (Array_Size *)malloc(A.cow * sizeof(Array_Size));printf("input A's value,per line:\n");for(line = 0;line < A.line;line++)for(cow = 0;cow < A.cow;cow++)scanf("%d",A.array[line]+cow);printf("input the B's line and cow:\n");scanf("%d%d",&B.line,&B.cow);B.array = (Array_Size **)malloc(B.line * sizeof(Array_Size *));for(line=0;line<B.line;line++)B.array[line] = (Array_Size *)malloc(B.cow * sizeof(Array_Size));printf("input B's value,per line:\n");for(line = 0;line < B.line;line++)for(cow = 0;cow < B.cow;cow++)scanf("%d",B.array[line]+cow);}void DestroyArray(Matrix &T){int i;for(i=0;i<T.line;i++)free(T.array[i]);}int main(void){Matrix A,B;MatrixInit(A,B);//加法运算 Addition(A,B);//减法运算Subtraction(A,B);//乘法运算 Multiplication(A,B);return 0;}

0 0
原创粉丝点击