主题:求助
#include"stdio.h"
#include"malloc.h"
#define MAXSIZE 100
typedef struct
{
int i,j;
int e;
}triple;
typedef struct
{
triple data[MAXSIZE+1];
int mu,nu,tu;
}tsmatrix;
createsmatrix(tsmatrix *m)
{
int i,m1,n,e;
int k;
printf("please input mu,nu,tu");
getch();
scanf("%d,%d,%d",&(*m).mu,(*m).nu,(*m).tu);
getch();
for(i=1;i<(*m).tu;i++)
{
do
{
printf("input the %d element's hang(1~%d),lei(1~%d),element",i,(*m).mu,(*m).nu);
getch();
scanf("%d,%d,%d",&m1,&n,&e);
k=0;
if(m1<1||m1>(*m).mu||n<1||n>(*m).nu)
k=1;
if(m1<(*m).data[i-1].i||m1==(*m).data[i-1].i&&n<=(*m).data[i-1].j)
k=1;
}while(k);
(*m).data[i].i=m1;
(*m).data[i].j=n;
(*m).data[i].e=e;
}
return 1;
}
printsmatrix(tsmatrix m)
{
int i;
for(i=1;i<m.tu;i++)
printf("%d,%d,%d\n",m.data[i].i,m.data[i].j,m.data[i].e);
getch();
return 1;
}
copysmatrix(tsmatrix a,tsmatrix *b)
{
(*b)=a;
return 1;
}
destroysmatrix(tsmatrix *m)
{
(*m).mu=0;
(*m).nu=0;
(*m).tu=0;
return 1;
}
comp(int a,int b)
{
int i;
if(a<b)
i==1;
else if(a==b)
i==0;
else
i=-1;
return i;
}
addsmatrix(tsmatrix m,tsmatrix n,tsmatrix *q)
{
triple *mp,*me,*np,*ne,*qh,*qe;
if(m.mu!=n.mu)
return 0;
if(m.nu!=n.nu);
return 0;
(*q).mu=m.mu;
(*q).nu=m.nu;
(*q).tu=m.tu;
mp=&m.data[1];
np=&n.data[1];
me=&n.data[m.tu];
ne=&n.data[n.tu];
qh=qe=(*q).data;
while(mp<me&&np<=ne)
{
qe++;
switch(comp(mp->i,np->i))
{
case 1: *qe=*mp;
mp++;
break;
case 0: switch(cmp(mp->j,np->j))
{
case 1: *qe=*mp;
mp++;
break;
case 0: *qe=*mp;
qe->e+=np->e;
if(!qe->e)
qe--;
mp++;
np++;
break;
case -1: *qe=*np;
np++;
}
break;
case -1: *qe=*np;
np++;
}
}
if(mp>me)
while(np<=ne)
{
qe++;
*qe=*np;
np++;
}
if(np>ne)
while(mp<me)
{
qe++;
*qe=*mp;
mp++;
}
(*q).tu=qe-qh;
return 1;
}
submatrix(tsmatrix m,tsmatrix n,tsmatrix *q)
{
int i;
for(i=1;i<n.tu;i++)
n.data[i].e*=-1;
addsmatrix(m,n,q);
return 1;
}
multsmatrix(tsmatrix m,tsmatrix n,tsmatrix *q)
{
int i,j;
int h,l,qn;
h=m.mu;
l=n.nu;
qn=0;
int *qe;
if(m.mu!=n.nu)
return 0;
(*q).mu=m.mu;
(*q).nu=n.nu;
qe=(int *)malloc(h*l*sizeof(int));
for(i=1;i<m.tu;i++)
for(j=1;j<n.tu;j++)
if(m.data[i].i==n.data[i].j)
*(qe+(m.data[i].i-1)*l+n.data[j].j-1)+=m.data[i].e*n.data[j].e;
for(i=1;i<m.mu;i++)
for(j=1;j<n.nu;j++)
if(*(qe+(i-1)*l+j-1)!=0)
{
qn++;
(*q).data[qn].e=*(qe+(i-1)*l+j-1);
(*q).data[qn].i=i;
(*q).data[qn].j=j;
}
free(qe);
(*q).tu=qn;
return 1;
}
transposematrix(tsmatrix m,tsmatrix *t)
{
int p,q,col;
(*t).mu=m.nu;
(*t).nu=m.mu;
(*t).tu=m.tu;
if((*t).tu)
{
p=1;
for(col=1;col<=m.nu;col++)
for(q=1;q<m.tu;q++)
if(m.data[q].j==col)
{
(*t).data[p].i=m.data[q].i;
(*t).data[p].j=m.data[q].j;
(*t).data[p].e=m.data[q].e;
++p;
}
}
}
void main()
{
tsmatrix a,b,c;
printf("create matrix a:");
getch();
createsmatrix(&a);
printsmatrix(a);
printf("matrix a copy matrix b");
getch();
copysmatrix(a,&b);
printsmatrix(b);
destroysmatrix(&b);
printf("after destroy b:\n");
getch();
printsmatrix(b);
creatsmatrix(&b);
printsmatrix(b);
printf("matrix c(a+b)");
getch();
addsmatrix(a,b,&c);
printsmatrix(c);
destroymatrix(&c);
printf("matrix c1(a-b)");
getch();
subtsmatrix(a,b,&c);
printsmatrix(c);
destroysmatrix(&c);
printf("matrixc2(a's transpose):");
getch();
transposesmatrix(a,&c);
printsmatrix(c);
destroysmatrix(&a);
destroysmatrix(&b);
destroysmatrix(&c);
printf("create matrix a2");
getch();
createsmatrix(&b);
printsmatrix(b);
printf("matrix c3(a*b)");
getch();
multsmatrix(a,b,&c);
printsmatrix(c);
destroysmatrix(&a);
destroysmatrix(&b);
destroysmatrix(&c);
}
数组中的一个程序,以下是错误信息
错误 31.c 147: 表达式语法错在 multsmatrix 函数中
错误 31.c 152: 未定义的符号'qe'在 multsmatrix 函数中
大家给看一看怎么改?
#include"malloc.h"
#define MAXSIZE 100
typedef struct
{
int i,j;
int e;
}triple;
typedef struct
{
triple data[MAXSIZE+1];
int mu,nu,tu;
}tsmatrix;
createsmatrix(tsmatrix *m)
{
int i,m1,n,e;
int k;
printf("please input mu,nu,tu");
getch();
scanf("%d,%d,%d",&(*m).mu,(*m).nu,(*m).tu);
getch();
for(i=1;i<(*m).tu;i++)
{
do
{
printf("input the %d element's hang(1~%d),lei(1~%d),element",i,(*m).mu,(*m).nu);
getch();
scanf("%d,%d,%d",&m1,&n,&e);
k=0;
if(m1<1||m1>(*m).mu||n<1||n>(*m).nu)
k=1;
if(m1<(*m).data[i-1].i||m1==(*m).data[i-1].i&&n<=(*m).data[i-1].j)
k=1;
}while(k);
(*m).data[i].i=m1;
(*m).data[i].j=n;
(*m).data[i].e=e;
}
return 1;
}
printsmatrix(tsmatrix m)
{
int i;
for(i=1;i<m.tu;i++)
printf("%d,%d,%d\n",m.data[i].i,m.data[i].j,m.data[i].e);
getch();
return 1;
}
copysmatrix(tsmatrix a,tsmatrix *b)
{
(*b)=a;
return 1;
}
destroysmatrix(tsmatrix *m)
{
(*m).mu=0;
(*m).nu=0;
(*m).tu=0;
return 1;
}
comp(int a,int b)
{
int i;
if(a<b)
i==1;
else if(a==b)
i==0;
else
i=-1;
return i;
}
addsmatrix(tsmatrix m,tsmatrix n,tsmatrix *q)
{
triple *mp,*me,*np,*ne,*qh,*qe;
if(m.mu!=n.mu)
return 0;
if(m.nu!=n.nu);
return 0;
(*q).mu=m.mu;
(*q).nu=m.nu;
(*q).tu=m.tu;
mp=&m.data[1];
np=&n.data[1];
me=&n.data[m.tu];
ne=&n.data[n.tu];
qh=qe=(*q).data;
while(mp<me&&np<=ne)
{
qe++;
switch(comp(mp->i,np->i))
{
case 1: *qe=*mp;
mp++;
break;
case 0: switch(cmp(mp->j,np->j))
{
case 1: *qe=*mp;
mp++;
break;
case 0: *qe=*mp;
qe->e+=np->e;
if(!qe->e)
qe--;
mp++;
np++;
break;
case -1: *qe=*np;
np++;
}
break;
case -1: *qe=*np;
np++;
}
}
if(mp>me)
while(np<=ne)
{
qe++;
*qe=*np;
np++;
}
if(np>ne)
while(mp<me)
{
qe++;
*qe=*mp;
mp++;
}
(*q).tu=qe-qh;
return 1;
}
submatrix(tsmatrix m,tsmatrix n,tsmatrix *q)
{
int i;
for(i=1;i<n.tu;i++)
n.data[i].e*=-1;
addsmatrix(m,n,q);
return 1;
}
multsmatrix(tsmatrix m,tsmatrix n,tsmatrix *q)
{
int i,j;
int h,l,qn;
h=m.mu;
l=n.nu;
qn=0;
int *qe;
if(m.mu!=n.nu)
return 0;
(*q).mu=m.mu;
(*q).nu=n.nu;
qe=(int *)malloc(h*l*sizeof(int));
for(i=1;i<m.tu;i++)
for(j=1;j<n.tu;j++)
if(m.data[i].i==n.data[i].j)
*(qe+(m.data[i].i-1)*l+n.data[j].j-1)+=m.data[i].e*n.data[j].e;
for(i=1;i<m.mu;i++)
for(j=1;j<n.nu;j++)
if(*(qe+(i-1)*l+j-1)!=0)
{
qn++;
(*q).data[qn].e=*(qe+(i-1)*l+j-1);
(*q).data[qn].i=i;
(*q).data[qn].j=j;
}
free(qe);
(*q).tu=qn;
return 1;
}
transposematrix(tsmatrix m,tsmatrix *t)
{
int p,q,col;
(*t).mu=m.nu;
(*t).nu=m.mu;
(*t).tu=m.tu;
if((*t).tu)
{
p=1;
for(col=1;col<=m.nu;col++)
for(q=1;q<m.tu;q++)
if(m.data[q].j==col)
{
(*t).data[p].i=m.data[q].i;
(*t).data[p].j=m.data[q].j;
(*t).data[p].e=m.data[q].e;
++p;
}
}
}
void main()
{
tsmatrix a,b,c;
printf("create matrix a:");
getch();
createsmatrix(&a);
printsmatrix(a);
printf("matrix a copy matrix b");
getch();
copysmatrix(a,&b);
printsmatrix(b);
destroysmatrix(&b);
printf("after destroy b:\n");
getch();
printsmatrix(b);
creatsmatrix(&b);
printsmatrix(b);
printf("matrix c(a+b)");
getch();
addsmatrix(a,b,&c);
printsmatrix(c);
destroymatrix(&c);
printf("matrix c1(a-b)");
getch();
subtsmatrix(a,b,&c);
printsmatrix(c);
destroysmatrix(&c);
printf("matrixc2(a's transpose):");
getch();
transposesmatrix(a,&c);
printsmatrix(c);
destroysmatrix(&a);
destroysmatrix(&b);
destroysmatrix(&c);
printf("create matrix a2");
getch();
createsmatrix(&b);
printsmatrix(b);
printf("matrix c3(a*b)");
getch();
multsmatrix(a,b,&c);
printsmatrix(c);
destroysmatrix(&a);
destroysmatrix(&b);
destroysmatrix(&c);
}
数组中的一个程序,以下是错误信息
错误 31.c 147: 表达式语法错在 multsmatrix 函数中
错误 31.c 152: 未定义的符号'qe'在 multsmatrix 函数中
大家给看一看怎么改?