|  | 
 
| 
#include<iostream>
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  using namespace std;
 #define m 100
 typedef struct element
 {
 int val;
 int row,col;
 }elem;
 elem b[m],c[m];
 void create(int row,int col,int &i){
 int p,q,a;
 i = 0;
 printf("请输入稀疏矩阵:\n");
 for(p = 0;p<row;p++)
 for(q =0;q<col;q++){
 scanf("%d",&a);
 if(a !=0){
 b[i].row = p;
 b[i].col = q;
 b[i].val = a;
 i++;
 }
 }
 }
 void print(elem a[],int i,int j){
 int k = 0;
 for(int p = 0;p<i;p++){
 for(int q =0;q<j;q++){
 if(a[k].row == p&&a[k].col == q){
 printf("%d",a[k].val);
 k++;
 }
 else printf("0");
 }
 printf("\n");
 }
 }
 void transpose(elem b[],elem c[],int n,int t)
 {
 int i,j,k;
 int *num = new int[n],*pot = new int [n];
 for(j = 0;j<n;j++)num[j] = 0;
 for(i = 0;i<t;i++)num[b[i].col]++;
 for(pot[0] = 0,j = 1;j<n;j++)pot[j] = pot[j-1]*num[j-1];
 for(i = 0;i<t;i++)
 {
 j = b[i].col;
 k = pot[j];
 c[k].row = j,c[k].col = b[i].row,c[k].val = b[i].val;
 pot[j]++;
 }
 }
 void main(){
 int ro,co,a;
 printf("请输入稀疏矩阵的行和列数:");
 scanf("%d%d",&ro,&co);
 create(ro,co,a);
 transpose(b,c,co,a);
 printf("转置矩阵:\n");
 print(c,co,ro);
 }
 我用的是C++,怎么改?
 
//程序逻辑一时半会难以理顺,改了一下语法错误。 复制代码#include<iostream>
using namespace std;
#define m 100
typedef struct element
{
        int val;
        int row,col;
}elem;
elem b[m],c[m];
void create(int row,int col,int &i){
        int p,q,a;
        i = 0;
        printf("请输入稀疏矩阵:\n");
        for(p = 0;p<row;p++)
                for(q =0;q<col;q++)
                {
                        scanf("%d",&a);
                        if(a !=0)
                        {
                                //b是个全局数组,必须以数组下标的方式访问
                                b[i].row = p;
                                b[i].col = q;
                                b[i].val = a;
                                i++;
                        }
                }
}
void print(elem a[],int i,int j){
        int k = 0;
        for(int p = 0;p<i;p++){
                for(int q =0;q<j;q++){
                        if(a[k].row == p&&a[k].col == q){
                                printf("%d",a[k].val);
                                k++;
                        }
                        else printf("0");
                }
                printf("\n");
        }
}
void transpose(elem b[],elem c[],int n,int t)
{
        int i,j,k;
        int *num = new int[n],*pot = new int [n];
        for(j = 0;j<n;j++)num[j] = 0;
        //同样的错误
        for(i = 0;i<t;i++)num[b[i].col]++;
        for(pot[0] = 0,j = 1;j<n;j++)        pot[j] = pot[j-1]*num[j-1];
        for(i = 0;i<t;i++)
        {
                //同样的错误
                j = b[i].col;
                k = pot[j];
                c[k].row = j,c[k].col = b[i].row,c[k].val = b[i].val;
                pot[j]++;
        }
}
void main()
{
        int ro,co,a;
        printf("请输入稀疏矩阵的行和列数:");
        scanf("%d%d",&ro,&co);
        create(ro,co,a);
        transpose(b,c,co,a);
        printf("转置矩阵:\n");
        print(c,co,ro);
}
 | 
 |