不完善的程序

作者在 2008-06-03 15:01:22 发布以下内容
#include<stdio.h>
#define MAX 40
typedef struct
{
 int i,j;
 int e;
}Triple;
typedef struct
{
 Triple data[MAX+1];
 int mu,nu,tu;
 int rpos[MAX+1];
}Matrix;
void InitMatrix(Matrix *W)
{ int i,p,num[MAX],rpos[MAX],r;
  printf("please input the number of row,col and fei ling yuan:\n");
  scanf("%d,%d,%d",&W-&gt;mu,&W-&gt;nu,&W-&gt;tu);
  printf("please input the data:\n");
  for(i=1;i<=W->tu;i++)
    scanf("%d,%d,%d",&W-&gt;data[i].i,&W-&gt;data[i].j,&W-&gt;data[i].e);
  for(r=1;r<=W->mu;r++)
     num[r]=0;
  for(p=1;p<=W->tu;p++)
      num[W-&gt;data[p].i]=num[W-&gt;data[p].i]+1;
   W-&gt;rpos[1]=1;
   for(r=2;r<=W->mu+1;r++)
     W-&gt;rpos[r]=W-&gt;rpos[r-1]+num[r-1];
 }
void fasttrans(Matrix A,Matrix *B)
{
   int col,cpot[MAX],num[MAX],t,p,q;
   (*B).mu=A.nu;
   (*B).nu=A.mu;
   (*B).tu=A.tu;
   if(B-&gt;tu)
   {
      for(col=0;col<A.nu;++col)
      num[col]=0;
      for(t=1;t&lt;=A.tu;++t)
      ++num[A.data[t].j];
      cpot[1]=1;
      for(col=2;col&lt;=A.nu;++col)
         cpot[col]=cpot[col-1]+num[col-1];
      for(p=1;p&lt;=A.tu;++p)
      {
  col=A.data[p].j;
  q=cpot[col];
  (*B).data[q].i=A.data[p].j;
  (*B).data[q].j=A.data[p].i;
  (*B).data[q].e=A.data[p].e;
  ++cpot[col];
      }
   }
}
void MulMatrix(Matrix M,Matrix N,Matrix *Q)
{
   int t,p,q,tp,k,arow,brow,ccol,ctemp[MAX],num[MAX];
   if(M.nu!=N.mu)  printf("error");
   Q->mu=M.mu;
   Q-&gt;nu=N.nu;
   Q-&gt;tu=0;
   if(M.tu*N.tu!=0)
   {
      for(arow=1;arow<=M.mu;++arow)
      {
  for(k=1;k&lt;=M.mu;k++)
  ctemp[k]=0;
  Q->rpos[arow]=Q-&gt;tu+1;
  if(arow<M.mu) tp=M.rpos[arow+1];
  else {tp=M.tu+1;}
  for(p=M.rpos[arow];p&lt;tp;++p)
  {
     brow=M.data[p].j;
     if(brow&lt;N.mu)  t=N.rpos[brow+1];
     else {t=N.tu+1;}
     for(q=N.rpos[brow];q&lt;t;++q)
     {
        ccol=N.data[q].j;
        ctemp[ccol]+=M.data[p].e*N.data[q].e;
     }
  }
  for(ccol=1;ccol&lt;=Q->nu;++ccol)
  if(ctemp[ccol])
  {  ++Q-&gt;tu ;
     if(++Q-&gt;tu&gt;MAX) printf("error");
     Q-&gt;data[Q-&gt;tu].i=arow;
     Q-&gt;data[Q-&gt;tu].j=ccol;
     Q-&gt;data[Q-&gt;tu].e=ctemp[ccol];
  }
      }
   }
   for(t=1;t<=(*Q).tu;t++)
     ++num[(*Q).data[t].i];
   (*Q).rpos[1]=0;
   for(t=2;t&lt;=(*Q).mu;t++)
   (*Q).rpos[t]=(*Q).rpos[t-1]+num[t-1];
  
}
void output(Matrix *P)
 {  int i,j,t,k=0;
      t=1;
    printf(" the array  is: \n");
    for(i=1;i&lt;=P->mu;i++)
     {for(j=1;j<=P->nu;j++)
      {  if(P-&gt;data[t].i==i&&P-&gt;data[t].j==j)
    { printf("%4d",P-&gt;data[t].e);t++;}
            else printf("%4d",k);
       }
      printf("\n");
    }
 }
void main( )
{ int i;
  Matrix A,B,C;
  printf("1 mult array,A*B=C\n");
  printf("2 transpose array,A-&gt;B\n");
  printf("3 exsit\n");
  while(1)
  { printf("please select item to operarting:");
    scanf("%d",&i);
    switch(i)
    { case 1: InitMatrix(&A);output(&A);InitMatrix(&B);output(&B);MulMatrix(A,B,&C);output(&C);break;
      case 2: InitMatrix(&A);output(&A);fasttrans(A,&B);output(&B);break;
      case 3:   exit(0);break;
    }
   }

}
希望有人可以帮忙修改一下,多谢啦!!现在的程序是正确的啦 !
默认分类 | 阅读 4022 次
文章评论,共3条
yx870214
2008-06-03 19:13
1
#include&lt;stdio.h&gt;<br />
#include&lt;stdlib.h&gt;<br />
#define MAX 40<br />
typedef struct<br />
{<br />
 int i,j;<br />
 int e;<br />
}Triple;<br />
typedef struct<br />
{<br />
 Triple data[MAX+1];<br />
 int mu,nu,tu;<br />
 int rpos[MAX+1];<br />
}Matrix;<br />
void InitMatrix(Matrix *W)<br />
{ int i,p,num[MAX],rpos[MAX],r;<br />
&nbsp;&nbsp;printf(&quot;please input the number of row,col and fei ling yuan:\n&quot;);<br />
&nbsp;&nbsp;scanf(&quot;%d,%d,%d&quot;,W-&gt;mu,W-&gt;nu,W-&gt;tu);<br />
&nbsp;&nbsp;printf(&quot;please input the data:\n&quot;);<br />
&nbsp;&nbsp;for(i=1;i&lt;=W-&gt;tu;i++)<br />
&nbsp;&nbsp;&nbsp; scanf(&quot;%d,%d,%d&quot;,W-&gt;data[i].i,W-&gt;data[i].j,W-&gt;data[i].e);<br />
&nbsp;&nbsp;for(r=1;r&lt;=W-&gt;mu;r++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num[r]=0;<br />
&nbsp;&nbsp;for(p=1;p&lt;=W-&gt;tu;p++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num[W-&gt;data[p].i]=num[W-&gt;data[p].i]+1;<br />
&nbsp;&nbsp;&nbsp;rpos[1]=1;<br />
&nbsp;&nbsp;&nbsp;for(r=2;r&lt;=W-&gt;mu+1;r++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rpos[r]=rpos[r-1]+num[r-1];<br />
 }<br />
void fasttrans(Matrix A,Matrix *B)<br />
{<br />
&nbsp;&nbsp;&nbsp;int col,cpot[MAX],num[MAX],t,p,q;<br />
&nbsp;&nbsp;&nbsp;(*B).mu=A.nu;<br />
&nbsp;&nbsp;&nbsp;(*B).nu=A.mu;<br />
&nbsp;&nbsp;&nbsp;(*B).tu=A.tu;<br />
&nbsp;&nbsp;&nbsp;if(B-&gt;tu)<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(col=0;col&lt;A.nu;++col)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num[col]=0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(t=1;t&lt;=A.tu;++t)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;++num[A.data[t].j];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpot[1]=1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(col=2;col&lt;=A.nu;++col)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpot[col]=cpot[col-1]+num[col-1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(p=1;p&lt;=A.tu;++p)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;col=A.data[p].j;<br />
&nbsp;&nbsp;q=cpot[col];<br />
&nbsp;&nbsp;(*B).data[q].i=A.data[p].j;<br />
&nbsp;&nbsp;(*B).data[q].j=A.data[p].i;<br />
&nbsp;&nbsp;(*B).data[q].e=A.data[p].e;<br />
&nbsp;&nbsp;++cpot[col];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;}<br />
}<br />
void MulMatrix(Matrix M,Matrix N,Matrix *Q)<br />
{<br />
&nbsp;&nbsp;&nbsp;int t,p,q,tp,k,arow,brow,ccol,ctemp[MAX],num[MAX];<br />
&nbsp;&nbsp;&nbsp;if(M.nu!=N.mu)&nbsp;&nbsp;printf(&quot;error&quot;);<br />
&nbsp;&nbsp;&nbsp;Q-&gt;mu=M.mu;<br />
&nbsp;&nbsp;&nbsp;Q-&gt;nu=N.nu;<br />
&nbsp;&nbsp;&nbsp;Q-&gt;tu=0;<br />
&nbsp;&nbsp;&nbsp;if(M.tu*N.tu!=0)<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(arow=1;arow&lt;=M.mu;++arow)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;for(k=1;k&lt;=M.mu;k++)<br />
&nbsp;&nbsp;ctemp[k]=0;<br />
&nbsp;&nbsp;Q-&gt;rpos[arow]=Q-&gt;tu+1;<br />
&nbsp;&nbsp;if(arow&lt;M.mu) tp=M.rpos[arow+1];<br />
&nbsp;&nbsp;else {tp=M.tu+1;}<br />
&nbsp;&nbsp;for(p=M.rpos[arow];p&lt;tp;++p)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;brow=M.data[p].j;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(brow&lt;N.mu)&nbsp;&nbsp;t=N.rpos[brow+1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else {t=N.tu+1;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(q=N.rpos[brow];q&lt;t;++q)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ccol=N.data[q].j;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ctemp[ccol]+=M.data[p].e*N.data[q].e;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;for(ccol=1;ccol&lt;=Q-&gt;nu;++ccol)<br />
&nbsp;&nbsp;if(ctemp[ccol])<br />
&nbsp;&nbsp;{&nbsp;&nbsp;++Q-&gt;tu ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(++Q-&gt;tu=MAX) printf(&quot;error&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Q-&gt;data[Q-&gt;tu].i=arow;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Q-&gt;data[Q-&gt;tu].j=ccol;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Q-&gt;data[Q-&gt;tu].e=ctemp[ccol];<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;for(t=1;t&lt;=(*Q).tu;t++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;++num[(*Q).data[t].i];<br />
&nbsp;&nbsp;&nbsp;(*Q).rpos[1]=0;<br />
&nbsp;&nbsp;&nbsp;for(t=2;t!=(*Q).mu;t++)<br />
&nbsp;&nbsp;&nbsp;(*Q).rpos[t]=(*Q).rpos[t-1]+num[t-1];<br />
&nbsp;&nbsp;<br />
}<br />
void output(Matrix *P)<br />
 {&nbsp;&nbsp;int i,j,t,k=0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t=1;<br />
&nbsp;&nbsp;&nbsp; printf(&quot; the array&nbsp;&nbsp;is: \n&quot;);<br />
&nbsp;&nbsp;&nbsp; for(i=1;i&lt;=P-&gt;mu;i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{for(j=1;j&lt;=P-&gt;nu;j++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;if(P-&gt;data[t].i==i&amp;&amp;P-&gt;data[t].j==j)<br />
&nbsp;&nbsp;&nbsp; { printf(&quot;%4d&quot;,P-&gt;data[t].e);t++;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else printf(&quot;%4d&quot;,k);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;\n&quot;);<br />
&nbsp;&nbsp;&nbsp; }<br />
 }<br />
void main( )<br />
{ int i;<br />
&nbsp;&nbsp;Matrix A,B,C;<br />
&nbsp;&nbsp;printf(&quot;1 mult array,A*B=C\n&quot;);<br />
&nbsp;&nbsp;printf(&quot;2 transpose array,A-&amp;gt;B\n&quot;);<br />
&nbsp;&nbsp;printf(&quot;3 exsit\n&quot;);<br />
&nbsp;&nbsp;printf(&quot;please select item to operarting:&quot;);<br />
&nbsp;&nbsp;scanf(&quot;%d&quot;,&amp;i);<br />
&nbsp;&nbsp;switch(i)<br />
&nbsp;&nbsp;{ case 1: InitMatrix(&amp;A);output(&amp;A);InitMatrix(&amp;B);output(&amp;B);MulMatrix(A,B,&amp;C);output(&amp;C);break;<br />
&nbsp;&nbsp;&nbsp; case 2: InitMatrix(&amp;A);output(&amp;A);fasttrans(A,&amp;B);output(&amp;B);break;<br />
&nbsp;&nbsp;&nbsp; case 3: exit(0);break;<br />
&nbsp;&nbsp;}<br />
<br />
}
yx870214
2008-06-03 19:13
2
養成標明注釋的習慣
点点(作者)
2008-06-07 09:14
3
<div class="quote"><span class="q"><b>yx870214</b>: 養成標明注釋的習慣</span></div>我以后会注意加注释的,谢谢你的提醒!
游客请输入验证码
浏览12430次
文章分类
文章归档