📄 main.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 + -