马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在做小甲鱼的课后作业S1E25动动手第0题(https://fishc.com.cn/forum.php?m ... peid%26typeid%3D570)
我把矩阵计算的结果储存在了数组c[m][n]里面,然后发现一个不能理解的事情
c[m][n]是动态数组,我先把每一个元素初始化为0以后,把计算结果逐个赋值进去了,最后打印得到的结果就跟答案一模一样
但是我要是没有初始化为0,虽然后面也是逐个赋值了,但是打印得到的却是一堆随机数
为什么会出现这种情况呢,初始化和不初始化有什么差别吗,不是最后都被我赋值了吗?
未初始化c[m][n]的结果
以下是我写的代码:#include<stdio.h>
int main()
{
int m,n,p;
int i,j,k;
printf("请输入第一个矩阵的尺寸(M*P):");
scanf("%d*%d",&m,&p) ;
printf("请输入第二个矩阵的尺寸(P*N):");
scanf("%d*%d",&p,&n) ;
printf("请输入第一个矩阵的值:\n");
// 申明
int a[m][p];
int b[p][n];
// 录入
for(i=0;i<m;i++)
{
for(j=0;j<p;j++)
{
scanf("%d",&a[i][j]);
}
}
printf("请输入第二个矩阵的值:\n");
for(i=0;i<p;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&b[i][j]);
}
}
// 结果计算及储存
int c[m][n];
// 初始化
// for(i=0;i<m;i++)
// {
// for(j=0;j<n;j++)
// {
// c[i][j]=0;
// }
// }
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
for(k=0;k<p;k++)
{
c[i][j]+=a[i][k]*b[k][j];
}
}
}
// 打印
printf("计算结果如下:\n");
for(i=0;i<p;i++)
{
if(i<m)
{
printf("| ");
for(j=0;j<p;j++)
{
printf("%d ",a[i][j]);
}
if(i+1==(p+1)/2)
{
printf("| * | ");
}
else
{
printf("| | ");
}
for(j=0;j<n;j++)
{
printf("%d ",b[i][j]);
}
if(i+1==(p+1)/2)
{
printf("| = | ");
}
else
{
printf("| | ");
}
for(j=0;j<n;j++)
{
printf("%d ",c[i][j]);
}
printf("|\n");
}
else
{
printf(" ");
for(j=0;j<p;j++)
{
printf(" ");
}
printf(" | ");
for(j=0;j<n;j++)
{
printf("%d ",b[i][j]);
}
printf("|\n");
}
}
return 0;
}
c[i][j]+=a[i][k]*b[k][j];
等价于 c[i][j] = c[i][j] + a[i][k]*b[k][j];
没问题吧
所以,是先使用,还是先赋值?
|