中易网

C语言,为什么我的答案是0.000?怎么改正确

答案:4  悬赏:60  
解决时间 2021-01-18 09:06
C语言,为什么我的答案是0.000?怎么改正确
最佳答案
一、错误
1、从代码输出的z以及z的赋值语句
z=x*j*e/w+z;来讲,x是什么,j是什么,e是什么,w又是什么。
很明显你的意图,j是正负,(!i%2)的时候j是-1,不改变j的值的话j一直会是-1。
w你可能想用来做(2i-1)!,可是w=w+w*y;是什么?
e是x^(2i-1),这倒是没有问题
于是,你把z=x*j*e/w+z;带一下,你看看这个表达式是啥。

2、int是整型,float是单精度浮点
浮点数放到整型里会被截去小数部分,那么变量e不应该为int,因为x是float,而e是x的(2i-1)次幂。
int类型的范围是 -2^31 ~ 2^31-1,15!超过了这个范围,因此不建议使用int型存储。


二、程序修改
#include 

int main()
{
    int i, n;
    int y, j, m;
    float w, e, z, x;
    scanf("%d%f", &n, &x);
    for (i=1, z=0; i<=n; i++)
    {
        if (i % 2 == 0)
            j = -1;
        else 
            j = 1;
        for (y = 1, w = 1; y <= 2*i-1; y++)
            w = w * y;
        for (m = 1, e = 1; m <= 2*i-1; m++)
            e = e * x;
        z = j * e / w + z;
    }
    printf("%.3f
", z);
    return 0;
}三、优化

1、合理利用项的递推关系
x^9/9!如何计算? 将x乘以9次,然后9*8*7...*1再计算9次?
你是否有想过x^9/9! = (x^7)/7! * x*x / 8/9
x^(2*i-1)/(2*i-1)! = [ x^(2*i-3)/(2*i-3)! ] * x*x /(2*i-2)/(2*i-1)
计算多项式后一项使用前一项的结果继续计算,而不需要“从头再来”
2、float的精度是6位十进制数,double的精度是15位十进制数,除非对所占内存和空间要求苛刻,否则,尽量使用double来缩小计算误差。
四、重写代码
#include 

int main()
{
    int i, j = 1, n;
    double ans, t, x;
    scanf("%d%lf", &n, &x);
    
    ans = t = x;
    for (i = 2; i <= n; i++)
    {
        j = -j;
        t = t * x * x / (2*i-2) / (2*i-1);
        ans += j * t;
    }
    printf("%.3f
", ans);
    return 0;
}--------------------
 最后,我忽略了一点,题目要求的是多组输入,因此可能需要这样处理一下:
#include 
 
int main()
{
    int i, n;
    int y, j, m;
    float w, e, z, x;
    while (scanf("%d%f", &n, &x)!=EOF)
    {
        for (i=1, z=0; i<=n; i++)
        {
            if (i % 2 == 0)
                j = -1;
            else 
                j = 1;
            for (y = 1, w = 1; y <= 2*i-1; y++)
                w = w * y;
            for (m = 1, e = 1; m <= 2*i-1; m++)
                e = e * x;
            z = j * e / w + z;
        }
        printf("%.3f
", z);
    }
    return 0;
}
追问:事实证明你的程序修改部分错误,不过优化部分很好你批评的很好,受教了
全部回答
类型转换截断了,注意类型
z定义成flaot型才对
你把代码复制/粘贴过来,才好调试啊。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
别听她的,钱多就行.知道由量变到质变吗
淘宝卖出商品带一个i标志是什么意思
天涯明月刀种植的杉树到什么时候成熟
激光投影和全息投影的区别是什么?
一个人主动久了,后来不主动了是为什么
"牛"字加一横会变成什么字?
六十除'369商和余数各是多少
饥荒遇到青蛙雨怎么办
像轻松筹、爱心筹这种筹款平 台,都有手续费
厂租记入管理费用还是制造费用,制造冲减利润
为什么男友要亲我的脖子
轮胎直径相差7.3毫米影响不
YUI有翻唱哪些歌曲?
杰克包缝机768用几相电
金湾优宝贝托儿园地址在什么地方,想过去办事
推荐资讯
工程泥沙堆积打什么电话
二注考试迷茫中,不知道怎么复习
4.3里面的奥格瑞玛炼金实验室在哪?
自己平时蛮好的,为何每天房事过后,下体会有
直升了win10后因网络连接不上还原了win7,结
为什么激战2输入了正确的账号和密码却进不去
老相狗经带图专相土狗,民间相狗经土狗怎样看
日本东京交通问题
卧蚕的意思是什么?卧蚕的释义是什么啊?
全世界有多少个人叫优优这个名字的
外国人剃光阴毛图12P777E丫
在曼谷转机时间是否来得及?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?