c语言如何四舍五入 跟 进一法除法 的 算法

发布网友 发布时间:2022-04-21 23:39

我来回答

5个回答

热心网友 时间:2023-07-12 00:31

#include<stdio.h>

int main()

{int a,b;

scanf("%d%d",&a,&b);

printf("%d/%d(四舍五入)=%d\n",a,b,(int)((float)a/b+0.5));

printf("%d/%d(进一法)=%d\n",a,b,(int)(float)(a+b-1)/b);

return 0; 

}

热心网友 时间:2023-07-12 00:32

用个选择结构控制最后一位,如果余数《=4,退一,》=5进一。求采纳追问初始值是uint 类型
这是关键代码

热心网友 时间:2023-07-12 00:32

很容易理解:
先解释第二个
e=(a+b-1)/b;
设 a=n*b+k n=0,1,,,, k=1,....b-1
那么 当k=1 余数最小时
a+b-1=n*b+1+b-1=(n+1)*b 正好进了一位

第一个:
e=(a+b/2)/b
这个应该错了吧
我觉得应该是float 或double 就可以了

e=(a+b/2)/(1.0*b) 这样就可以了
e=a/b+0.5 就是四舍五入追问程序1的变量值都是uint。 请在解释一遍 O(∩_∩)O谢谢

追答如果是 uint 那就错了,
e=(a+b/2.0)/(1.0*b)

就对了

热心网友 时间:2023-07-12 00:33

对于浮点数四舍五入。

float x = 3.456; //保留到小数点后两位
float y =(int)((a * 100) + 0.5) / 100.0;
//output b = 3.46;

对于整数四舍五入。

float x ;

int  y ;
y=(int)((x+0.5)>(int)x?(int)x+1:(int)x);

进一法除法。

e=(a+b-1)/b;  
设 a=n*b+k    n=0,1,,,,    k=1,....b-1
当k=1 余数最小时
a+b-1=n*b+1+b-1=(n+1)*b  正好进一位

热心网友 时间:2023-07-12 00:33

你的思路有问题
不是一步搞定的
首先,c用的是去尾法
所以四舍五入就要加5给要去的第一位
进一法就要加一给保留的最后一位(注意相等问题)

ok代码大概是这样,以整数位为例

int a,b;
double x,y,z;
输入y z。。。。。
x=1.0*y/z

//四舍五入
a=x+0.5;//好久没用c忘了要不要强制转换了反正思路就是这样
//进一
b=x;
if(b==x)看保留精度后是否和原数相等
{
//什么都不干
}
else
{
b=b+1;//不相等就最低位加一
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com