c语言_可变参数实现求平均值, 最大值,和简单模拟printf函数功能
程序员文章站
2022-07-14 08:14:56
...
1.使用可变参数,实现函数,求函数参数的平均值。
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
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);//此处va_arg()宏每次循环只能调用一次,否则多调用之后就回不去了
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;
}
/*
运行结果:
5, 7, 6, 18, 10的最大值是:18
请按任意键继续. . .
*/
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;
}
/*
运行结果:
hello phf aini 100% lalalal.
请按任意键继续. . .
*/