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
- A função
media_matrizrecebelinhas,colunase a matrizmcom dimensões[linhas][colunas]. - Dentro da função, inicializamos
somacom0.0. - Dois laços aninhados percorrem todas as posições: o externo para linhas, o interno para colunas.
- A cada iteração,
soma += m[i][j]acumula o valor. - Após os laços, retornamos
soma / (linhas * colunas), que é a média. - Na
main, declaramos a matriz 3x3 com valores e chamamos a função. - O resultado é impresso com
%.2fpara 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. Usarint linhas, int colunasantes da matriz permite dimensões variáveis (C99+). - Dividir por inteiro:
soma / (linhas * colunas)está correto porquesomaédouble. Sesomafosseint, a divisão seria inteira. - Acessar fora dos limites: laços devem ir até
i < linhasej < 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