欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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.
请按任意键继续. . .
*/
相关标签: 可变参 C语