| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2324 人关注过本帖
标题:怎么让程序提示,你输入的值不在范围内.
只看楼主 加入收藏
xsimon
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2006-5-5
收藏
 问题点数:0 回复次数:17 
怎么让程序提示,你输入的值不在范围内.

//用弦截法求方程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 提示 范围 定义 
2006-05-08 17:03
xsimon
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2006-5-5
收藏
得分:0 
晕了, 我什么也没改. 怎么发完这个帖子后现试. 竟然又输出正确的值了....
2006-05-08 17:13
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
那是因为我看过了~~哎哟,不要乱扔鸡蛋~~~!

淘宝杜琨
2006-05-08 17:21
xsimon
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2006-5-5
收藏
得分:0 

谢谢楼上的.....

2006-05-08 17:28
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分: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
{
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;
}


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-08 19:11
xsimon
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2006-5-5
收藏
得分:0 
楼上的.
这样只是提示你输入的不正确. 没有提示更准备的输入. 让别人第二次就输入正确.
假如你输入1,2和6,10都是错误的. 可能输入N次还得不到正确结果. 没有提示你输入应该X1小于5和X2大于5,or 应该X2小于5和X1大于5.
2006-05-08 19:17
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
回复:(xsimon)楼上的.这样只是提示你输入的不正确....
以下是引用xsimon在2006-5-8 19:17:00的发言:
楼上的.
这样只是提示你输入的不正确. 没有提示更准备的输入. 让别人第二次就输入正确.
假如你输入1,2和6,10都是错误的. 可能输入N次还得不到正确结果. 没有提示你输入应该X1小于5和X2大于5,or 应该X2小于5和X1大于5.

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


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-08 19:21
xsimon
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2006-5-5
收藏
得分:0 
看起来好像是一个对立面. 没有输入正确的数,程式就不会运行得到结果. 没有得到结果怎么比较输入的值是否正确....

晕了.......
2006-05-08 19:22
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
回复:(xsimon)看起来好像是一个对立面. 没有输入正...
以下是引用xsimon在2006-5-8 19:22:00的发言:
看起来好像是一个对立面. 没有输入正确的数,程式就不会运行得到结果. 没有得到结果怎么比较输入的值是否正确....

晕了.......

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


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-08 19:30
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
大家都很厉害啊,都能背出是在第几页~

淘宝杜琨
2006-05-08 19:41
快速回复:怎么让程序提示,你输入的值不在范围内.
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022059 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved