使用可变参数列表写出求平均数,最大值和模拟printf的函数

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;
}

猜你喜欢

转载自blog.csdn.net/dream8834/article/details/80247101