好的,所以我用四种不同的函数编写了这段代码,其主要目的是在角度0-90的表格中显示速度的角度,时间和距离。速度是从用户输出的。 但是当我调用函数的void函数时,我得到一个错误“未定义引用`create_table'”这是我的代码。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define G 9.8 /* gravitation acceleration 9.8 m/s^2 */
#define PI 3.141592654
void create_table(double v);
double Projectile_travel_time(double a, double v);
double Projectile_travel_distance(double a, double v);
double degree_to_radian(double d);
int main(void)
{
int n;
double velocity;
printf ("please enter the velocity at which the projectile is launched (m/sec): ");
n = scanf("%lf" ,&velocity);
if(n != 1)
{
printf("Invlid input. Bye...");
exit(1);
}
while (velocity < 0 )
{
printf ("please enter a positive number for velocity: ");
n = scanf("%lf", &velocity);
if(n != 1)
{
printf("Invlid input. Bye...");
exit(1);
}
}
create_table(velocity);
return 0;
}
void create_table(double v)
{
printf("Angle t d\n");
printf("(deg) (sec) (m)\n");
double a,i;
for( a=0; a<=90; a+=5)
{
for(i=0; i<=2; i++)
{
double t = Projectile_travel_time(a, v);
double s = Projectile_travel_distance(a, v);
printf("%d %d %d\n", a, t, s);
}
}
}
double Projectile_travel_time(double a, double v)
{
double t = ((2*v*sin(degree_to_radian(a)))/(G));
return t;
}
double Projectile_travel_distance(double a, double v)
{
double d = ((v*v)/G)*sin(2*degree_to_radian(a));
return d;
}
double degree_to_radian(double d)
{
double r = d*atan(1) * 4 / 180;
return r;
}
任何帮助将不胜感激。 感谢
编辑我已编辑了代码但现在遇到了另一个问题,我的输出完全关闭了。有关我的功能如何不正确的建议吗?
答案 0 :(得分:1)
您必须保留在主要功能之外创建的功能
答案 1 :(得分:1)
您需要将功能定义移出main
。 C不支持nested functions。
编辑:也就是说,GCC在{{3}},但它不可移植。
答案 2 :(得分:1)
尝试在main()
之外实现您的功能答案 3 :(得分:1)
我已经编辑了代码但现在遇到了另一个问题,我的输出完全关闭了。
更改
printf("%d %d %d\n", a, t, s);
到
printf("%lf %lf %lf\n", a, t, s);
您可以使用%7.3f
来对齐所有值。
答案 4 :(得分:0)
将所有函数定义
create_table
,Projectile_travel_time
,Projectile_travel_distance
和degree_to_radian
写在main之外。
链接器无法在您呼叫create_table
的位置找到create_table
的定义。