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

满意答案

02ae427d08e371d7e90d5b995e828d6d.png

ej113bq99

2013.05.11

02ae427d08e371d7e90d5b995e828d6d.png

采纳率:41%    等级:12

已帮助:10612人

这是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();

}

01分享举报

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值