| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 494 人关注过本帖
标题:c++ primerplus的练习题,求解惑
只看楼主 加入收藏
bobobov007
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-8-13
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
c++ primerplus的练习题,求解惑
#include<iostream>
using namespace std;
long long chengjie(long long);
int main()
{
    long long a;
    while (cin >> a)
    {
        long long b;
        if (a == 0 || a == 1)
            b = 1;
        else
        {
            b = chengjie(a);
        }
        cout << b;
    }
}
long long chengjie(long long a)
{
    if (a > 1)
    {
        cout << a <<"第一部"<<endl;
        a = a*chengjie(a-1);//把这儿换成a = a*chengjie(--a);运行结果不同呢
        cout << a <<"第二部"<< endl;
    }
    return a;
}
2015-09-29 13:41
bobobov007
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-8-13
收藏
得分:0 
为啥--a和a-1有不同的结果呢
2015-09-29 13:42
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:5 
为什么不呢?
再者,a = a*chengjie(--a); 这是个未定义行为的语句
2015-09-29 13:48
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
收藏
得分:5 
楼主看哈这段代码就明白为什么结果不一样了

#include <iostream>
int main(){
    int x = 9;
    int y = 9;
    for (int index = 0; index < 10; index++)
        std::cout << "x--= " << x-- << "  :  "
         << "y-1= " << y-1 << std::endl;
    return 0;
}
2015-09-29 13:55
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:5 
楼主肯定知道--a等效于a=a-1,这条语句实际改变了a的值,而a-1并不改变a的值,所以结果不一样了。

能编个毛线衣吗?
2015-09-29 16:39
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:5 
--a对a进行了重新赋值,但a-1执行之后a值不变
2015-09-29 18:46
快速回复:c++ primerplus的练习题,求解惑
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019874 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved