题目标题:实数四舍五入后的相加运算
题目作者:唐艳琴 中国人民解放军陆军工程大学
本题目实现实数保留两位小数的四舍五入存储后,再相加。
输入格式:
输入两个双精度实数A,B。
输出格式:
第一行输出A+B的真实值(保留两位小数)
第二行输出A、B进行四舍五入后再相加后的值(保留两位小数)。
为了保证输出的美观,每个实数占10位,A为左对齐,B为右对齐,A+B的结果为左对齐。
输入样例:
12.345,4.896
输出样例:
12.345000 + 4.896000=17.24
12.350000 + 4.900000=17.25
首先说一下个格式问题:(1)双精度的输入要用格式转换说明符%lf,而输出用%f就可以,有特殊要求根据特殊要求确定格式转换说明符。
(2)保留n位小数输出浮点数,用格式转换说明符%.nf。
(3)占位m位左对齐输出整数或浮点数,用%-md或%-mf;右对齐,用%md或%mf。
(4)输出浮点数既有保留小数位数的要求,又有占位要求,可以综合起来用%-m.nf或者%m.nf。
思路:根据题目的要求,读入双精度浮点数到变量A,B后,第一行直接打印printf("%-10f+%10f=%-10.2f\n",A,B,A+B) 即可。
根据题目要求,第二行是先要把A和B进行四舍五入,变成a和b,然后再输出,输出的格式与第一行相同,即printf("%-10f+%10f=%-10.2f\n",a,b,a+b) 即可。
注意:若要对一个浮点数四舍五入,保留n位输出(也就是说对第n+1位进行四舍五入),我们直接用%.nf输出就行了。但是根据题目的要求,是要把A四舍五入赋值给a,B四舍五入赋值给b,然后再算a+b,这时我们就需要进行一些运算了。
有一点题目中没有说明清楚,但是根据猜测和答案的印证,题目中的把A、B先四舍五入是指对A、B的小数点后第3位进行四舍五入。我们用 a = round(A*100)/100 和 b = round(B*100)/100 来实现。原理是这样的:假设要对12.345的小数点后第三位进行四舍五入,那么我们先给12.345乘以100,得到1234.5,然后根据round函数的性质,round(A)是对A的小数点后第1位进行四舍五入,于是不难得出 round(A*100)/100 就是对A的小数点后第3位进行四舍五入。
代码:
#include <stdio.h>
#include <math.h>
int main () {
double a,b,A,B;
scanf("%lf,%lf", &a, &b);
printf("%-10f+%10f=%-10.2f\n",a,b,a+b);
A = round(a*100)/100;
B = round(b*100)/100;
printf("%-10f+%10f=%-10.2f",A,B,A+B);
return 0;
}