以下是源代码:
#include<stdio.h>
#include<conio.h>
#include<math.h>
void main()
{
double x;
clrscr();
printf("Enter angle:");
scanf("%lf",&x);
printf("Sine %lf = %lf",x,sin(x));
getch();
}
谁能告诉我出了什么问题?
答案 0 :(得分:2)
代码可能有3个问题:
x
转换为弧度角:sin(x*3.14159265/180.0)
。\n
:printf("Sine %lf = %lf\n",x,sin(x*PI 3.14159265/180.0));
因为它会将输出刷新到stdout
。clrscr()
编译错误,但目前的编译器并不支持。所以试试这个:
#include<stdio.h>
#include<math.h>
int main()
{
double x;
printf("Enter angle:");
scanf("%lf",&x);
printf("Sine %lf = %lf\n",x,sin(x*3.14159265/180.0));
getch();
return 0;
}
修改强> 3.14的准确性不太好
答案 1 :(得分:1)
这应该有效:
#include<stdio.h>
#include<conio.h>
#include<math.h>
#define PI 3.14159265
void main()
{
double x;
clrscr();
printf("Enter angle:");
scanf("%lf",&x);
printf("Sine %lf = %lf",x,sin (x*PI/180));
getch();
}
答案 2 :(得分:0)
使用“%f”,而不是“%lf”。为了将来参考,请告诉我们 它不起作用。
答案 3 :(得分:0)
这是该程序的一个更便携版本:
#include <stdio.h>
#include <math.h>
int main(void)
{
double x;
printf("Enter angle (in radians): ");
fflush(stdout);
scanf("%lf", &x);
printf("sin %lf = %lf\n", x, sin(x));
return 0;
}
我所做的改变是:
删除#include <conio.h>
以及对clrscr()
和getch();
的来电。这些是Windows(或MS-DOS-)特定的。这并不是说你不应该使用它们(它们存在是有原因的),但你至少应该意识到它们会使你的程序不那么便携。 (为什么你要清除屏幕呢?我可能会有信息。)
将void main()
更改为int main(void)
。允许编译器接受void main()
,但它不可移植,并且没有使用它的充分理由而不是完全可移植的int main(void)
。 (除非您为不喜欢int main(void)
的嵌入式系统编写代码,但这不是这种情况。)
在提示后添加fflush(stdout);
。这可能没有必要,但如果没有它,可能不会出现提示。再次携带。
将return 0;
添加到程序的末尾。在1990版本的C标准中,在没有return语句的情况下从main
函数的末尾掉落会向环境返回未定义的状态;在C99中,有一个隐含的return 0;
,但明确说明它并没有什么坏处。
对于原始程序和此修改程序的行为,sin(3.14)
约为0.001593。但即使您输入了更精确的pi值,sin(x)
仍然也不会给出0.0,因为浮点数不能完全代表pi的值。如果您更精确地显示结果,则会看到sin(3.14159265358979323846264)
出现类似0.00000000000000012246063538223772
的内容。
最后,getch()
调用的目的是让程序等待你在键终止之前按下一个键(并且可能是输出出现的窗口消失)。这通常是Windows风格的IDE环境所需要的,但是如果从命令提示符运行程序则不需要。同样,我并没有告诉你不要打电话给getch()
,只是你不一定需要它。