/*////////////////////////////////////////////////////////////////////////////////////////////////
本程序主要功能:演示稀疏矩阵的储存,并将稀疏矩阵输入、输出,实现稀疏矩阵的转置\n以及稀疏矩阵的乘法!
作者:sww064
///////////////////////////////////////////////////////////////////////////////////////////////*/
//引用标准库头文件
#include<stdio.h>
//定义矩阵最大数据量
#define max 100
//定义数据“0”
#define rule 0
//定义一个结构体用于储存稀疏矩阵数据
typedef struct{
//稀疏矩阵的列数
int col;
//稀疏矩阵的行数
int row;
//稀疏矩阵的数值
int data;
} Sparse_Martrix1;
/*//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////输入函数//////////////////////////////////////////////////
所需
//////////////////////////////////////////////////////////////////////////////////////////////////*/
void input(Sparse_Martrix1 a[])
{
printf("please input how many data the Martrix have:\t");
//输入稀疏矩阵的数据的个数
scanf("%d",&a[0].data);
//输入稀疏矩阵的行数和列数
printf("\nplease input the Martrix's row and col:\n");
//输入稀疏矩阵的行数
printf("row = ");
scanf("%d",&a[0].row);
//输入稀疏矩阵的列数
printf("col = ");
scanf("%d",&a[0].col);
//输入稀疏矩阵中的数据
printf("\nplease input your martrix's data:\n");
for(int i = 1;i < a[0].data + 1;i++)
{
//输入稀疏矩阵此时非零数据所在的列
printf("row = ");
scanf("%d",&a[i].row);
//输入稀疏矩阵此时非零数据所在的列
printf("col = ");
scanf("%d",&a[i].col);
//输入稀疏矩阵当行当列的非零数据
printf("data = ");
scanf("%d",&a[i].data);
printf("\n");
}
}
/*//////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////输出函数////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////*/
void output(Sparse_Martrix1 a[])
{
//添加一个控制变量
int temp = 0;
//周游稀疏矩阵 进行适当操作
for(int z = 0;z < a[0].row;z++)
{
for(int j = 0;j < a[0].col;j++)
{
//将控制变量赋值为0
temp=0;
//不断判断稀疏矩阵所在的行与列是否为非零项
for(int m=1;m < a[0].data + 1;m++)
{
if(a[m].col == j && a[m].row == z)
{
//如果判断稀疏矩阵所在的行与列为非零项 则令控制变量为1 且跳出内部循环
temp = 1;
break;
}
}
//如果控制变量为 1 则输出稀疏矩阵的数据
if(temp == 1)
{
printf("%d\t",a[m].data);
}
//如果控制变量为 0 则输出0
else
{
printf("%d\t",rule);
}
}
printf("\n\n");
}
}
/*//////////////////////////////////////////////////////////////////////////////
//////////////////////////////矩阵的转置////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////*/
void Transpose_Martrix(Sparse_Martrix1 a[])
{
//定义一个结构体数组用于储存转置矩阵
Sparse_Martrix1 transpose_Martrix[max];
//令转置矩阵的列数 等于 原矩阵的行数
transpose_Martrix[0].col = a[0].row;
//令转置矩阵的行数 等于 原矩阵的列数
transpose_Martrix[0].row = a[0].col;
//令转置矩阵的数据的个数 等于 原矩阵中的数据的个数
transpose_Martrix[0].data = a[0].data;
//转置矩阵 与 原矩阵的转换
for(int q = 1;q < a[0].data + 1;q++)
{
//令转置矩阵的行 等于 原矩阵的列
transpose_Martrix[q].row = a[q].col;
//令转置矩阵的列 等于 原矩阵的行
transpose_Martrix[q].col = a[q].row;
//令转置矩阵的数据 等于 原矩阵的数据
transpose_Martrix[q].data = a[q].data;
}
printf("press \"Enter\" to show transpose_Martrix:\n");
getchar();
//输出转置矩阵
output(transpose_Martrix);
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/*
int set_disilicide(Sparse_Martrix1 Martrix[])
{
int m,n,temp,sum = 0;
m = Martrix[0].row;
n = Martrix[0].col;
int x[max][max];
for(temp = 0;temp < Martrix[0].row *Martrix[0].col;temp++)
for(m = 0;m < Martrix[0].row;m++)
for(n = 0;n < Martrix[0].col;n++)
{
if(Martrix[temp].row == m && Martrix[temp].col == n)
{
x[m][n] = Martrix[temp].data;
}
else
{
x[m][n] = 0;
}
}
return x[0][0];
}
*/
/*//////////////////////////////////////////////////////////////////////////////
//////////////////////////////矩阵的乘法////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////*/
/*
void mult_Martrix(Sparse_Martrix1 Martrix[],Sparse_Martrix1 Martrix1[])
{
}
*/
/*/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////主函数/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/
int main()
{
//介绍程序功能以及作者
printf("/*///////////////////////////////////////////////////////////////////////////*/\n\n");
printf("本程序主要功能:演示稀疏矩阵输入、输出和储存,并实现稀疏矩阵的转置\n以及稀疏矩阵的乘法!\n\n");
printf("作者:sww064\t\n\n");
printf("/*///////////////////////////////////////////////////////////////////////////*/\n\n");
printf("please press \"Enter\" to continue...");
getchar();
printf("\n");
//定义一个结构体数组用于储存稀疏矩阵
Sparse_Martrix1 Martrix[max];
//输入稀疏矩阵的一系列数据
input(Martrix);
printf("press \"Enter\" to show result...\n\n");
getchar();
getchar();
//输出稀疏矩阵的数据
output(Martrix);
//将稀疏矩阵转置,并输出转置后的稀疏矩阵
Transpose_Martrix(Martrix);
printf("\n\n");
//开始演示矩阵的乘法
printf("now,we are show the mult of Martrix!\n\n");
//定义一个新的结构体数组储存另一个稀疏矩阵
Sparse_Martrix1 Martrix1[max];
//向新的矩阵中输入数据
printf("please input the other Martrix:\n\n");
input(Martrix1);
printf("press \"Enter\" to show the other Martrix:\n");
getchar();
getchar();
//输出新的矩阵
output(Martrix1);
//调用矩阵乘法函数,进行矩阵的乘法并输出结果
// mult_Martrix(Martrix,Martrix1); //好像没能实现,把代码删了
printf("thanks for use the program !\n\n");
printf("press \"Enter\" to quit !");
getchar();
//程序正常结束
return 0;
}