我正在为明天的课程编译这个,你知道为什么这个代码就在这里:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int row;
int col;
int value;
} term;
void smTranspose(term a[], term b[]) {
int m, n, v, i, j, p;
m = a[0].row;
n = a[0].col;
v = a[0].value;
b[0].row = n;
b[0].col = m;
b[0].value = v;
if (v > 0) {
p = 1;
for (i = 0; i < n; i++)
for (j = 1; j <= v; j++)
if (a[j].col == i) {
b[p].row = a[j].col;
b[p].col = b[j].row;
b[p].value = a[j].value;
printf("<%d %d %d>\n", b[p].row, b[p].col, b[p].value);
p++;
}
}
}
int main() {
term a[3] = { { 1,1,8 },{ 2,1,9 },{ 1,3,17 } };
term b[3];
smTranspose(a, b);
getchar();
}
会产生错误的输出吗?
<0 1 0>
<0 0 1688502961>
这是一个试图创建矩阵转置的程序,参数为a和b,a为输入矩阵。正如您在此处所见,输出将显示转置矩阵的行,列和值。请帮忙!
我是这个论坛的新人,所以如果我的帖子违反任何法律和规定,请告诉我。谢谢!
答案 0 :(得分:-1)
这里只是一个小小的建议,矩阵可以直接用平面数组表示,这样你就可以大大简化你的代码,即:
#include <stdio.h>
void transpose(int *a, int *b) {
for (int y = 0; y < 3; y++) {
for (int x = 0; x < 3; x++) {
b[y * 3 + x] = a[x * 3 + y];
}
}
}
void print_matrix(int *m) {
printf("\n");
for (int y = 0; y < 3; y++) {
for (int x = 0; x < 3; x++) {
printf("%d ", m[y * 3 + x]);
}
printf("\n");
}
}
int main() {
int a[] = {1, 1, 8, 2, 1, 9, 1, 3, 17};
int b[9];
transpose(a, b);
print_matrix(a);
printf("----------");
print_matrix(b);
}
固定大小为3x3时,您不需要检查边界。
至于你的作业,我会离开去为你做整个调试;)