加粗样式
矩阵,简单的来看,就是二维数组。二维数组本质上是以数组作为数组元素的数组,即“数组的数组”,类型说明符 数组名[常量表达式][常量表达式]。二维数组又称为矩阵,行列数相等的矩阵称为方阵。
#include
#include
#define MAXSIZE 12500
typedef struct
{
int i,j;//该非零元的列下标和行下标
int e;
}Triple;
typedef struct
{
Triple data[MAXSIZE+1];//非零元三元组表,data[0]未用
int mu,nu,tu;//矩阵的行数、列数和非零元个数
}TSMatrix;
int InitTriple(TSMatrix *M)
{//稀疏矩阵的初始化
int i,j,k,n,e;
printf("请输入稀疏矩阵非零元素的个数:\n");
scanf("%d",&n);
M->tu=n;
printf("//按顺序从0到%d输入\n",M->mu);
for(k=1;k<=n;k++)
{
printf("请输入第%d个元素的行、列和赋值\n",k);
scanf("%d %d %d",&i,&j,&e);
if(i==1&&j==1)
{
M->data[k].i=i;
M->data[k].j=j;
M->data[k].e=e;
}
else
{
M->data[k].i=i-1;
M->data[k].j=j-1;
M->data[k].e=e;
}
}
return 0;
}
int TransposeSMatrix(TSMatrix M,TSMatrix &T)
{//普通转置
T.mu=M.nu;
T.nu=M.mu;
T.tu=M.tu;
if(T.tu)
{
int q=1;
for(int col=0;col<=M.nu;++col)
for(int p=1;p<=M.tu;++p)
if(M.data[p].j==col)
{
T.data[q].i=M.data[p].j;
T.data[q].j=M.data[p].i;
T.data[q].e=M.data[p].e;
++q;
}
}
int displayMatrix(TSMatrix *M)
{//输出非零元素
int i,j,p,q,k=0;
printf("\n");
for(p=0;p<M->mu;p++)
{
for(q=0;q<M->nu;q++)
if(M->data[k].i==p&&M->data[k].j==q)
{
printf("%d\t",M->data[k].e);
k++;
}
else
{
printf("0\t");
}
printf("\n");
}
return 1;
}
int display(TSMatrix *M)
{//输出矩阵0元素
int i,j,p,q;
printf("请输入矩阵的行、列:\n");
scanf("%d %d",&i,&j);
M->mu=i;
M->nu=j;
printf("初始化矩阵显示为:\n");
for(p=0;p<M->mu;p++)
{
for(q=0;q<M->nu;q++)
printf("0\t");
printf("\n\n");
}
return 1;
}
void show()
{
printf("请输入你想选择的序号\n");
printf("1.初始化矩阵\n");
printf("2.添加元素\n");
printf("3.转置矩阵\n");
printf("0.退出\n");
printf("------------\n");
}
int main()
{
TSMatrix T1,T2;
int n;
printf("欢迎使用矩阵系统!\n\n");
show();
scanf("%d",&n);
while(n!=0)
{
switch(n)
{
case 1: display(&T1);break;
case 2: InitTriple(&T1);
printf("加入元素后的矩阵显示为:\n");
displayMatrix(&T1);break;
case 3: TransposeSMatrix(T1,T2);
printf("输出转置后的行、列和非零元个数:%d,%d,%d\n",T2.mu,T2.nu,T2.tu);
printf("\n");
printf("行\t列\t值\n");
for(int q=1;q<=T2.tu;++q)
{
printf("%d\t%d\t%d\n",T2.data[q].i+1,T2.data[q].j+1,T2.data[q].e);
}
printf("转置后的矩阵为:\n");
displayMatrix(&T2);break;
}
printf("\n");
show();
scanf("%d",&n);
}
return 0;
}
希望对你有所帮助