改进下段代码#include"start.h" //定义 typedef struct num { int i, j; Elemtype e; }Triplet; Triplet text[MAX+1]; //输入 void input(Triplet t[]) { int n = 1; printf("请输入行数"); scanf("%d",&t[0].i); printf("请输入列数"); scanf("%d",&t[0].j); printf("请输入非0元个数"); scanf("%d", &t[0].e); int m = 1; while (t[0].e!=0){ int tp = 0; printf("请输入此行非0元个数"); scanf("%d", &tp); if (tp == 0) { t[m].e = 0; t[m].i = n; m++; } else { int k = 0; while (t[0].e > 0) { while (k != t[0].j) { printf("请输入第%d行非零元列数",n); scanf("%d", &t[m].j); printf("请输入非0元值:"); scanf("%d", &t[m].e); k += t[m].j; t[m].i = n; m++; } t[0].e -= tp; } } n++; } } //加减 Triplet fnum(Triplet a[], Triplet b[],int X)//1加0减 { Triplet c[MAX+1]; c[0].i = 1; if (a[0].i != b[0].i || a[0].j != b[0].j){ c[0].e = 0; } if (X==1) { for (int p = 1; p <= a[0].i; p++) { if (a[p].i == b[p].i && a[p].j == b[p].j) { c[a[p].i].e = a[p].e + b[p].e; } } } else if (X == 0){ for (int p = 1; p <= a[0].i; p++) { if (a[p].i == b[p].i && a[p].j == b[p].j) { c[a[p].i].e = a[p].e - b[p].e; } } } return c[MAX+1]; } //输出 void output(Triplet s[]) { for (int m = 1; m < s[0].i; m++) { printf("%d", s[m].e); if (s[m].i == s[m + 1].i) { for (int n = 1; n < s[m + 1].j - s[m].j; n++) printf("\t0"); } printf("%c", s[m].i == s[m + 1].i ? '\t' : '\n'); } }
时间: 2024-01-20 14:02:38 浏览: 57
可以将函数fnum的返回值类型改为Triplet*,并动态申请一段Triplet类型的内存,将结果存储在该内存中,最后返回该内存的指针。修改后的代码如下:
```
//加减
Triplet* fnum(Triplet a[], Triplet b[], int X)//1加0减
{
Triplet* c = (Triplet*)malloc((MAX + 1) * sizeof(Triplet));
c[0].i = 1;
if (a[0].i != b[0].i || a[0].j != b[0].j) {
c[0].e = 0;
}
if (X == 1) {
for (int p = 1; p <= a[0].e; p++) {
int i = a[p].i, j = a[p].j;
c[p].i = i;
c[p].j = j;
c[p].e = a[p].e + b[p].e;
}
}
else if (X == 0) {
for (int p = 1; p <= a[0].e; p++) {
int i = a[p].i, j = a[p].j;
c[p].i = i;
c[p].j = j;
c[p].e = a[p].e - b[p].e;
}
}
return c;
}
```
同时,在使用完返回的指针后,需要手动释放掉申请的内存,否则会造成内存泄漏。
阅读全文