我刚刚开始数据结构,并且我正在通过三元组表示来练习稀疏矩阵的乘法。我的代码是:
#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]);
}
}
虽然所有元素都可以正确打印,但是最后一个元素会导致垃圾值。我尝试空运行它,但结果相同。谁能告诉我原因以及解决方法? 编辑:我添加了<= 4而不是<4,以防最后一个元素由于postscript ++运算符而被忽略。添加或删除=符号完全无效。
答案 0 :(得分:4)
编辑:这是您的问题。该行不应递增j:
更改:
for(int j=0;j<4;j++){
收件人:
for(int j=0;j<4;){
另外,对<= 4'的所有比较都应为'<4'