C语言程序菜鸟级问题

来源:百度知道 编辑:UC知道 时间:2024/07/02 23:54:06
#include<stdio.h>
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);}

程序的结果是3 我的问题是 为什么a>b>c不成立 这句到底是什么意思 还有就是 (c-1>=d)==1是怎么回事? 这个怎么能是成立的? 解答的详细点 谢谢大侠指教了

应该写成if(a>b&&b>c)不可以连着写
当是我估计你给的题目类似与计算机等级考试,完全是玩语法,故下面解释,针对考试题目:
(a>b>c)编译器是这么认为的
他会先计算a>b 结果是1(在C中,逻辑表达式的结果真是1,假是0)
再运算1>c 即1>3 条件不成立 故不执行printf("%d\n",d);

同理
(c-1>=d)==1
编译器先计算c-1=3-1=2
2>=d 成立 故2>=d 结果为1(真为1)
从而(c-1>=d)==1 结果也为真
故执行printf("%d\n",d+1);

C语言里不能这样表示
因为
a>b>c其实是(a>b)> c
电脑先算括号里的
a>b不成立,所以 整个括号 的值就是0 然后就是0去和c比大小了

a>b>c在C语言正确的表达式应该是 a>b && b>c
&& 表示为 且

(c-1>=d)==1
就是判断 整个括号的值 是否等于1

因为括号成立,则值是1
不成立值是0

其实就是问你c-1是不是大于等于d

程序执行结果应该是3的,分析如下:

首先进去if(a>b>c) 分支,判断条件为a>b>c,
其中先判断a>b是否成立,5>4成立,此时a>b就变成真,即数字1了;
此时条件进一步转化为为判断1>c是否成立,结果1>3不成立,判断条件不成立,进入下一个分支;

接着判断的是else if((c-1>=d)==1)分之,
其中c-1=2满足>=d的条件,所以c-1>=d就变成真,即数字1,
此时进一步判转化为判断1==1是否成立,
结果是成立,所以接着打印print