数据结构(使用C语言)关于矩阵

为节省内存,N阶对称矩阵采用压缩存储,要求:
(1)编写实现C=A+B操作的函数。设矩阵A,矩阵B和矩阵C 均采用压缩存储方式存储,矩阵元素均为整数类型;
(2)编写一个采用压缩存储的N阶对称矩阵的输出函数,要求输出显示成矩阵形式,设矩阵元素均为整数类型;
(3)设矩阵A和矩阵B为如下所示的矩阵,编写一个用矩阵A和矩阵B作为测试例子的测试上述函数的主程序。
1 2 3 10 20 30
A= 2 4 5 B= 20 40 50
3 5 6 30 50 60

你的测试数据不符合条件,不是对称矩阵。但函数调试已调试好了,无误。
#include <stdio.h>
#define N 3
#define M (N*N+N)/2
void add(int C[],int A[],int B[])
{
for(int i=0;i<M;i++)
C[i]=A[i]+B[i];
}
void print(int C[])
{
int i,j,t;
for(i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
if(i>=j) t=(i+1)*i/2+j;
else t=(j+1)*j/2+i; //下三角存储
printf("%d ",C[t]);
}
printf("\n");
}
}
int main(void)
{
int a[N][N]={{1,2,3},{10,20,30},{2,4,5}};
int b[N][N]={{20,40,50},{3,5,6},{30,50,60}};
int A[M],B[M],C[M];
int i,j,t=0,k=0;
for(i=0;i<=2;i++)
for(j=0;j<=i;j++)
{
A[t++]=a[i][j];
B[k++]=b[i][j];
}
add(C,A,B);
print(C);
return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-10-09
你的测试数据不符合条件,不是对称矩阵。但函数调试已调试好了,无误。
#include
<stdio.h>
#define
N
3
#define
M
(N*N+N)/2
void
add(int
C[],int
A[],int
B[])
{
for(int
i=0;i<M;i++)
C[i]=A[i]+B[i];
}
void
print(int
C[])
{
int
i,j,t;
for(i=0;i<N;i++)
{
for(int
j=0;j<N;j++)
{
if(i>=j)
t=(i+1)*i/2+j;
else
t=(j+1)*j/2+i;
//下三角存储
printf("%d
",C[t]);
}
printf("\n");
}
}
int
main(void)
{
int
a[N][N]={{1,2,3},{10,20,30},{2,4,5}};
int
b[N][N]={{20,40,50},{3,5,6},{30,50,60}};
int
A[M],B[M],C[M];
int
i,j,t=0,k=0;
for(i=0;i<=2;i++)
for(j=0;j<=i;j++)
{
A[t++]=a[i][j];
B[k++]=b[i][j];
}
add(C,A,B);
print(C);
return
0;
}

C语言中如何定义矩阵?
1、最简单的就是二维数组,比如存储全是整形的一个m*n的矩阵。然后可以定义int a[m][n]。输入或者输出可以用两层循环来完成,外层控制行m比如for(i=0;i<m;++i),内层控制列n比如for(j=0;j<n;++j);2、第二种方式就是压缩矩阵进行存储,如果学了数据结构应该比较好理解。结构体进行封装,...

如何用c语言存储矩阵?
在C语言中,我们可以使用二维数组来存储矩阵。以下是一个简单的示例,展示如何声明和初始化一个3x3的矩阵:在这个例子中,我们创建了一个3x3的矩阵,并使用嵌套循环来初始化矩阵的每个元素。然后,我们再次使用嵌套循环来打印矩阵的每个元素的值。注意,二维数组在C语言中是按行存储的,所以我们可以使用两...

c 矩阵类是什么意思?
C语言矩阵类是一种类型库,主要用于封装类似于矩阵这种数据结构,然后提供这种数据结构所需的各种操作。它为C语言使用者提供了一种方便且高效的处理矩阵运算的工具,尤其是在涉及到大量数据时,矩阵类的使用可大幅提高代码的效率和可读性。C语言矩阵类广泛应用于各种领域,如图像处理、人工智能、数学计算等。

空矩阵是什么意思c语言
C语言中的矩阵是一个非常常见的数据结构,它可以被定义为一个由多个元素组成的行列结构。当我们说空矩阵时,通常是指没有任何元素的矩阵。这种矩阵在C语言中可以通过初始化为零或NULL来实现,具体如何实现取决于我们想在程序中使用空矩阵的目的。空矩阵在C语言中的应用非常广泛,它可以用于表示一些空集合...

c语言。数据结构。设有下三角矩阵用数组A[0..10,0..10]表示,按行优先...
每个元素占两个字节,一个一个推就行了:100 102 104 106 108 110 112 114 116 118 120 122 124 126 128 130 132 134 136 138 140 每放一个元素,地址加2,于是A[5,5]的地址是140

C语言稀疏矩阵,数据结构,这个我应该怎么输入
这不是写得很明白么,比如你要输入A矩阵,首先在这个提示后面应该输入3(行),4(列),4(非零元素个数);然后在这个提示后面 输入:1,1,3(表示为:第1行1列值为3,后面3个数的输入格式同此);1,4,7;2,4,-1;3,2,2.

C语言数据结构-稀疏矩阵的十字链表
{int i,j; Etype e; struct OLnode *right,*down; }OLnode;typedef struct {OLnode *rh[5],*ch[5]; int mu,nu,tu; }Crosslist;void creatMatrix(Crosslist *M);void out_M(Crosslist M);Crosslist ma;int z;void main(){ creatMatrix(&ma);out_M(ma);} void o...

c语言数据结构 上三角矩阵相加相乘问题 设矩阵A B C均为采用压缩存储方...
ElemType A[N],B[N],C[N],D[N][N];int i,j,n;cout<<"请输入矩阵的阶数:";cin>>n;cout<<"请输入矩阵A:"<<endl;Enter(A,n);cout<<"请输入矩阵B:"<<endl;Enter(B,n);cout<<"矩阵A为:"<<endl;Print(A,n);cout<<"矩阵B为:"<<endl;Print(B,n);Add(A,B,C,n);...

用C语言实现 图的邻接表和邻接矩阵数据结构的定义、创建;图的深度优先...
\/* 程序1:邻接表的dfs,bfs 其中n是点的个数,m是边的个数,你需要输入m条有向边,如果要无向只需要反过来多加一遍即可。*\/#include <stdio.h>#include <string.h>#define MAXM 100000#define MAXN 10000int next[MAXM],first[MAXN],en[MAXM],n,m,flag[MAXN],pd,dl[MAXN],hea...

c语言数据结构 上三角矩阵相加相乘问题 设矩阵A B C均为采用压缩存储方...
int* pos_change(int a,int b,int *c){ int tmp=0;tmp=c[a];c[a]=c[b];c[b]=tmp;return c;} int main(int argc, char* argv[]){ int array[4];int tmp=0;printf("输入4个数");for (int i=1;i<=4;i++){ array[i]=0;printf("输入第%d个数",i);scanf("%d",&...

相似回答