daAzai / C

0 stars 0 forks source link

链表实现矩阵乘法(含数组) #7

Open daAzai opened 5 years ago

daAzai commented 5 years ago

include

include

define LEN sizeof(struct s)

define c 3

int i, j, k;

struct s { int num[c]; struct s *next; };

struct s first() { struct s head, p1, p2; for (i = 0; i < c; i ++){ p1 = (struct s *)malloc(LEN); for (k = 0; k < c; k ++){ p1->num[k] = k; //scanf("%d", &p1->num[k]); } p1->next = NULL; if (i == 0) head = p1; else p2->next = p1; p2 = p1; } return head; }

struct s second() { int data[c][c]; struct s head, p1, p2;

for (i = 0; i < c; i ++){
    for (j = 0; j < c; j ++){
        data[i][j] = j;
        //scanf("%d", &data[i][j]);
    }
}

for (i = 0; i < c; i ++){
    p1 = (struct s *)malloc(LEN);
    for (j = 0; j < c; j ++){
        p1->num[j] = data[j][i];
    }
    p1->next = NULL;
    if (i == 0)
        head = p1;
    else
        p2->next = p1;
    p2 = p1;
}

return head;

}

struct s calculate(struct s data1, struct s data2) { struct s head, p1, p2; struct s stud; stud = data2; int sum; p1 = (struct s )malloc(LEN); for (i = 0; i < c; i ++){ sum = 0; data2 = stud; for (j = 0; j < i; j ++){ data2 = data2->next; } for (k = 0; k < c; k ++){ sum = sum + data1->num[k] data2->num[k]; } p1->num[i] = sum; } head = p1; p2 = p1; p1->next = NULL; for (int m = 2 ;m <= c; m ++){ data1 = data1->next; p1 = (struct s )malloc(LEN); for (i = 0; i < c; i ++){ sum = 0; data2 = stud; for (j = 0; j < i; j ++){ data2 = data2->next; } for (k = 0; k < c; k ++){ sum = sum + data1->num[k] * data2->num[k]; } p1->num[i] = sum; } p1->next = NULL; p2->next = p1; p2 = p1; } return head; }

void print(struct s *p) { while(p){ for (i = 0; i < c; i ++){ printf("%d\t", p->num[i]); } printf("\n\n"); p = p->next; } }

int main () { print(calculate(first(), second())); return 0; }

daAzai commented 5 years ago

为方便检查 first及second中直接赋值 手动输入已经注释 且将矩阵定为三阶(#define c 3) ###########0 1 2 # 0 0 0####### 运行程序 得到 0 1 2 * 1 1 1 的结果 ###########0 1 2 # 2 2 2#######