第十三周实验报告2
2012-02-14 10:02
281 查看
实验目的:学会使用自定义函数解决实际问题
实验内容:定义自定义函数,计算sin和cos的近似值
* 程序头部注释开始
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称: 求sin(π/2)、cos(87°)的值
* 作 者: 徐嘉健
* 完成日期: 2011 年 11 月 21
日
* 版本号: number one
* 对任务及求解方法的描述部分
* 问题描述:自定义函数,用泰勒公式实现计算sin和cos的近似值,要求:(1)求sin、cos时,不能用数学库函数(即不得用#include<Cmath>),而是自己编函数实现,为区别,可以分别起名为mysin和mycos;(2)自定义函数要写在main函数之后;(3)自定义函数的效率问题必须考虑;(4)关于精度:当最后一项的绝对值小于0.00001时,累加结束。
* 程序输出:sin(π/2)、cos(87°)的值(真值分别为1和0.052336,用泰勒公式求解的精度是可以保证的,特此更正。)
* 算法设计:使用泰勒公式
* 程序头部的注释结束
#include <iostream>
#include<Cmath> //为便于对比结果,main函数中调用了Cmath中的库函数sin和cos
using namespace std;
const double pi=3.1415926;
double mysin(double);
double mycos(double);
double myabs(double); //程序中需要求精度的绝对值,也用自定义函数完成吧
int main( )
{
cout << "sin(π/2)的值为" << mysin(pi/2) << endl;
cout << "cos(87°)的值为" << mycos((87.0/180)*pi) << endl;
cout << "sin(π/2)的更精确的值为" << sin(pi/2) << endl; //库函数提供的值
cout <<"cos(87°)的更精确的值为" << cos((87.0/180)*pi) << endl;
return 0;
}
double mysin(double)
{
double (pi / 2);
double mysin = 0;
int n = 0, i, fact;
do
{
for(i = 1, fact = 1; i <= 2 * n + 1; i++)
{
fact = fact * i;
}
mysin = mysin + pow(-1, n) * pow(pi / 2, 2 * n + 1) / fact;
n=n+1;
}while(pow(pi / 2, 2 * n + 1) / fact > 0.00001);
return mysin;
}
double mycos(double)
{
double ((87.0 / 180) * pi);
double mycos = 1;
int n = 1, i, fact = 1;
do
{
for(i = 2, fact = 1; i <= 2 * n; i++)
{
fact = fact * i;
}
mycos = mycos + pow(-1, n) * pow((87.0 / 180) * pi, 2 * n) / fact;
n = n + 1;
}while(pow((87.0 / 180) * pi, 2 * n) / fact > 0.00001);
return mycos;
}
运行结果:
经验积累:
1.两个函数的调用,有时候,会有一点错乱复杂,很容易搞晕。
2.分解较难的问题,每次只做其中的每一个简单的小问题,然后将较为简单的问题整合,往往能够得到意想不到的结果。
3.细节很重要,不然思路会很不清晰,所以之前最好大好草稿。
上机感言:
程序编的越来越复杂,当然代码也会写得越来越长,难度也越来越大,真的是让人很是伤脑筋,为了一个明明知道的结果,或非大量的时间和精力,很郁闷的,可是,每当希望的结果透过黑屏传达到我的眼睛里,喜悦总是随之而来,会觉得以前的付出是有回报的,同时又恨开心,我喜欢这样的感觉。