编写一个程序,计算s=1!+(1+2)!+(1+2+3)!+...+(1+2+3+...+n)!,以myf115.c存盘。(20分) 主函数如下: #include <stdio.h> void main() { int i,n; long s=0; scanf("%d",&n); for (i=1;i<=n;i++) s=s+f1(i); printf("\ns=%ld\n",s); } 提示:本题可编写两个函数:一个是用来计算累加值的函数f1();另一个是用来计算阶乘值的函数f2();调用f1(n)函数即可计算出1到n的累加值,调用f2(n)函数即可计算出n的阶乘值; 思考:主函数中s=s+f1(i)是循环累加了“1到n的和”,而题目要求的是循环累加“1到n的和的阶乘”。如何用函数的嵌套调用实现? 注意:不可以更改主函数的内容。
时间: 2023-06-19 11:02:48 浏览: 88
以下为程序代码:
```c
#include <stdio.h>
long f2(int n); // 声明函数f2()
long f1(int n) // 定义函数f1()
{
int i;
long sum = 0;
for (i = 1; i <= n; i++)
{
sum += i;
}
return f2(sum); // 返回1到n的和的阶乘
}
long f2(int n) // 定义函数f2()
{
int i;
long fac = 1;
for (i = 1; i <= n; i++)
{
fac *= i;
}
return fac; // 返回n的阶乘
}
void main()
{
int i, n;
long s = 0;
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
s += f1(i); // 循环累加1到n的和的阶乘
}
printf("\ns=%ld\n", s);
}
```
解释:
本题要求计算s=1!+(1+2)!+(1+2+3)!+...+(1+2+3+...+n)!,其中每一项都是1到n的和的阶乘。
我们可以定义两个函数f1()和f2(),其中f1()用来计算1到n的和的阶乘,f2()用来计算n的阶乘。在f1()中,我们可以调用f2()来计算1到n的和的阶乘,并将结果返回给主函数。在主函数中,我们可以循环调用f1()来计算每一项的值,并将其累加到s中,最终输出s的值。
注意,在调用f1()时,我们需要将1到n的和作为参数传递给f2(),计算出1到n的和的阶乘。在调用f2()时,我们只需要将n作为参数传递即可计算出n的阶乘。
阅读全文