| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 422 人关注过本帖
标题:求助 :关于Liang《c++程序设计》中一个课后习题的问题
只看楼主 加入收藏
p832lun
Rank: 2
等 级:论坛游民
帖 子:7
专家分:31
注 册:2013-11-17
结帖率:0
收藏
已结贴  问题点数:2 回复次数:5 
求助 :关于Liang《c++程序设计》中一个课后习题的问题
题目是计算给定金额的货币数量,比如$11.56处理后为11个一美元,2个25美分,和1个十美分还有一美分。
 下面试代码
程序代码:
#include<iostream>
using namespace std;

int main()
{
        cout<<"enter an aomunt in double ,for example 11.56 :";
        double amount;
        cin>>amount;
        // remainingAmount用来保留运算后的剩余的货币金额
        int remainingAmount = static_cast<int>(amount * 100);
        // "/"计算当前最大面值,“%”求未表示出的金额数(即被忽略的金额)

int numberOfOneDollars = remainingAmount / 100;
        remainingAmount  =remainingAmount % 100;
        
        int numberOfQuarters = remainingAmount / 25;
        remainingAmount = remainingAmount % 25;
        
        int numberOfDimes =remainingAmount / 10;
        remainingAmount = remainingAmount % 10;
        
        int numberOfNickels = remainingAmount / 5;
        remainingAmount = remainingAmount % 5;
        
        int numberOfPennies = remainingAmount;
        
        cout<<"Your amount        "<< amount <<"         consists of \n ";
/*规范化输出,使计数为0的不显示,计数为1的单位为单数
*/

if(numberOfOneDollars){
                if(numberOfOneDollars==1)
                cout<<"\t"<< numberOfOneDollars <<"        dollar \n" ;
                else
                cout<<"\t"<< numberOfOneDollars <<"        dollars \n" ;
                }
        if(numberOfQuarters)
        {
                if(numberOfQuarters==1)
                cout<<"\t"<< numberOfQuarters << "        quarter \n" ;
                else
                cout<<"\t"<< numberOfQuarters << "        quarters \n" ;
        }
        if(numberOfDimes)        {
                if(numberOfDimes==1)
                cout<<"\t"<< numberOfDimes << "        dime \n" ;
                else
                cout<<"\t"<< numberOfDimes << "        dimes \n" ;
                }
        if(numberOfNickels)
                {
                if(numberOfNickels==1)
                        cout<<"\t"<< numberOfNickels << "        nickel \n" ;
                else
                        cout<<"\t"<< numberOfNickels << "        nickels \n" ;
                }
        if(numberOfPennies)
                {
                if(numberOfPennies==1)        
                        cout<<"\t"<< numberOfPennies << "        pennise";
                else
                        cout<<"\t"<< numberOfPennies << "        pennises";
        }
                return 0[local]1[/local][local]2[/local]
        
        
        
        
}

我用了几组数字(11.56和11.11)进行了测试,其中一组结果不是我预期的效果,后来查看Liang博士的网上习题答案,可悲的是他的程序运行后也有点问题,我比较了下,我们的算法是一样的。
 希望,有做过或者技术娴熟的朋友能来帮忙解答一下。万分感谢

 测试截图 11.11 结果不正确。

psb.jpeg (13.49 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册


psbq.jpeg (15.03 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: amount 
2013-11-17 14:12
左手拉一只猫
Rank: 4
来 自:杭州
等 级:业余侠客
帖 子:70
专家分:250
注 册:2013-10-27
收藏
得分:1 
图片附件: 游客没有浏览图片的权限,请 登录注册
这就是用你的程序运行的结果,目测是没有错误的,你这个题目的意思就是把一个数分解成不同单位数的组成,最后显示出来。还是有错误的话,你逐步调试一下,看看这些变量(numberOfOneDollars、numberOfQuarters、numberOfDimes、numberOfNickels、numberOfPennies)分解的结果是不是对的。
  return 0[local]1[/local][local]2[/local]
你这个最后一行目测是
return 0;
的意思吧。

我能帮你的只能到这里了。。。
2013-11-17 15:41
p832lun
Rank: 2
等 级:论坛游民
帖 子:7
专家分:31
注 册:2013-11-17
收藏
得分:0 
回复 2楼 左手拉一只猫
我刚刚调试了一下,发现了这个问题上图
图片附件: 游客没有浏览图片的权限,请 登录注册


图片附件: 游客没有浏览图片的权限,请 登录注册

11.13测试就正常了,和硬件有关系么?

[ 本帖最后由 p832lun 于 2013-11-17 16:12 编辑 ]
2013-11-17 16:06
左手拉一只猫
Rank: 4
来 自:杭州
等 级:业余侠客
帖 子:70
专家分:250
注 册:2013-10-27
收藏
得分:0 
你用什么编译器编译的?
 int remainingAmount = static_cast<int>(amount * 100);
这行是把原来浮点型的数据(amount * 100)转换成整型的remainingAmount,你第一个图里面转换就有问题了,11.11 转换成 1110(按照你的而设计思路应该转换成1111才对),我感觉可能是数据在强制转换的时候出了问题。

我能帮你的只能到这里了。。。
2013-11-17 16:49
p832lun
Rank: 2
等 级:论坛游民
帖 子:7
专家分:31
注 册:2013-11-17
收藏
得分:0 
回复 4楼 左手拉一只猫
看来这个问题我得问问学电子的人
2013-11-17 17:31
游侠木木
Rank: 1
等 级:新手上路
帖 子:1
专家分:1
注 册:2013-11-17
收藏
得分:1 
程序没有错误啊!!我试了一下11.11,11.12,11.13都是正确的,有可能是编译器的问题吧
2013-11-17 21:41
快速回复:求助 :关于Liang《c++程序设计》中一个课后习题的问题
数据加载中...
 
   



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

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