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
相关产品推荐
相关产品推荐

