立体几何
设圆半径r,圆柱高h 求圆周长C1、圆面积Sa、圆球表面积Sb、圆球体积Va、圆柱体积Vb。 用cin输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字(四舍五入)。请编程序。 PI=3.14
输入
两个浮点数,r和h
输出
圆周长C1、圆面积Sa、圆球表面积Sb、圆球体积Va、圆柱体积Vb。 保留两位小数,每个结果后换行。
第一次伟大尝试:
#include<stdio.h>
#define PI 3.14
int main()
{
double r, h, C1, Sa, Sb, Va, Vb;
scanf("%lf %lf", &r, &h);
printf("C1=%.2f\n", 2 * PI*r);
printf("Sa=%.2f\n", PI*r*r);
printf("Sb=%.2f\n", 4 * PI*r*r);
printf("Va=%.2f\n", 4 * PI*r*r*r / 3);
printf("Vb=%.2f", PI*r*r*h);
return 0;
}
很可惜,第一个测试点都没过
输出
C1=9.42 Sa=7.06 Sb=28.26 Va=14.13 Vb=21.20
答案
C1=9.42 Sa=7.07 Sb=28.26 Va=14.13 Vb=21.20
看着这个7.06和7.07真是令人伤心,我打开了小学二年级的课本,对四舍五入有了进一步的理解:
四舍五入,顾名思义,四舍五入,(哈哈哈哈哈,开个玩笑
具体要求为:四不进位,而五要进位,那遇到计算机这种不懂事不会自己进位的情况,我们要怎么办呢?
手动进位!!!下面上操作:
当我们要求x保留两位小数的时候(C一般用.2f处理,C++一般要用到#include<iomanip>库里的函数或者cout自带的函数,啊,这些我们都不用),先将x*1000b把x小数后三位作为整数的后三位保留出来,然后了,让x+5,这样如果x原本的最后一位达到了5以上,那么很自觉的,x的倒数第二位就可以得到进位来的1,也就达到了进位的效果。
cin >> r >> h;//保留两位小数
double R = r * PI*r * 1000;
R += 5;
cout << R / 1000;
这样就解决了!
留下疑问:
在我向一位学长询问后,学长告诉我还有这么一种方法,通过简单的*100/100.0就可以做到这一点,这一部分可能涉及到编译器自己内部的操作处理,我还不太理解,就不给大家放出来了。
(本文只是自己在做题的时候感觉比较有用的方法或者思想,有很多东西搞得也不是特别懂,若有不妥的地方,烦请指正。)