C语言题目:输入两个矩阵,a[m][n]和b[n][p];求他们的乘积

描述:输入两个个矩阵的行 列 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编写的,其他没学

?
最新回答
陌念念

2024-05-01 06:23:14

#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

然后回去好好翻翻矩阵运算的公式,照着公式算。

然后按楼上说的,每个都括起来,没坏处

有校服就不用买情侣装了

2024-05-01 03:40:59

#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,容错率更高
至于我最后只给你卡了三位输出,如果不够你可以自己改
许多

2024-05-01 13:15:16

最好每个for循环都用{ }