求助,找不到bug
今天算是裂开了{:10_247:} 球大大看看两处注释处错在哪#include<stdio.h>
int main(){
int M=2,P=3,N=2,i,j,k;
printf("请输入第一个矩阵的尺寸M*P=");
scanf("%d*%d",&M,&P);
printf("请输入第二个矩阵的尺寸M*P=");
scanf("%d*%d",&P,&N);
int a,b;
int c;
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
c=0;
}
}//为什么用c={0};会报错。。。
printf("请输入第一个矩阵:\n");
for(i=0;i<P;i++)
{
for(j=0;j<M;j++)
{
scanf("%d",&a);
}
}
printf("请输入第二个矩阵:\n");
for(i=0;i<N;i++)
{
for(j=0;j<P;j++)
{
scanf("%d",&b);
}
}
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
for(k=0;k<P;k++)
{
c+=a*b;
}
}
}//结果不对
printf("结果是:\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
printf("%8d ",c);
}
putchar('\n');
}
return 0;
} C语言变长数组 不允许那样操作 M P N
声明为常量
#define M 2 int c = {0} ;
变量 c 的初始化是在编译阶段完成的,由于在编译阶段 M 和 N 的数值还不确定,所以,编译程序也无法确定需要为变量 c 预留多大的存储空间,并将其初始化为 0 值。
解决问题的方法是,把 M 和 N 变成常量,当然,M 和 N 得足够大,不至于出现数组空间不够用的问题。
你的程序错误好多哟!
两个矩阵输入的时候,行列都搞反了。。。
为什么用c={0};会报错。。。
因为你的数组c是可边长数组,不能在预编译的时候分配空间,所以不能这样初始化。
结果不对
数组c的结果不对,是因为你在输入数组a和b的时候,行列都搞反了。
另外数组c初始化为0.不必在前面单独写一个for循环,直接在后面计算的时候写就可以了
你的程序结构好乱啊,以后写程序还是要注意一下美观,相同层次的代码,缩进最好是一样的,更易阅读
#include<stdio.h>
int main(){
int M=2,P=3,N=2,i,j,k;
printf("请输入第一个矩阵的尺寸M*P=");
scanf("%d*%d",&M,&P);
printf("请输入第二个矩阵的尺寸M*P=");
scanf("%d*%d",&P,&N);
int a,b;
int c;
printf("请输入第一个矩阵:\n");
for(i=0;i<M;i++)//你的程序,这里行列写反了
{
for(j=0;j<P;j++)
{
scanf("%d",&a);
}
}
printf("请输入第二个矩阵:\n");
for(i=0;i<P;i++)//你的程序,这里行列写反了
{
for(j=0;j<N;j++)
{
scanf("%d",&b);
}
}
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
c=0; //数组c在这里初始化即可
for(k=0;k<P;k++)
{
c+=a*b;
}
}
}
printf("结果是:\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
printf("%8d ",c);
}
putchar('\n');
}
return 0;
} sunrise085 发表于 2020-9-12 12:40
你的程序错误好多哟!
两个矩阵输入的时候,行列都搞反了。。。
感谢大大!{:10_250:}格式我一定会改正的。
内外层反了这个问题,我刚刚检查出来的时候内心是崩溃的{:10_285:}
页:
[1]