第三十四讲|用循环累加

【项目1:分数的累加】
编程序,输出1/3-3/5+5/7-7/9…+19/21的结果
提示:如果直接解决上面的问题有困难,可以设计一条“由易到难”的路线,逐渐解决其中要解决的问题,让自己的思路明朗起来。
(1)1+2+...+20  ——这个应该会
(2)1+1/2+1/3+…+1/20  ——分数的累加,注意两个整型相除,商也为整型,而显然求和结果应该是小数
(3)1/2+2/3+3/4+…+19/20  ——分子不全是1了,找找规律,稍加改动就好了
(4)1/2-2/3+3/4-…+19/20   ——要累加的值一正一负倒腾,用pow(-1,i)是个效率很低的做法,不推荐使用。技巧:专门设置一个变量s表示累加项的符号,取值随着循环,每次乘以-1,从而在+1、-1之间变化,循环加求和的累加要用累加的项(i/(i+1))乘以这个表示符号的s。

(5)1/3-3/5+5/7-7/9…+19/21  ——这是我们的目标。品品这种思路,一口吃不成胖子,学会一口一口吃饭。用心编程,再大的障碍,也会一个一个地排除。

#include "stdio.h"
int main()
{
	double sum=0,i,s=1;
	for(i=1.0;i<20;i+=2)
	{
		sum=sum+i/(i+2);
		sum=sum*s;
		s=-s;
	}
	printf("%f",sum);
}
运行结果



心得 注意定义变量应为double型。因为求和 为小数,所以i=1.0,又因为i是小数分子上的,应该循环19次。


【项目2:麻烦的累加涨功夫】
计算(1)

#include "stdio.h"
int main()
{
	double s=0,i,t=0.5,x,y=1.0;//s为和,i为循环次数,x是中间变量,t为底数,y为调整符号。
	for(i=0;i<=8;i++)
	{
		t*=2;
		x=1.0/t;
		x*=y;
		s+=x;	
		y=-y;
		
	}
	printf("%f",s);
	return 0;
}
//变量,步骤偏多。可以优化。各语句之间的顺序错了好几回。
运行结果



心得 变量,步骤偏多。可以优化。各语句之间的顺序错了好几回。故附上老师的代码,如下。

#include <stdio.h>  
int main( )  
{  
    int i,m=1;  //m表示2的幂,1为2的0次幂,与循环相符  
    double sum=0, s=1.0; //s直接取double型,保证除的结果是浮点型  
    for(i=0; i<=8; ++i)  
    {  
        sum=sum+s/m;  
        m*=2;   //2的i次幂由此计算得到  
        s=-s;  
    }  
    printf("%f\n", sum);  
    return 0;  
}


(2)

#include "stdio.h"
int main()
{
	int i,t=1;//i为循环,t为阶乘
	double f=0,s=1.0;
	for(i=1;i<10;++i)
	{
		t*=i;
		f=f+s/t;
		//f*=s;//直接把s提到分子上,不要再乘f,否则f的值会正负变化。
		s=-s;

	}
	printf("%f\n",f);
}


运行结果



心得 那个f*=s那一步是错误的,可以直接把s提到分子上,不要再乘f,否则f的值会正负变化。再附上老师的代码。

#include <stdio.h>  
int main( )  
{  
    int i,f=1;  //f表示加数分母上的阶乘,初值1为1的阶乘  
    double sum=0, s=1.0; //s直接取double型,保证除的结果是浮点型  
    for(i=1; i<=9; ++i)  
    {  
        f*=i;   //计算得到i的阶乘  
        sum=sum+s/f;//1楼指出的错误表达式是sum=sum+s*i/f;  
        s=-s;  
    }  
    printf("%f\n", sum);  
    return 0;  
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值