Crie uma função que receba como parâmetro um array de float, definido de tal forma que o último número seja zero. Esta função deve retornar a diferença entre a média dos números contidos nesse array e o menor dos números, não contando com o zero final.
Exemplo: (1, 7, 4, 0); Média: 4; Menor: 1; Retorno = média - menor = 3;

Passo 1

O enunciado pede uma função que receba um array de float cujo último elemento é sempre zero (sentinela) e retorne a diferença entre a média dos elementos (excluindo o zero) e o menor valor dentre eles. O conteúdo envolvido é: percorrer um array usando laço, acumular soma, contar quantos elementos válidos temos, encontrar o mínimo e calcular média e diferença.

Passo 2

Inicializamos três variáveis antes de percorrer o array:
soma para acumular a soma dos elementos.
n para contar quantos elementos (não zero) já processamos.
menor para armazenar o menor valor encontrado até o momento.
Como ainda não vimos nenhum elemento válido, vamos atribuir a menor o primeiro elemento do array.

Passo 3

Percorremos o array com um índice i enquanto arr[i] != 0.0. A cada iteração fazemos:
  1. soma += arr[i]
  2. n += 1
  3. se arr[i] < menor, então menor = arr[i]

Passo 4

Ao sair do laço sabemos que
\sum_{i=1}^{n} x_i = \text{soma}
e que temos n valores. Calculamos a média como
\bar x = \frac{\text{soma}}{n}.

Passo 5

A diferença que a função deve retornar é
\bar x - \min_i x_i = \bar x - \text{menor}.

Passo 6

Exemplo com (1,7,4,0):
– Após a iteração: soma = 1+7+4 = 12, n = 3, menor = 1.
– Média: \bar x = 12 / 3 = 4.
– Diferença: 4 - 1 = 3.

Resposta

float diferencaMediaMenor(float arr[]) {
 float soma \(=0.0\)f;
 int n \(=0\);
 float menor = arr[0];
 for (int i \(=0\); arr[i] !\(=0.0\)f; i\(++\)) {
 soma \(+=\) arr[i];
 n \(+=1\);
 if (arr[i] < menor) {
 menor = arr[i];
 }
 }
 float media = soma / n;
 return media - menor;
}

Exercícios relacionados