每日练习之可变参数

习题1:求平均值

使用可变参数,实现函数,求函数参数的平均值。


#include 
#include 

float average(int n_values, ...)
{
    va_list var_arg;
    int count = 0;
    float sum = 0;

    //准备访问可变参数
    va_start( var_arg, n_values );
    //添加取自可变参数列表的值
    for( count = 0; count < n_values; count +=1 )
    {
        sum += va_arg( var_arg, int );  
    }

    //完成处理可变参数
    va_end( var_arg );

    return sum/n_values;
}

int main()
{
    int n_values = 0;
    int v1 = 2; int v2 = 3; int v3 = 5;int v4 = 10;
    float argl = 0; float argl2 = 0;

    argl = average(3, v1, v2, v3);
    argl2 = average(4, v1, v2, v3, v4);
    printf("argl = %f, argl2 = %f\n", argl, argl2);

    return 0;
}

习题2: 求最大值

使用可变参数,实现函数,求函数参数的最大值。

#include 
#include 
int Max(int n_values, ...)
{
    va_list va_arg;
    int count = 0;
    int tmp = 0;
    int max = 0;

    va_start( va_arg, n_values);
    for(count=0; countcount++)
    {
        if( (tmp =va_arg(va_arg, int))> max )
        {
            max = tmp;
        }
    }

    return max;
}

int main()
{
    int n_values = 0;
    int v1 = 2; int v2 = 3; int v3 = 5;int v4 = 10;
    int max1 = 0; int max2 = 0;

    max1 = Max(3, v1, v2, v3);
    max2 = Max(4, v1, v2, v3, v4);
    printf("max1 = %d, max2 = %d\n", max1, max2);

    return 0;
}

习题3: 模拟printf

模拟实现printf函数,可完成下面的功能

  • 能完成下面函数的调用。
  • print(“s ccc d.\n”,”hello”,’b’,’i’,’t’,100);
  • 函数原型:print(char *format, …)
#include 
#include 
#include 


void my_print(char *format, ...)
{
    va_list va_arg;
    char *pstr = NULL;
    char ch = 0;
    int num = 0;

    assert(format);
    va_start(va_arg, format);
    while(*format)
    {
        if(*format == '%')
        {
            format++;
            switch(*format)
            {
                case 's':
                    pstr = va_arg(va_arg, char*);
                    while(*pstr)
                    {
                        putchar(*pstr);
                        pstr++;
                    }
                    break;
                case 'c':
                    ch = va_arg(va_arg, char);
                    putchar(ch);
                    break;
                case 'd':
                    num = va_arg(va_arg, char);
                    putchar(num);
                    break;
                default:
                    putchar(*format-1);
                    putchar(*format);
            }
        }
        else
        {
            putchar(*format);
            format++;
        }
    }

    va_end( va_arg );
}

int main()
{

    my_print("%s%s%c%c%c%d","s ccc d.\n","hello",'b','i','t',100);
    putchar('\n');

    return 0;
}

你可能感兴趣的:(每日练习)