qq_55114193 2021-05-25 20:55 采纳率: 0%
浏览 17

习题5-7 使用函数求余弦函数的近似值解析(我的代码问题出在哪)?

我的代码

#include <stdio.h>
#include <math.h>

double funcos( double e, double x );

int main()
{    
    double e, x;

    scanf("%lf %lf", &e, &x);
    printf("cos(%.2f) = %.6f\n", x, funcos(e, x));

    return 0;
}
int digui(int n)
{
    if (n == 0){
        return 1;
    }
    else{
        return n*digui(n-1);
    }
}
double funcos( double e, double x )//输入e == 0.01 x = -3.14 
{
    int i = 0,flag = 1;
    double sum_1,sum_2 = 0;//sum_1是最后一项,sum_2是和 
    sum_1 = flag*pow(x,i) / digui(i);
    sum_2+= sum_1;
    while(abs(sum_1)> e ){
        flag = -flag;
        i += 2;
        sum_1 = flag*pow(x,i) / digui(i);
        sum_2+= sum_1;
        if ((abs(sum_1) < e){
            printf("sum_1=%lf e = %f\n",sum_1,e);
        }
    } 
    return sum_2;
}

输入0.01 -3.14;

结果

为什么当sum_1= 0.234378 时,会被认为 sum_1 < 0.01?

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-06-08 18:11
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    这是因为条件表达式 `abs(sum_1) < e` 应该改为 `abs(sum_1) >= e`,否则只有当 `sum_1` 的绝对值小于 `e` 时才会执行 `printf` 语句。而在这个例子中,当 `sum_1` 的值为 `0.234378` 时,其绝对值显然大于 `e=0.01`,所以不应该执行 `printf` 语句。 修改后代码为:
    double funcos( double e, double x ) {
        int i = 0, flag = 1;
        double sum_1, sum_2 = 0;
        sum_1 = flag * pow(x,i) / digui(i);
        sum_2 += sum_1;
        while (abs(sum_1) >= e) { // 修改条件表达式
            flag = -flag;
            i += 2;
            sum_1 = flag * pow(x,i) / digui(i);
            sum_2 += sum_1;
            if (abs(sum_1) < e) { // 修改条件表达式
                printf("sum_1=%lf e=%f\n", sum_1, e);
            }
        }
        return sum_2;
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同