hola amigo.
bueno tu codigo quedaria asi si lo quiseras hacer mateniendo tu estructura actual de programa.
bueno no te daba el promedio correcto porque te voy a tratar de poner un ejemplo:
la primera vez que que pedias la calificacion se la sumabas a totatal algo asi.
ingresa calificaciones
3
lo que hacias era hacer esta suma
como total vale 0 entonces seria asi.
total = 0 + 3;
entonces total vale tres
buelves a preguntas.
ingresa la calificacion para alir preciona -1
-1
ahora la suma seria asi.
total = 3 -1;
por que menos uno por que fue el valor que se introdujo y se guardo en grade
y la suma es total = total +grade; como grade vale -1 y total 3 entonces da un resultado de 2.
ese es uno de lo problemas.
el otro es cadavez que repites while counter aunmenta uno entonces si agolo siguiente:
introduce el numero preciona -1 para salir.
3
introduce el numero preciona -1 para salir.
-1
entonces aqui cunte ya vale dos por que uno fue por la calificacion y otro por que tube que decirle -1 para poder salir del while.
la divicion seri asi
average = total/counter:
que en realidad serea asi.
average = 2/2;
por eso da resultados erroneas por que las suma y la divicion estban mas echas.
buno y la solucion solo es sumarle uno a total y restarle uno a counter para que los valores ya sean los verdaderos.
con esto creo que ya sabrias por que el otro codigo esta bien.
por que primero pregunta la primera calificacion despues inicia el while y hace la suma e incremeta count en 1 entonces al intoducir la ultima calificacion como se intoduce -1 se sale del while y entonces ya no se ejcuta la suma de nuevo por eso no se le resta -1 y pues como el while se repite solo las veces exactas count queda con su valor corecto y al acer la divicion todo sale bien.
bueno espero que te me haya entendido.
Código C:
Ver original//3.8 CLASS AVERAGE PROGRAM WITH SENTINEL CONTROLLED REPETITION
#include <stdio.h>
int main (void)
{
int counter;//number of grades entered
int grade;//grades value
int total;//sum of grades
float average;//average
//initialization phase
total = 0;
counter = 0;
grade = 0;
//processing phase
while( grade != -1) {
puts( "Please type the grade and press enter. To finish type \"-1\"." );//asks user to type a grade scanf( "%d", &grade
);//stores the grade typed by the user into the grade variable total = total + grade;//adds the grade typed by the user to the total
counter = counter +1;//adds one to the counter
}//end while
//termination phase
//if counter is not equal to zero, calculate the average and print it, if not print "No grades were entered"
if( counter != 0){
counter = counter -1;
total = total +1;
printf("%d %d\n", counter
, total
);
average = ( float )total / counter;
printf( "Average is %.2f\n", average
); }//end if
else{
puts( "No grades were entered" ); }//end else
}//end main
saludos drewermerc.