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

📄 xishujuzhen.cpp

📁 以“带行逻辑链接信息”的三元组表作为稀疏矩阵的存储结构;实现两个矩阵相加、相减、相乘运算;运算结果以阵列形式输出。
💻 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 + -