鱼C论坛

 找回密码
 立即注册
查看: 1842|回复: 7

函数调用

[复制链接]
发表于 2016-5-7 18:04:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 n0noper 于 2016-5-18 11:31 编辑

输入一个正整数n和一个实数x(x范围在0~1.57之间),计算cos(x)=x^0/0!-x^2/2!+x^4/4!+x^6/6!+...的前n项和
为什么我输  5   1.57   的时候,输出的值为负  而且不等于0.0008,我哪里写错了??请指出并帮忙改正,谢谢

#include <stdio.h>
void main(){
        int i,n,flag;   
        double x,item,sum;
        double fact(int n);    //声明下面的fact函数
        double power(double x,int n); //声明下面的power函数
        printf("输入一个正整数n和一个实数x:");
        scanf("%d%lf",&n,&x);
        flag=-1;
        if(n==1){
                sum=1;
        }
        else{
                sum=1;
                for(i=2;i<=n;i++){   // 函数调用
                        item=flag*power(x,i)/fact(i);  
                        sum=sum+item;
                        flag=-flag;
                }
        }
        printf("cos(x)的近似值=%0.4f\n",sum);
}
double fact(int n)  //函数定义
{
        double product;
        int i;
        product=1;
        for(i=1;i<=(2*n-2);i++) //计算分母的变量
                product=product*i;
        return product;   //返回结果
}
double power(double x,int n)  //函数定义
{
        double pow=1;
        int i;
        for(i=1;i<=n;i++)   //计算分子的变量
        {
                pow=pow*x;
        }
        return pow;    //返回结果
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-5-7 22:35:15 | 显示全部楼层
我运行了结果是0.0794 = =不是负值啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-8 09:17:33 | 显示全部楼层
神之间 发表于 2016-5-7 22:35
我运行了结果是0.0794 = =不是负值啊

可为什么我得到的结果是  -0.0974  ,我现在再运行 还是负的   而且,它本来的值是0.0008的  ,能看出来我哪里错了吗??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-8 13:57:48 | 显示全部楼层
不知道你解决没有,恩,还是说一下我发现的问题吧

        我水平也不怎么样,一眼看不出问题,用了三个输出分别测试你的两个函数和运算值
 if(n==1)
                {
                sum=1;
        }
        else
                {       sum=1;
                for(i=2;i<=n;i++)   //控制项
                {       // 函数调用
                        item=flag*power(x,i)/fact(i);

                        //        printf("%10f,%10f",power(x,i),fact(i));
                        //        printf("%10f",item);

                        sum=sum+item;

                        //        printf("%10f\n",sum);        

                        flag=-flag;
                }
        }

运行结果如下

错误.png

注意:第二行第一列,此时应该是计算1.57的4次方,用计算机算,1.57^4=6.07573201  但是这里的值是3.869893=1.57^3   

说到这里你应该也就明白了,是你函数出错了
double power(double x,int n)  //函数定义
{
        double pow=1;
        int i; 
                //原代码   for(i=1;i<=n;i++) 
        for(i=1;i<=(2*n-2);i++)   //计算分子的变量
        {
                pow=pow*x;
        }
        return pow;    //返回结果
}

运行结果:

QQ截图20160508134412.png


QQ截.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2016-5-8 14:17:34 | 显示全部楼层

卤煮,既然你fact中的for循环中计算分母的平方是(2*n-2),为什么power里边的for就不是了?

是不是看不起power啊?平方和阶乘,同步啊~~~不要有了小三就忘了原配啊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-8 18:12:37 | 显示全部楼层
n0noper 发表于 2016-5-8 14:17
卤煮,既然你fact中的for循环中计算分母的平方是(2*n-2),为什么power里边的for就不是了?

是不是看不 ...

对对对,你指出的对,我还是个新手,还不太会理解,希望能谅解。我会努力改正这些毛病,多谢指出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-8 18:13:42 | 显示全部楼层
留恋流年 发表于 2016-5-8 13:57
不知道你解决没有,恩,还是说一下我发现的问题吧

        我水平也不怎么样,一眼看不出问题,用了三个输出分 ...

谢谢,非常感谢。我现在终于解决这个问题了。感谢你的帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-8 18:29:15 | 显示全部楼层
寻123 发表于 2016-5-8 18:13
谢谢,非常感谢。我现在终于解决这个问题了。感谢你的帮助

没事,互帮互助嘛!共同进步
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 00:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表