Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: freddy91 en 30 de Octubre 2016, 13:01
-
Hola tengo un problema con un código que estoy haciendo(soy nuevo en esto).Tengo que hacer la media de n numero y cuando se introduzca un numero negativo se pare.Esto es es lo que tengo hecho:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int contador=0;
float media=0,notas=0,total_notas=0;
printf("Ingrese la nota o un numero negativo para salir: ");
scanf("%f",¬as);
while(notas>=0){
contador++;
total_notas=total_notas+notas;
printf("Ingrese la nota o un numero negativo para salir: ");
scanf("%f",¬as);
}
if (contador!=0)
media=total_notas/contador;
printf("Total de alumnos presentados a examen: %d\n",contador);
printf("Nota media: %f\n",media);
return 0;
}
El problema es que al hacer la media me cuenta el numero negativo y la media sale mal.¿Cómo podría arreglarlo?
Gracias de antemano
EDIT: Ya lo he solucionado
Así me queda el código
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
float contador=0,aprobado=0,suspenso=0,notable=0,deficiente=0,sobresaliente=0;
float media=0,notas=0,total_notas=0;
float por_sobre=0,por_not=0,por_apro=0,por_sus=0,por_defi=0;
do{
;
printf("Ingrese la nota o numero negativo para salir: ");
scanf("%f",¬as);
if (notas<10 & notas>=0){
contador++;
if(notas>=9 )
sobresaliente++;
if(notas>=7 & notas<9)
notable++;
if(notas>=5 & notas<7)
aprobado++;
if(notas>=2 & notas<5)
suspenso++;
if(notas<2)
deficiente++;
total_notas=total_notas+notas;
}
}while(notas>0);
media=total_notas/contador;
por_sobre=(sobresaliente/contador)*100;
por_not=(notable/contador)*100;
por_apro=(aprobado/contador)*100;
por_sus=(suspenso/contador)*100;
por_defi=(deficiente/contador)*100;
printf("Total alumnos presentados a examen: %g\n",contador);
printf("Numero de sobresalientes: %g (%.2f)\n",sobresaliente,por_sobre);
printf("Numero de notable: %g (%.2f)\n",notable,por_not);
printf("Numero de aprobados: %g (%.2f)\n",aprobado,por_apro);
printf("Numero de suspensos: %g (%.2f)\n",suspenso,por_sus);
printf("Numero de muy deficientes: %g (%.2f)\n",deficiente,por_defi);
if(media>=5){
printf("Nota media: %.2f (Aprobado)\n",media);
}
else{
printf("Nota media: %.2f (Suspenso)\n",media);
}
return 0;
}
¿De que forma podría optimizarlo más?
-
Hola freddy91 en general tu código se ve bien
Una forma de mejorar tu código es usar el tipo de variable int en aquellos casos en que la variable no va a tomar valores decimales. Es cierto que para operar posteriormente puede requerirte realizar una conversión de tipo de dato.
Por ejemplo contador no tendría que ser float (supongo que lo has hecho así para poder operar sin problemas)
Recomendamos este curso para comprender los conceptos de la programación en C: https://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=82&Itemid=210
Saludos