24小时热门版块排行榜    

查看: 3268  |  回复: 6

xianbeihe110

木虫 (正式写手)

工作邮箱:hxysdju@163.com

[求助] 求大神解释下if语句中括号中的内容的作用判断求助以及输出结果时,自增自减的判断求助 已有6人参与

*********************************************************************************************

以下是实例:望大神可以通过解释该实例来帮助我理解if语句和自增自减
#include <iostream>
using namespace std;
int main()
{
        int a=3;
        if(a=5)
                cout<<a++<<endl;
        else
                cout<<a<<endl;
        return 0;
}
答案是输出5.
问题1:if(a=5)中,a=5是赋值对吧?之后不是要判断该表达式的值是否为ture或非0,则执行cout<<a++<<endl;否则执行cout<<a<<endl;
那我要为啥判断是ture或非0呢?难道是a=5(非0),所以是执行cout<<a++<<endl;语句吗?
问题2:如果问题一的答案是肯定的,那么为啥输出的值不是6,而是5呢?后自增时不是先用,后加吗?计算出来不是a++的值吗?
怎么输出的是a的值?这是为什么?为什么?为什么?
大神呐,顺便能帮我总结下这其中的规律吗?
回复此楼

» 猜你喜欢

工作联系方式:18817774880/QQ:1024015822
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

liujiankeng

铜虫 (小有名气)

【答案】应助回帖

感谢参与,应助指数 +1
if 是判断a 是否等于5
a++是先引用,后加,即先输出a值之后再加;++a是先加,后引用。
你可以在 cout<<a++<<endl;
后再加一行 cout<<a<<endl;看看输出的是不是6
不认真你就输了
2楼2014-07-01 20:57:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

forceair

铜虫 (初入文坛)

【答案】应助回帖

感谢参与,应助指数 +1
if(a=5)这句有问题的,a=5是赋值语句,不是比较,要判断a与5是否相等,用if(a==5)这样才对。如果以你编写的,程序就认为是if(5)为真,则执行,a++就是先用再对a本身加1,所以a最后的值是6,a++的值是5.
成功与借口不能在一个屋檐下~
3楼2014-07-01 22:38:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

cloudstone02

新虫 (初入文坛)

【答案】应助回帖

感谢参与,应助指数 +1
if (cond)语句中的 cond是逻辑值,大于0的算逻辑真,否则是逻辑假。所以,if (a =5) 括号内的运算为先,先执行a = 5的赋值运算,然后才是 if (a),这时是逻辑真,所以执行 cout << a ++ << endl.

你也可以试验一下 if (a = 0).
4楼2014-07-02 04:26:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

nenugdi

铁杆木虫 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
xianbeihe110: 金币+10, ★★★★★最佳答案, 大神讲的很清楚 2014-07-02 19:27:47
问题1:a=5是赋值表达式,它的值由等号左边值决定,所以(a=5)的值是5,非0,所以是true。
问题2: cout<<a++<<endl; 是人写出来的一种简化方法,计算机编译后的语句应该是
           cout<<a<<endl;
            a=a+1;
所以输出是5.但最终a的值是6.
总结:计算机语言是形式语言,其规则并不复杂。学习者需要熟记规则和语言提供简写的方法,如a++
5楼2014-07-02 08:20:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangfeng3892

木虫 (正式写手)

【答案】应助回帖

感谢参与,应助指数 +1
1、a=5的表达式的值是5,非0,所以执行if语句的前半部分,即 cout<<a++<<endl;而a==5是判断语句,按照你给的a的初始值,这个表达式的值会是false。如果改成a=0,则表达式的值是0,此时会执行else语句。
2、cout<<a++<<endl;这个是分两个执行的,先执行cout<<a,然后a++,你可以在这句后面再加一个cout<<a<<endl;你看看它会输出什么结果。

3、楼上的已经说得很明白了,我凑个热闹。
6楼2014-07-02 08:52:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

静观风云

新虫 (小有名气)

【答案】应助回帖

感谢参与,应助指数 +1
答案是(1),至于输出为啥不是6而是5,是执行了输出后再自增,可以尝试再一次输出a,应该就是6了。
胸无大痣
7楼2014-07-02 09:20:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 xianbeihe110 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 304求调剂 +8 小熊joy 2026-03-14 8/400 2026-03-17 17:29 by ruiyingmiao
[考研] 材料工程专硕调剂 +5 204818@lcx 2026-03-17 5/250 2026-03-17 17:27 by Little-xue
[考研] 344求调剂 +4 knight344 2026-03-16 4/200 2026-03-17 17:27 by ruiyingmiao
[考研] 290求调剂 +6 孔志浩 2026-03-12 11/550 2026-03-17 14:41 by 周舟舟77
[考研] 285化工学硕求调剂(081700) +9 柴郡猫_ 2026-03-12 9/450 2026-03-17 10:18 by Sammy2
[考研] 考研调剂 +3 淇ya_~ 2026-03-17 5/250 2026-03-17 09:25 by Winj1e
[考研] 环境工程调剂 +6 大可digkids 2026-03-16 6/300 2026-03-16 17:16 by barlinike
[考研] 0703化学调剂 +6 妮妮ninicgb 2026-03-15 9/450 2026-03-16 16:40 by houyaoxu
[考研] 070300化学学硕求调剂 +6 太想进步了0608 2026-03-16 6/300 2026-03-16 16:13 by kykm678
[考研] 283求调剂 +10 小楼。 2026-03-12 14/700 2026-03-16 16:08 by 13811244083
[考研] 求老师收留调剂 +4 jiang姜66 2026-03-14 5/250 2026-03-15 20:11 by Winj1e
[考研] 289求调剂 +4 这么名字咋样 2026-03-14 6/300 2026-03-14 18:58 by userper
[考研] 297一志愿上交085600求调剂 +5 指尖八千里 2026-03-14 5/250 2026-03-14 17:26 by a不易
[考研] 0703,333分求调剂 一志愿郑州大学-物理化学 +3 李魔女斗篷 2026-03-11 3/150 2026-03-13 22:24 by JourneyLucky
[考研] 336求调剂 +6 Iuruoh 2026-03-11 6/300 2026-03-13 22:06 by JourneyLucky
[考研] 工科,求调剂 +3 我887 2026-03-11 3/150 2026-03-13 21:39 by JourneyLucky
[考研] 0703化学求调剂 +7 绿豆芹菜汤 2026-03-12 7/350 2026-03-13 17:25 by njzyff
[考研] 307求调剂 +5 超级伊昂大王 2026-03-12 5/250 2026-03-13 15:56 by 棒棒球手
[考研] 274求调剂 +3 S.H1 2026-03-12 3/150 2026-03-13 15:15 by JourneyLucky
[考研] 333求调剂 +3 152697 2026-03-12 4/200 2026-03-13 07:08 by Iveryant
信息提示
请填处理意见