📄 xishujuzhen.cpp
字号:
#include <stdio.h>
#define MAXSIZE 100/*非零元个数的最大值*/
typedef struct
{
int i,j;
int e;
}Triple;
typedef struct
{
Triple data[MAXSIZE+1];
int mu,nu,tu;/*矩阵的行数、列数和非零元个数*/
}RLSMatrix;
void ScanRLSMatrix(RLSMatrix *T)/*矩阵输入函数,输入各行非零元及其在矩阵中的行列数*/
{
int k;
printf("请输入矩阵的行数,列数,非零元素个数 \n");
scanf("%d%d%d",&(*T).mu,&(*T).nu,&(*T).tu);
if((*T).tu>MAXSIZE)
{
printf("非零个数超出定义范围!");
exit(0);
}
for(k=1;k<=(*T).tu;k++)
{
printf(" 按行存储请输入第%d个非零元素的行数,列数,其值:",k);
scanf("%d%d%d",&(*T).data[k].i,&(*T).data[k].j,&(*T).data[k].e);
if(!(*T).data[k].i||!(*T).data[k].j||(*T).data[k].i>(*T).mu||(*T).data[k].j>(*T).nu)
{
printf("输入有误!");
exit(0);
}
}
}
void HeRLSMatrix(RLSMatrix *M,RLSMatrix *N)/*矩阵求和函数*/
{
int a[(*M).mu+1][(*M).nu+1],b[(*N).mu+1][(*N).nu+1],c[(*M).mu+1][(*N).nu+1];
int x,y,z;
for(x=1;x<=(*M).mu;x++)
{
for(y=1;y<=(*M).nu;y++)
a[x][y]=0;
}
for(x=1;x<=(*M).tu;x++)
a[(*M).data[x].i][(*M).data[x].j]=(*M).data[x].e;
for(x=1;x<=(*N).mu;x++)
{
for(y=1;y<=(*N).nu;y++)
b[x][y]=0;
}
for(x=1;x<=(*N).tu;x++)
b[(*N).data[x].i][(*N).data[x].j]=(*N).data[x].e;
for(x=1;x<=(*M).mu;x++)
{
for(y=1;y<=(*M).nu;y++)
c[x][y]=a[x][y]+b[x][y];
}
for(x=1;x<=(*M).mu;x++)
{
for(y=1;y<=(*M).nu;y++)
printf("%d ",c[x][y]);
printf("\n");
}
}
void ChaRLSMatrix(RLSMatrix *M,RLSMatrix *N)/*矩阵求差函数*/
{
int a[(*M).mu+1][(*M).nu+1],b[(*N).mu+1][(*N).nu+1],c[(*M).mu+1][(*N).nu+1];
int x,y,z;
for(x=1;x<=(*M).mu;x++)
{
for(y=1;y<=(*M).nu;y++)
a[x][y]=0;
}
for(x=1;x<=(*M).tu;x++)
a[(*M).data[x].i][(*M).data[x].j]=(*M).data[x].e;
for(x=1;x<=(*N).mu;x++)
{
for(y=1;y<=(*N).nu;y++)
b[x][y]=0;
}
for(x=1;x<=(*N).tu;x++)
b[(*N).data[x].i][(*N).data[x].j]=(*N).data[x].e;
for(x=1;x<=(*M).mu;x++)
{
for(y=1;y<=(*M).nu;y++)
c[x][y]=a[x][y]-b[x][y];
}
for(x=1;x<=(*M).mu;x++)
{
for(y=1;y<=(*M).nu;y++)
printf("%d ",c[x][y]);
printf("\n");
}
}
void JiRLSMatrix(RLSMatrix *M,RLSMatrix *N)/*阵求积函数*/
{
int a[(*M).mu+1][(*M).nu+1],b[(*N).mu+1][(*N).nu+1],c[(*M).mu+1][(*N).nu+1];
int x,y,z;
for(x=1;x<=(*M).mu;x++)
{
for(y=1;y<=(*M).nu;y++)
a[x][y]=0;
}
for(x=1;x<=(*M).tu;x++)
a[(*M).data[x].i][(*M).data[x].j]=(*M).data[x].e;
for(x=1;x<=(*N).mu;x++)
{
for(y=1;y<=(*N).nu;y++)
b[x][y]=0;
}
for(x=1;x<=(*N).tu;x++)
b[(*N).data[x].i][(*N).data[x].j]=(*N).data[x].e;
for(x=1;x<=(*M).mu;x++)
{
for(y=1;y<=(*N).nu;y++)
c[x][y]=0;
}
for(x=1;x<=(*M).mu;x++)
{
for(y=1;y<=(*N).nu;y++)
{
for(z=1;z<=(*M).nu;z++)
c[x][y]+=a[x][z]*b[z][y];
}
}
for(x=1;x<=(*M).mu;x++)
{
for(y=1;y<=(*M).nu;y++)
printf("%d ",c[x][y]);
printf("\n");
}
}
void main()
{
RLSMatrix M,N,Q;
char ch;
printf("A.加法B.减法C.乘法Y.继续运算N.结束运算\n");
shuru:scanf("%c",&ch);
while(ch!='N')
{
switch(ch)
{
case'A':
{
printf(" 请输入要求和的两个矩阵:\n\n");
printf(" 输入第一个矩阵:\n\n");
ScanRLSMatrix(&M);
printf(" 输入第二个矩阵:\n\n");
ScanRLSMatrix(&N);
HeRLSMatrix(&M,&N);
printf(" 是否继续运算(Y/N)?\n\n");
printf(" ->");
ch=getchar();
}
break;
case'B':
{
printf(" 请按次序输入要求差的两个矩阵:\n\n");
printf(" 输入第一个矩阵:\n\n");
ScanRLSMatrix(&M);
printf(" 输入第二个矩阵:\n\n");
ScanRLSMatrix(&N);
ChaRLSMatrix(&M,&N);
printf("是否继续运算(Y/N)?\n\n");
printf(" ->");
ch=getchar();
}
break;
case'C':
{
printf(" 请按次序输入要求积的两个矩阵:\n\n");
printf(" 输入第一个矩阵:\n\n");
ScanRLSMatrix(&M);
printf(" 输入第二个矩阵:\n\n");
ScanRLSMatrix(&N);
JiRLSMatrix(&M,&N);
printf("是否继续运算(Y/N)?\n\n");
printf(" ->");
ch=getchar();
}
break;
case'Y':
{
printf("请选择运算\n");
printf("A.加法B.减法C.乘法Y.继续运算N.结束运算\n");
ch=getchar();
}
break;
default:
{
printf("->");
goto shuru;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -