关于C语言中条件表达式与if语句的问题

题目:用二分法计算exp(x)+x=0 在[-1,0]上的根。

源文件:

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

double f( double x)
{
return exp(x)+x;
}

main()
{
double a=-1,b=0,x;
do
{x=(a+b)/2;

/* f(a)*f(x)>0 ? a=x : (b=x) ;
printf("x=%lf\t",x); */
/* floating point error: Domain */

if (f(a)*f(x)>0)
a=x;
else
b=x;
printf("x=%lf\t",x);
} while(fabs(f(x))>1e-7);
printf("the root is x=%lf\n",x);
getch();
}

若用if语句,程序正常,输出:
x=-0.500000 x=-0.750000 x=-0.625000 x=-0.562500 x=-0.593750
x=-0.578125 x=-0.570312 x=-0.566406 x=-0.568359 x=-0.567383
x=-0.566895 x=-0.567139 x=-0.567261 x=-0.567200 x=-0.567169
x=-0.567154 x=-0.567146 x=-0.567142 x=-0.567144 x=-0.567143
x=-0.567143 x=-0.567143 x=-0.567143 the root is x=-0.567143

但若用条件表达式(源文件中用注释括住),则计算到x=-0.578125时便提示“floating point error: Domain”,之后程序强制退出。
从功能上讲,源文件中的if语句和条件表达式等价,可是为何用条件表达式就会出错呢?
希望能得到大家的帮助,谢谢!
我用的编译器是TC2.0

“从功能上讲,源文件中的if语句和条件表达式等价”-- 是的。

编译器的问题。

MS VC++ 编译器, 用条件表达式和if语句 都得到一样的正确结果。

TC 编译器 功能差,不要使用 花里胡俏 的 条件表达式 代替 if语句。
温馨提示:内容为网友见解,仅供参考
无其他回答

关于C语言中条件表达式与if语句的问题
“从功能上讲,源文件中的if语句和条件表达式等价”-- 是的。编译器的问题。MS VC++ 编译器, 用条件表达式和if语句 都得到一样的正确结果。TC 编译器 功能差,不要使用 花里胡俏 的 条件表达式 代替 if语句。

C语言中条件表达式和if语句
1、条件表达式必须返回一个值所以不能不能条用没有返回值的函数

c语言什么情况if后面用两个等号
在C语言中,if语句的条件表达式中使用两个等号(==)表示相等比较运算符。当使用if语句时,条件表达式需要返回一个布尔值(true或false)。通过使用相等比较运算符,可以判断条件表达式的两个操作数是否相等,如果相等则条件表达式的结果为true,执行if语句中的代码块。下面是一个示例代码:```cint x = ...

求c语言高手指点关于if函数的问题
两者之间没有区别的,逗号 代表所在行语句没有结束,继续执行,所以if (a>0,b>0)代表同时满足两个条件,而if (a>0&&b>0)是逻辑运算代表两个同时满足,意义是一样的,望采纳

C语言中if条件问题
首先你要知道IF()的那个括号里面放的是什么,它放的是一个表达式,而且是一个可以判断真假的表达式。那什么是表达式呢?也话你觉得这个问题不难回答,但实际上表达式的内容是很宽泛的,包括算术表达式、关系表达式、逻辑表达式、赋值表达式、条件表达式、逗号表达式等等几种。那么回过头来,IF语句的那个括号...

C语言中条件编译和If语句之间的差别,各适用于什么情况
条件编译是C语言中预处理部分的内容,它是编译器编译代码时最先处理的部分,条件编译里面有判断语句,比如 #if 、#else 、#elif 及 #endif 它的意思是如果宏条件符合,编译器就编译这段代码,否则,编译器就忽略这段代码而不编译,如 define A 0 \/\/把A定义为0 if (A > 1)printf("A > 1...

C语言if语句问题
&&(++j==3||k++==3 你的理解有错误,在C语言中,逻辑运算采用的是短路运算规则,所谓的短路就是比如逻辑与&&运算符,先计算左边的操作数,如果算出来的结果为0,那么整个辑逻表达式的结果就为0,因此就没必要计算右边的表达式了。同理++j==3||k++==3中间的||是按位或运算,因此先计算左边的...

一个关于C语言中if判定条件的疑问
会导致funcB(b,c)中的b还是初始值,比如说 int x=0;if (funcA(a, x) && funcB(x, c)) \/\/这里无论你funcA中对后面那个参数做了任何处理,funcB(x的这个x始终为0另外就是if中的&&和||有短路一说,也就是说假定上面的funcA(a,b)是假(即0),那么后面的funcB就根本不会执行。

C语言中的if语句问题:
先解释代码运行结果为什么是:a=1,b=0,c=1 因为if里面的条件是短路条件。因为 ++a>0 是true,所以不再执行 后面的++b>0 了。因此,b的值没有变。你的选择题答案是B,因为 A 中 1 默认是int,而另外的三个变量也都是 int变量。因此表达式最后的结果也会是int型的,也就是说最后的结果是...

c语言选择结构if()括号里面跟表达式 常数时的意思?有例题
if(0) -- 0 就是“假”。“假”执行 else{} if (x=y+z) -- 这里是赋值语句,不是表达式,所以总是得真。于是执行printf("+++++");if (x==y+z) 里面才是条件表达式

相似回答