【实现】用C语言实现矩阵运算
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【关键字】实现
//任务二:矩阵的基本运算
#include<stdio.h>
#include<stdlib.h>
#define R1 4//矩阵MA行数,可以按具体情况修改
#define C1 4//矩阵MA列数,可以按具体情况修改
#define R2 4//矩阵MB行数,可以按具体情况修改
#define C2 4//矩阵MB列数,可以按具体情况修改
void Scalar(float MA[][C1]);
void Transposition(float MA[][C1]);
void Add(float MA[][C1],float MB[][C2]);
void Subtraction(float MA[][C1],float MB[][C2]);
void Multiplication(float MA[][C1],float MB[][C2]);
void main()
{
float MA[R1][C1],MB[R2][C2];
int c;
while(1)
{
printf("功能如下:\n");
printf("数乘矩阵1\n");
printf("矩阵转换2\n");
printf("矩阵相加3\n");
printf("矩阵相减4\n");
printf("矩阵乘法5\n");
printf("结束0\n");
printf("请选定您需要的操作:\n");
scanf("%d",&c);
switch(c)
{
case 1:
Scalar(MA);
break;
case 2:
Transposition(MA);
break;
case 3:
if((R1==R2)&&(C1==C2))
Add(MA,MB);
else
printf("矩阵MA与矩阵MB不能相减!\n");
break;
case 4:
if((R1==R2)&&(C1==C2))
Subtraction(MA,MB);
else
printf("矩阵MA与矩阵MB不能相加!\n");
break;
case 5:
if(C1==R2)
Multiplication(MA,MB);
else
printf("矩阵MA与矩阵MB不能相乘!\n");
break;
case 0:
printf("结束!\n");
exit(0);
break;
default:
printf("对不起,您的输入不合法!\n");
break;
}
}
}
void Scalar(float MA[][C1])//矩阵数乘函数
{
int i,j,k;
printf("请输入乘数:\n");
scanf("%d",&k);
printf("请输入%d*%d矩阵MA(每行以回车结束):\n",R1,C1);
for(i=0;i<R1;i++)
{
for(j=0;j<C1;j++)
{
scanf("%f",&MA[i][j]);
}
}
printf("%d乘矩阵MA结果为:\n",k);
for(i=0;i<R1;i++)
{
for(j=0;j<C1;j++)
{
printf("%6.2f ",k*MA[i][j]);
}
printf("\n");
}
}
void Transposition(float MA[][C1])//矩阵转置函数
{
int i,j;
float MD[C1][R1]={0};
printf("请输入%d*%d矩阵MA(每行以回车结束):\n",R1,C1);
for(i=0;i<R1;i++)
{
for(j=0;j<C1;j++)
{
scanf("%f",&MA[i][j]);
}
}
for(i=0;i<R1;i++)//将矩阵MA的第n行的值赋给矩阵MD的第n列{
for(j=0;j<C1;j++)
{
MD[j][i]=MA[i][j];
}
}
printf("矩阵MA转置后的结果为:\n");
for(i=0;i<C1;i++)
{
for(j=0;j<R1;j++)
{
printf("%6.2f ",MD[i][j]);
}
printf("\n");
}
}
void Add(float MA[][C1],float MB[][C2])//矩阵加法函数
{
int i,j;
float ME[R1][C1]={0};
printf("请输入%d*%d矩阵MA(每行以回车结束):\n",R1,C1);
for(i=0;i<R1;i++)
{
for(j=0;j<C1;j++)
{
scanf("%f",&MA[i][j]);
}
}
printf("请输入%d*%d矩阵MB(每行以回车结束):\n",R2,C2);
for(i=0;i<R2;i++)
{
for(j=0;j<C2;j++)
{
scanf("%f",&MB[i][j]);
}
}
for(i=0;i<R1;i++)
{
for(j=0;j<C1;j++)
{
ME[i][j]=MA[i][j]+MB[i][j];
}
}
for(i=0;i<R1;i++)
{
for(j=0;j<C1;j++)
{
printf("%6.2f ",ME[i][j]);
}
printf("\n");
}
}
void Subtraction(float MA[][C1],float MB[][C2])//矩阵减法函数{
int i,j;
float MF[R1][C1]={0};
printf("请输入%d*%d矩阵MA(每行以回车结束):\n",R1,C1);
for(i=0;i<R1;i++)
{
for(j=0;j<C1;j++)
{
scanf("%f",&MA[i][j]);
}
}
printf("请输入%d*%d矩阵MB(每行以回车结束):\n",R2,C2);
for(i=0;i<R2;i++)
{
for(j=0;j<C2;j++)
{
scanf("%f",&MB[i][j]);
}
}
for(i=0;i<R1;i++)
{
for(j=0;j<C1;j++)
{
MF[i][j]=MA[i][j]-MB[i][j];
}
}
for(i=0;i<R1;i++)
{
for(j=0;j<C1;j++)
{
printf("%6.2f ",MF[i][j]);
}
printf("\n");
}
}
void Multiplication(float MA[][C1],float MB[][C2])//矩阵相乘函数{
int i,j,k;
float MG[R1][C2]={0};
printf("请输入%d*%d矩阵MA(每行以回车结束):\n",R1,C1);
for(i=0;i<R1;i++)
{
for(j=0;j<C1;j++)
{
scanf("%f",&MA[i][j]);
}
}
printf("请输入%d*%d矩阵MB(每行以回车结束):\n",R2,C2);
for(i=0;i<R2;i++)
{
for(j=0;j<C2;j++)
{
scanf("%f",&MB[i][j]);
}
}
for(i=0;i<R1;i++)
{
for(j=0;j<C2;j++)
{
for(k=0;k<C1;k++)
{
MG[i][j]=MG[i][j]+MA[i][k]*MB[k][j];
}
}
}
for(i=0;i<R1;i++)
{
for(j=0;j<C2;j++)
{
printf("%6.2f ",MG[i][j]);
}
printf("\n");
}
}
此文档是由网络收集并进行重新排版整理.word可编辑版本!。