【C语言】问答总结 | 神奇的迭代公式两种解法

题目

  有一个神奇的迭代公式:x​n+1 ​​​= x ​ n ​ + 2 ​​​ \sqrt{x_{​n​+2}​​​} xn+2​​​ ,无论 x 的初值(正数)选的多么大,若干次迭代之后,都与 2​​​ 无限接近,也就是说 x 序列的极限是 2​​​。假设x​0​​=99999999.0 (8 个 9),编写程序,输入一个正整数 n,输出 x​n ​​的值(保留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);
}

运行效果

while 循环

解法二:调用自定义函数

相关知识

有参函数的定义

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 语言程序解法,相信大家也会有不同的解法,可以在评论区打出其他解法哦,如有问题请批评指正,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小泽的熊先森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值