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

2024-11-01 22:42:02
推荐回答(5个)
回答1:

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);

}

}

回答2:

1.首先弄清楚这组分数序列的规律:
从第二个数开始
分子=前一个数的分子+分母
分母=前一个数的分子

2.需求是前20项之和,因此循环20-1次相加是必然的.
3.第一个数初始化为x=2,y=1
4.从第二个数开始:
分子x=x+y
分母y=x
由于x的值发生变化,因此中间用变量a复制一下.
5.重复上面的操作,直到循环结束.

回答3:

观察分数序列,发现分子是2,3,5... 分母是,2,3,5...实际上都是斐波那契数列的一部份.
斐波那契数列指的是这样一个数列:1,1,2,3,5,8,13,21……这个数列从第三项开始,每一项都等于前两项之和。
所以只要给出两个初始值,后面的数字就可以用前面的数的和来表示.
这里用x表示分子,y表示分母.用for循环把分数序列前20项加起来.最后打印结果.
sum+=(float)(x)/y; 用了强制类型转换,因为两个int型的数相除,结果也会是int型.

回答4:

刚刚重写了一个,觉得这个简单易懂,楼主可以看看
#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);
}

回答5:

#include
#include
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);

}