编写用“三元组表”存储稀疏矩阵,进行矩阵处理的程序。实现(1)矩阵转置 (2)矩阵相加 30
2016-11-24
展开全部
矩阵加减注意格式
#include <stdio.h>
#define maxsize 20
typedef int data;
typedef struct
{
int i,j;
data v;
}mat;
typedef struct
{
int m,n,t;
mat dtt[maxsize+1];
}matrix;
matrix a,b,c;
void transmat(matrix a,matrix *b)
{
int p,q,col;
b->m=a.n;
b->n=a.m;
b->t=a.t;
if(a.t!=0)
{
q=1;
for(col=1;col<=a.n;col++)
for(p=1;p<=a.t;p++)
if(a.dtt[p].j==col)
{
b->dtt[q].j=a.dtt[p].i;
b->dtt[q].i=a.dtt[p].j;
b->dtt[q].v=a.dtt[p].v;
q++;
}
}
}
void creat(matrix *x)
{
printf("\nn,m,t=?");
scanf("%d,%d,%d",&x->n,&x->兆棚m,&x->t);
for(int i=1;i<=x->t;i++)
{
printf("\ni,j,v=?");
scanf("%d,%d,%d",&x->dtt[i].i,&x->dtt[i].j,&x->dtt[i].v);
}
}
void mout(matrix x)
{
printf("\nn,m,t=");
printf("%d,%d,%d\n",x.n,x.m,x.t);
for(int i=1;i<=x.t;i++)
{
printf("\ni,j,v=");
printf("%d,%d,%d\族虚则n",x.dtt[i].i,x.dtt[i].j,x.dtt[i].v);
}
}
void jiajian(matrix x,matrix y,matrix *b)
{
int t;
printf("\n1加");
printf("\n2减\n\n");
scanf("%d",&t);
if(t==1)
{
int s=0,j=1,z=1;
b->m=x.m;
b->n=x.n;
for(int i=1;i<=b->n;i++)
{
for(;j<=x.t,z<=y.t;)
{
if(x.dtt[j].i!=i&&y.dtt[z].i!=i)
{
break;
}
else if(x.dtt[j].i!=i)
{
s++;
b->dtt[s].i=i;
b->dtt[s].j=y.dtt[z].j;
b->dtt[s].v=y.dtt[z].v;
z++;
}
else if(y.dtt[z].i!=i)
{
s++;
b->dtt[s].i=i;
b->dtt[s].j=x.dtt[j].j;
b->dtt[s].v=x.dtt[j].v;
j++;
}
else if(x.dtt[j].j>y.dtt[z].j)
{
s++;
b->dtt[s].i=i;
b->dtt[s].j=y.dtt[z].j;
b->dtt[s].v=y.dtt[z].v;
z++;
}
else if(x.dtt[j].j==y.dtt[z].j)
{
s++;
b->dtt[s].i=i;
b->dtt[s].j=y.dtt[z].j;
b->dtt[s].v=y.dtt[z].v+x.dtt[j].v;
z++;
j++;
}
else if(x.dtt[j].j<y.dtt[z].j)
{
s++;
b->dtt[s].i=i;
b->dtt[s].j=x.dtt[j].j;
b->dtt[s].v=x.dtt[j].v;
j++;
}
}
}
b->t=s;
}
else if(t==2)
{
int s=0,j=1,z=1;
b->m=x.m;
b->n=x.n;
for(int i=1;i<=b->n;i++)
{
for(;j<=x.t,z<=y.t;)
{
if(x.dtt[j].i!=i&&y.dtt[z].i!=i)
{
break;
}
else if(x.dtt[j].i!=i)
{
s++;
b->dtt[s].i=i;
b->誉岁dtt[s].j=y.dtt[z].j;
b->dtt[s].v=-y.dtt[z].v;
z++;
}
else if(y.dtt[z].i!=i)
{
s++;
b->dtt[s].i=i;
b->dtt[s].j=x.dtt[j].j;
b->dtt[s].v=x.dtt[j].v;
j++;
}
else if(x.dtt[j].j>y.dtt[z].j)
{
s++;
b->dtt[s].i=i;
b->dtt[s].j=y.dtt[z].j;
b->dtt[s].v=-y.dtt[z].v;
z++;
}
else if(x.dtt[j].j==y.dtt[z].j)
{
if(x.dtt[j].v-y.dtt[z].v!=0)
{
s++;
b->dtt[s].i=i;
b->dtt[s].j=y.dtt[z].j;
b->dtt[s].v=x.dtt[j].v-y.dtt[z].v;
}
z++;
j++;
}
else if(x.dtt[j].j<y.dtt[z].j)
{
s++;
b->dtt[s].i=i;
b->dtt[s].j=x.dtt[j].j;
b->dtt[s].v=x.dtt[j].v;
j++;
}
}
}
b->t=s;
}
}
int main(int argc, char *argv[])
{
printf("1创建\n");
printf("2转置\n");
printf("3矩阵加减\n");
printf("4退出\n");
printf("\n\n\n");
int t;
while(~scanf("%d",&t))
{
if(t==1)
{
creat(&a);
}
else if(t==2)
{
transmat(a,&b);
mout(b);
}
else if(t==3)
{
creat(&c);
jiajian(a,c,&b);
mout(b);
}
else if(t==4)
break;
printf("\n\n\n");
printf("1创建\n");
printf("2转置\n");
printf("3矩阵加减\n");
printf("4退出\n");
printf("\n\n\n");
}
return 0;
}
#include <stdio.h>
#define maxsize 20
typedef int data;
typedef struct
{
int i,j;
data v;
}mat;
typedef struct
{
int m,n,t;
mat dtt[maxsize+1];
}matrix;
matrix a,b,c;
void transmat(matrix a,matrix *b)
{
int p,q,col;
b->m=a.n;
b->n=a.m;
b->t=a.t;
if(a.t!=0)
{
q=1;
for(col=1;col<=a.n;col++)
for(p=1;p<=a.t;p++)
if(a.dtt[p].j==col)
{
b->dtt[q].j=a.dtt[p].i;
b->dtt[q].i=a.dtt[p].j;
b->dtt[q].v=a.dtt[p].v;
q++;
}
}
}
void creat(matrix *x)
{
printf("\nn,m,t=?");
scanf("%d,%d,%d",&x->n,&x->兆棚m,&x->t);
for(int i=1;i<=x->t;i++)
{
printf("\ni,j,v=?");
scanf("%d,%d,%d",&x->dtt[i].i,&x->dtt[i].j,&x->dtt[i].v);
}
}
void mout(matrix x)
{
printf("\nn,m,t=");
printf("%d,%d,%d\n",x.n,x.m,x.t);
for(int i=1;i<=x.t;i++)
{
printf("\ni,j,v=");
printf("%d,%d,%d\族虚则n",x.dtt[i].i,x.dtt[i].j,x.dtt[i].v);
}
}
void jiajian(matrix x,matrix y,matrix *b)
{
int t;
printf("\n1加");
printf("\n2减\n\n");
scanf("%d",&t);
if(t==1)
{
int s=0,j=1,z=1;
b->m=x.m;
b->n=x.n;
for(int i=1;i<=b->n;i++)
{
for(;j<=x.t,z<=y.t;)
{
if(x.dtt[j].i!=i&&y.dtt[z].i!=i)
{
break;
}
else if(x.dtt[j].i!=i)
{
s++;
b->dtt[s].i=i;
b->dtt[s].j=y.dtt[z].j;
b->dtt[s].v=y.dtt[z].v;
z++;
}
else if(y.dtt[z].i!=i)
{
s++;
b->dtt[s].i=i;
b->dtt[s].j=x.dtt[j].j;
b->dtt[s].v=x.dtt[j].v;
j++;
}
else if(x.dtt[j].j>y.dtt[z].j)
{
s++;
b->dtt[s].i=i;
b->dtt[s].j=y.dtt[z].j;
b->dtt[s].v=y.dtt[z].v;
z++;
}
else if(x.dtt[j].j==y.dtt[z].j)
{
s++;
b->dtt[s].i=i;
b->dtt[s].j=y.dtt[z].j;
b->dtt[s].v=y.dtt[z].v+x.dtt[j].v;
z++;
j++;
}
else if(x.dtt[j].j<y.dtt[z].j)
{
s++;
b->dtt[s].i=i;
b->dtt[s].j=x.dtt[j].j;
b->dtt[s].v=x.dtt[j].v;
j++;
}
}
}
b->t=s;
}
else if(t==2)
{
int s=0,j=1,z=1;
b->m=x.m;
b->n=x.n;
for(int i=1;i<=b->n;i++)
{
for(;j<=x.t,z<=y.t;)
{
if(x.dtt[j].i!=i&&y.dtt[z].i!=i)
{
break;
}
else if(x.dtt[j].i!=i)
{
s++;
b->dtt[s].i=i;
b->誉岁dtt[s].j=y.dtt[z].j;
b->dtt[s].v=-y.dtt[z].v;
z++;
}
else if(y.dtt[z].i!=i)
{
s++;
b->dtt[s].i=i;
b->dtt[s].j=x.dtt[j].j;
b->dtt[s].v=x.dtt[j].v;
j++;
}
else if(x.dtt[j].j>y.dtt[z].j)
{
s++;
b->dtt[s].i=i;
b->dtt[s].j=y.dtt[z].j;
b->dtt[s].v=-y.dtt[z].v;
z++;
}
else if(x.dtt[j].j==y.dtt[z].j)
{
if(x.dtt[j].v-y.dtt[z].v!=0)
{
s++;
b->dtt[s].i=i;
b->dtt[s].j=y.dtt[z].j;
b->dtt[s].v=x.dtt[j].v-y.dtt[z].v;
}
z++;
j++;
}
else if(x.dtt[j].j<y.dtt[z].j)
{
s++;
b->dtt[s].i=i;
b->dtt[s].j=x.dtt[j].j;
b->dtt[s].v=x.dtt[j].v;
j++;
}
}
}
b->t=s;
}
}
int main(int argc, char *argv[])
{
printf("1创建\n");
printf("2转置\n");
printf("3矩阵加减\n");
printf("4退出\n");
printf("\n\n\n");
int t;
while(~scanf("%d",&t))
{
if(t==1)
{
creat(&a);
}
else if(t==2)
{
transmat(a,&b);
mout(b);
}
else if(t==3)
{
creat(&c);
jiajian(a,c,&b);
mout(b);
}
else if(t==4)
break;
printf("\n\n\n");
printf("1创建\n");
printf("2转置\n");
printf("3矩阵加减\n");
printf("4退出\n");
printf("\n\n\n");
}
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询