主题:[讨论]求大神帮我看看我编的程序为什么一测试就有问题,求解!!!
C++大神
[专家分:0] 发布于 2012-11-19 22:42:00
#include<stdio.h>
#include<math.h>
double sin(double x)
{
double a,y;
int n;
a=x;
y=x;
for(n=1;y<1e-11;n++)
{
a=-a*x*x/(2*n*(2*n-1));
y=y+a;
}
return y;
}
void main()
{
double x,b;
printf("度数是:");
scanf("%lf",&x);
b=(double) fmod(x,360)*3.1415926/180;
printf("函数值是:%lf",sin(b));
}
回复列表 (共10个回复)
沙发
bruceteen [专家分:42660] 发布于 2012-11-20 08:57:00
请描述你的问题
若 编译不通过,请给出编译器给出的错误提示
若 运行结果不符合你的预期,请给出 你的输入、实际输出,以及你的预期输出
板凳
C++大神 [专家分:0] 发布于 2012-11-20 12:57:00
是数据不对。
输入:30度(角度制,编译的程序内部已经转换成弧度制)。
输出:0.523599(无论如何让调整精度,都是这个结果)。预期是0.500000
输入:180度
输出:3.141593.
输入:360度
输出:陷入死循环,一直没有输出值。
大神,这是为什么啊!!sin函数用的是泰勒公式去近似计算的,老师为了要我们了解函数的定义和调用,才要我们做这个题目的。可是我检查了好多遍,没有发现错误,测试结果就是不对,我的其他同学变出来的程序都是看起来没错,一带数据检测就不对了!!!!
3 楼
b2k1cgg [专家分:0] 发布于 2012-11-20 17:55:00
你的循环好像没有进行,我调试了一下是没进入循环体,你得到的结果是fmod(x,360)*3.1415926/180的结果
4 楼
C++大神 [专家分:0] 发布于 2012-11-20 21:11:00
怎么该啊?大神求解!!!
5 楼
bruceteen [专家分:42660] 发布于 2012-11-21 09:24:00
我Google了一下泰勒公式,是
sin(x) = x-x^3/3!+x^5/5!-x^7/7!+x^9/9!-……
[code=c]
#include <stdio.h>
#include <math.h>
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
double mysin(double x) // 不要和标准库中的sin重名
{
double a=x, y=x;
int n;
for( n=1;fabs(a)>1e-11;n++) // 原先写的是y<1e-11
{
a=-a*x*x/(2*n*(2*n+1)); // 原先写的是2*n-1
y=y+a;
}
return y;
}
int main() // 按标准返回类型必须是int
{
double x,b;
printf("度数是:");
scanf("%lf",&x);
b= fmod(x,360)*M_PI/180;
printf("函数值是:%f",mysin(b)); // 按标准,在printf中float/double都用%f,%Lf是给long double用的
return 0;
}
[/code]
6 楼
C++大神 [专家分:0] 发布于 2012-11-21 17:06:00
果然是大神!!真的可以了,但有些不明白!!为什么主函数用int而不是void
7 楼
C++大神 [专家分:0] 发布于 2012-11-21 17:12:00
我试了一下,用void也可以的,还有最后的那个lf也可以不用改的,总之谢谢大神了!!!
8 楼
bruceteen [专家分:42660] 发布于 2012-11-22 08:39:00
为什么主函数用int而不是void
------ 我已经说了,因为C/C++标准一直都规定main的返回类型为int。这个没有为什么,就这么规定的
最后的那个lf也可以不用改的
------ 我已经说了,C/C++标准的printf规定double对应%f。你不能因为某个不符合标准的编译器中long double等同于double,就认为C/C++标准中long double等同于double。
9 楼
tl1116 [专家分:10] 发布于 2012-11-27 15:57:00
有资料可解哦
选择千锋 选择卓越 千锋3G 手机软件开发培训第一品牌
[url=http://www.mobiletrain.org/]iOS培训[/url] [url=http://www.mobiletrain.org/]北京iOS培训[/url]
10 楼
yutianxiang [专家分:50] 发布于 2012-11-27 16:09:00
拜托,泰勒公式算的是弧度
我来回复