| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1378 人关注过本帖
标题:一道有趣的难题...
只看楼主 加入收藏
门外汉2008
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2008-7-15
收藏
 问题点数:0 回复次数:17 
一道有趣的难题...
题目:请编写一个函数float fun(double h),函数的功能使对变量h中的值保留2位小树,并对第三位进行四舍五入(规定h中的值为正数)。
小弟的算法:float fun(double h)
{   int x;float s;
    h=h*1000;
    x=(int)h;
    if(x%10<5) x=x-x%10;
    else x=x+(10-x%10);
    s=(float)x;
    s/=1000;
    return s;
}
答案算法:float fun (float h)
{long t;
    float s;
    h=h*1000;
    t=(h+5)/10;
    s=(float)t/100.0;
    return s;}
事实证明答案算法和我自己的算法都算不出正确答案,可能是数据溢出造成的,请各位高手帮忙!小弟先谢过了~
搜索更多相关主题的帖子: 难题 
2008-07-17 08:55
大丈夫死了
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2008-7-15
收藏
得分:0 
简单的话转成字符串再进行处理就可以尽量避免
2008-07-17 12:50
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
x=(int)h; 假如h的值超出了整数的范围,就会被裁剪.不能用强制类型转换.

wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2008-07-17 13:03
门外汉2008
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2008-7-15
收藏
得分:0 
回复 2# 大丈夫死了 的帖子
字符串?怎么用字符串,字符的范围更小.能不能说详系点
2008-07-17 16:08
门外汉2008
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2008-7-15
收藏
得分:0 
回复 3# neverTheSame 的帖子
那应该怎么做?
2008-07-17 16:08
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
程序代码:
/******************************************************************

        为了使可以转换的数字位数更多,所以使用字符数组来作。

******************************************************************/
#include<stdio.h>
#include<string.h>
#define X {char c;while(c=getchar()!='\n');}
#define N 1000
int ch(char a[],int n)
{
        char *p;
        int i,b;
        b=strlen(a);  /* 测出字符串长度 */
        for(i=0;i<b;++i)
                if(a[i]=='.')
                        break;  /* 找出小数点的位置 */
        if(b-i<n)    /* 当小数点后的位数小于要保留的位数时 */
        {
                printf("对不起,您输入的数字与所要保留的位数不符,请重新输入.\n");
                sleep(1);   /* ~~暂停屏幕1秒 */
                return 0;  /* 返回 0 ,要求重新输入 */
        }
        p=a+i+n+1;    /* 指针指向要保留的字符位数后一位 */
        if(*p>'4')
        {
                *(p-1)+=1;
                *p='\0'; /* 如果保留字符后的数字大于4,保留字符加1,并在后*/
        }                /* 面加上结束标记 */
        else    *p='\0'; /* 如果保留字符后的数字小于4,直接将它重新赋为结束标记*/
        return 1;       /* 如果四舍五入成功,返回 1 */
}
int main(void)
{
        char a[N];
        int n,b;
        do
        {
                system("cls");      /* 当输入出错后返回时,清屏 */
                printf("请输入想要保留的小数后位数:\n");
                scanf("%d",&n);
                X;          /* 清除键盘缓存 */
                printf("\n请输入您的数字:\n");
                gets(a);   /* 输入字符串*/
                b=ch(a,n); /* 调用函数四舍五入 */
        }
        while(!b);
        printf("\n四舍五入后的数字为:\n");
        puts(a);


        getch();
}
        
2008-07-17 16:43
VxWorks
Rank: 3Rank: 3
来 自:WindRiver
等 级:论坛游民
威 望:6
帖 子:859
专家分:68
注 册:2007-11-24
收藏
得分:0 
写这么长,还不看题目要求,真是瞎扯蛋
题目:请编写一个函数float fun(double h),函数的功能使对变量h中的值保留2位小树,并对第三位进行四舍五入(规定h中的值为正数)。


float fun(float f)
{
        static char buf[50];
        sprintf(buf,"%.2f",f);
        sscanf(buf,"%f",&f);
        return f;
}

为了防止世界被破坏,为了守护世界的和平,贯彻爱与真实的邪恶,可爱又迷人的反派角色,VxWorks!
Don't ask me any question.I'm just here to buy soy sauce.
2008-07-17 17:48
VxWorks
Rank: 3Rank: 3
来 自:WindRiver
等 级:论坛游民
威 望:6
帖 子:859
专家分:68
注 册:2007-11-24
收藏
得分:0 
根据楼主提供题目的答案算法:float fun (float h)
楼主你的float fun(double h)中输入double返回float肯定写错了,俺没有完全照你的写。

为了防止世界被破坏,为了守护世界的和平,贯彻爱与真实的邪恶,可爱又迷人的反派角色,VxWorks!
Don't ask me any question.I'm just here to buy soy sauce.
2008-07-17 17:50
门外汉2008
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2008-7-15
收藏
得分:0 
回复 8# VxWorks 的帖子
恩,谢谢大侠了.此论坛真是藏龙卧虎啊
2008-07-17 19:08
门外汉2008
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2008-7-15
收藏
得分:0 
回复 6# 广陵绝唱 的帖子
虽然没试你的程序,但我想应该是对的.写了这么长,还有说明!
这么负责,素质真是 高!!
2008-07-17 19:13
快速回复:一道有趣的难题...
数据加载中...
 
   



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

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