社区
C语言
帖子详情
if(a>b>c) 先执行a>b 还是 b>c ????
huamoran
2007-04-26 11:03:39
#include <stdio.h>
void main()
{
int a=5,b=4,c=3,d=2;
if(a>b>c)
printf("%d\n",d);
else if((c-1>=d)==1)
printf("%d\n",d+1);
else
printf("%d\n",d+2);
}
...全文
5353
29
打赏
收藏
if(a>b>c) 先执行a>b 还是 b>c ????
#include void main() { int a=5,b=4,c=3,d=2; if(a>b>c) printf("%d\n",d); else if((c-1>=d)==1) printf("%d\n",d+1); else printf("%d\n",d+2); }
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
29 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
paulingxiao
2012-03-16
打赏
举报
回复
不要把程序中的复合表达式与“真正的数学表达式”混淆。
例如:
if (a > b > c) // a > b > c 是数学表达式而不是程序表达式
并不表示
if ((a>b) && (b>c))
而是成了令人费解的
if ( (a>b)>a )
spofmy
2007-04-28
打赏
举报
回复
if((a>b)>c)
liubingqian
2007-04-27
打赏
举报
回复
这样的写法是错误的。在C语言中,a>b>c应该写成a>b && b>c。
下面的代码在Borland C++中可以通过编译,但运行结果却没有显示true
int a=3, b=2, c=1;
if ( a>b>c ) printf("true");
因为a>b的结果是true,而true值为1,就变成了判断1>c。显然1等于c,所以结果为假。而在数学上,这个表达式的结果应该是真。
这样的程序本身就是错误的。
guansong02
2007-04-27
打赏
举报
回复
哪位大师教你这么写的呀?
bamboostflying
2007-04-27
打赏
举报
回复
这种问题 自己试试就知道了
changhe0501
2007-04-27
打赏
举报
回复
dec-c++
a>b>c 结果为假,最终打印“3”
fohonet
2007-04-27
打赏
举报
回复
虽然 这种写法不对,但是非要说其运算顺序的话是从左到右!
celftj
2007-04-27
打赏
举报
回复
抱歉
昨天用
int main()
{
int a = 3;
int b = 2;
int c = 1;
if (a>b>c)
{
cout<<a;
}
return 0;
}
看到输出3就上来发贴了,今天再试下,不输出了,不知是昨天眼花还是输错程序了.
我是菜鸟.
contain_universe
2007-04-27
打赏
举报
回复
a>b并且b>c的话还是写成 if( (a > b) && (b > c) )....
just do it
fallwindlotus
2007-04-27
打赏
举报
回复
如果只是想知道那个先执行:
#include <iostream.h>
int main(void)
{
int a=1,b=2,c=3;
if ((cout<<"@",a)<(cout<<"#",b)<(cout<<"$",c))
{
cout<<endl;
}
return 0;
}
输出为:@#$
oyd
2007-04-27
打赏
举报
回复
我倒是觉得这种创意不错,想个办法把它实现了。
其实数学表达式里的a>b>c所表达的这个条件与C中的a>b && b>c所表达的某些时候是不一致的。
(什么时候自己去想)
爱尔兰熊猫
2007-04-27
打赏
举报
回复
举个例子:*p++
*和++的优先级相同,于是需要看它们的结合性。它们都是一元操作符,右结合,所以是*(p++)。
爱尔兰熊猫
2007-04-27
打赏
举报
回复
只有三类操作符的是右结合的,即从右到左计算:
一元操作符(! ~ ++ -- + - * (type) sizeof)、?: 、赋值操作符(= += -= *= /= %= &= ^= |= <<= >>=)
其他都是左结合。>是左结合的,所以(a>b)>c,先计算a>b。
石雕
2007-04-27
打赏
举报
回复
没实践过, 差点就被楼上的给唬过去了 -,-
什么都还是得自己做保险.
nov30th
2007-04-27
打赏
举报
回复
celftj() ( ) 信誉:100 Blog 加为好友 2007-4-26 16:15:00 得分: 0
试了下,在VC6.0下能编译通过,实际结果不是某一个先算,而是跟if(a>b&&b>c)效果一样.
==================================
菜鸟真多啊。菜鸟误导菜鸟。
本天才来告诉你们。
首先,修改程序如下。
#include <stdio.h>
void main()
{
int a=5,b=4,c=3,d=2;
//if(a>b>c)
printf("%d\n",a>b>c);
//else if((c-1>=d)==1)
printf("%d\n",c-1>=d);
//else
//printf("%d\n",d+2);
}
编译程序Debug模式Level3警告
warning C4804: '>' : unsafe use of type 'bool' in operation
结果
0
1
Press any key to continue
===============
celftj() ,“而是跟if(a>b&&b>c)效果一样.“ 是谁教你的?
晨星
2007-04-27
打赏
举报
回复
优先级相同,看结合性。
同时注意关系表达式的值非0即1。
爱尔兰熊猫
2007-04-26
打赏
举报
回复
80) The expression a<b<c is not interpreted as in ordinary mathematics. As the syntax indicates, it
means (a<b)<c; in other words, ‘‘if a is less than b, compare 1 to c; otherwise, compare 0 to c’’.
<Programming languages — C> C99
Page 87 (6.5.8)
xiaooqiang
2007-04-26
打赏
举报
回复
if(a>b>c) ====>if(a>b&&b>c)
飞哥
2007-04-26
打赏
举报
回复
谁教你的啊
:(
南京大白蔡
2007-04-26
打赏
举报
回复
先算a>b,结果不是0就是1,然后再那结果(0或1)跟c比较
加载更多回复(9)
(完整版)c语言分支结构习题.docx
(完整版)c语言分支结构习题.docx
C语言序列点总结
(sequence point)是指程序运行中的一个特殊的时间点,在该点之前的所有副作用已经结束,并且后续的副作用还没发生,而两个序列点之间所有的表达式或代码
执行
顺序是未定义的。
C语言程序设计(B)期末考试A卷-试卷(1).doc
C语言程序设计(B)期末考试A卷-试卷(1).doc
2023年C语言考试真题.docx
2023年C语言考试真题.docx
C语言选择结构PPT
C语言选择结构PPT,参考了其他老师的课件,若原作者不同意,请及时告知,谢谢!
C语言
70,026
社区成员
243,262
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章