1.使用可变参数,实现函数,求函数参数的平均值。
int average(int n, ...)
{
va_list arg;
int i = 0 ;
int sum = 0 ;
va_start(arg, n);
for (i=0 ; i<n; ++i)
{
sum += va_arg(arg, int );
}
return (sum/n);
va_end(arg);
}
int main()
{
int a, b, c, d, e, i, j;
printf ("输入五个整数:\n" );
scanf ("%d %d %d %d %d " , &a, &b, &c, &d, &e);
i = average (5 , a, b, c, d, e);
j = average (3 , b, c, d);
printf ("%d ,%d ,%d ,%d ,%d 的平均值是:%d \n" ,a, b, c, d, e,i);
printf ("%d ,%d ,%d 的平均值是:%d \n" ,b, c, d, j);
system ("pause" );
return 0 ;
}
/*
运行结果:
输入五个整数:
4 5 6 7 8
4 ,5 ,6 ,7 ,8 的平均值是:6
5 ,6 ,7 的平均值是:6
请按任意键继续. . .
*/
2.使用可变参数,实现函数,求函数参数的最大值。
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
int Max(int n, ...)
{
va_list arg;
int i = 0 ;
int tmp;
int max = 0 ;
va_start(arg, n);
max = va_arg(arg, int );
for (i=1 ; i<n; i++)
{
tmp = va_arg(arg, int );
if (max <tmp)
{
max = tmp;
}
}
return max ;
va_end(arg);
}
int main()
{
int max = 0 ;
max = Max (5 , 7 , 6 , 18 , 10 , 9 );
printf ("5, 7, 6, 18, 10的最大值是:%d\n" , max );
system ("pause" );
return 0 ;
}
3.模拟实现printf函数,可完成下面的功能
print(“hello %c%c%c %s %d%% %s.\n”,’p’,’h’,’f’, “aini”, 100, “lalalal”);
遇到%s打印对应的字符串
遇到%c打印对应的字符
遇到%d打印对应的数字
%% 时打印一个%
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
void my_itoa(int num)
{
if (num <10 )
{
putchar (num+'0' );
}
else
{
my_itoa(num/10 );
putchar (num%10 +'0' );
}
}
void print(char * arr, ...)
{
va_list arg;
int i = 0 ;
va_start(arg, arr);
for (i=0 ; arr[i]!='\0' ; i++)
{
if (arr[i] != '%' )
{
putchar (arr[i]);
}
else
{
i++;
switch (arr[i])
{
case 'd' :
my_itoa(va_arg(arg, int ));
break ;
case 's' :
{
int a = 0 ;
char *p = va_arg(arg, char *);
for (a=0 ; p[a]!='\0' ; a++)
{
putchar (p[a]);
}
break ;
}
case 'c' :
putchar (va_arg(arg, int ));
break ;
case '%' :
putchar ('%' );
break ;
}
}
}
}
int main()
{
print("hello %c%c%c %s %d%% %s.\n" ,'p' ,'h' ,'f' , "aini" , 100 , "lalalal" );
system ("pause" );
return 0 ;
}