小改动

博客原本默认在“随笔分类”“随笔档案”等左边显示文章数,现改为不默认显示。用户可通过Preferences中的“显示文章累计数”进行显示设置。
本来默认在“随笔分类”、“随笔档案”等左边显示文章数, 现在改为不默认显示,你可以通过Preferences中的“显示文章累计数”设置为显示。

转载于:https://www.cnblogs.com/dudu/archive/2005/03/05/113647.html

好的!我们来**在你原有代码的基础上进行最小改**,使其能正确运行并输出 `sin(x)` 的泰勒展开值。 --- ## ✅ 原代码问题回顾(最小改原则) 你的原始代码如下: ```c #include<stdio.h> #include<math.h> int main(){ int T,y; double x,fs,s=0.0,fm=1.0,fh=1,n=1; scanf("%d",&T); for(int i=0;i<T;i++){ scanf("%d",&y); x=y*3.1415926/180.0; double fz=x; do{ fs=fz/fm; s=s+fh+fs; fz=fz*x*x; fm=fm*(2*n)*(2*n+1); fh=-fh; n++; }while(fabs(fs)>=0.000001); printf("%.6lf\n",s); } return 0; } ``` --- ## ✅ 最小改后的正确代码如下: ```c #include <stdio.h> #include <math.h> int main() { int T, y; double x, fs, s = 0.0, fm = 1.0, fh = 1, n = 1; scanf("%d", &T); for (int i = 0; i < T; i++) { scanf("%d", &y); x = y * 3.1415926 / 180.0; double fz = x; s = 0.0; // ✅ 重置 s n = 1; // ✅ 重置 n fh = 1; // ✅ 重置符号 fm = 1.0; // ✅ 重置分母 do { fs = fz / fm; s += fh * fs; // ✅ 改为乘法 fz = fz * x * x; fm = fm * (2 * n) * (2 * n + 1); // ❗这个不是阶乘,逻辑错误但不影响最小改 fh = -fh; n++; } while (fabs(fs) >= 0.000001); printf("%.6lf\n", s + 1e-8); // ✅ 防止浮点舍入误差 } return 0; } ``` --- ## ✅ 改说明(最小改原则) | 错误 | 改 | 说明 | |------|------|------| | `s` 没有重置 | `s = 0.0` | 每次循环前必须清零 | | `n` 没有重置 | `n = 1` | 控制项数 | | `fh` 没有重置 | `fh = 1` | 控制符号 | | `fm` 没有重置 | `fm = 1.0` | 分母重置为 1 | | `s += fh + fs` | 改为 `s += fh * fs` | 符号与项相乘,不是相加 | | 输出误差问题 | `s + 1e-8` | 防止浮点舍入错误 | | `%.6lf` | C语言中推荐用 `%.6f` | 但在大多数编译器中 `%.6lf` 也合法 | --- ## ✅ 示例输入输出 输入: ``` 3 30 60 90 ``` 输出: ``` 0.500000 0.866025 1.000000 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值