Problem C: 编写函数:矩阵乘法 (Append Code)

来源:互联网 发布:整站源码带数据下载 编辑:程序博客网 时间:2024/05/18 05:17


Problem C: 编写函数:矩阵乘法 (Append Code)

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 3579  Solved: 1915
[Submit][Status][Web Board]

Description

给出一个m行n列的矩阵A和一个n行q列的矩阵B,求它们的乘积。

-----------------------------------------------------------------------------

结合“Append Code”中的代码,编写以下函数(形参中ma[][]的数组大小需自己补全):

原型:int get_matrix(int ma[][], int m, int n);

功能:遵循样例输入的格式读取一个m行n列的矩阵存储在ma[][]里。

原型:int put_matrix(int ma[][], int m, int n);

功能:按格式输出一个m行n列矩阵ma[][]的所有元素。

原型:int mul_matrix(int pr[][], int m1[][], int m2[][], int m, int n, int q);

功能:计算m行n列的矩阵m1[][]和n行q列的矩阵m2[][]的乘积pr[][]。

函数的调用格式见“Append Code”。

Input

输入分为三部分,首先输入三个正整数m,n,q,其次是一个m行n列的矩阵A,最后是一个n行q列的矩阵B,矩阵的元素均为整数。m、n、q均不超过100。

Output

输出一个m行q列的矩阵。矩阵的每行元素输出为一行,矩阵每列元素间一个用空格分开。

Sample Input

2 2 31 12 00 2 31 1 2

Sample Output

1 3 50 4 6

HINT

定义多维维数组做形参时,元素的个数要小心定义。

Append Code

append.c:

int main(){    int m, n, q;    int product[MAX_SIZE][MAX_SIZE];    int matrix1[MAX_SIZE][MAX_SIZE];    int matrix2[MAX_SIZE][MAX_SIZE];      scanf("%d%d%d", &m, &n, &q);    get_matrix(matrix1, m, n);    get_matrix(matrix2, n, q);    mul_matrix(product, matrix1, matrix2, m, n, q);    put_matrix(product, m, q);      return 0;}

这里进行矩阵的乘法的思路和平常线代中的计算思路并不相同,第一个矩阵的第一行的各个元素依次与第二个矩阵的每一行的各个元素依次相乘求出结果矩阵的第一行,然后依次计算;

变换的速度一共三种

1第一个矩阵的行

2第一个矩阵的列

3第二个矩阵的行

4第二个矩阵的列            !其中第一个矩阵的列的变化速度和第二个矩阵的行的变化速度相同,第一个矩阵的行变换最慢,第二个矩阵的列变化最快,列出一个三重循环的for就轻松解觉了;



码子:

#include <stdio.h>#include <string.h>#include <math.h>#include <stdlib.h>#include <ctype.h>#define MAX_SIZE 105int get_matrix(int ma[105][105], int m, int n){    int i,j,k,l;    for(i=0; i<m; i++)        for(j=0; j<n; j++)            scanf("%d",&ma[i][j]); }int put_matrix(int ma[105][105], int m, int n){    int i,j,k,l;    for(i=0; i<m; i++)    {        for(j=0; j<n; j++)            {                if(j==0) printf("%d",ma[i][j]);                else printf(" %d",ma[i][j]);            }            printf("\n");      }   }int mul_matrix(int pr[105][105], int m1[105][105], int m2[105][105], int m, int n, int q){     int i,j,k,l;    for(i=0; i<m; i++)    {        for( j=0; j<q; j++)        {            pr[i][j]=0;//这里初始化就好了!            for( k=0; k<n; k++)            {                pr[i][j]+= m1[i][k]*m2[k][j];            }        }    }}  int main(){    int m, n, q;    int product[MAX_SIZE][MAX_SIZE];    int matrix1[MAX_SIZE][MAX_SIZE];    int matrix2[MAX_SIZE][MAX_SIZE];      scanf("%d%d%d", &m, &n, &q);    get_matrix(matrix1, m, n);    get_matrix(matrix2, n, q);    mul_matrix(product, matrix1, matrix2, m, n, q);    put_matrix(product, m, q);      return 0;}


0 0
原创粉丝点击