You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言实现正弦级数(Sine Series)计算时项生成for循环异常问题排查

正弦级数求和代码问题修复

核心错误点

  • 多个变量未初始化就使用:j、sum、sub、value、value1定义后无初始值,直接读取触发未定义行为,是程序崩溃的核心原因
  • 数组越界:定义的数组a长度为number,合法下标范围是0~number-1,存储奇数时j最终会自增到number,写入a[number]超出数组边界
  • 赋值逻辑颠倒:生成项的循环中写了a[j] = value,本意是将数组存储的奇数赋值给value,写反后数组内容直接被无效值覆盖
  • 阶乘变量未重置:每次计算新项的阶乘时fact没有重置为1,会复用之前的计算结果,导致阶乘值完全错误
  • 级数公式完全不符:正弦级数公式为sin(x) = x/1! - x³/3! + x⁵/5! - x⁷/7! + ...,你的代码既没有代入输入的x计算,幂次和阶乘的取值也完全不符合公式要求
  • 逻辑冗余:不需要拆分两个循环处理正负项,用符号变量控制即可;也不需要额外数组存储奇数,直接通过2*i+1就能得到每一项对应的幂次和阶乘次数

修正后可运行代码

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

int main() {
    int number, x;
    double sum = 0.0;
    printf("Enter the number of terms:\n");
    scanf("%d", &number);
    printf("Enter the value for x:\n");
    scanf("%d", &x);

    for (int i = 0; i < number; i++) {
        int exponent = 2 * i + 1;
        // 计算当前项阶乘
        long long fact = 1;
        for (int k = 1; k <= exponent; k++) {
            fact *= k;
        }
        // 计算当前项,(-1)^i控制正负交替
        double term = pow(-1, i) * pow(x, exponent) / fact;
        sum += term;
    }

    printf("Calculated sin(%d) = %lf\n", x, sum);
    return 0;
}

内容的提问来源于stack exchange,提问作者ASMITH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:06:06