📄 rlsmatrix.h
字号:
#define MAXSIZE 400
#define MAXRC 20
typedef struct{
int i,j;
float e;
}Triple;
typedef struct{
Triple data[MAXSIZE+1];
int rpos[MAXRC+1];
int mu,nu,tu;
}RLSMatrix;
Status CreatRLSMatrix(RLSMatrix &A)
{
int i,j,k=1,row;
float e;
int num[MAXRC+1];
A.mu=0;A.nu=0;A.tu=0;
for(i=0;i<=MAXSIZE;i++) //初始化矩阵元素
{
A.data[i].e=0.0;
A.data[i].i=0;
A.data[i].j=0;
}
printf("Input Matrix Row,Col(3 3):");
fflush(stdin);
scanf("%d %d",&A.mu,&A.nu);
if(A.mu<1||A.nu<1) {printf("Row OR Col ERROR!\n");return ERROR;}
printf("Input Element(i j e),end of (0 0 0):\n");
scanf("%d %d %f",&i,&j,&e);
while(i!=0||j!=0||e!=0)
{
if(i<1||j<1) {printf("i OR j ERROR!\n");return ERROR;}
if(i>A.mu||j>A.nu) {printf("INDEX OVERFLOW!\n");return ERROR;} //判断矩阵越界
if(A.tu>A.mu*A.nu) {printf("ELEMENT ERROR!\n");return ERROR;} //判断矩阵越界
if(k>MAXSIZE+1) return ERROR; //判断矩阵越界
A.data[k].i=i;
A.data[k].j=j;
A.data[k].e=e;
scanf("%d %d %f",&i,&j,&e);
k++;
++A.tu;
}
for(row=1;row<=A.mu;++row) num[row]=0; //设定行链接
for(k=1;k<=A.tu;++k) ++num[A.data[k].i];
A.rpos[1]=1;
for(row=2;row<=A.mu;++row) A.rpos[row]=A.rpos[row-1]+num[row-1];
return OK;
}
Status PrintSMatrix(RLSMatrix M)
//按照通常形式显示矩阵
{
int i,j;
for(i=1;i<=M.mu;i++)
{
for(j=1;j<=M.nu;j++)
{
if(i==M.data[M.rpos[i]].i&&j==M.data[M.rpos[i]].j) //根据rpos进行非零元逐个扫描并显示,其他显示零
{
printf("%-.2f ",M.data[M.rpos[i]].e);
M.rpos[i]++;
}
else
printf("0.00 ");
}
printf("\n");
}
return OK;
}
Status DestroySMatrix(RLSMatrix &M) //矩阵销毁,将矩阵各参数置零
{
int i;
for(i=0;i<=MAXSIZE;i++)
{
M.data[i].i=0;
M.data[i].j=0;
M.data[i].e=0.0;
}
for(i=0;i<=MAXRC;i++)
{
M.rpos[i]=0;
}
M.nu=0;
M.mu=0;
M.tu=0;
return OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -