洛奇 台词:稀疏矩阵的建立和转置

来源:百度文库 编辑:偶看新闻 时间:2024/04/28 01:46:02
#include
struct tuple3tp /*稀疏矩阵的建立和转置*/
  {
    int i,j;
    int v;
  }; struct sparmattp
 {
   int mu,nu,tu;
   struct tuple3tp data[31];  };  struct sparmattp a,b;   void creat_sparmat()//稀疏矩阵的建立
     {
         int i;
          printf("输入稀疏矩阵行值,列值,非零元个数(以空格分开):\n");
           scanf("%d%d%d",&a.mu,&a.nu,&a.tu);
             for(i=1;i<=a.tu;i++)
               {
                   printf("输入行坐标,列坐标,非零元素(以空格分开)\n");
                      scanf("%d%d%d",&a.data[i].i,&a.data[i].j,&a.data[i].v);
                }     }  void trans_sparmat()
    {
      int col,p,q;
      b.mu=a.nu;
      b.nu=a.mu;
      b.tu=a.tu;
       if(b.tu!=0)
         {
             q=1;
             for(col=1;col<=a.nu;col++)
                for(p=1;p<=a.tu;p++)
                   if (a.data[p].j==col)
                    {
                        b.data[q].i=a.data[p].j;
                        b.data[q].j=a.data[p].i;
                        b.data[q].v=a.data[p].v;
                        q++;
                    }         }
    } void print(struct sparmattp x)//矩阵的输出
   {
     int i,j,k,flag;
     for(i=1;i<=x.mu;i++)
        {
          for(j=1;j<=x.nu;j++)
              {
                 flag=0;
                  for(k=1;k<=x.tu;k++)
                  {
                     if(((x.data[k].i)==i)&&((x.data[k].j)==j))
                      {
                        flag=1;
                        printf("%5d",x.data[k].v);
                      }
                  }                        if(flag==0)printf("    0");              }                        printf("\n");         }    }  void main()
   {int f=1;
  while(f)
     {
     printf("稀疏矩阵的建立与转置\n");
       creat_sparmat();
         trans_sparmat();
            printf("原矩阵为:\n");
              print(a);
              printf("转置矩阵为:\n");
              print(b);
              printf("是否继续:任意键数字键1-9继续/数字0结束\n");
     scanf("%d",&f);
    }
    }