1.使用可变参数,实现函数,求函数参数的平均值。
#include<stdio.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 = 10;
int b = 20;
int c = 30;
int avg = average(3,a,b,c);
printf("avg = %d\n", avg);
return 0;
}
2.使用可变参数,实现函数,求函数参数的最大值。
#include<stdio.h>
#include<stdarg.h>
int Max(int n,...)
{
int i = 0;
int a = 0;
int b = 0;
va_list arg;
va_start(arg,n);
a = va_arg(arg,int);
for(i=0; i<n; i++)
{
b = va_arg(arg,int);
if(a < b)
a = b;
}
return a;
va_end(arg);
}
int main()
{
int a = 10;
int b = 20;
int c = 30;
int max = 0;
max = Max(3,b,a,c);
printf("max = %d\n", max);
return 0;
}
3.模拟实现printf函数,可完成下面的功能
//
//能完成下面函数的调用。
//print(“s ccc d.\n”,”hello”,’b’,’i’,’t’,100);
//函数原型:
//print(char *format, …)
//
1.用一个while循环来读取你要打印的类型,直到遇到\0结束。
2.如果是字符c串就用putchar一个字符一个字符的输出,直到遇到\0结束。
3.如果是整形就转换为字符后再用putchar输出。
4.如果是单个字符就用putchar输出。
#include<stdio.h>
#include<stdarg.h>
void itoa(int n)//递归打印整数转变为字符的每一位
{
if(n > 9)
{
itoa(n/10);
printf("%d",n%10);
}
else
printf("%d",n);
}
void print(const char *format, ...) {
int i = 0;
va_list arg;
va_start(arg, format);
while(*format)
{
switch( *format ) {
case 'c':
putchar(va_arg(arg, int));
break;
case 'd':
{
int r = va_arg(arg, int);
itoa(r);
}
break;
case 's':
{
char *r = va_arg(arg, char*);
while(*r != '\0')
{
putchar(*r);
r++;
}
}
break;
case ' ':
putchar(' ');
break;
}
format++;
}
}
int main()
{
print("s ccc d.\n","hello",'b','i','t',100);
return 0;
}