24小时热门版块排行榜    

查看: 3267  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 268求调剂 +3 简单点0 2026-03-17 3/150 2026-03-17 23:15 by wangjihu
[考研] 301求调剂 +5 yy要上岸呀 2026-03-17 5/250 2026-03-17 20:20 by peike
[考研] 材料工程专硕调剂 +5 204818@lcx 2026-03-17 5/250 2026-03-17 17:27 by Little-xue
[硕博家园] 湖北工业大学 生命科学与健康学院-课题组招收2026级食品/生物方向硕士 +3 1喜春8 2026-03-17 5/250 2026-03-17 17:18 by ber川cool子
[考研] 312求调剂 +4 陌宸希 2026-03-16 5/250 2026-03-17 17:09 by ruiyingmiao
[考研] 085600材料与化工求调剂 +5 绪幸与子 2026-03-17 5/250 2026-03-17 16:40 by laoshidan
[考研] 290求调剂 +3 p asserby. 2026-03-15 4/200 2026-03-17 16:35 by wangkm
[考研] [导师推荐]西南科技大学国防/材料导师推荐 +3 尖角小荷 2026-03-16 6/300 2026-03-16 23:21 by 尖角小荷
[考研] 286求调剂 +3 lemonzzn 2026-03-16 5/250 2026-03-16 20:43 by lemonzzn
[考研] 304求调剂 +5 素年祭语 2026-03-15 5/250 2026-03-16 17:00 by 我的船我的海
[教师之家] 焦虑 +7 水冰月月野兔 2026-03-13 9/450 2026-03-16 10:00 by Quakerbird
[考研] 求老师收留调剂 +4 jiang姜66 2026-03-14 5/250 2026-03-15 20:11 by Winj1e
[考研] 材料371求调剂 +9 鳄鱼? 2026-03-11 11/550 2026-03-13 22:53 by JourneyLucky
[考研] 材料专硕288分求调剂 一志愿211 +4 在家想你 2026-03-11 4/200 2026-03-13 22:49 by JourneyLucky
[考研] 333求调剂 +3 球球古力 2026-03-11 3/150 2026-03-13 21:27 by JourneyLucky
[考研] 301求调剂 +6 Liyouyumairs 2026-03-11 6/300 2026-03-13 20:11 by JourneyLucky
[考研] 314求调剂 +7 无懈可击的巨人 2026-03-12 7/350 2026-03-13 15:40 by JourneyLucky
[考研] 328化工专硕求调剂 +4 。,。,。,。i 2026-03-12 4/200 2026-03-13 14:44 by JourneyLucky
[考研] 材料301分求调剂 +5 Liyouyumairs 2026-03-12 5/250 2026-03-13 14:42 by JourneyLucky
[考研] 277求调剂 +4 anchor17 2026-03-12 4/200 2026-03-13 11:15 by 白夜悠长
信息提示
请填处理意见