C语言编程:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。

题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
#include<stdio.h>
main()
{ int i,x,y,a;
float sum=0;
x=2;
y=1;
for(i=1;i<20;i++)
{
sum+=(float)(x)/y;
// printf("%d/%d\n",x,y);
a=x;
x=x+y;
y=a;
}
printf("%7.5f\n",sum);
}
答案已经做出,希望有人能帮我用文字表达出简单的思考过程,并最好能帮我做一副流程图~急用!谢谢谢谢

public class Demo11 {

public static void main(String[] args) {

double sum=2/1;

double m=2;//定义分子

double n=1;//定义分母

for(int i=2;i<=20;i++){

m=m+n;

n=m-n;

sum+=(double) m/n;  //将分子的类型强制转换成double,否则两个int相除,结果还是int会将小数点后都舍弃。

}

System.out.println(sum);

}

}

//用数组方法来实现

public class Demo2 {

public static void main(String[] args) {

double numerator[]=new double[20];      //创建分子长度为20的浮点型数组

double denominator[]=new double[20];    //创建分母长度为20的浮点型数组

numerator[0]=2;

denominator[0]=1;

double sum=numerator[0]/denominator[0];

for(int i=0;i<19;i++){

numerator[i+1]=numerator[i]+denominator[i];

denominator[i+1]=numerator[i];

sum+=(double)numerator[i+1]/denominator[i+1];

}

System.out.println(sum);

}

}

扩展资料

Java数列求和:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。

public class QiuHe {

 public static void main(String[] args){

float total=0;

for(int i=0;i<20;i++){

float top= getTop(i+1);

float bottom=getBottom(i+1);

total+=top/bottom;//每一项的值

}

System.out.println(total);

}

//获取分子核心递归方法

public static float getTop(int position){

 if(position==1){

return (float)2;

}

 if(position==2){

return (float) 3;

}

 return getTop(position-1)+getTop(position-2);

}

 //获取分母核心递归方法

public static float getBottom(int position){ 

if(position==1){

return (float) 1;

}

if(position==2){

return (float)2;

}

return getBottom(position-1)+getBottom(position-2);

}

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-25
1.首先弄清楚这组分数序列的规律:
从第二个数开始
分子=前一个数的分子+分母
分母=前一个数的分子

2.需求是前20项之和,因此循环20-1次相加是必然的.
3.第一个数初始化为x=2,y=1
4.从第二个数开始:
分子x=x+y
分母y=x
由于x的值发生变化,因此中间用变量a复制一下.
5.重复上面的操作,直到循环结束.本回答被提问者采纳
第2个回答  2008-01-07
观察分数序列,发现分子是2,3,5... 分母是,2,3,5...实际上都是斐波那契数列的一部份.
斐波那契数列指的是这样一个数列:1,1,2,3,5,8,13,21……这个数列从第三项开始,每一项都等于前两项之和。
所以只要给出两个初始值,后面的数字就可以用前面的数的和来表示.
这里用x表示分子,y表示分母.用for循环把分数序列前20项加起来.最后打印结果.
sum+=(float)(x)/y; 用了强制类型转换,因为两个int型的数相除,结果也会是int型.
第3个回答  2013-03-26
刚刚重写了一个,觉得这个简单易懂,楼主可以看看
#include "stdio.h"
void main()
{
float m,n,t,sum=0;
int i;
n=1.0;
m=2.0;
for(i=1;i<=20;i++)
{
sum+=m/n;
t=n+m;
n=m;
m=t;
}
printf("前20项和是%5.2f\n",sum);
}
第4个回答  2018-06-21
#include <stdio.h>
#include <math.h>
main()
{
int i,count=0;
double sum=0.0;
int a1,a2,b1,b2,a3,b3;
a1=2; //第1项分子
a2=3; //第2项分子
b1=1; //第1项分母
b2=2; //第2项分母
sum = sum + a1*1.0/b1;
printf("%d/%d + ",a1,b1);
sum = sum + a2*1.0/b2;
printf("%d/%d ",a2,b2);
for(i=3;i<=20;i++)
{
a3=a1+a2;
b3=b1+b2;
printf(" + %d/%d",a3,b3);
sum = sum + a3*1.0/b3;
a1=a2;
b1=b2;
a2=a3;
b2=b3;
}
printf(" = %.2lf\n",sum);

}
相似回答