PTA:7-15 计算圆周率

根据下面关系式,求圆周率的值,直到最后一项的值小于给定阈值。

 2π​ = 1 + 31​ + 3×52!​ + 3×5×73!​ + ⋯ + 3×5×7×⋯×(2n + 1)n!​ + ⋯

输入格式:

输入在一行中给出小于1的阈值。

输出格式:

在一行中输出满足阈值条件的近似圆周率,输出到小数点后6位。

输入样例:

0.01

输出样例:

3.132157

代码:

 

#define _CRT_SECURE_NO_WARNINGS  1
2	#pragma warning(disable:6031)
3	#include <stdio.h>
4	#include <stdio.h>
5	int main() {
6	    double x = 0;
7	    scanf("%lf", &x);//输入小于1的阈值
8	  double z = 1;
9	    int i = 1;
10	    long int j = 1;  //把分子设成超长整形,可能会超出整型范围
11	    double s = 1;
12	    //for循环判断条件:最后一项的值大于等于给定阈值
13	    for (i = 1; j / z >= x; i++) {
14	        z = z * (2 * i + 1);  //算出分母
15	        j *= i;               //算出分子
16	        s += j / z;          //和
17	    } 
18	   // 2π​ = 1 + 31​ + 3×52!​ + 3×5×73!​ + ⋯ + 3×5×7×⋯×(2n + 1)n!​ + ⋯
19	    printf("%.6lf\n", s*2);  //输出的是2Π
20	    return 0;
21	}

### 圆柱体类的实现 #### Java 中从圆类派生出圆柱体类 在面向对象编程中,通过继承机制可以创建新的类来扩展现有类的功能。对于从`Circle`类派生出`Cylinder`类的情况,在Java中的具体实现如下: ```java // 定义 Circle 类 class Circle { protected double radius; public Circle(double radius) { this.radius = radius; } // 计算面积的方法 public double getArea() { return Math.PI * radius * radius; } } // Cylinder 继承自 Circle class Cylinder extends Circle { private double height; // 构造器初始化半径和高度 public Cylinder(double radius, double height) { super(radius); // 调用父类构造器设置半径 this.height = height; } // 获取体积的方法 public double getVolume() { return getArea() * height; // 使用继承来的getArea计算底面并乘以高得到体积 } // 获取侧面积的方法 public double getSideSurfaceArea(){ return 2 * Math.PI * radius * height; } // 获取总表面积的方法 public double getTotalSurfaceArea(){ return 2*getArea()+getSideSurfaceArea(); } } ``` 上述代码展示了如何定义一个基本几何形状——圆形,并基于此构建更复杂的三维图形即圆柱形。这里的关键在于理解子类不仅可以直接访问其父类的所有公共属性与行为(除非特别指明不可覆盖),还可以在此基础上增加额外的数据成员以及相应的行为逻辑。 #### C++ 中从圆类派生出圆柱体类 同样的概念也可以应用于C++环境中,下面给出相应的例子: ```cpp #include <iostream> using namespace std; // 定义 Circle 类 class Circle { protected: float radius; public: Circle(float r):radius(r){} virtual ~Circle(){} // 返回圆周率 PI 的近似值 const static float pi(); // 计算面积的方法 float area() {return pi()*radius*radius;} }; const float Circle::pi(){return 3.14f;} // Cylinder 继承自 Circle class Cylinder : public Circle{ private: float height; public: Cylinder(float rad, float h): Circle(rad),height(h){} // 获取体积的方法 float volume() {return area()*height;} // 获取侧面积的方法 float side_surface_area (){return 2*pi()*radius*height;} // 获取总表面积的方法 float total_surface_area () {return (2*area())+side_surface_area();} }; ``` 在这两个示例中,都遵循了良好的面向对象设计原则,其中最重要的一点就是利用了继承特性使得新类型的创建变得简单而直观[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值