084 可选性自变量

#include <stdio.h>
#include <stdarg.h>

double median(int n, ...)
{
    int i = n / 2;
    double m;
    va_list argptr;
    va_start(argptr, n); 
    if (n % 2) { 
        while (i-- > 0) va_arg(argptr, double);
        m = va_arg(argptr, double);
    }   
    else {
        while (--i > 0) va_arg(argptr, double);
        m = ((va_arg(argptr, double) +
            va_arg(argptr, double)) / 2.0);
    }   
    va_end(argptr);
    return m;
}

int main(int argc, char *argv[])
{
    double arr_odd[3] = { 1.0, 3.5, 7.5 };
    double arr_even[4] = { 1.0, 2.5, 3.5, 7.5 };

    printf("median of [ %.2f %.2f %.2f ] is %.2f\n",
        arr_odd[0], arr_odd[1], arr_odd[2], 
        median(3, arr_odd[0], arr_odd[1], arr_odd[2]));
    printf("median of [ %.2f %.2f %.2f %.2f ] is %.2f\n",
        arr_even[0], arr_even[1], arr_even[2], arr_even[3], 
        median(4, arr_even[0], arr_even[1], arr_even[2], arr_even[3]));

    return 0;
}