| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 391 人关注过本帖
标题:求助!稀疏矩阵
只看楼主 加入收藏
赛赛sjs
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-6-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
求助!稀疏矩阵
用c语言或c++编程:稀疏矩阵的表示及加,减,乘,转置的运算
搜索更多相关主题的帖子: c语言 
2015-06-11 15:59
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:20 
程序代码:
#include<stdio.h>
#include<stdlib.h>
#define N 80
typedef struct triple{
        int mu;
        int nu;
        int value;
}triple;
void transposition(int a[][N],int m,int n){
    int b[N][N];
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            printf("%d\t",a[j][i]);
        }
          printf("\n");
    }  
}
void add(int a[][N],int b[][N],int m,int n){
    int c[N][N];
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            c[i][j]=a[i][j]+b[i][j];
        }
    }
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
              printf("%d\t",c[i][j]);
          }
          printf("\n");
    }
}
void cut(int a[][N],int b[][N],int m,int n){
    int c[N][N];
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            c[i][j]=a[i][j]-b[i][j];
        }
    }
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
              printf("%d\t",c[i][j]);
          }
          printf("\n");
    }
}
void multi(int a[][N],int b[][N],int m,int n){//以方阵为例,矩阵可按此修改 
    int c[N][N];
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            c[i][j]=0;
            for(int ii=0;ii<n;ii++)
            c[i][j]+=a[i][ii]*b[ii][j];
        }
    }
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
              printf("%d\t",c[i][j]);
          }
          printf("\n");
    }
}
void show(int a[][N],int m,int n){
    int b[N][N];
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            printf("%d\t",a[i][j]);
        }
          printf("\n");
    }  
}
main(){
      int i,j,m,n,t,k,flag=0;
      triple a[80],b[80];
      int a1[N][N],b1[N][N];
      printf("input the number of data int martrix1:");
      //scanf("%d",&t);
      t=3;
      printf("input the rows of matrix1:");
      //scanf("%d",&m);
      m=3;
      printf("input the columns of matrix1:");
      //scanf("%d",&n);
      n=3;
      
      for(i=1;i<=t;i++){
          printf("data[%d].mu=?\t",i);
          //scanf("%d",&(a[i].mu));
          a[i].mu=t+1-i;
          printf("data[%d].nu=?\t",i);
          //scanf("%d",&(a[i].nu));
          a[i].nu=i;
          printf("data[%d].value=?\t",i);
          //scanf("%d",&(a[i].value));
          a[i].value=i;
      }
         
      for(i=1;i<=m;i++){
         for(j=1;j<=n;j++){
          flag=0;
         for(k=1;k<=t;k++){             
          if((i==a[k].mu)&&(j==a[k].nu)){
             a1[a[k].mu-1][a[k].nu-1]=a[k].value;
             flag=1;
             break;
          }
         }
          if(flag==0)a1[a[k].mu-1][a[k].nu-1]=0;
         } 
      }
      printf("转置前\n");
       for(i=0;i<n;i++){
          for(j=0;j<m;j++){
              printf("%d\t",a1[i][j]);
          }
          printf("\n");
      }
      printf("转置后\n");
      transposition(a1,m,n);
      
      printf("input the number of data int martrix2:");
      //scanf("%d",&t);
      t=3;  
      for(i=1;i<=t;i++){
          printf("data[%d].mu=?\t",i);
          //scanf("%d",&(a[i].mu));
          a[i].mu=i;
          printf("data[%d].nu=?\t",i);
          //scanf("%d",&(a[i].nu));
          a[i].nu=i;
          printf("data[%d].value=?\t",i);
          //scanf("%d",&(a[i].value));
          a[i].value=i;
      }
      for(i=1;i<=m;i++){
         for(j=1;j<=n;j++){
          flag=0;
         for(k=1;k<=t;k++){             
          if((i==a[k].mu)&&(j==a[k].nu)){
             b1[a[k].mu-1][a[k].nu-1]=a[k].value;
             flag=1;
             break;
          }
         }
          if(flag==0)b1[a[k].mu-1][a[k].nu-1]=0;
         } 
      } 
      printf("\n\nmatrix1:\n");
      show(a1,m,n);
      printf("matrix2:\n");
      show(b1,m,n);
      printf("\nthe sum of two martrix:\n");
      add(a1,b1,m,n);
      printf("the subtraction of two martrix:\n");
      cut(a1,b1,m,n);
      printf("the product of two martrix:\n");
      multi(a1,b1,m,n);
}

剑栈风樯各苦辛,别时冰雪到时春
2015-06-11 19:25
赛赛sjs
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-6-6
收藏
得分:0 
回复 2楼 林月儿
我无论输入什么数字都只显示一个结果啊
2015-06-18 08:02
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
回复 3楼 赛赛sjs
把注释符号去掉,再把下面的模拟输入去掉

剑栈风樯各苦辛,别时冰雪到时春
2015-06-18 14:59
快速回复:求助!稀疏矩阵
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018304 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved