急!!!稀疏矩阵三元组实现两个矩阵相加?程序有误!求高手帮忙!!
答案:2 悬赏:0 手机版
解决时间 2021-02-10 07:32
- 提问者网友:送舟行
- 2021-02-10 02:47
题目如下
A(x)=x(12)^4+4x(1)+1
B(x)=3x(7)^6+x(1)^2+2x(1)
C(X)=A(x)+B(x)
x右边的括号是下标
我使用顺序存储的方法,望高手帮我看看错在哪了
mytc运行后显示:64行 变量语法错误
也就是进行加法的那个函数
#include
#include
#define MaxTerms 100
#define MaxRows 100
#define MaxColumns 100
typedef int ElemType;
struct Triple {
int row,col;
ElemType val;
};
struct SMatrix{
int m, n, t;
struct Triple sm[MaxTerms+1];
};
void InitMatrix(struct SMatrix* M)
{
M->m=0;
M->n=0;
M->t=0;
}
void InputMatrix(struct SMatrix* M,int m,int n)
{
int k=0;
int row,col;
ElemType val;
M->m=m;M->n=n;
printf("input the row col and val:\n");
scanf("%d %d %d",&row,&col,&val);
while(row!=0)
{
k++;
M->sm[k].row=row;
M->sm[k].col=col;
M->sm[k].val=val;
scanf("&d &d &d",&row,&col,&val);
}
M->t=k;
}
void OutputMatrix(struct SMatrix* M)
{
int i;
printf("(");
for(i=1;it;i++)
{
printf("(%d,&d,&d),",M->sm[i].row,M->sm[i].col,M->sm[i].val);
}
if(M->t!=0)
{
printf("(%d,&d,&d)",M->sm[M->t].row,M->sm[M->t].col,M->sm[M->t].val);
}
printf(")\n");
}
void AddMatrix(smat A,smat B,smar C)
{
int i=1,j=1,k=1;
while(i<=A[0][2] && j<=B[0][2])
if(A[i][0]==B[j][0])
if(A[i][1] {
C[k][0]=A[i][0];
C[k][1]=A[i][1];
C[k][2]=A[i][2];
k++;i++;
}
else if(A[i][1]>B[j][1])
{
C[k][0]=B[j][0];
C[k][1]=B[j][1];
C[k][2]=B[j][2];
k++;j++;
}
else
{
C[k][0]=B[j][0];
C[k][1]=B[j][1];
C[k][2]=A[i][2]+B[j][2];
k++;i++;j++;
}
else if(A[i][0] {
C[k][0]=A[i][0]; C[k][1]=A[i][1];
C[k][2]=A[i][2];
k++; i++;
}
else
{
C[k][0]=B[j][0]; C[k][1]=B[j][1];
C[k][2]=B[j][2];
k++; j++;
}
while(i<=A[0][2])
{
C[k][0]=A[i][0]; C[k][1]=A[i][1];
C[k][2]=A[i][2];
k++; i++;
}
while(j<=B[0][2])
{
C[k][0]=B[j][0]; C[k][1]=B[j][1];
C[k][2]=B[j][2];
k++; j++;
}
}
void main()
{
struct SMatrix s1,s2,s3;
InitMatrix(&s1);
InputMatrix(&s1,12,7);
OutputMatrix(&s1);
InitMatrix(&s2);
InputMatrix(&s2,12,7);
OutputMatrix(&s2);
InitMatrix(&s1);
InputMatrix(&s3,12,7);
AddMatrix(&s1,&s2,&s3);
OutputMatrix(s3);
}
最佳答案
- 五星知识达人网友:狂恋
- 2021-02-10 03:12
这是c++版本的 如果用tc要去掉#include 将中文提示换成英文的
#include
#include
#include
#include
#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].xdata[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].ydata[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++;k++;
continue;
}
}
}
jvzhenanswer->length=k-1;
}
void input(int z)
{
printf("请输入第%d个矩阵的行列数 以逗号隔开\n",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 结束\n");
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 结束年\n");
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("\n");
}
}
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("\n\nthank you!! \n\tcopyright 2006\n\tclear\n");
getche();
}
全部回答
#include <iostream>
#include <iomanip>
using namespace std;
int hang;
int lie;
struct node
{
int ha,li;
int value;
};
//创建三元组稀疏矩阵
node *credit()
{
cout<<"请输入矩阵的非零元素个数:";
int sum;
cin>>sum;
node * a;
a=new node[sum+1];
a[0].value=sum;
cout<<"请输入每个非零元素的具体信息:"<<endl;
for(int i=1;i<=sum;i++)
cin>>a[i].ha>>a[i].li>>a[i].value;
return a;
}
//将三元组矩阵转换成行列式
int display(const node *a)
{
int m=1;
for(int i=1;i<=hang;i++)
{
for(int j=1;j<=lie;j++)
{
if((m<=a[0].value)&&a[m].ha==i&&a[m].li==j)
{
cout<<setw(4)<<a[m].value;
m++;
}
else
cout<<setw(4)<<"0";
}
cout<<endl;
}
return 0;
}
node *add(const node *a,const node *b)
{
int a,b,c;
a=b=c=1;//a,b,c分别用来表示三元组的下标
int c_sum;
if((a[0].value+b[0].value)<(hang*lie))
c_sum=a[0].value+b[0].value;
else
c_sum=hang*lie;
node *c=new node[c_sum+1];
for(int i=1;i<=hang;i++)
{
while((a[a].ha)==i&&(b[b].ha)==i)//两结点在同一行
{
if((a[a].li)<(b[b].li))//a的a结点的列数小于b的b结点列数
{
c[c].ha=a[a].ha;
c[c].li=a[a].li;
c[c].value=a[a].value;
a++;
c++;
}
if((a[a].li)==(b[b].li))//a的a结点的列数等于b的b结点列数
{
int he=a[a].value+b[b].value;//求两结点之和
if(he==0)//两结点之和等于0,c的三元组不需要添加元素
{
a++;
b++;
}
else
{
c[c].ha=a[a].ha;
c[c].li=a[a].li;
c[c].value=he;
a++;
b++;
c++;
}
}
else//a的a结点的列数大于b的b结点列数
{
c[c].ha=b[a].ha;
c[c].li=b[a].li;
c[c].value=b[a].value;
b++;
c++;
}
}//while
while((a[a].ha)==i)//只有a三元组剩下第i行的元素
{
c[c].ha=a[a].ha;
c[c].li=a[a].li;
c[c].value=a[a].value;
a++;
c++;
}
while((b[b].ha)==i)//只有b三元组剩下第i行的元素
{
c[c].ha=b[a].ha;
c[c].li=b[a].li;
c[c].value=b[a].value;
b++;
c++;
}
}//for()
c[0].value=c-1;//可以看出当c三元组只有n个元素时,c=n+1;
return c;
}
int main()
{
cout << "hello world!" << endl;
cout<<"请输入两个稀疏矩阵的行数与列数:"<<endl;
cin>>hang>>lie;
node *p1,*p2,*sum;
p1=credit();
cout<<"该矩阵的行列式为:"<<endl;
display(p1);
p2=credit();
cout<<"该矩阵的行列式为:"<<endl;
display(p2);
cout<<"以上两个矩阵的和矩阵为:"<<endl;
sum=add(p1,p2);
display(sum);
delete []p1;
delete []p2;
delete []sum;
return 0;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯