| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 675 人关注过本帖
标题:求解:请问我错在那里了?算不出结果。
只看楼主 加入收藏
by_stro
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2013-8-6
结帖率:75%
收藏
已结贴  问题点数:15 回复次数:4 
求解:请问我错在那里了?算不出结果。
题目:

3、编一个程序计算sinx和cosx的近似值。使用如下的台劳级数:
sin x=x/1! -x*x*x/3! + x*x*x*x*x/5! -x*x*x*x*x*x*x/7! + ....
cos 省略

舍去的绝对值应小于预定值o。o由自己选择。
要求:定义一个函数计算n!。




程序代码:
#include <iostream.h>
#include <math.h>
int ff(int x)                //自定义的阶层函数 
{
    int i,s=1;
    for(i=1;i<=x;i++)
    s=s*i;
    return s;
}
int main()
{
    int x,a,b,j=1,k=1;
    long double y,z,o=1e-100;      //o代替无穷小量,并且赋值为1e-100 
    cin>>x;
    while(pow(x,2*j-1)/ff(2*j-1)>o)
    j=j+1;                                         //对于sin x,计算出当通项小于o时,循环的次数j 
    while(pow(x,2*k-1)/ff(2*k-2)>o) 
    k=k+1;                                        //对于cos x,计算出当通项小于o时,循环的次数k 
    y=z=0;
    for(a=1;a<=j;a++)
    y=y+(pow(-1,a+1)*pow(x,2*z-1))/ff(2*a-1);   // 对于sin x来说,计算出循环了j次的式子之和 
    for(b=1;b<=k;b++)
    z=z+(pow(-1,b+1)*pow(x,2*b-2))/ff(2*b-2);   //对于cos x来说,计算出循环了k次的式子之和
    cout<<"sin"<<x<<"="<<y<<endl;
    cout<<"cos"<<x<<"="<<z<<endl; 
}
搜索更多相关主题的帖子: 绝对值 
2013-10-16 20:06
veketdelphi
Rank: 5Rank: 5
等 级:职业侠客
帖 子:67
专家分:374
注 册:2013-4-8
收藏
得分:4 
C、c++自带数据类型  表达不了这么 小的数字的o=1e-100  

阶乘请用 浮点类型  自己用windows计算器算一下 十几的阶乘 int 就放不下了 溢出了
2013-10-16 20:19
longtang
Rank: 2
等 级:论坛游民
帖 子:12
专家分:20
注 册:2013-9-25
收藏
得分:4 
借鉴下 C、c++自带数据类型  表达不了这么 小的数字的o=1e-100  

阶乘请用 浮点类型  自己用windows计算器算一下 十几的阶乘 int 就放不下了 溢出了
2013-10-16 20:35
by_stro
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2013-8-6
收藏
得分:0 
回复 2楼 veketdelphi
你好,还是不可以!
程序代码:
#include <iostream.h>
#include <math.h>
long double ff(long double x)                //自定义的阶层函数 
{
    int i,s=1;
    for(i=1;i<=x;i++)
    s=s*i;
    return s;
}
int main()
{
    int x,a,b,j=1,k=1;
    long double y,z,o=1e-100;      //o代替无穷小量,并且赋值为1e-100 
    cin>>x;
    while(pow(x,2*j-1)/ff(2*j-1)>o)
    j=j+1;                                         //对于sin x,计算出当通项小于o时,循环的次数j 
    while(pow(x,2*k-1)/ff(2*k-2)>o) 
    k=k+1;                                        //对于cos x,计算出当通项小于o时,循环的次数k 
    y=z=0;
    for(a=1;a<=j;a++)
    y=y+(pow(-1,a+1)*pow(x,2*z-1))/ff(2*a-1);   // 对于sin x来说,计算出循环了j次的式子之和 
    for(b=1;b<=k;b++)
    z=z+(pow(-1,b+1)*pow(x,2*b-2))/ff(2*b-2);   //对于cos x来说,计算出循环了k次的式子之和
    cout<<"sin"<<x<<"="<<y<<endl;
    cout<<"cos"<<x<<"="<<z<<endl; 
    return 0; 
}
2013-10-16 20:58
求学菜鸟1
Rank: 1
等 级:新手上路
帖 子:7
专家分:9
注 册:2013-9-21
收藏
得分:4 
pow函数使用的参数是long double类型的吧!
2013-10-16 22:35
快速回复:求解:请问我错在那里了?算不出结果。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015916 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved