当前位置: 代码迷 >> C语言 >> 怎么让程序提示,你输入的值不在范围内.
  详细解决方案

怎么让程序提示,你输入的值不在范围内.

热度:199   发布时间:2006-05-08 17:03:00.0
怎么让程序提示,你输入的值不在范围内.

//用弦截法求方程f(x)=x^3-5x^2+16x-80=0的根.

#include <stdio.h>
#include <math.h>

float f (float x) //定义f函数,以实现f(x)=x^3-5x^2+16x-80
{
float y;
y = ((x - 5.0)*x + 16.0)*x - 80.0;
return (y);
}

float xpoint (float x1, float x2) //定义xpoint函数,求出弦与X轴交点.
{
float y;
y = (x1 * f(x2) - x2 * f(x1)) / (f(x2) - f(x1));
return (y);
}

float root (float x1, float x2) //定义root函数, 求近似根.
{
float x, y, y1;
y1 = f(x1);
do
{
x = xpoint (x1, x2);
y = f(x);
if (y * y1 > 0) //f(x)与f(x1)同符号.
{
y1 = y;
x1 = x;
}
else
x2 = x;
}
while (fabs (y) >= 1e-6);
return (x);
}

int main(void) //主函数.
{
float x1, x2, f1, f2, x;
printf ("input x1, x2: \n");
scanf ("%f, %f",&x1, &x2);
do
{
f1 = f(x1);
f2 = f(x2);
}
while (f1 * f2 >= 0);
x = root (x1, x2);
printf ("A root of equation is %8.4f", x);
getch ();
return 0;
}

它的根是5, 如果你输入的x1到 x2不包括5在内, 则得不到正确的结果. 如果你先不知道它的根是多少,怎么让别人知道需要输入多大的范围. 程式是否可以提示.

[此贴子已经被作者于2006-5-8 18:59:17编辑过]

搜索更多相关的解决方案: float  提示  范围  定义  

----------------解决方案--------------------------------------------------------
晕了, 我什么也没改. 怎么发完这个帖子后现试. 竟然又输出正确的值了....
----------------解决方案--------------------------------------------------------
那是因为我看过了~~哎哟,不要乱扔鸡蛋~~~!
----------------解决方案--------------------------------------------------------

谢谢楼上的.....


----------------解决方案--------------------------------------------------------

/***应作如下改动***/

//用弦截法求方程f(x)=x^3-5x^2+16x-80=0的根

#include <stdio.h>
#include <math.h>

float f (float x) //定义f函数,以实现f(x)=x^3-5x^2+16x-80
{
float y;
y = ((x - 5.0)*x + 16.0)*x - 80.0;
return (y);
}

float xpoint (float x1, float x2) //定义xpoint函数,求出弦与X轴交点.
{
float y;
y = (x1 * f(x2) - x2 * f(x1)) / (f(x2) - f(x1));
return (y);
}

float root (float x1, float x2) //定义root函数, 求近似根.
{
float x, y, y1;
y1 = f(x1);
do
{
x = xpoint (x1, x2);
y = f(x);
if (y * y1 > 0) //f(x)与f(x1)同符号.
{
y1 = y;
x1 = x;
}
else
x2 = x;
}
while (fabs (y) >= 1e-6);
return (x);
}

int main(void) //主函数.
{
float x1, x2, f1, f2, x;
// printf ("input x1, x2: \n");
// scanf ("%f,%f",&x1, &x2);
do
{
printf ("input x1, x2: \n"); //
scanf ("%f,%f",&x1, &x2); //
f1 = f(x1);
f2 = f(x2);
}
while (f1 * f2 >= 0);
x = root (x1, x2);
printf ("A root of equation is %8.4f", x);
getch ();
return 0;
}


----------------解决方案--------------------------------------------------------
楼上的.
这样只是提示你输入的不正确. 没有提示更准备的输入. 让别人第二次就输入正确.
假如你输入1,2和6,10都是错误的. 可能输入N次还得不到正确结果. 没有提示你输入应该X1小于5和X2大于5,or 应该X2小于5和X1大于5.

----------------解决方案--------------------------------------------------------
回复:(xsimon)楼上的.这样只是提示你输入的不正确....
以下是引用xsimon在2006-5-8 19:17:00的发言:
楼上的.
这样只是提示你输入的不正确. 没有提示更准备的输入. 让别人第二次就输入正确.
假如你输入1,2和6,10都是错误的. 可能输入N次还得不到正确结果. 没有提示你输入应该X1小于5和X2大于5,or 应该X2小于5和X1大于5.

那你找错地儿了,这里不谈论方程的含根区间!此地不是数学吧。不知好歹。


----------------解决方案--------------------------------------------------------
看起来好像是一个对立面. 没有输入正确的数,程式就不会运行得到结果. 没有得到结果怎么比较输入的值是否正确....

晕了.......
----------------解决方案--------------------------------------------------------
回复:(xsimon)看起来好像是一个对立面. 没有输入正...
以下是引用xsimon在2006-5-8 19:22:00的发言:
看起来好像是一个对立面. 没有输入正确的数,程式就不会运行得到结果. 没有得到结果怎么比较输入的值是否正确....

晕了.......

我帮你改后的东东,其实就是老谭书的第156-157页的程序。
你居然还要说三道四,我刚才恼火的就在于此。
实际上,弦截法的第一困难就是确定“单根区间”!
LZ的原始代码把人机对话移出循环,也无济于事,是不是?


----------------解决方案--------------------------------------------------------
大家都很厉害啊,都能背出是在第几页~
----------------解决方案--------------------------------------------------------
  相关解决方案