用可变参数函数求和、最大值和最小值的 C 程序
假设我们要制作一些可以接受多个参数的函数,没有固定数量的参数。我们要做三个函数sum(),max()和min(),它们可以分别计算数字的总和,数字的最大值和给定数字的最小值。这些函数中的每一个都将参数数量作为它们的第一个参数。要定义这种类型的函数,我们需要在函数参数中使用省略号(...)三个点。要使用它,我们必须包含stdarg.h头文件。这种类型的函数称为可变参数函数。要访问变量参数,我们可能会注意到四种不同的事情-
va_list:这存储所有给定的参数
va_start:这将开始访问变量参数ap变量
va_arg:这用于检索给定类型的下一个参数
va_end:这结束访问变量参数列表
所以,如果我们调用像-;
总和(5,5,2,8,9,3)
最大(3,5,9,2)
分钟(6,8,5,2,6,7,9)
那么输出将是27(所有五个数字的总和)、9(给定三个数字的最大值)、2(给定六个数字的最小值)。
示例
让我们看看以下实现以获得更好的理解-
#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\n",sum(5, 5, 2, 8, 9, 3));
printf("%d\n",max(3, 5, 9, 2));
printf("%d\n",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