发布网友 发布时间: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;//不相等就最低位加一
}