必須引数(この例では整数 1 個で,値は 10 )と可変個数の引数(タイプは,double )の平均値を計算します.
#include <stdio.h>
#include <stdarg.h>
double average(int, double first, ...);
/************/
/* main */
/************/
int main()
{
double mean;
/*
10と4つの実数値の平均値(負の値がデータの終了記号)
*/
mean = average(10, 1.0, 2.0, 3.0, 9.0, -1.0);
printf("平均値は %f\n", mean);
/*
10と3つの実数値の平均値(負の値がデータの終了記号)
*/
mean = average(10, 1.0, 2.0, 3.0, -1.0);
printf("平均値は %f\n", mean);
/*
可変個数の引数がない場合(負の値がデータの終了記号)
*/
mean = average(10, -1.0);
printf("平均値は %f\n", mean);
return 0;
}
/********************/
/* 平均値の計算 */
/********************/
double average(int base, double first, ...)
{
double sum;
double d = first;
int count = 1;
va_list marker;
sum = (double)base;
va_start(marker, first); /* 可変個引数の初期化 */
while (d >= 0.0) {
sum += d;
count ++;
d = va_arg(marker, double); /* 次の引数の取得 */
}
va_end(marker); /* 可変個引数のreset */
return (sum / count);
}
(出力)
平均値は 5.000000
平均値は 4.000000
平均値は 10.000000