【发布时间】:2018-08-09 18:26:02
【问题描述】:
我刚刚开始使用数据结构,并且正在通过三元组表示练习稀疏矩阵的乘法。我的代码是:
#include<stdio.h>
#include<stdlib.h>
void main(){
int smatrix1[4][3]={{1,2,10},{1,3,12},{2,1,1},{2,3,2}};
int smatrix2[4][3]={{1,1,2},{1,3,8},{2,1,5},{2,2,1}};
int i,j,x=0;
int smatrix3[4][4];
for(int i=0;i<4;){
int r=smatrix1[i][0];
for(int j=0;j<4;j++){
int c=smatrix2[j][0];
int tempa=i,tempb=j;
int sum=0;
while(tempa<=4 && smatrix1[tempa][0]==r && tempb<=4 && smatrix2[tempb][0]==c){
if(smatrix1[tempa][1]<smatrix2[tempb][1])
tempa++;
else if(smatrix1[tempa][1]>smatrix2[tempb][1])
tempb++;
else if(smatrix1[tempa][1]==smatrix2[tempb][1])
sum+=smatrix1[tempa++][2]*smatrix2[tempb++][2];
printf("%d\n",sum);
}
printf("R C SUM %d%d%d\n",r,c,sum);
if(sum!=0){
smatrix3[x][0]=r;
smatrix3[x][1]=c;
smatrix3[x][2]=sum;
x++;
}
while(j<=4 && smatrix2[j][0]==c)
j++;
}
while(i<=4 && smatrix1[i][0]==r)
i++;
}
for(int i=0;i<4;i++){
printf("%d\t%d\t%d\n",smatrix3[i][0],smatrix3[i][1],smatrix3[i][2]);
}
}
虽然所有元素都正确打印,但最后一个元素会产生垃圾值。我试图空运行它,但结果相同。谁能告诉我原因和解决方案? 编辑:我添加了
【问题讨论】:
-
快速查看您的代码似乎引用了 smatrix1[tempa],其中 tempa 可以为 4。这超出了数组的范围,因此所有行为都是未定义的。
-
是的,最初它是
标签: c algorithm data-structures