为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

稀疏矩阵加法

2018-01-10 8页 doc 37KB 14阅读

用户头像

is_633808

暂无简介

举报
稀疏矩阵加法稀疏矩阵加法 #include #include #define maxsize 30 typedef struct{ int i,j; float e; }haha; typedef struct hehe{ int rows; int cols; int nums; haha data[maxsize]; }hehe,*friday; void createform(friday &m) { m=(friday)malloc(sizeof(hehe)); looop: printf("请输入...
稀疏矩阵加法
稀疏矩阵加法 #include #include #define maxsize 30 typedef struct{ int i,j; float e; }haha; typedef struct hehe{ int rows; int cols; int nums; haha data[maxsize]; }hehe,*friday; void createform(friday &m) { m=(friday)malloc(sizeof(hehe)); looop: printf("请输入矩阵的行数,列数,非零元个数: "); scanf("%d%d%d",&m->rows,&m->cols,&m->nums); while(m->rows<=0||m->cols<=0||m->nums<=0||m->nums>m->cols*m->rows) { printf("对不起,输入不满足要求,请重新输入: "); scanf("%d%d%d",&m->rows,&m->cols,&m->nums); } if(m->nums>maxsize) { printf("非零元素超过最大分配空间,请重新分配元素空间"); return ; } printf("请输入非零元行标,列标,大小: \n"); for(int l=0;lnums;) { scanf("%d%d%f",&m->data[l].i,&m->data[l].j,&m->data[l].e); if(m->data[l].i>m->rows||m->data[l].i<1||m->data[l].j>m->cols||m->data[l].j<1) printf("输入的行列不合法,此次输入无效,请继续输入\n"); else { if(m->data[l].e==0) printf("输入的必须是非零元元素,此次输入无效,请继续输入\n"); else l++; } } int t1,t2; float t; for(int p=0;pnums-1;p++) for(int q=1;qnums;q++) { if(m->data[p].i>m->data[q].i||(m->data[p].i==m->data[q].i&&m->data[p].j>m->data[q].j)) { t1=m->data[p].i; m->data[p].i=m->data[q].i; m->data[q].i=t1; t2=m->data[p].j; m->data[p].j=m->data[q].j; m->data[q].j=t2; t=m->data[p].e; m->data[p].e=m->data[q].e; m->data[q].e=t; } } for( p=0;pnums-1;p++) for(int q=1;qnums;q++) { if(m->data[p].i==m->data[q].i&&m->data[p].j==m->data[q].j) { printf("非零元素在同一位置连续出现,矩阵构造失败,请重新构造:\n"); goto looop; } } } void matadd(friday a,friday b,friday &c) { int x=0,y=0,z=0; float v; while(xnums&&ynums) { if(a->data[x].i==b->data[y].i) { if(a->data[x].jdata[y].j) { c->data[z].i=a->data[x].i; c->data[z].j=a->data[x].j; c->data[z].e=a->data[x].e; z++;x++; } else { if(a->data[x].j>b->data[y].j) { c->data[z].i=b->data[y].i; c->data[z].j=b->data[y].j; c->data[z].e=b->data[y].e; z++;y++; } else { v=a->data[x].e+b->data[y].e; if(v!=0) { c->data[z].i=a->data[x].i; c->data[z].j=a->data[x].j; c->data[z].e=v; z++; } x++;y++; } } } else if(a->data[x].idata[y].i) { c->data[z].i=a->data[x].i; c->data[z].j=a->data[x].j; c->data[z].e=a->data[x].e; z++;x++; } else { c->data[z].i=b->data[y].i; c->data[z].j=b->data[y].j; c->data[z].e=b->data[y].e; z++;y++; } } if(ynums) { c->data[z].i=b->data[y].i; c->data[z].j=b->data[y].j; c->data[z].e=b->data[y].e; z++; y++; } if(xnums) { c->data[z].i=a->data[x].i; c->data[z].j=a->data[x].j; c->data[z].e=a->data[x].e; z++; x++; } c->nums=z;c->rows=a->rows;c->cols=a->cols; return ; } void print(friday m) { printf("\t%d\t%d\t%d\n",m->rows,m->cols,m->nums); printf("\t-------------------\n"); for(int o=0;onums;o++) printf("\t%d\t%d\t%f\n",m->data[o].i,m->data[o].j,m->data[o].e); } void wxinyongheng() { friday a,b,c; createform(a); printf("a矩阵创建成功\n"); loop: createform(b); printf("b矩阵创建成功\n"); if(a->rows!=b->rows||a->cols!=b->cols) { printf("两矩阵必须满足行列分别相等,矩阵b不满足要求,请重新构造\n"); goto loop; } c=(friday)malloc(sizeof(hehe)); matadd(a,b,c); printf("b矩阵创建成功\n"); printf("a矩阵的三元组: \n"); print(a); printf("b矩阵的三元组: \n"); print(b); printf("相加后c矩阵的三元组: \n"); print(c); free(a); free(b); free(c); } void main() { wxinyongheng(); } 程序功能展示:
/
本文档为【稀疏矩阵加法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索