请C语言高手帮忙编写两个稀疏矩阵相加的程序,急!!!

要求:只输入非0元素,以带行逻辑压缩存储,两个矩阵相加,再以矩阵形式打印. 急!

这是c++版本的 如果用tc要去掉#include <malloc.h> 将中文提示换成英文的

#include <stdio.h>
#include <conio.h>
#include <malloc.h>
#include <math.h>
#define MAXSIZE 1000

typedef struct
{
int x,y;
int value;
}element;

typedef struct
{
element data[MAXSIZE+1];
int m,n,length;
}tip;

tip *a;
tip *b;
tip *jvzhenanswer;
int i,j,k,l,o,p,q;

void clear(int i,int j,int k)
{
if(i==0)
{
jvzhenanswer->data[k].x=b->data[j].x;
jvzhenanswer->data[k].y=b->data[j].y;
jvzhenanswer->data[k].value=b->data[j].value;
}
else
{
jvzhenanswer->data[k].x=a->data[i].x;
jvzhenanswer->data[k].y=a->data[i].y;
jvzhenanswer->data[k].value=a->data[i].value;
}
}
void add(void)
{
if (a->m!=b->m||a->n!=b->n)
{
printf("error");
return;
}
jvzhenanswer->m=a->m;
jvzhenanswer->n=a->n;
for(i=1,j=1,k=1;i<=a->length||j<=b->length;)
{
if(i>a->length)
{
like(0,j,k);
j++;k++;
continue;
}
if(j>b->length)
{
like(i,0,k);
i++;k++;
continue;
}
if(a->data[i].x<b->data[j].x)
{
like(i,0,k);
i++;k++;
continue;
}
if(a->data[i].x>b->data[j].x)
{
like(0,j,k);
j++;k++;
continue;
}
if(a->data[i].x==b->data[j].x)
{
if(a->data[i].y<b->data[j].y)
{

like(i,0,k);

i++;k++;

continue;
}
if(a->data[i].y>b->data[j].y)
{

like(0,j,k);

j++;k++;

continue;
}
if(a->data[i].y==b->data[j].y)
{

jvzhenanswer->data[k].value=a->data[i].value+b->data[j].value;

jvzhenanswer->data[k].x=a->data[i].x;

jvzhenanswer->data[k].y=a->data[i].y;

if(jvzhenanswer->data[k].value==0) {i++;j++;continue;}

i++;j++;k++;

continue;
}
}
}
jvzhenanswer->length=k-1;
}

void input(int z)
{
printf("请输入第%d个矩阵的行列数 以逗号隔开\
",z);
i=0;
a->data[0].x=1;
b->data[0].x=1;
if(z==1)
{

scanf("%d,%d",&a->m,&a->n);
printf("请输入矩阵元素,以 0,0,0 结束\
");
while(a->data[i].x!=0)
{
i++;
printf("请输入第%d个非零元素的坐标及值\\t",i);
scanf("%d,%d,%d",&a->data[i].x,&a->data[i].y,&a->data[i].value);

}
a->length=i-1;
return;
}
else
{
scanf("%d,%d",&b->m,&b->n);
printf("请输入矩阵元素,以 0,0,0 结束年\
");
while(b->data[i].x!=0)
{
i++;
printf("请输入第%d个非零元素的坐标及值\\t",i);
scanf("%d,%d,%d",&b->data[i].x,&b->data[i].y,&b->data[i].value);

}
b->length=i-1;
return;
}
}

void output()
{
k=1;
for(i=1;i<=jvzhenanswer->m;i++)
{
for(j=1;j<=jvzhenanswer->n;j++)
{
if(jvzhenanswer->data[k].x>i||(jvzhenanswer->data[k].x==i&&jvzhenanswer->data[k].y>j))
{

printf("0\\t");
}
else
{

printf("%d\\t",jvzhenanswer->data[k].value);

k++;
}
}
printf("\
");
}

}

void main()
{

char c;
long temp;
a=(tip *)malloc(sizeof(tip));
b=(tip *)malloc(sizeof(tip));
jvzhenanswer=(tip *)malloc(sizeof(tip));
for(i=1;i<=MAXSIZE+1;i++) jvzhenanswer->data[i].value=0;
input(1);
input(2);
add();
output();
printf("\
\
thank you!! \
\\tcopyright 2006\
\\tclear\
");
getche();
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-12-04
你先 那个啥 然后再那个啥 然后在那个啥 然后在那个啥 ........就好了
相似回答
大家正在搜