我有几个文件:
evaluate_sin.c:
int evaluate_sin(int deg) {
double j = deg_to_rad(deg);
j = sin(j);
printf("sin(%d) = %d\n", deg, j);
return j;
}
deg_to_rad.c
double deg_to_rad(int deg) {
double rad = (3.14 * deg) / 180;
return rad;
}
当我在我的evaluate_sin函数中将“deg”变量(这是一个整数)传递给deg_to_rad时,j最终会变成某个随机数,如-90503293。这是为什么?
答案 0 :(得分:2)
请注意,j是double,而不是整数
因此printf("sin(%d) = %d\n", deg, j);
应放在printf("sin(%d) = %f\n", deg, j);
答案 1 :(得分:1)
您尚未声明deg_to_rad()
:
extern double deg_to_rad(int deg);
使用之前。您的代码假定它返回int
并将其转换为double
。
您应该有一个标题degtorad.h
。
degtorad.h
#ifndef DEGTORAD_H_INCLUDED
#define DEGTORAD_H_INCLUDED
extern double deg_to_rad(int deg);
#endif /* DEGTORAD_H_INCLUDED */
(在此示例中,标题保护不是100%必需的,但对于需要标头保护的更复杂情况,这是一个很好的基础。)
然后您的程序文件包含此标头。在某个地方,您还需要声明evaluate_sin()
;它可以进入相同的标题。
#include <math.h>
#include <stdio.h>
#include "degtorad.h"
double evaluate_sin(int deg)
{
double j = deg_to_rad(deg);
j = sin(j);
printf("sin(%d) = %.6f\n", deg, j);
return j;
}
还请注意返回类型的更改(double
而不是int
);除非你设法传入π/ 2的精确奇数倍(当它返回-1或+1时),它将返回0。以及double
值(%.6f
而不是%d
的格式更改,这将打印整数。)
如果您正在使用GCC,则需要打开编译警告;至少-Wall
。
#include "deg_to_rad.h"
double deg_to_rad(int deg)
{
double rad = (3.14 * deg) / 180;
return rad;
}
答案 2 :(得分:0)
尽管printf("%f", doubleValue)
可以使用双打,但我仍然建议尽量保持简单,并使用scanf()
需要%lf
的方式进行双打。这为程序提供了一致性。
所以是的,我建议:
printf("sin(%d) = %lf\n", deg, j);