⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 题目:稀疏矩阵是指那些多数元素为0的矩阵.利用稀疏特点进行存储和计算可以大大节省存储空间,提高计算效率.实现一个能进行稀疏矩阵基本运算的运算器.基本要求:以带行逻辑连接信息的3元组顺序表表示稀疏矩阵,
💻 C
字号:
/*****************************************************************

*****************************************************************/

/*main.c*/
#include <stdio.h>
#include <stdlib.h>

#define ASCII_NUM_X 48
#define MAX_TRIPLE 12500
#define TYPE int
#define MAX_ROW 20
#define MAX_COL 20

typedef struct _TRIPLE
{
	int row;
	int col;
	TYPE e;
}TRIPLE;

typedef struct _TSMATRIX
{
	TRIPLE data[MAX_TRIPLE];
	int t_row;
	int t_col;
	int t_e;
}TSMATRIX;

TSMATRIX matrix[2];
int flag=0;

void PrintMenu();


void AddMatrixInfo();
void Plus();
void Reduce();
void Multi();
void Exit();

void (*funarray[])()={
	AddMatrixInfo,
		Plus,
		Reduce,
		Multi,
		Exit
};

int main()
{
	int key;

	while(flag==0)
	{
		PrintMenu();
		key=getchar();
		getchar();  /*receive enter*/
		funarray[key-ASCII_NUM_X-1]();
		printf("按回车键继续\n");
		getchar();  /*receive enter*/
	}

	return 1;
}

void PrintMenu()
{
	char *menu="稀疏矩阵运算器\n"
		"1---添加矩阵信息\n"
		"2---加法\n"
		"3---减法\n"
		"4---乘法\n"
		"5---退出\n";
	printf(menu);
	
}

void AddMatrixInfo()
{
	int n;
	int i;


	printf("你要将信息添加到哪个矩阵,输入1或2:\n");
	scanf("%d",&n);
	n--;

	printf("请输入矩阵得行数\n");
	scanf("%d",&matrix[n].t_row);

	printf("请输入矩阵得列数\n");
	scanf("%d",&matrix[n].t_col);
	
	printf("请输入矩阵非0元素的个数\n");
	scanf("%d",&matrix[n].t_e);

	for(i=0;i<matrix[n].t_e;i++)
	{
		printf("请输入第%d个元素所属的行\n",i+1);
		scanf("%d",&matrix[n].data[i].row);
		printf("请输入第%d个元素所属的列\n",i+1);
		scanf("%d",&matrix[n].data[i].col);
		printf("请输入第%d个元素的值\n",i+1);
		scanf("%d",&matrix[n].data[i].e);
	}
}

void Plus()
{
	if(matrix[0].t_row==matrix[1].t_row&&
		matrix[0].t_col==matrix[1].t_col)
	{
		int i0,i1;
		//create a new 2-d matrix
		int *m=(int*)malloc(matrix[0].t_row*matrix[0].t_col*sizeof(int));
		for(i0=0;i0<matrix[0].t_row*matrix[0].t_col;i0++)
		{
			m[i0]=0;
		}

		for(i0=0;i0<matrix[0].t_e;i0++)
		{
			m[matrix[0].data[i0].col-1+(matrix[0].data[i0].row-1)*matrix[0].t_col]+=
				matrix[0].data[i0].e;
		}
		for(i1=0;i1<matrix[1].t_e;i1++)
		{
			m[matrix[1].data[i1].col-1+(matrix[1].data[i1].row-1)*matrix[1].t_col]+=
				matrix[1].data[i1].e;
		}
		for(i0=0;i0<matrix[0].t_row;i0++)
		{
			for(i1=0;i1<matrix[0].t_col;i1++)
			{
				printf("\t%d",m[i0*matrix[0].t_col+i1]);
			}
			printf("\n");
		}
		free(m);

	}
}

void Reduce()
{
	if(matrix[0].t_row==matrix[1].t_row&&
		matrix[0].t_col==matrix[1].t_col)
	{
		int i0,i1;
		//create a new 2-d matrix
		int *m=(int*)malloc(matrix[0].t_row*matrix[0].t_col*sizeof(int));
		for(i0=0;i0<matrix[0].t_row*matrix[0].t_col;i0++)
		{
			m[i0]=0;
		}

		for(i0=0;i0<matrix[0].t_e;i0++)
		{
			m[matrix[0].data[i0].col-1+(matrix[0].data[i0].row-1)*matrix[0].t_col]=
				matrix[0].data[i0].e;
		}
		for(i1=0;i1<matrix[1].t_e;i1++)
		{
			m[matrix[1].data[i1].col-1+(matrix[1].data[i1].row-1)*matrix[1].t_col]-=
				matrix[1].data[i1].e;
		}
		for(i0=0;i0<matrix[0].t_row;i0++)
		{
			for(i1=0;i1<matrix[0].t_col;i1++)
			{
				printf("\t%d",m[i0*matrix[0].t_col+i1]);
			}
			printf("\n");
		}
		free(m);

	}
}

void Multi()
{


	if(matrix[0].t_col==matrix[1].t_row)
	{
		int i,j,k;
		int m1[MAX_ROW][MAX_COL];
		int m2[MAX_ROW][MAX_COL];
		int q[MAX_ROW][MAX_COL];

		for(i=0;i<matrix[0].t_row;i++)
		{
			for(j=0;j<matrix[0].t_col;j++)
			{
				m1[i][j]=0;
			}
		}
		for(i=0;i<matrix[1].t_row;i++)
		{
			for(j=0;j<matrix[1].t_col;j++)
			{
				m2[i][j]=0;
			}
		}

		for(i=0;i<matrix[0].t_e;i++)
		{
			m1[matrix[0].data[i].row-1][matrix[0].data[i].col-1]=
				matrix[0].data[i].e;
		}

		for(i=0;i<matrix[1].t_e;i++)
		{
			m2[matrix[1].data[i].row-1][matrix[1].data[i].col-1]=
				matrix[1].data[i].e;
		}
		
		

		for(i=0;i<matrix[0].t_row;i++)
		{
			for(j=0;j<matrix[1].t_col;j++)
			{
				q[i][j]=0;
				for(k=0;k<matrix[0].t_col;k++)
				{
					q[i][j]+=m1[i][k]*m2[k][j];
				}
			}
		}

		for(i=0;i<matrix[0].t_row;i++)
		{
			for(j=0;j<matrix[1].t_col;j++)
			{
				printf("\t%d",q[i][j]);
			}
			printf("\n");
		}
	
	}
}

void Exit()
{
	flag=1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -