/**
【程序20】 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
1.程序分析:请抓住分子与分母的变化规律。
*/
import java.util.*;
public class TestFractionSum {
private static double sum = 0.0;
public static void main(String args[]) {
int temp;
double numerator,denominator,fun;
System.out.println("你想计算前多少项的和,请输入一个正整数:");
Scanner input = new Scanner(System.in);
temp = input.nextInt();
for(int i=1;i<=temp;i++) {
numerator = (double)(i + 1);
denominator = (double)i;
sum = sum + numerator/denominator;
fun = numerator + denominator;
denominator = numerator;
numerator = fun;
}
System.out.println("前"+temp+"项的和是:"+sum);
}
}
这个是本人写的程序,检查了一下思路,觉得没有错,但是在测试答案的正确性的时候却出现了误差,请各位大侠指教!

解决方案 »

  1.   

    这个fun完全没用到计算上吧?非第一次运算 sum就不该再是 numerator/denominator比如当i等于3第三个sum应该是5/3而楼主这个却是 4/3 
      

  2.   

    import java.util.*;
    /**
    【程序20】 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
    1.程序分析:请抓住分子与分母的变化规律。
    */public class TestFractionSum {
    private static double sum = 0.0; public static void main(String args[]) {
    int temp;
    double numerator, denominator, fun;
    System.out.println("你想计算前多少项的和,请输入一个正整数:");
    Scanner input = new Scanner(System.in);
    temp = input.nextInt();
    numerator = 2.0;
    denominator = 1.0;
    for (int i = 1; i <= temp; i++) {

    sum = sum + numerator / denominator;
    fun = numerator + denominator;
    denominator = numerator;
    numerator = fun;
    }
    System.out.println("前" + temp + "项的和是:" + sum);
    }
    }
    你的FOR每次都会重置分子也分母的。
      

  3.   


    double sum=0;
    double numerator =2;
    double denominator =1;
    int temp = input.nextInt();
    for(int i=1;i<=temp;i++) {
    sum = sum + numerator/denominator;
    double numerator_record=numerator;
    numerator=numerator+denominator;
    denominator=numerator_record;
    }
      

  4.   

    楼主,你这个for循环里写的有问题,你for循环里有分两段,
    第一段:
    //根据循环的下表给numerator和denominator赋值
    numerator = (double) (i + 1);
    denominator = (double) i;
    //循环加
    sum = sum + numerator / denominator;第二段:
    fun = numerator + denominator;
    denominator = numerator;
    numerator = fun;
    这一段根据分子分母的规律给numerator和denominator循环赋值。但关键问题是:每次循环过来都会执行第一段代码,根据循环下表赋值,
    也就是说,你的第二段代码其实是死代码,执行到了,但是没有用到。修改方法:numerator和denominator在循环外面初始化,然后在循环里面根据规律赋值。
    numerator = (double) (2);
    denominator = (double) 1;
    for (int i = 1; i <= temp; i++) {
    sum = sum + numerator / denominator;
    fun = numerator + denominator;
    denominator = numerator;
    numerator = fun;
    }这样应该就没问题了
      

  5.   

    numerator = (double)(i + 1);
    denominator = (double)i;
    这两句不能写在循环体内,
    删掉,不然你下面赋值全部无效。放在for循环外定义。
    double numerator =2.0;
    double denominator =1.0;