24小时热门版块排行榜    

查看: 3634  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 建议基金发布提前给出明确的时间点 +11 kulium 2026-08-21 14/700 2026-08-24 02:12 by 流流伤
[基金申请] 范进中举一文的中心思想 +4 炎黄贵胄 2026-08-22 5/250 2026-08-24 02:09 by 流流伤
[基金申请] 2026年的国家社科基金项目通讯评审的新规则与新动向、新挑战 +4 process2012 2026-08-23 5/250 2026-08-23 19:58 by jurkat.1640
[教师之家] 跳槽后在研项目怎么办? +5 简单化xn 2026-08-22 10/500 2026-08-23 12:38 by 简单化xn
[基金申请] 今天放榜吗? +15 布布和一二 2026-08-19 16/800 2026-08-23 09:55 by 张春生
[基金申请] 93BebMhtakh前后11位开头都是大写 +7 且听虎啸 2026-08-17 8/400 2026-08-22 21:55 by 医学老男孩
[基金申请] 只有每年这种时候来逛逛小木虫 +24 yaoyewhu2008 2026-08-20 26/1300 2026-08-22 17:43 by kammury
[基金申请] filecode,4个jtjc了 +13 ziyangfang 2026-08-19 16/800 2026-08-22 17:08 by WH3796
[基金申请] 人气不行了 +8 fansofjerry 2026-08-21 8/400 2026-08-22 16:30 by zyqchem
[基金申请] 今天基金会出结果吗?20260819 +16 kkkl_v 2026-08-19 17/850 2026-08-22 16:12 by 阿布Abu
[基金申请] 时间戳今天,20号变了 +5 archvillain 2026-08-20 5/250 2026-08-22 06:12 by hui_daxiao
[基金申请] 放榜前的不淡定 40+4 snowwithsea 2026-08-19 14/700 2026-08-21 23:51 by cratir
[基金申请] 看来今天不会放榜了? +8 chengyan1220 2026-08-21 11/550 2026-08-21 17:52 by dcqxinyang
[基金申请] 时间戳又变了 +13 wuchongjun 2026-08-20 19/950 2026-08-21 17:21 by 紫杉醇
[基金申请] 我面上完蛋了 +7 且听虎啸 2026-08-20 8/400 2026-08-21 12:31 by 酷酷墨镜
[基金申请] 今天放榜没戏了吧 +9 yuleib84 2026-08-19 11/550 2026-08-21 10:06 by gltch
[基金申请] 估计是周四 +3 archvillain 2026-08-18 3/150 2026-08-21 01:48 by jnhyjjm
[基金申请] 朋友圈看到的 +6 wangzilk 2026-08-18 8/400 2026-08-19 10:55 by Haru815
[基金申请] 明天放榜? +5 Shxjjxjkx 2026-08-18 5/250 2026-08-18 18:14 by -大大大大大-
[基金申请] 今天维护系统维护 祝所有人 高中 +8 gjjjzhong 2026-08-18 9/450 2026-08-18 13:01 by 家与远方
信息提示
请填处理意见