Autor Tema: Problema media en c (lenguajeC) calcular media de n números y parar con negativo  (Leído 2061 veces)

freddy91

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
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:

Código: [Seleccionar]
#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",&notas);
while(notas>=0){
contador++;
total_notas=total_notas+notas;
printf("Ingrese la nota o un numero negativo para salir: ");
scanf("%f",&notas);


}
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
Código: [Seleccionar]
#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",&notas);
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?
« Última modificación: 03 de Noviembre 2016, 19:43 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
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

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".