c语言稀疏矩阵的加法和乘法,c语言稀疏矩阵相加

2022年 10月 20日 发表评论
腾讯云正在大促:点击直达 阿里云超级红包:点击领取
免费/便宜/高性价比服务器汇总入口(已更新):点击这里了解
稀疏矩阵加法

给定两个矩阵A和B,求其和矩阵C=A+B。

输入格式:

第一行包含两个数Row和Col,分别表示矩阵的行数和列数,A和B的维度是一致的。

第二行只有一个数N1,表示接下来要输入的A中的非零元素的个数。

接下来是N1行,每一行都是i j A[i,j] 这样的形式,表示的A中第i行第j列的元素A[i,j],为了与大多数编程语言保持一致,它们都是从零开始的,也就是说下标的有效范围是[0,Row1]×[0,Col1]。

在N1行之后,是一个数N2,表示矩阵B中非零元素的数量,此后N2行描述B中的非零元素,它们与此前描述A中非零元素的形式一致。

矩阵元素的输入均遵循行主序。这里的所有的输入均可用int类型正确表示,可以假设输入均是合法的。

输出格式:

第一行输出和矩阵C=A+B中的绝对值大于0.1的元素个数N3,此后是N3行,按照行主序输出其中的非零元素,依次是行、列的下标和对应的元素。

输入样例: 2 211 1 110 0 1 输出样例: 20 0 11 1 1 完整代码 #include<stdio.h>#include<stdlib.h>#define MAX 100typedef struct {int i,j;//行,列int data;} matrix;int main() {matrix a[MAX];matrix b[MAX];matrix c[MAX];int row;int col;int n1,n2,n3;int k,t;scanf("%d %d",&row,&col);scanf("%d",&n1);int arr1[n1][3];for(k=0; k<n1; k++) {for(t=0; t<3; t++) {scanf("%d",&arr1[k][t]);if(t==0) {a[k].i=arr1[k][t];}if(t==1) {a[k].j=arr1[k][t];}if(t==2) {a[k].data=arr1[k][t];}}}//输入矩阵a的非零元素位置及数值,并将其存入结构体中scanf("%d",&n2);int arr2[n2][3];for(k=0; k<n2; k++) {for(t=0; t<3; t++) {scanf("%d",&arr2[k][t]);if(t==0) {b[k].i=arr2[k][t];}if(t==1) {b[k].j=arr2[k][t];}if(t==2) {b[k].data=arr2[k][t];}}}//输入矩阵b的非零元素位置及数值,并将其存入结构体中//两矩阵元素相加int m=0,n=0;t=0;int temp;while(m<n1&&n<n2) {if(a[m].i==b[n].i) {if(a[m].j==b[n].j) {temp=a[m].data+b[m].data;if(temp!=0) {c[t].i=a[m].i;c[t].j=a[m].j;c[t].data=temp;t++;}m++;n++;continue;}if(a[m].j<b[n].j) {c[t].i=a[m].i;c[t].j=a[m].j;c[t].data=a[m].data;t++;m++;continue;}if(a[m].j>b[n].j) {c[t].i=b[n].i;c[t].j=b[n].j;c[t].data=b[n].data;t++;n++;continue;}}if(a[m].i<b[n].i) {c[t].i=a[m].i;c[t].j=a[m].j;c[t].data=a[m].data;t++;m++;continue;}if(a[m].i>b[n].i) {c[t].i=b[n].i;c[t].j=b[n].j;c[t].data=b[n].data;t++;n++;continue;}}int p;//a矩阵还有非零元素if(m<n1) {for(p=m; p<n1; p++) {c[t].i=a

.i;c[t].j=a

.j;c[t].data=a

.data;t++;}}//b矩阵还有非零元素if(n<n2) {for(p=n; p<n2; p++) {c[t].i=b

.i;c[t].j=b

.j;c[t].data=b

.data;t++;}}int q;printf("%dn",t);for(q=0; q<t; q++) {if(c[q].data>0.1) {printf("%d %d %dn",c[q].i,c[q].j,c[q].data);}}return 0;} 80207855

小咸鱼

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: