使用可变参数函数查找总和、最大值和最小值的 C 程序

cserver side programmingprogramming

假设我们想要创建一些可以接受多个参数的函数,参数的数量没有固定。我们想要创建三个函数 sum()、max() 和 min(),它们可以分别计算数字的总和、数字的最大值和给定数字的最小值。每个函数都将参数数量作为其第一个参数。要定义这种类型的函数,我们需要在函数参数中使用省略号 (...) 三个点。要使用它,我们必须包含 stdarg.h 头文件。这种类型的函数称为可变参数函数。要访问变量参数,我们可能会注意到 −

  • va_list :存储所有给定的参数

  • va_start :开始访问变量参数 ap 变量

  • va_arg :用于检索给定类型的下一个参数

  • va_end :结束访问变量参数列表

因此,如果我们调用 −; 之类的函数

  • sum(5, 5, 2, 8, 9, 3)
  • max(3, 5, 9, 2)
  • min(6, 8, 5, 2, 6, 7, 9)

则输出将为 27 (所有五个数字的总和)、9(给定三个数字中的最大值)、2(给定六个数字中的最小值)。

为了解决这个问题,我们将遵循以下步骤 −

定义一个函数 sum(),它将采用cnt和可变数量的参数

  • 定义va_list ap
  • 通过va_start(ap,cnt)初始化ap
  • n := 0
  • 初始化i := 0,当i < cnt,更新(将 i 增加 1),执行以下操作:
    • n := n + va_arg(ap, int) 的下一个参数
  • va_end(ap) 结束访问 ap
  • 返回 n
  • 定义一个函数 min(),它将采用 cnt 和可变数量的参数
  • 定义 va_list ap
  • va_start(ap, cnt) 初始化 ap
  • 最小值 := 99999
  • 初始化 i := 0,当 i < cnt 时,更新(将 i 增加 1),执行以下操作:
    • current := va_arg(ap, int) 的下一个参数
    • 如果 current <最低限度,那么:
      • minimum := current
  • 通过 va_end(ap) 结束访问 ap
  • 返回最小值
  • 定义一个函数 max(),它将接受 cnt 和可变数量的参数
  • 定义 va_list ap
  • 通过 va_start(ap, cnt) 初始化 ap
  • 最大值 := 0
  • 初始化 i := 0,当 i < cnt 时,更新(将 i 增加 1),执行:
    • 通过 va_arg(ap, int) 当前 := 下一个参数
    • 如果当前 > 最大值,则:
      • maximum := current
  • 通过 va_end(ap) 结束访问 ap
  • 返回 maximum

示例

让我们看看下面的实现以便更好地理解 −

#include <stdio.h>
#include <stdarg.h>
int sum (int cnt,...) {
    va_list ap;
    int i, n;
    va_start(ap, cnt);
    n = 0;
    for (i=0;i<cnt;i++){
        n += va_arg(ap, int);
     }
    va_end(ap);
    return n;
}
int min(int cnt,...) {
    va_list ap;
    int i, current, minimum;
    va_start(ap, cnt);
    minimum = 99999;
    for (i=0;i<cnt;i++){
        current = va_arg(ap, int);
        if (current < minimum)
            minimum = current;
    }
    va_end(ap);
    return minimum;
}
int max(int cnt,...) {
    va_list ap;
    int i, current, maximum;
    va_start(ap, cnt);
    maximum = 0;
    for (i=0;i<cnt;i++){
        current = va_arg(ap, int);  
        if (current > maximum)
            maximum = current;
    }
    va_end(ap);
    return maximum;
}
int main(){
    printf("%d
",sum(5, 5, 2, 8, 9, 3));     printf("%d
",max(3, 5, 9, 2));     printf("%d
",min(6, 8, 5, 2, 6, 7, 9)); }

输入

sum(5, 5, 2, 8, 9, 3)
max(3, 5, 9, 2)
min(6, 8, 5, 2, 6, 7, 9)

输出

27
9
2

相关文章