当前课程知识点:C++语言程序设计基础 >  第3章 函数 >  函数调用 >  例3-3

返回《C++语言程序设计基础》慕课在线视频课程列表

例3-3在线视频

例3-3

例3-3

 

编写程序求π的值

l  π的计算公式如下:

arctan1.gif

l  其中arctan用如下形式的级数计算:

arctan2.gif

l  直到级数某项绝对值不大于10-15为止;π和x均为double型。

 

arctan函数

#include <iostream>

using namespace std;

 

double arctan(double x) {

          double sqr = x * x;

          double e = x;

          double r = 0;

          int i = 1;

          while (e / i > 1e-15) {

                   double f = e / i;

                   r = (i % 4 == 1) ? r + f : r - f;

                   e = e * sqr;

                   i += 2;

          }

          return r;

}

主程序

int main() {

          double a = 16.0 * arctan(1/5.0);

          double b = 4.0 * arctan(1/239.0);

          //注意:因为整数相除结果取整,如果参数写1/5,1/239,结果就都是0

 

          cout << "PI = " << a - b << endl;

          return 0;

}

 

 



下一节:例3-4

返回《C++语言程序设计基础》慕课在线视频列表

例3-3课程教案、知识点、字幕

大家好

欢迎继续学习C++语言程序设计

在这一节

我继续给大家介绍

函数调用的例题

这个例题呢

是让我们编写一个程序

求圆周率π的值

那么这个公式是给出来的

这是一个典型的

已经描述好了算法

给定的算法

然后让我们用程序

来实现这个算法

应该说

这是比较容易的一件事情

因为算法

已经不用我们自己设计了

只要用程序把数学中的公式

算法

转化成计算机执行的步骤

就可以了

但是对于初学者来说

看见这么有点麻烦的一个公式呢

仍然会觉得摸不到头脑

怎么办呢

还是用功能分解的方式

如果认为这个公式太复杂了

就把它分成多个部分

我们用不同的函数

来实现不同的部分

这样问题就能够逐步简化

到了最简单的地方呢

大家就会解决了


现在我们来看一下面这个例子

怎么来实现

先来分析一下这个公式

我们看这个公式中

给出了π的计算方法

16乘以arctan1/5

再减去4乘以arctan1/239

这里面显然地用到了arctan

当然了

系统函数里面是有

现成的arctan函数的

但是我们这个例题要求不能用

学习一下自己怎么编写程序

也实现这个arctan函数里

那么这里也给出了一个

arctan函数的公式

好 那么这里面

显然就有两件事情

放在一起了

一个是当你已知arctan函数

怎么写的情况下

如何去计算π

另一件事情就是说

arctan函数它自己的公式是什么

当然我们写程序的时候

也就可以按照功能分解的方式

把它分开两部分处理

用一个函数去实现arctan

然后呢 另外一个函数

比如说主函数

就调用这个arctan函数

来计算π的值

这就是一种自底向下

逐步求精的功能分解的方法

现在再看这个arctan函数的公式

大家看

x-x^3/3+x^5/5-x^7/7

通过前几项

我们可以看得出来它的规律了

然后后面点点点

这算不算一个合格的算法呢

如果仅仅到此为止

这个不是一个计算机

可以实现的算法

为什么呢

因为点点点到什么时候结束

没有规定

那就无穷无尽地加下去了

实际上我们必须在加一个

终止的条件

也就是在这道题里面呢

是运算精度的条件

直到某项的绝对值

不大于10的-15次方

那么就可以了

不加后续的项了

这就是将来在程序中

控制我们循环终止的条件

接下来我们来看这个程序代码

在这个例题中呢

我们将功能分解成一个

求arctan函数

和一个主函数

首先

我们来看这个arctan函数的实现

那么这个arctan函数呢

它的主体

就是这样一个while循环

按照我们公式里面

这个公式的规定 我们看

按照这个公式的规定

我们去逐项累加

所以要用while循环

每一项它到底应该是正的

还是负的呢

正好 凡是这个i除以4

它的余数为1的时候

就应该是加上一项的时候

否则就应该是减去一项的时候

大家自己看看

是不是这样一个规律

然后这个while循环

以什么来控制循环结束呢

以这个精度要求

当这一项e除以i

大于10的-15次方的时候

我们就需要继续加上这一项

如果这一项小于精度的要求了

我们就不往下加了

有了这样一个arctan函数

那么主函数中

计算这个π值就比较方便了

主函数中就只需要

先计算出第一个部分是a

然后第二个部分是b

然后a-b就这么简单

但是需要注意的是

arctan它接收的参数

是1/5 1/239

但是你不能写1除以5 1除以239大家要记得整数相除结果取整

如果你做整数相除的除法的话

那么这两个参数就都是0了

肯定得不到正确的结果

所以我们在程序中

要写1除以5.0 1除以239.0

好 这一节就是这样

C++语言程序设计基础课程列表:

第1章 绪论

-导学

--第1章导学

-计算机系统简介

--计算机系统简介

--计算机系统简介 测试题

-计算机语言和程序设计方法的发展

--计算机语言和程序设计方法的发展

--计算机语言和程序设计方法的发展 测试题

-面向对象的基本概念

--面向对象的基本概念

--面向对象的基本概念 测试题

-程序的开发过程

--程序的开发过程

--程序的开发过程 测试题

-信息的表示和储存

--计算机中的信息与存储单位

--计算机的数字系统

--数据的编码表示

--信息的表示和储存 测试题

-实验指导

--实验一:VS开发环境介绍

第2章 C++简单程序设计(一)

-导学

--第二章导学

-C++语言概述

--C++的特点和程序实例

--C++字符集和词法记号

--C++语言概述 测试题

-基本数据类型、常量、变量

--基本数据类型、常量、变量

--程序举例

--基本数据类型、常量、变量 测试题

-运算与表达式

--算术运算与赋值运算

--逗号运算、关系运算、逻辑运算和条件运算

--Sizeof运算、位运算

--运算优先级、类型转换

--运算与表达式 测试题

-实验二:简单程序设计(上)

--实验二:简单程序设计(上)

第2章 C++简单程序设计(二)

-数据的输入和输出

--数据的输入和输出

--数据的输入和输出 测试题

-选择结构

--if语句

--switch语句

--选择结构 测试题

-循环结构

--循环结构——while语句

--do-while语句

--for语句

--嵌套的控制结构、其他控制语句

--循环结构 测试题

-自定义类型

--自定义类型

--自定义类型

-第2章小结

--第二章小结

-实验二:C++简单程序设计(下)

--实验二C++简单程序设计(下)

第3章 函数

-导学

--导学

-函数定义

--函数定义

--函数定义 测试题

-函数调用

--函数调用(例3-1)

--例3-2

--例3-3

--例3-4

--例3-5

--例3-6

--函数调用 测试题

-嵌套与递归

--函数的嵌套调用(例3-7)

--函数的递归调用(例3-8)

--例3-9

--例3-10

--嵌套与递归 测试题

-函数的参数传递

--函数的参数传递

--函数的参数传递 测试题

-引用类型

--引用类型(例3-11)

--引用类型 测试题

-含有可变参数的函数

--含有可变参数的函数

--含有可变参数的函数 测试题

-内联函数

--内联函数(例3-14)

--内联函数 测试题

-constexpr函数

--constexpr函数

--CONSTEXPR函数课后习题

-带默认参数值的函数

--带默认参数值的函数

--默认参数值例(3-15)

--带默认参数值的函数 测试题

-函数重载

--函数重载(例3-16)

--函数重载 测试题

-C++系统函数

--C++系统函数(例3-17)

--C++系统函数习题

-第3章小结

--第三章小结

-实验三(上)函数的应用

--实验三(上)函数的应用

-实验三(下)函数的应用

--实验三(下)函数的应用

第4章 类与对象

-导学

--导学

-面向对象程序的基本特点

--面向对象程序的基本特点

--面向对象程序的基本特点 测试题

-类和对象

--类和对象的定义

--类和对象的程序举例

--类和对象 测试题

-构造函数

--构造函数基本概念

--构造函数例题(1)——例4-1

--构造函数例题(2)——例4-2

--委托构造函数

--复制构造函数

--复制构造函数调用举例

--构造函数 测试题

-析构函数

--析构函数

--析构函数 测试题

-类的组合

--类的组合

--类的组合程序举例

--前向引用声明

--类的组合 测试题

-UML简介

--UML简介

--UML简介课后习题

-结构体与联合体

--结构体(例4-7)

--联合体(例4-8)

--结构体与联合体 测试题

-枚举类

--枚举类

--枚举类 测试题

-第4章小结

--第四章小结

-实验四(上)

--实验四(上)

-实验四(下)

--实验四(下)

第5章 数据的共享与保护

-导学

--导学

-标识符的作用域与可见性

--标识符的作用域与可见性

--标识符的作用域与可见性 测试题

-对象的生存期

--对象的生存期

--对象的生存期 测试题

-类的静态成员

--静态数据成员(例5-4)

--静态函数成员(例5-5)

--类的静态成员 测试题

-类的友元

--类的友元(例5-6)

--类的友元 测试题

-共享数据的保护

--共享数据的保护(例5-7)

--共享数据的保护 测试题

-多文件结构和预编译命令

--多文件结构和预编译命令(例5-10)

--多文件结构和预编译命令 测试题

-第5章小结

--小结

-实验五

--实验五

第6章 数组、指针与字符串(一)

-导学

--导学

-数组的定义与初始化

--数组的定义与使用

--数组的储存与初始化

--一维数组应用举例

--数组的定义与初始化 测试题

-数组作为函数的参数

--数组作为函数参数(例6-2)

--数组作为函数的参数 测试题

-对象数组

--对象数组

--对象数组 测试题

-基于范围的for循环

--基于范围的for循环

-指针的定义和运算

--指针的概念、定义和指针运算

--指针的初始化和赋值

--指针的算术运算、关系运算

--指针的定义和运算 测试题

-综合实例

--综合实例

-实验六(上)

--实验六上

第6章 数组、指针与字符串(二)

-指针与数组

--用指针访问数组元素

--指针数组

--指针与数组 测试题

-指针与函数

--以指针作为函数参数

--指针类型的函数

--指向函数的指针

--指针与函数 测试题

-对象指针

--对象指针

--对象指针 测试题

-动态内存分配

--动态分配与释放内存

--申请和释放动态数组(一)

--申请和释放动态数组(二)

--动态内存分配 测试题

-智能指针

--智能指针

-vector对象

--vector对象

--vector对象 测试题

-对象复制与移动

--深层复制与浅层复制

--移动构造

--对象复制与移动 测试题

-字符串

--C风格字符串

--string类

--字符串 测试题

-第6章小结

--第六章小结

-综合实例

--综合实例

-实验六(下)

--实验六(下)

例3-3笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。