ALGO-86矩阵乘法

来源:互联网 发布:李知爱情斑马线 编辑:程序博客网 时间:2024/05/18 00:05
/*
问题描述
  输入两个矩阵,分别是m*s,s*n大小。输出两个矩阵相乘的结果。
输入格式
  第一行,空格隔开的三个正整数m,s,n(均不超过200)。
  接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j)。
  接下来s行,每行n个空格隔开的整数,表示矩阵B(i,j)。
输出格式
  m行,每行n个空格隔开的整数,输出相乘後的矩阵C(i,j)的值。
样例输入
2 3 2
1 0 -1
1 1 -3
0 3
1 2
3 1
样例输出
-3 2
-8 2

提示
矩阵C应该是m行n列,其中C(i,j)等于矩阵A第i行行向量与矩阵B第j列列向量的内积。
例如样例中C(1,1)=(1,0,-1)*(0,1,3) = 1 * 0 +0*1+(-1)*3=-3
*/
#include <stdio.h>

void shuru( int a,int b,int c[a][b]) ;
void js( int m,int n ,int s , int jz1[m][s] , int jz2[s][n] , int jz3[m][n] ) ;
void shuchu( int n, int m, int [m][n]) ;
void csh( int m,int n,int [m][n]) ;

int main(void)
{
    int m,s,n;
    scanf("%d%d%d",&m,&s,&n);
    
    int jz1[m][s] ;
    int jz2[s][n] ;
    int jz3[m][n] ;
    csh(m,n,jz3) ;
    shuru( m ,s ,jz1) ;
    shuru( s, n , jz2) ;
    js( m , s , n , jz1 , jz2 , jz3 );
    shuchu( m , n , jz3 ) ;
    return 0;
}

void csh(int m, int n, int jz3[][n])
{
    int i,j;
    for( i = 0 ; i < m ; i ++)
    {
        for( j = 0 ; j < n ; j ++ )
        {
            jz3[i][j] = 0 ;
        }
    }
}

void shuchu( int m, int n, int jz3[m][n])
{
    int i , j ;
    for( i = 0 ; i < m ; i ++ )
    {
        for( j = 0 ; j < n ; j ++ )
        {
            printf("%d ",jz3[i][j] ) ;
        }
        putchar('\n') ;
    }
}

void js( int m,int s ,int n , int jz1[m][s] , int jz2[s][n] , int jz3[m][n] )
{
    int i  , j  , k;
    for( i = 0 ; i < m; i ++ )
    {
        for( k = 0 ; k < s ; k ++ )
        {
            for( j = 0 ; j < n ; j ++ )
            {
                jz3[i][j] += jz1[i][k] * jz2[k][j] ;
            }
        }
    }
}

void shuru( int a,int b,int c[a][b])
{
    int i , j ;
    for( i = 0 ; i < a ; i ++ )
    {
        for( j = 0 ; j < b ; j ++ )
        {
            scanf("%d",&c[i][j] ) ;
        }
    }
}
原创粉丝点击