题目
有一个神奇的迭代公式:xn+1 = x n + 2 \sqrt{x_{n+2}} xn+2,无论 x 的初值(正数)选的多么大,若干次迭代之后,都与 2 无限接近,也就是说 x 序列的极限是 2。假设x0=99999999.0 (8 个 9),编写程序,输入一个正整数 n,输出 xn 的值(保留10位小数)。
样例1
输入样例
8
输出样例
x[8]=2.0051798692
样例2
输入样例
16
输出样例
x[16]=2.0000000790
解法一:while 循环
相关知识
当表达式为真,则执行下面的语句;语句执行完之后再判断表达式是否为真,如果为真,再次执行下面的语句;然后再判断表达式是否为真……就这样一直循环下去,直到表达式为假,跳出循环。这个就是 while 的执行顺序。
语法格式
while (表达式)
{
语句;
}
代码
#include <stdio.h>
#include <math.h>
int main() {
int n,i;
double xn= 99999999.0;
scanf("%d", &n);
i = n;
while (i>0)
{
xn = sqrt(xn + 2);
i--;
}
printf("x[%d]=%.10f", n, xn);
}
运行效果
解法二:调用自定义函数
相关知识
有参函数的定义
dataType functionName( dataType1 param1, dataType2 param2 ... ){
//body
}
函数可以只有一个参数,也可以有多个,多个参数之间由 “ , ”分隔。参数本质上也是变量,定义时要指明类型和名称。与无参函数的定义相比,有参函数的定义仅仅是多了一个参数列表。
数据通过参数传递到函数内部进行处理,处理完成以后再通过返回值告知函数外部。
代码
#include <stdio.h>
#include <math.h>
double func(int n)
{
if (n == 0)
{
return 99999999.0;
}
return sqrt(func(n - 1) + 2);
}
int main() {
int n;
scanf("%d", &n);
printf("x[%d]=%.10f", n, func(n));
运行效果
总结
以上就是本人对这道题的 C 语言程序解法,相信大家也会有不同的解法,可以在评论区打出其他解法哦,如有问题请批评指正,谢谢。