70,037
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//1、输入N
int InputN()
{
int N;
printf("输入N:");
scanf("%d", &N);
while (N % 7 != 0)
{
printf("数列的总项数不是7的倍数,请重新输入:");
scanf_s("%d", &N);
}
return N;
}
//2、数列通式
//这类题目也可以用递归,但是这道题会溢栈
//所以用了迭代
int Series(int res_2, int res_1, int res, int count, int n) //第count-2项、第count-1项、第count项、迭代变量count、n
{
if (n < 1)
return 0;
else if (n == 1 || n == 2)
return 0;
else if (n == 3)
return 1;
else if (count < n)
return Series(res_1, res, res_2 + res_1 + res, count + 1, n); //迭代计算下一个(count+1)、直到第n个
else
return res;
}
int getSeriesN(int n)
{
return Series(0, 0, 1, 3, n);
}
//3、计算并输出数列前n项的平方根之和
//有疑问:一个数的平方根应该是两个,且互为相反数,求和没意义
void Sum(int n)
{
float sum = 0.0;
int i = 1;
while (i <= n)
{
sum += sqrt(getSeriesN(i));
i++;
}
printf("%f\n", sum);
}
//4、按行输出
void Output(int n)
{
int i;
int cnt = 0;
for ( i = 1; i <= n; i++)
{
printf("%d", getSeriesN(i));
cnt++;
if (cnt % 7 == 0) //每打印7个换行
printf("\n");
else
printf("------");
}
}
int main()
{
int n;
n = InputN();
Sum(n);
Output(n);
return 0;
}