C语言解决迭代问题

迭代的定义

在C语言中,迭代是指在循环过程中重复执行一段代码,直到达到特定的条件为止。迭代可以通过几种不同的循环结构来实现,例如for循环、while循环和do-while循环。

常见的迭代问题题型

一、麦克劳林公式展开

例题分析

例一 

代码实现: 

#include <stdio.h>
#include <math.h>//调用math库函数来解决最后一项的绝对值
int main()
{
    double x, pi, sum = 0, eps;//x为待输入的值,pi为每一项,sum用来储存累加的和,eps为精度
    int i = 1;
    scanf("%lf%lf", &x, &eps);
    pi = x;
    while (fabs(pi) >= eps)
    {
        sum = sum + pi;
        i = i + 2;
        pi = pi * x * x / (i * (i - 1));//在前一项的基础上迭代,构造出下一项
    }
    sum = sum + pi;//在上面的循环中最后一项的绝对值小于精度,循环结束,最后一项
    printf("%.6f\n", sum);//未加入sum中
    return 0;
}
 例二

代码实现: 

#include <stdio.h>
#include <math.h>
int main ()
{
    double x,sum,pi,eps;
    int i=1;
    scanf("%lg%lg",&x,&eps);
    pi=x;
    sum=1;
    while(fabs(pi)>=eps)
    {
        sum=sum+pi;
        i=i+1;
        pi=pi*x/i;
    }
    sum=sum+pi;
    printf("%.6f\n",sum);
    return 0;
}
例三

 

 

代码实现:

#include <stdio.h>
#include <math.h>//调用math库用于调用绝对值函数和浮点数取余函数
int main()
{
    int i = 2;
    double x, eps, sum = 1, pi, m;//将1赋值给sum,直接以第二项开始迭代
    scanf("%lf%lf", &x, &eps);
    m = 3.1415926535897932384626;
    x = fmod(x, 2 * m);//将x化在0到二Π范围,三角函数具有周期性
    pi = -x * x / 2;//选取第一项
    while (fabs(pi) >= eps)
    {
        sum = sum + pi;
        i = i + 2;
        pi = -pi * x * x / (i * (i - 1));
    }
    sum = sum + pi;
    printf("%.6f", sum);
    return 0;
}
例四 

 

 

代码实现:

#include <stdio.h>
#include <math.h>
int main ()
{
    int i=1;
    double x,pi,sum=0,eps,m;
    m=3.1415926535897932384626;
    scanf("%lf%lf",&x,&eps);
    x=fmod(x,2*m);
    pi=x;
    while(fabs(pi)>=eps)
    {
        sum=sum+pi;
        i=i+2;
        pi=-pi*x*x/(i*(i-1));
    }
    sum=sum+pi;
    printf("%.6f\n",sum);
    return 0;
}

二、求分数的前n项和

 例一

 

代码实现:

#include <stdio.h>
int main()
{
    int n, i;
    double sum = 0, pi = 2, fz = 2, fm = 1, t;
    scanf("%d", &n);
    for (i = 1; i <= n; i++)
    {
        t = fz;//将分子的值赋值给t,以保存前一项的分子
        sum = sum + pi;
        fz = fz + fm;//构造下一项的分子
        fm = t;//构造下一项的分母
        pi = fz / fm;

    }
    printf("%.2f", sum);
    return 0;
}
例二 

 

 

 代码实现:

#include <stdio.h>
#include <math.h>
int main()
{
    int i = 1;
    double eps, sum = 0, pi = 1, flag = 1;//用flag来控制正负号
    scanf("%lf", &eps);         //eps为精度,pi为每一项的值,sum是累加的和
    while (fabs(pi) > eps)
    {
        sum = sum + pi;
        flag = -flag;
        i = i + 3;
        pi = flag / i;

    }
    sum = sum + pi;//最后一项的精度小于等于精度跳出循环,加上最后一项的值
    printf("sum = %.6f", sum);
    return 0;

}

三、斐波拉契数列问题 

 例一

 

 

代码实现:

#include<stdio.h>
int main()
{
    int x,a=1,b=0,sum=0,count=1;
    scanf("%d",&x);
    if(x<1){        	 //x小于1直接退出程序; 
    	printf("Invalid.");
    	return 0;
	}
	printf("%11d",1);//把第一项直接输出
    for(int i=2;i<=x;i++)
    {	
    	sum=a+b;
		b=a;
    	a=sum;
    	count++;//统计输出的个数
		printf("%11d",sum);
		if(count%5==0)//每输出五个换行
		printf("\n");
	}
	if(count%5!=0)printf("\n");//最后一行输出的个数不足五个也需换行
	return 0;
}

总结 

 我们在解决麦克劳林公式展开的习题中,我们要找到合适的迭代首项,如果出现1,一般将1直接赋值给sum,将第二项作为迭代的首项,同时我们要善于对比,发现迭代第一项与迭代第二项的差别,在求分数的前n项和中,我们可以对分子分母同时处理,也可以采用迭代的方法,斐波拉契数列也差不多,需要注意的是斐波拉契的第一项和第二项均为1.对于前后两项的符号不同,我们可以设一个变量flag,来进行正负号的改变,也可以直接在迭代的主式子中乘以-1。

  • 15
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值