要求输入0?0?0时判断输入结束,据此修改上述代码
时间: 2024-03-12 09:48:05 浏览: 19
以下是修改后的代码,可以通过输入0 0 0来结束输入稀疏矩阵的三元组表:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 1000 // 定义三元组最大元素个数
// 三元组结构体
typedef struct {
int i, j, e; // 行下标、列下标、元素值
} Triple;
// 稀疏矩阵结构体
typedef struct {
Triple data[MAXSIZE + 1]; // 三元组表,data[0]未用
int mu, nu, tu; // 行数、列数、非零元素个数
} Matrix;
// 稀疏矩阵转置
void Transpose(Matrix M, Matrix *T) {
int p, q, col;
int num[M.nu + 1];
int cpot[M.nu + 1];
T->mu = M.nu; T->nu = M.mu; T->tu = M.tu;
if (T->tu) {
for (col = 1; col <= M.nu; ++col) num[col] = 0;
for (p = 1; p <= M.tu; ++p) ++num[M.data[p].j];
cpot[1] = 1;
for (col = 2; col <= M.nu; ++col) cpot[col] = cpot[col - 1] + num[col - 1];
for (p = 1; p <= M.tu; ++p) {
col = M.data[p].j;
q = cpot[col];
T->data[q].i = M.data[p].j;
T->data[q].j = M.data[p].i;
T->data[q].e = M.data[p].e;
++cpot[col];
}
}
}
int main() {
Matrix M, T;
int i, j, k;
printf("请输入稀疏矩阵的行数、列数和非零元素个数:");
scanf("%d%d%d", &M.mu, &M.nu, &M.tu);
printf("请输入稀疏矩阵的三元组表:\n");
for (k = 1; k <= M.tu; ++k) {
scanf("%d%d%d", &M.data[k].i, &M.data[k].j, &M.data[k].e);
}
while (1) {
printf("请输入稀疏矩阵的行数、列数和非零元素个数(输入0 0 0结束):");
scanf("%d%d%d", &M.mu, &M.nu, &M.tu);
if (M.mu == 0 && M.nu == 0 && M.tu == 0) break;
printf("请输入稀疏矩阵的三元组表:\n");
for (k = 1; k <= M.tu; ++k) {
scanf("%d%d%d", &M.data[k].i, &M.data[k].j, &M.data[k].e);
}
Transpose(M, &T);
printf("转置后的稀疏矩阵的三元组表为:\n");
for (k = 1; k <= T.tu; ++k) {
printf("%d %d %d\n", T.data[k].i, T.data[k].j, T.data[k].e);
}
}
return 0;
}
```
修改思路:
在原代码的基础上,将输入稀疏矩阵的三元组表的过程放在一个while循环中,循环条件为输入的行数、列数和非零元素个数均为0。每次循环结束后,根据输入的稀疏矩阵转置并输出转置后的三元组表。