使用可变参数,实现函数,求函数参数的平均值。
#include<stdio.h>
#include<stdarg.h>
#include<windows.h>
int avg(nums, ...)
{
va_list arg;
va_start(arg, nums);
int i = 0;
int sum = 0;
while (i < nums)
{
sum+=va_arg(arg, int);
i++;
}
va_end(arg);
return sum / nums;
}
int main()
{
int data=avg(5, 1, 2, 3, 4, 5);
printf("%d", data);
system("pause");
return 0;
}
使用可变参数,实现函数,求函数参数的最大值。
#include<stdio.h>
#include<stdarg.h>
#include<windows.h>
int my_max(nums, ...)
{
va_list arg;
va_start(arg, nums);
int i = 0;
int j = 0;
while (i < nums)
{
int m = va_arg(arg, int);
if (j < m)
{
j = m;
}
i++;
}
va_end(arg);
return j;
}
int main()
{
int data=my_max(5, 1, 2, 3, 4, 5);
printf("%d", data);
system("pause");
return 0;
}
模拟实现printf函数
/*要实现printf函数,我们首先应该获取printf函数中由双引号中的字符串,若遇到不是%的字符,我们应该直接将其输出,若遇到%,我们应该判断它后面是什么字符,这里先只考虑%c,%s的情况,如果是%c那么我们应该将读到的字符输出来,若为%s,应该将读到的字符串通过指针解引用的方式依次输出,如果是%d%f我们暂且将它当做普通字符输出。
*/
实现的代码如下:
#include<stdio.h>
#include<stdarg.h>
#include<windows.h>
#include<assert.h>
void print(char* format, ...)
{
assert(format);
va_list arg;
va_start(arg, format);
char ch = 0;
while (*format != '\0')
{
if (*format == '%')
{
format++;
ch = *format;
switch (ch)
{
case 'c':
{
char a = va_arg(arg, char);
printf("%c ", a);
break;
}
case 's':
{
char* b = va_arg(arg, char*);
while (*b != '\0')
{
putchar(*b);
b++;
}
printf(" ");
break;
}
case 'd':
{
int c = va_arg(arg, int);
printf("%d", c);
break;
}
default:
break;
}
format++;
}
else
{
putchar(*format);
format++;
}
}
va_end(arg);
}
int main()
{
print("%s%c%c%c%d.\n", "hello", 'b', 'i', 't',100);
system("pause");
return 0;
}