输出错误

时间:2017-04-03 17:28:49

标签: c data-structures

我正在为明天的课程编译这个,你知道为什么这个代码就在这里:

#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为输入矩阵。正如您在此处所见,输出将显示转置矩阵的行,列和值。请帮忙!

我是这个论坛的新人,所以如果我的帖子违反任何法律和规定,请告诉我。谢谢!

1 个答案:

答案 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时,您不需要检查边界。

至于你的作业,我会离开去为你做整个调试;)