C语言题目:输入两个矩阵,a[m][n]和b[n][p];求他们的乘积
描述:输入两个个矩阵的行列mn;并输入其数值如:输入3212345623123456输出:91215192633294051我写的是这样的,但错了,哪位大神帮我看看?#i...
描述:输入两个个矩阵的行 列 m n;并输入其数值
如:输入
3
2
1 2
3 4
5 6
2
3
1 2 3
4 5 6
输出:
9 12 15
19 26 33
29 40 51
我写的是这样的,但错了,哪位大神帮我看看?
#include<stdio.h>
void main()
{
double a[100][100],b[100][100],h[100][100];
int m,n,p,q,i,j,k,l,c,d;
scanf("%d %d",&m,&n);//输入行数和列数
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%lf",&a[i][j]);//输入第一个矩阵
scanf("%d %d",&p,&q);//输入行数和列数
for(l=0;l<p;l++)
for(k=0;k<q;k++)
scanf("%lf",&a[l][k]);//输入第二个矩阵
for(c=0;c<m;c++)//行数小于等于第一个矩阵的行数
for(d=0;d<q;d++)//列数小于等于第二个矩阵的列数
{
for(i=0,k=0;i<m,k<q;i++,k++)//第一个矩阵行数和第二个矩阵列数
for(j=0,l=0;j<n,l<p;j++,l++)
h[c][d]+=a[i][j]*b[l][k];//计算
}
for(c=0;c<m;c++)
{
for(d=0;d<q;d++)
printf("%.0f",h[c][d]);//输出
printf("\n");
}
}
水平不行,算法比较难看懂噢,如果不想改的话请帮我写一个,我琢磨下,嘿嘿......要是C编写的,其他没学
? 展开
如:输入
3
2
1 2
3 4
5 6
2
3
1 2 3
4 5 6
输出:
9 12 15
19 26 33
29 40 51
我写的是这样的,但错了,哪位大神帮我看看?
#include<stdio.h>
void main()
{
double a[100][100],b[100][100],h[100][100];
int m,n,p,q,i,j,k,l,c,d;
scanf("%d %d",&m,&n);//输入行数和列数
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%lf",&a[i][j]);//输入第一个矩阵
scanf("%d %d",&p,&q);//输入行数和列数
for(l=0;l<p;l++)
for(k=0;k<q;k++)
scanf("%lf",&a[l][k]);//输入第二个矩阵
for(c=0;c<m;c++)//行数小于等于第一个矩阵的行数
for(d=0;d<q;d++)//列数小于等于第二个矩阵的列数
{
for(i=0,k=0;i<m,k<q;i++,k++)//第一个矩阵行数和第二个矩阵列数
for(j=0,l=0;j<n,l<p;j++,l++)
h[c][d]+=a[i][j]*b[l][k];//计算
}
for(c=0;c<m;c++)
{
for(d=0;d<q;d++)
printf("%.0f",h[c][d]);//输出
printf("\n");
}
}
水平不行,算法比较难看懂噢,如果不想改的话请帮我写一个,我琢磨下,嘿嘿......要是C编写的,其他没学
? 展开
3个回答
展开全部
#include<stdio.h>
int main()
{
double a[100][100],b[100][100],h[100][100];
int m,n,p,q,i,j,k,l,c,d;
scanf("%d %d",&m,&n);//输入行数和列数
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
{
scanf("%lf",&a[i][j]);//输入第一个矩阵
}
}
scanf("%d %d",&p,&q);//输入行数和列数
for(l=0; l<p; l++)
{
for(k=0; k<q; k++)
{
scanf("%lf",&b[l][k]);//输入第二个矩阵
}
}
for(c=0; c<m; c++) //行数小于等于第一个矩阵的行数
{
for(d=0; d<q; d++) //列数小于等于第二个矩阵的列数
{
int sum = 0;
for(k=0; k<n; k++) //第一个矩阵行数和第二个矩阵列数
{
sum +=a[c][k]*b[k][d];//计算
}
h[c][d] = sum;
}
}
for(c=0; c<m; c++)
{
for(d=0; d<q; d++)
{
printf("%.0f ",h[c][d]);//输出
}
printf("\n");
}
return 0;
}
两处错,输入第二个矩阵要用b
然后回去好好翻翻矩阵运算的公式,照着公式算。
然后按楼上说的,每个都括起来,没坏处
展开全部
#include<stdio.h>
#include<stdlib.h>
main()
{
double a[100][100],b[100][100],h[100][100]={0};
int m,n,p,q,i,j,k,l,c,d;
scanf("%d %d",&m,&n);//输入行数和列数
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%lf",&a[i][j]);//输入第一个矩阵
scanf("%d %d",&p,&q);//输入行数和列数
for(l=0;l<p;l++)
for(k=0;k<q;k++)
scanf("%lf",&b[l][k]);//输入第二个矩阵
//从此开始修改!!!!!!!!!!!!!!!!!!!!!!
if(p!=n){printf("不能相乘!\n");return 0;}
for(c=0;c<m;c++)//行数小于等于第一个矩阵的行数
for(d=0;d<q;d++)//列数小于等于第二个矩阵的列数
{
for(k=0;k<n;k++)
h[c][d]+=a[c][k]*b[k][d];//计算
}
for(c=0;c<m;c++)
{ for(d=0;d<q;d++)
printf("%3.0f",h[c][d]);//输出
printf("\n");
}
system("pause");
}
你的矩阵乘法写错了,具体写法可以到百度百科查
还有你俩次输入矩阵用的都是a数组,b数组根本就是空的
你没有判断两个矩阵相乘的条件,即前列等于后行
最后,你的矩阵里会有小数吗?
printf("%.0f",h[c][d]);//输出
如果有,为什么最后输出还不要小数位?如果不需要建议你都把它改成int,输出%d,容错率更高
至于我最后只给你卡了三位输出,如果不够你可以自己改
#include<stdlib.h>
main()
{
double a[100][100],b[100][100],h[100][100]={0};
int m,n,p,q,i,j,k,l,c,d;
scanf("%d %d",&m,&n);//输入行数和列数
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%lf",&a[i][j]);//输入第一个矩阵
scanf("%d %d",&p,&q);//输入行数和列数
for(l=0;l<p;l++)
for(k=0;k<q;k++)
scanf("%lf",&b[l][k]);//输入第二个矩阵
//从此开始修改!!!!!!!!!!!!!!!!!!!!!!
if(p!=n){printf("不能相乘!\n");return 0;}
for(c=0;c<m;c++)//行数小于等于第一个矩阵的行数
for(d=0;d<q;d++)//列数小于等于第二个矩阵的列数
{
for(k=0;k<n;k++)
h[c][d]+=a[c][k]*b[k][d];//计算
}
for(c=0;c<m;c++)
{ for(d=0;d<q;d++)
printf("%3.0f",h[c][d]);//输出
printf("\n");
}
system("pause");
}
你的矩阵乘法写错了,具体写法可以到百度百科查
还有你俩次输入矩阵用的都是a数组,b数组根本就是空的
你没有判断两个矩阵相乘的条件,即前列等于后行
最后,你的矩阵里会有小数吗?
printf("%.0f",h[c][d]);//输出
如果有,为什么最后输出还不要小数位?如果不需要建议你都把它改成int,输出%d,容错率更高
至于我最后只给你卡了三位输出,如果不够你可以自己改
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-12-04
展开全部
最好每个for循环都用{ }
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询