es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El promedio restado del máximo y el mínimo arroja un resultado incorrecto.

Quiero encontrar el promedio de 5 números, excluyendo el máximo y el mínimo de la tabla.

Sin embargo, el siguiente código proporciona el resultado incorrecto.

#include <stdio.h>

#define size 5

main() {
  int i;
  float table[size], max, min, mo, sum;
  max = 0;
  min = 0;
  mo = 0;

  printf("Proporcione un número: ");
  scanf("%f", &table[1]);
  max = table[1];
  min = table[1];

  for (i = 2; i <= size; i++) {
    printf("Proporcione un número: ");
    scanf("%f", &table[i]);

    if (max <= table[i])
      max = table[i];
    if (min >= table[i]) {
      min = table[i];
    }
    sum = sum + table[i];
  }

  mo = (sum - max - min) / (size - 2);
  printf("El número promedio es: %f", mo);
}

Ejemplo:

Si ingresas 1,2,3,4,5, la salida será 2,666667 en lugar de 3.

¿Podrías por favor asesorar por qué está ocurriendo esto?</stdio.h>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Hay un par de problemas con el código proporcionado que conducen a un resultado incorrecto.

    En primer lugar, los valores iniciales de max y min se establecen en 0, lo cual es incorrecto cuando se trata de una lista de números positivos. Para solucionar esto, podemos inicializar max y min al primer número de entrada antes de que comience el bucle:

    printf("Proporcione un número: ");
    scanf("%f", &table[1]);
    max = min = table[1]; // establecer tanto max como min al primer número
    

    En segundo lugar, el bucle se ejecuta desde i=2 hasta i<=size, lo que significa que solo considera los últimos 4 valores de entrada y excluye el primer número. Esto se puede solucionar cambiando la condición del bucle a i<=size-1 y moviendo la solicitud de entrada inicial fuera del bucle:

    printf("Proporcione un número: ");
    scanf("%f", &table[1]);
    max = min = table[1]; // establecer tanto max como min al primer número
    
    for (i = 2; i <= size-1; i++) {
        printf("Proporcione un número: ");
        scanf("%f", &table[i]);
    
        if (max <= table[i])
            max = table[i];
        if (min >= table[i])
            min = table[i];
        sum = sum + table[i];
    }
    

    Con estos cambios, el programa debería mostrar el promedio correcto.

Comments are closed.