Dadas duas matrizes do tipo float A ( m linhas, n colunas) e B ( n linhas, p colunas), escrever um programa para calcular o produto de A por B.

Passo 1

O enunciado pede um programa que receba duas matrizes de ponto flutuante A de dimensão m×n e B de dimensão n×p e calcule seu produto A·B, resultando em uma matriz C de dimensão m×p. O conteúdo envolvido é multiplicação de matrizes e vamos precisar da definição de cada elemento da matriz produto.

Passo 2

A teoria diz que o elemento da linha i e coluna j da matriz C, que chamamos de c_{ij}, é dado por:
cij = sumk=1^n aik cdot bkj
Ou seja, para cada par (i,j) de índices, somamos o produto dos elementos da linha i de A pelos elementos da coluna j de B.

Passo 3

Para implementar isso em código, precisamos de estruturas de dados que guardem as matrizes A, B e C. Em C, podemos usar arrays bidimensionais de float: A[m][n], B[n][p] e C[m][p]. Além disso, precisamos ler as dimensões m, n e p e os valores de A e B da entrada.

Passo 4

O algoritmo usa três loops aninhados:
  • O primeiro loop percorre i de 0 a m−1 (linhas de A)
  • O segundo percorre j de 0 a p−1 (colunas de B)
  • Dentro, inicializamos C[i][j] = 0.0 e usamos um terceiro loop k de 0 a n−1 para acumular C[i][j] += A[i][k] * B[k][j]
    Isso implementa exatamente a soma definida na fórmula.

Passo 5

Por fim, montamos o programa em C que:
  1. Lê m, n e p
  2. Lê os elementos de A e B
  3. Executa os três loops para preencher C
  4. Imprime a matriz C resultante

Resposta

#include <stdio.h>
int main() {
int m, n, p;
// Leitura das dimensões
scanf("%d %d %d", &m, &n, &p);
// Declaração das matrizes usando arrays de tamanho variável (C99)
float A[m][n];
float B[n][p];
float C[m][p];

// Leitura da matriz A
for (int i = 0; i < m; i++) {
    for (int j = 0; j < n; j++) {
        scanf("%f", &A[i][j]);
    }
}

// Leitura da matriz B
for (int i = 0; i < n; i++) {
    for (int j = 0; j < p; j++) {
        scanf("%f", &B[i][j]);
    }
}

// Cálculo do produto C = A * B
for (int i = 0; i < m; i++) {
    for (int j = 0; j < p; j++) {
        C[i][j] = 0.0f;
        for (int k = 0; k < n; k++) {
            C[i][j] += A[i][k] * B[k][j];
        }
    }
}

// Impressão da matriz C
for (int i = 0; i < m; i++) {
    for (int j = 0; j < p; j++) {
        printf("%.2f ", C[i][j]);
    }
    printf("\n");
}

return 0;
}

Exercícios relacionados