问题描述:
输入底面半径r和高h,输出圆柱体的表面积,保留3位小数,格式见样例。
样例输入:
3.5 9
样例输出:
Area = 274.889
分析:
圆柱体的表面积由3部分组成:上底面积、下底面积和侧面积。由于上下底面积相等,完整的公式可以写成:表面积=底面积×2+侧面积。根据几何知识,底面积=πr2,侧面积=2πrh。
关键:
这道题目的关键在于π的求法。如果是普通的程序,直接令π=3.14,或π=3.1415926......之类的;但关键是这是算法竞赛,所以如果你π=3.14和π=3.1415那结果肯定不一样,那正常情况一般不能通过。
所以这就涉及到了反函数的内容。cos(π)=-1,所以acos(-1.0)=π。使用数学函数需要用到math.h。
代码:
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
const double pi = acos(-1.0);//常量用const
double r, h, s1, s2, s;
//1.输入
cin>>r>>h;
//2.计算
s1 = pi*r*r;
s2 = 2*pi*r*h;
s = s1*2.0 + s2;
//3.输出
printf("Area = %.3f\n", s);//保留三位小数用printf
return 0;
}
说一下题外话。虽然我们是因为要输出后三位小数从而利用了printf;但有一个知识点,scanf会比cin更快,printf会比cout更快。当题目有明确要求:“本题的输入量(输出量)很大,请使用较快的输入(输出)方式”时,建议使用scanf和printf,或者关闭输入/输出流和stdio的同步,即调用ios::sync_with_stdio(false)。