C语言 程序问题 矩阵相加 (数据结构)

#include<stdio.h>#include<stdlib.h>#defineSMAX1024typedefstruct{inti,j;intv;}SPNode;t... #include<stdio.h>
#include<stdlib.h>
#define SMAX 1024
typedef struct
{
int i , j;
int v;
}SPNode;
typedef struct
{
int mu ,nu, tu;
SPNode b[SMAX];
}SPMatrix;
SPMatrix *newA();
SPMatrix *newB();
SPMatrix *plus(SPMatrix *A,SPMatrix *B);
void show(SPMatrix *C);
void main()
{
SPMatrix* A,*B,*C;
C = (SPMatrix *)malloc(sizeof(SPMatrix));
A = newA();
B = newB();
C = plus(A,B);
show(C);

}
SPMatrix *newA()
{
SPMatrix* _a ;
int m;
_a = (SPMatrix *)malloc(sizeof(SPMatrix));
printf("请输入矩阵A的行数,列数,及非零元素个数:(中间以','隔开):\n");
scanf("%d,%d,%d",&_a->mu,&_a->nu,&_a->tu);
printf("请按提示输入非零元素的相关信息:\n\n");
printf("----------------------------------\n");
for(m = 0;m < _a->tu;m++)
{
printf("请输入第%d个非零元素所在行数,列数,及其值:(中间以','隔开)\n",m+1);
scanf("%d,%d,%d",&_a->b[m].i,&_a->b[m].j,&_a->b[m].v);
printf("\n");
}
return _a;

}
SPMatrix *newB()
{
SPMatrix* a;
int m;
a = (SPMatrix *)malloc(sizeof(SPMatrix));
printf("请输入矩阵B的行数,列数,及非零元素个数:(中间以','隔开):\n");
scanf("%d,%d,%d",&a->mu,&a->nu,&a->tu);
printf("请按提示输入非零元素的相关信息:\n\n");
printf("----------------------------------\n");
for(m = 0;m < a->tu;m++)
{
printf("请输入第%d个非零元素所在行数,列数,及其值:(中间以','隔开)\n",m+1);
scanf("%d,%d,%d",&a->b[m].i,&a->b[m].j,&a->b[m].v);
printf("\n");
}
return a;
}
SPMatrix *plus(SPMatrix *A,SPMatrix *B)
{
SPMatrix* a;
a = (SPMatrix *)malloc(sizeof(SPMatrix));
int m,n,t = 0;
for(m = A->tu;m < (A->mu * A->nu);m++)
{
A->b[m].v = 0;
}
for(m = B->tu;m < (B->mu * B->nu);m++)
{
B->b[m].v = 0;
}
for(m = 0; m < A->tu;m++)
{
for(n = 0; n <B->tu ;n++)
{
if(A->b[m].i == B->b[n].i && A->b[m].j == B->b[n].j)
{
a->b[t].i = A->b[m].i;
a->b[t].j = A->b[m].j;
a->b[t].v = A->b[m].v + B->b[n].v;
t++;
break;
}
}
}
return a;
}
void show(SPMatrix *C)
{
int m,n,k,flag= 0;

printf("----------------------------------\n");
printf("其和矩阵为:\n");
printf("----------------------------------\n");
for(m = 1 ;m <= C->mu; m++)
{
for(n = 1 ; n <= C->nu; n++)
{
for(k = 0;k < C->tu; k++)
{
if(m == C->b[k].i && n == C->b[k].j)
{
printf("\t%d\t",C->b[k].v);
flag = 1;
break;
}
else
flag = 0;
}
if(flag == 0)
printf("\t0\t");
}
printf("\n");
}
printf("----------------------------------\n\n\n\n\n\n");
}
希望各位网友同胞们 给以解答
展开
 我来答
屋石
2012-04-10 · TA获得超过5354个赞
知道大有可为答主
回答量:1909
采纳率:86%
帮助的人:910万
展开全部
求和矩阵有问题,少了a->mu=A->mu;
a->nu=A->nu;
a->tu=t;这悔做些,即使这样,改袭求和的碧歼衡结果还不正确
追问
那  具体该如何操作 啊  ! 谢谢了啊  !
追答
将加法函数修改如下就可以了:
SPMatrix *plus(SPMatrix *A,SPMatrix *B)
{
SPMatrix* a;
a = (SPMatrix *)malloc(sizeof(SPMatrix));
int m,n,t = 0;
m=0;n=0;
while(m tu&&n tu){
if(A->b[m].i b[n].i){
a->b[t].i = A->b[m].i;
a->b[t].j = A->b[m].j;
a->b[t].v = A->b[m].v;
t++;
m++;}
else if(A->b[m].i == B->b[n].i )
{
if (A->b[m].j == B->b[n].j)
{
if(A->b[m].v + B->b[n].v){
a->b[t].i = A->b[m].i;
a->b[t].j = A->b[m].j;
a->b[t].v = A->b[m].v + B->b[n].v;
t++;
}
m++;n++;
}
else if(A->b[m].j b[n].j){
a->b[t].i = A->b[m].i;
a->b[t].j = A->b[m].j;
a->b[t].v = A->b[m].v;
t++;
m++;
}
else{
a->b[t].i = B->b[n].i;
a->b[t].j = B->b[n].j;
a->b[t].v = B->b[n].v;
t++;
n++;
}
}
else{
a->b[t].i = B->b[n].i;
a->b[t].j = B->b[n].j;
a->b[t].v = B->b[n].v;
t++;n++;
}
}

while(mtu){
a->b[t].i = A->b[m].i;
a->b[t].j = A->b[m].j;
a->b[t].v = A->b[m].v;
t++;
m++;}
while(ntu){
a->b[t].i = B->b[n].i;
a->b[t].j = B->b[n].j;
a->b[t].v = B->b[n].v;
t++;n++;}

a->mu=A->mu;
a->nu=A->nu;
a->tu=t;
return a;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式