【发布时间】:2015-06-15 05:15:31
【问题描述】:
我编写了一个程序,用于在用户决定作为输入的范围内查找五次多项式的根。 例如:
请输入多项式的系数: -64 0 0 0 0 2
请输入范围:
4 -5.7
范围无效!请输入范围:
2 3.5
多项式有根:x=2。
我的问题在于,当我输入例如范围 **10.4 10.2" 时,程序无法在两个值之间进行比较并确定它是无效范围。对于整数,它可以工作。
我该如何解决这个问题?
#include <stdio.h>
#define ZERO 0.00001
int main()
{
double a_0,a_1,a_2,a_3,a_4,a_5,end_of_range,beginning_of_range;
int x,root;
printf("Please enter the coefficients of the polynomial:\n");
scanf("%lf%lf%lf%lf%lf%lf", &a_0, &a_1, &a_2, &a_3, &a_4, &a_5);
printf("Please enter the range:\n");
scanf("%lf%lf", &beginning_of_range, &end_of_range);
while (beginning_of_range >= end_of_range)
{
printf("Invalid range! Please enter the range:\n");
scanf("%lf%lf", &beginning_of_range, &end_of_range);
}
x = beginning_of_range;
while (x <= end_of_range)
{
if ((a_0 + a_1*x + a_2*x*x + a_3*x*x*x + a_4*x*x*x*x + a_5*x*x*x*x*x >= -ZERO)
&& (a_0 + a_1*x + a_2*x*x + a_3*x*x*x + a_4*x*x*x*x + a_5*x*x*x*x*x <= ZERO))
{
root = x;
printf("The polynomial has the root x=%d.", root);
break;
}
x++;
if( x > end_of_range)
{
printf("Could not find a root.");
break;
}
}
return 0;
}
注意:我希望根只能是整数!这就是为什么我将x 声明为int。
发生了一些奇怪的事情,当我进入范围 [10.4, 10.3] 时,它只等待大约 1 分钟,然后打印“找不到根”,尽管它必须打印无效范围。
【问题讨论】:
-
我想你只需要把
x也变成double吗? -
@DigitalNinja 我将 x 声明为 int 因为 In 只需要 Integer 根。
-
好的,但是当您进行
x = beginning_of_range;分配时,您的起始范围是一个浮点值。就像 R Sahu 所说,当 root 不是整数时会发生什么?要将其四舍五入为整数? -
这个赋值只是为了处理整数根。其他情况被忽略。我知道它不是完美的程序,但显然他们想从中教我们一些东西,处理浮点数。
-
发生了一些奇怪的事情,当我进入范围 [10.4, 10.3] 时,它只等待大约 1 分钟,然后打印“找不到根目录”,尽管它必须打印无效范围。
标签: c floating-point double