Médio C

Média de uma matriz 3x3

Enunciado

Crie um programa que declare uma matriz 3x3 de números reais (double), calcule e imprima a média de todos os elementos. Use uma função que receba a matriz e o número de linhas e colunas.

Requisitos

  • Declarar uma matriz double matriz[3][3] com valores à sua escolha.
  • Implementar uma função double media_matriz(int linhas, int colunas, double m[linhas][colunas]) que retorne a média.
  • Imprimir a média com duas casas decimais no formato Media: X.XX.

Código inicial

#include <stdio.h>

// Implemente a função abaixo
double media_matriz(int linhas, int colunas, double m[linhas][colunas]) {
    // Seu código aqui
}

int main(void) {
    // Declare a matriz e chame a função
    return 0;
}

Saída esperada

Media: 5.00
Ver dica

Some todos os elementos com dois laços aninhados e divida pelo total de elementos (linhas * colunas).

Mostrar solução
#include <stdio.h>

// Função que calcula a média de uma matriz
// Nota: o primeiro parâmetro é o número de linhas, o segundo o de colunas
// e o terceiro a matriz com dimensões especificadas.
double media_matriz(int linhas, int colunas, double m[linhas][colunas]) {
    double soma = 0.0;
    for (int i = 0; i < linhas; i++) {
        for (int j = 0; j < colunas; j++) {
            soma += m[i][j];
        }
    }
    return soma / (linhas * colunas);
}

int main(void) {
    // Matriz 3x3 com valores de 1 a 9
    double matriz[3][3] = {
        {1.0, 2.0, 3.0},
        {4.0, 5.0, 6.0},
        {7.0, 8.0, 9.0}
    };

    double media = media_matriz(3, 3, matriz);
    printf("Media: %.2f\n", media);
    return 0;
}

Passo a passo

  1. A função media_matriz recebe linhas, colunas e a matriz m com dimensões [linhas][colunas].
  2. Dentro da função, inicializamos soma com 0.0.
  3. Dois laços aninhados percorrem todas as posições: o externo para linhas, o interno para colunas.
  4. A cada iteração, soma += m[i][j] acumula o valor.
  5. Após os laços, retornamos soma / (linhas * colunas), que é a média.
  6. Na main, declaramos a matriz 3x3 com valores e chamamos a função.
  7. O resultado é impresso com %.2f para duas casas decimais.

Por que funciona

Arrays multidimensionais são armazenados em ordem de linha (row-major). A passagem para a função usa um ponteiro para o primeiro elemento, mas a sintaxe double m[linhas][colunas] permite indexar corretamente. O cálculo da média é a soma dividida pelo número total de elementos.

Erros comuns

  • Esquecer de passar as dimensões: se a função for declarada como double media_matriz(double m[][3]), o número de colunas deve ser constante. Usar int linhas, int colunas antes da matriz permite dimensões variáveis (C99+).
  • Dividir por inteiro: soma / (linhas * colunas) está correto porque soma é double. Se soma fosse int, a divisão seria inteira.
  • Acessar fora dos limites: laços devem ir até i < linhas e j < colunas.

Outra forma de resolver

Poderia usar um único laço e calcular índices, mas dois laços são mais legíveis. Também poderia usar size_t para dimensões, mas int é aceitável para matrizes pequenas.

Saída esperada

Media: 5.00