add.h文件: 存放两个子函数
#ifndef _add_h #define _add_h void calarr(double *a, double *b,double *c,int ma,int na,int mb,int nb) { if (na - mb)printf("error input!\n"); else { int t = 0; for (int i = 0; i < ma; i++) { for (int j = 0; j < nb; j++,t++) { double tem = 0; for (int k = 0; k < mb; k++) tem += *(a + na * i + k)**(b + j + k * nb); *(c +t) = tem; } } } } void printarr(double *a, int n,int col) { for (int i = 0; i < n; i++) { printf("%lf ", *(a + i)); if (!((i + 1) % col))printf("\n"); } } #endif裁决函数:
#include "add.h" #include<stdio.h> #include<stdlib.h> #define M 4 #define N 25 #define P 5 void produce(double *a, int n) { srand(1); for (int i = 0; i < n; i++) { *(a + i) = rand() %10+7; } } int main() { double a[M*N], b[N*P], c[M*P] = {0}; produce(a, M*N); produce(b, N*P); calarr(a, b, c, M, N, N, P); printarr(c,M*P,P); return 0; }