(C++)设计一个参数数目可变的函数,输出n个实参之和
答案:3 悬赏:0
解决时间 2021-02-11 09:23
- 提问者网友:星空下的寂寞
- 2021-02-11 04:55
(C++)设计一个参数数目可变的函数,输出n个实参之和
最佳答案
- 二级知识专家网友:一场云烟
- 2021-02-11 05:12
一楼说的那个比较不沾边,楼主不要看了。
设计可变参数数目的函数的主要难度在于要自己手动从栈中提取参数,但这些有现成的宏定义可以用,在<stdarg.h>和<stdargs.h>中。
下面是一个例子,sum()的功能是任意数量的整数求和。
sum()第一个参数是要求和的数的个数,后面跟着若干整型参数。如果实参个数小于第一个参数num的数值,sum()行为不确定。
也可以不用num而设置一个参数结束标志(比如最后一个参数为-1等),但也有同样的问题。说白了就是你必须给函数一个知道参数个数的方法,否则函数无法知道你到底在调用的时候给了几个实参。
#include <stdio.h>
#include <stdarg.h>
int sum(int num, ...)
{
va_list parg;
int arg;
int s;
int i;
va_start(parg, num);
for (s = 0, i = 0; i < num; i++)
{
arg = va_arg(parg, int);
s += arg;
}
va_end(parg);
return s;
}
int main(int argc, char* argv[])
{
printf("%d\n", sum(1, 1)); // 1
printf("%d\n", sum(2, 1, 2)); // 1 + 2
printf("%d\n", sum(3, 1, 2, 3)); // 1 + 2 + 3
printf("%d\n", sum(4, 1, 2, 3, 4)); // 1 + 2 + 3 + 4
return 0;
}
设计可变参数数目的函数的主要难度在于要自己手动从栈中提取参数,但这些有现成的宏定义可以用,在<stdarg.h>和<stdargs.h>中。
下面是一个例子,sum()的功能是任意数量的整数求和。
sum()第一个参数是要求和的数的个数,后面跟着若干整型参数。如果实参个数小于第一个参数num的数值,sum()行为不确定。
也可以不用num而设置一个参数结束标志(比如最后一个参数为-1等),但也有同样的问题。说白了就是你必须给函数一个知道参数个数的方法,否则函数无法知道你到底在调用的时候给了几个实参。
#include <stdio.h>
#include <stdarg.h>
int sum(int num, ...)
{
va_list parg;
int arg;
int s;
int i;
va_start(parg, num);
for (s = 0, i = 0; i < num; i++)
{
arg = va_arg(parg, int);
s += arg;
}
va_end(parg);
return s;
}
int main(int argc, char* argv[])
{
printf("%d\n", sum(1, 1)); // 1
printf("%d\n", sum(2, 1, 2)); // 1 + 2
printf("%d\n", sum(3, 1, 2, 3)); // 1 + 2 + 3
printf("%d\n", sum(4, 1, 2, 3, 4)); // 1 + 2 + 3 + 4
return 0;
}
全部回答
- 1楼网友:心与口不同
- 2021-02-11 07:23
是实现N个数字相加还是什么???
我不太明白你要问的,先随便给你写个
#include<iostream.h>
void add()
{
int n=0;
double a=0,s=0;
cout<<"请输入相加的个数"<<endl;
cin >>n;
for(int i=0;i<n;i++)
{ cout<<"请输入第"<<i+1<<"个数"<<endl;
cin>>a;
s=s+a;
}
cout<<"这"<<n<<"个数的和为"<<s<<endl;
}
void main()
{
add();
}
好久没用C++了没调试大概就这个意思!
- 2楼网友:承载所有颓废
- 2021-02-11 06:14
可以使用c语言有个允许定义可接受可变参数列表的函数的功能。 如为了访问一个可变参数表中额外的参数就,需要使用中定义的宏。它们允许在任何时候从头到尾地遍历一个附加参数列表。在遇到每一个参数前要知道它的类型(调用之前可以不必清楚细节了)。可以使用一个固定参数(例如printf的第一个参数,第二个就是可变参数(实现))来提供一些信息如参数数目、类型。 自己百度下关于c标准库 (标准参数库头文件)的使用吧。。 很简单,下面是你的题目答案:
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |