marcoshuck icon

Funciones con argumentos opcionales

marcoshuck | PRO | 04/09/14 01:40:04 AM UTC | 0 ⭐ | 402 👁️ | Never ⏰ | []
C |

1.66 KB

|

None

|

0 👍

/

0 👎

/* 
 
        Uso de listas de argumentos de longitud variable - Deitel&Deitel - Página 484 (Otros temas de C) - Capítulo 14
                                UTN - FRP | 2014 | Informática II
 */
 
#include <stdio.h>
#include <stdarg.h> // Nuevo
 
double promedio(unsigned int i, ...); /* 
                                       *   Protito de una función con una lista de argumentos variable.
                                       *   Observación: los "..." siempre van al final.
                                       */
 
// Main
int main(int argc, char *argv[])
{
    double W = 37.5,
    X = 22.5,
    Y = 1.7,
    Z = 10.2;
    
    printf("%s%.1f\n%s%.1f\n%s%.1f\n%s%.1f\n\n", "W = ", W, "X = ", X, "Y = ", Y, "Z = ", Z);
    printf("%s%.3f\n%s%.3f\n%s%.3f\n\n", 
    "El promedio de W y X es ", promedio(2, W, X), /* Nuevo */
    "El promedio de W, X y Y es ", promedio(3, W, X, Y), /* Nuevo */
    "El promedio de W, X, Y y Z es ", promedio(4, W, X, Y, Z) /* Nuevo */ );
    system("PAUSE");    
    return 0;
}
 
// Calculo de promedio a través de la función definida anteriormente
double promedio(unsigned int i, ...)
{
    // Variables
    double total = 0;
 
    // Contador para seleccionar argumentos
    unsigned int j;
    
    va_list ap; // -> Almacena la información necesaria para va_start y va_end // Nuevo
    
    va_start(ap, i); // Inicialización del objeto va_list // Nuevo
    
    // Procesar lista de argumentos de longitud variable
    for (j = 1; j <= i; j++)
        total += va_arg(ap, double); // Nuevo
    
    // Limpia la lista de argumentos de longitud variable
    va_end(ap); // Nuevo
    
    return total/i;
}

Comments