Dudas programación en C

Iniciado por ironserch, 21 Septiembre 2014, 15:54 PM

0 Miembros y 1 Visitante están viendo este tema.

ironserch

Hola, necesito escribir un programa C mediante el cual se introduzcan 4 numeros enteros por teclado y que calcule la media aritmetica de los 4 numeros.

En principio el codigo que tengo es:


#include <stdio.h>
#include <math.h>

void main()
{
    int n1, n2, n3, n4;

    printf("Introducir primer valor entero: \n\n");
    scanf("%d", &n1);

    printf("Introducir segundo valor entero: \n\n");
    scanf("%d", &n2);

    printf("Introducir tercer valor entero: \n\n");
    scanf("%d", &n3);

    printf("Introducir cuarto valor entero: \n\n");
    scanf("%d", &n4);

    printf("\n\nLa media aritmetica es: %d\n", (n1 + n2 + n3 + n4)/4 );
}


El problema es que si introduzco los 4 numeros iguales, me lo hace correctamente; pero en cuanto meto por ejemplo otros numeros (p. ej. 2,1,2,1) me tendria que devolver 1,5. Se que ese ultimo "%d" me devuelve un numero entero, p. ej. en el ejemplo anterior me devolveria la parte entera de 1,5 es decir el 1. Pero probé cambiando "%d" por "%f" (float) e incluso por "%6.2f" pero me de vuelve 0.00 y 0.000000.

Asique mi duda es: ¿Como se pondria para que devolviera la media aritmetica y que saliese decimales?


Muchas gracias ;)

vangodp

Estas usando el tipo int (entero) para las variables. No te va mostrar el valor real... en vez de usar int use float o bouble. En printf use el modificador adecuado %f en vez de %d para mostrar el resultado.

rir3760

#2
Cita de: ironserch en 21 Septiembre 2014, 15:54 PM¿Como se pondria para que devolviera la media aritmetica y que saliese decimales?
Cuando ambos operando del operador  "/" son enteros el resultado también lo es (por supuesto no hay parte decimal), para obtener un resultado con decimales por lo menos uno de ellos debe ser de tipo float, double o long double.

Para conseguirlo una opción es, como ya te comento vangodp, utilizar variables del mentado tipo, la opción mas simple es utilizar una literal, de esta forma:
printf("La media aritmetica es %f\n", (n1 + n2 + n3 + n4) / 4.0); /* 4.0 es de tipo double */

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

vangodp

¿no hay que poner %f en vez de %d?   :huh: O eso creo jeje

rir3760

Cita de: vangodp en 21 Septiembre 2014, 17:05 PM¿no hay que poner %f en vez de %d?
Ouch! Claro que si, eso me pasa por tasajear el código sin compilarlo. Ya corregí mi mensaje anterior.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

ironserch