| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 465 人关注过本帖, 1 人收藏
标题:请高手帮忙,这个程序减法怎么不对呢?
只看楼主 加入收藏
yolandazq
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-10-25
结帖率:50%
收藏(1)
已结贴  问题点数:20 回复次数:3 
请高手帮忙,这个程序减法怎么不对呢?
程序要求是输入一个数,可以分成几个50,几个20等等。问题是到小数时总不对,请帮忙吧,急死了。。。。。比如输入20.9,结果应该是20 1个,0.5 1个,0.2 2个,0.1 1个。但是结果总是0.2 1个。多谢各位了。

void main()
{
    int coinsInt[6]={50,20,10,5,2,1};
    float coinsF[3]={0.5,0.2,0.1};
    int num;
    int j,k;
    float sum;
    scanf("%f",&sum);
    for(j=0;j<=5;j++){
        num=sum/coinsInt[j];
        if (num!=0)
            printf("$%d    %d\n",coinsInt[j],num);
        sum-=num*coinsInt[j];
        if(sum<1){
            for(k=0;k<=2;k++){
                num=sum/coinsF[k];
                if (num!=0)
                    printf("$%.1f    %d\n",coinsF[k],num);
            sum-=num*coinsF[k];
            }
        }
    }
}
搜索更多相关主题的帖子: void 
2011-10-25 11:46
ppfly
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:297
专家分:1956
注 册:2009-5-17
收藏
得分:20 
小数除法会引起精度问题。比如num=sum/coinsF[k];中,当计算0.2的个数时,理论上num=0.4000/0.2=2,但是在程序中sum并不等于0.4,由于前面的运算引起sum有误差。还有,20.9应该是20一个,0.5一个,0.2两个,没有0.1
建议才用循环减法来处理。给你代码:注意两个break,和两个1e-6.
程序代码:
#include<stdio.h>
int main()
{
    int coinsInt[6]={50,20,10,5,2,1};
    float coinsF[3]={0.5,0.2,0.1};
    int num;
    int j,k;
    float sum;
    scanf("%f",&sum);
    for(j=0;j<=5;j++)
    {
        num=sum/coinsInt[j];
        if (num!=0)
            printf("$%d    %d\n",coinsInt[j],num);
        sum-=num*coinsInt[j];
        if(sum<1)
        {
            for(k=0;k<=2;k++)
            {
                num=0;
                while(sum-coinsF[k]>=-1e-6)
                {
                    sum=sum-coinsF[k];
                    num++;
                }
                if(num>0)printf("$%.1f    %d\n",coinsF[k],num);
                if(sum<1e-6)break;
            }
            break;
        }
    }
    return 0;
} 


********多贴代码,少说空话*******
2011-10-25 12:38
yolandazq
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-10-25
收藏
得分:0 
多谢啦,我试试。
2011-10-25 12:45
yolandazq
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-10-25
收藏
得分:0 
请问高手,这个问题没有解决,试着用67.7输入,还是不对呀?
2011-10-27 16:29
快速回复:请高手帮忙,这个程序减法怎么不对呢?
数据加载中...
 
   



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

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