为什么这个用于计算输入正弦的程序不工作?

时间:2011-10-16 16:47:12

标签: c

以下是源代码:

#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();
}

谁能告诉我出了什么问题?

4 个答案:

答案 0 :(得分:2)

代码可能有3个问题:

  1. 您应该将x转换为弧度角:sin(x*3.14159265/180.0)
  2. 您应该添加\nprintf("Sine %lf = %lf\n",x,sin(x*PI 3.14159265/180.0));因为它会将输出刷新到stdout
  3. 也许您的clrscr()编译错误,但目前的编译器并不支持。
  4. 所以试试这个:

    #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;
}

我所做的改变是:

  1. 删除#include <conio.h>以及对clrscr()getch();的来电。这些是Windows(或MS-DOS-)特定的。这并不是说你不应该使用它们(它们存在是有原因的),但你至少应该意识到它们会使你的程序不那么便携。 (为什么你要清除屏幕呢?我可能会有信息。)

  2. void main()更改为int main(void)。允许编译器接受void main(),但它不可移植,并且没有使用它的充分理由而不是完全可移植的int main(void)。 (除非您为不喜欢int main(void)的嵌入式系统编写代码,但这不是这种情况。)

  3. 在提示后添加fflush(stdout);。这可能没有必要,但如果没有它,可能不会出现提示。再次携带。

  4. return 0;添加到程序的末尾。在1990版本的C标准中,在没有return语句的情况下从main函数的末尾掉落会向环境返回未定义的状态;在C99中,有一个隐含的return 0;,但明确说明它并没有什么坏处。

  5. 对于原始程序和此修改程序的行为,sin(3.14) 约为0.001593。但即使您输入了更精确的pi值,sin(x) 仍然也不会给出0.0,因为浮点数不能完全代表pi的值。如果您更精确地显示结果,则会看到sin(3.14159265358979323846264)出现类似0.00000000000000012246063538223772的内容。

    最后,getch()调用的目的是让程序等待你在键终止之前按下一个键(并且可能是输出出现的窗口消失)。这通常是Windows风格的IDE环境所需要的,但是如果从命令提示符运行程序则不需要。同样,我并没有告诉你不要打电话给getch(),只是你不一定需要它。