一道C语言问题,有些地方不明白,帮帮忙了?

来源:百度知道 编辑:UC知道 时间:2024/05/23 11:00:39
main()
{ int a=3,b=4,c=5,t=99;
if(b<a&&a<c) t=a;a=c;c=t;
if(a<c&&b<c) t=b;b=a;a=t;
printf("%d%d%d\n",a,b,c);
}
为什么当b<a不成立时就不执行t=a了,而要执行a=c;c=t这个语句呢?

因为后面的a=c;c=t是两条与前面的if(b<a&&a<c) t=a; 无关的独立语句,不管(b<a&&a<c)是否为真,后面的两条语句都会执行。

如果想在条件不成立时不执行后面的两条语句,请加上{ }以构成复合语句

如下:

main()
{ int a=3,b=4,c=5,t=99;
if(b<a&&a<c) {t=a;a=c;c=t;}
if(a<c&&b<c) {t=b;b=a;a=t;}
printf("%d%d%d\n",a,b,c);
}

相信&&运算符的表达式你是明白的
光剑在于你没有明白if表达式
if语句有一种形式如下:
if(表达式)语句
类如: if(b<a&&a<c) t=a;此时if语句只执行到第一个分号,就如你的原题 if(b<a&&a<c) t=a;a=c;c=t; 题中一共有3个分号,而属于if语句的到第一个分号就结束了,所以在你(b<a&&a<c) 条件下 执行到t=a;结束。
if(b<a&&a<c) t=a;
a=c;
c=t;
这些都是细节的东西,多关注书本和多上机实验就可以解决了。

&&两个为真时才为真