这种程序没有读懂,到底怎么算啊

img

img

答案选A. 5.500000;执行步骤如下:

public class TestUtils {

    /**
     * n 变量,main方法中调用f(i)方法,传过来的i值
     * 当i = 0, n = i = 0;
     * f(0) = 1.0
     */
    public static double f(int n) {
        // 定义int整形变量i
        int i;
        // 定义double变量s,s初始化值为1.0
        double s = 1.0;
        /*
         * f(0): i = 1, n = 0, i不大于n,所以第一次不进入循环,s = 1.0,即f(0) = 1.0
         * f(1): i = 1, n = 1, i=n,所以第二次进入循环,s = 1.0 + 1.0 / 1,即 f(1) = 2.0
         * 第三次for循环: i = 2, n = 1, i大于n,所以第三次不进入循环,即 f(1) = 2.0
         * f(2) : i = 1, n = 2, i小于n,所以第二次进入循环,s = 1.0 + 1.0 / 1 = 2.0,
         * 所以 s = 2.0; i = 2; 因为 i = 2; n = 2,i=n,所以进入循环体, s = 2.0 + 1.0 / 2 = 2.5 ,
         *  f(2) = 2.5, i = 3
         * 第五次for循环: 因为 i = 3; n = 2,i不小于等于n,跳出循环,即 f(2) = 2.5
         */
        for (i = 1; i <= n; i++) {
            s += 1.0 / i;
        }
        return s;
    }

    /**
     * 一个类的程序入口在main方法开始<br>
     * 因此先从main方法的第一行开始读代码
     */
    public static void main(String[] args) {
        // 定义int整形类型变量i,m,m初始化值为3
        int i, m = 3;
        // 定义float浮点型变量a,a初始化值为0.0
        float a = 0.0f;
        /*
         *做for循环操作
         * 第一次循环:i = 0, m = 3,所以i<m , i++,等执行完for中的方法后,i = 1
         * a += f(i);可以写成: a = a + f(i),即 a = 0.0 +  f(0)
         * f(0) = 1.0
         * a = 0.0 +  f(0) = 0.0f + 1.0d = 1.000000;
         * a = 1.000000;
         * (0.0f中的f代表是浮点型float1.0d中的d表示是double类型,计算时应该自动向上转型,转成double类型,double类型默认6位小数)
         *
         * 第二次循环:i = 1, m = 3, 所以i<m, i++,等执行完for中的方法后,i = 2
         * a += f(i);可以写成: a = a + f(i),即 a = 1.0 +  f(1)
         * f(1) = 2.0
         * a = 1.000000 +  f(1) = 1.000000 + 2.0 = 3.000000;
         * a = 3.000000
         *
         * 第三次循环:i = 2, m = 3, 所以i<m, i++,等执行完for中的方法后,i = 3
         * a += f(i);可以写成: a = a + f(i),即 a = 3.0 +  f(2)
         * f(2) = 2.5
         * a = 3.000000 +  f(2) = 3.000000 + 2.5 = 5.500000;
         * a = 5.500000
         *
         * 第四次循环:i = 3, m = 3, 所以i不小于m, 就不进入循环了,直接执行
         * System.out.printf()输出a, a = 5.500000
         */
        for (i = 0; i < m; i++) {
            a += f(i);
        }
        System.out.printf("%f\n", a);
    }
}