1174 - C语言6.22

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB

用二分法求以下方程在(-10, 10)之间的根:

保证此函数在以上区间中是单调递增的。

题目输入

题目输出

输出二分法求出的根,保留4位小数。

请注意行尾输出换行。

输入/输出样例

输入格式

输出格式

2.0000

C语言解答

#include <stdio.h>
#include <math.h>
int main() {
        float l, r, mid, val;
        int time;
        l = -10; r = 10;
        for (time = 1;time <= 50;time++) {
                mid = (l + r) * 0.5;
                val = 2 * mid * mid * mid - 4 * mid * mid + 3 * mid - 6;
                if (val < 0)
                        l = mid;
                else
                        r = mid;
        }
        printf("%.4f\n", l);
        return 0;
}

C++解答

#include <stdio.h>
#include <math.h>
int main() {
	float l, r, mid, val;
	int time;
	l = -10; r = 10;
	for (time = 1;time <= 50;time++) {
		mid = (l + r) * 0.5;
		val = 2 * mid * mid * mid - 4 * mid * mid + 3 * mid - 6;
		if (val < 0)
			l = mid;
		else
			r = mid;
	}
	printf("%.4f\n", l);
	return 0;
}

Java解答


public class Main {

	/**
	 * @param args
	 */
	public static double qiuzhi( double x){
		return 2 *x*x*x -4*x*x + 3*x - 6;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//求 2 *x*x*x -4*x*x + 3*x - 6 = 0
      double shang ,xia ,zhong ;
      shang = 10;
      xia = -10 ;
      zhong = 0 ;
      do{
      	zhong = (shang+xia) /2;
      	if( qiuzhi(shang ) *  qiuzhi(zhong) <= 0  )
      	{
      		xia = zhong;
      	}
      	else if( qiuzhi(xia)* qiuzhi(zhong) <= 0 )
      	{
      		shang = zhong;
      	}
      	
      }while( Math.abs(shang-xia) >=1e-5  );
      System.out.printf("%.4f\n",zhong);
	}

}