题目:
计算数学序列前N项的和,这个序列的第一项为3,第二项为4,后面的每一项都是前两项的平方和的平方根。例如,第一项为3,第二项为4,第三项为x2+y2=5,以此类推。
编写程序,包含以下几个函数:
-
calculateSequenceSum
:接受一个整数参数N,计算并返回前N项序列的和。 -
main
:在主函数中,输入N的值,然后调用calculateSequenceSum
函数计算前N项序列的和,并输出结果,结果保留3位小数。
输入:序列项数N
输出:前N项和
样例输入:4
样例输出:序列的和为18.403
提示
在头文件中定义<math.h>,可以直接调用hypot
函数计算+。
答案:
#include <stdio.h>
#include <math.h>
double calculateSequenceSum(int N, double x, double y) {
if (N == 1)
{
return x;
}
else if (N == 2)
{
return x + y;
}
else
{
double z = hypot(x,y);
return x + calculateSequenceSum(N - 1, y, z);
}
}
int main() {
int N;
scanf("%d", &N);
double sum = calculateSequenceSum(N, 3, 4);
printf("序列的和为%.3f", sum);
return 0;
}
过程:
一开始做题很容易就得到第n个序列的值,但就是搞不懂怎么在一个函数里把这些值相加,在main函数把这些数用for循环加起来,后来运行超时。
#include<stdio.h>
#include<math.h>
float calculateSequenceSum(int x)
{
if(x>=3)
{
double a= hypot(calculateSequenceSum(x-1),calculateSequenceSum(x-2));
return a ;
}
else if(x==1)
{
return 3;
}
else if (x==2)
{
return 4;
}
}
int main()
{
int x;
scanf("%d",&x);
int i=x;
double sum=0;
while(i>0)
{
double s= calculateSequenceSum( i);
i--;
sum+=s;
}
printf("序列的和为%.3f",sum);
return 0;
}
又想着用指针,写了一个相加的函数,都不行,根本没想到函数输入多个参数,最后用ai写出来了。(太久没有好好写代码了,脑子瓦塔了···反省ing,要刷题了)
函数使用多个参数又用递归的方法,妙的是函数体内返回又调用函数将x,y,z,之间转换了关系,有点难想到。