2014-10-18 4 views
-4

Все, так что я пытаюсь решить эту проблемуC Программирование: неправильный вывод?

Напишите программу на C, которая вычисляет расстояние, пройденное снарядом, перед ударом по земле (т. Е. Его дальность), время, необходимое для удара снарядом , и максимальную высоту снаряда в полете, учитывая угол, который он выстрелил в воздух, и его начальную скорость (скорость) при ее запуске. Будем считать, что земля плоская и что единственной силой является гравитация (нет сопротивления воздуха и т. Д.).

Maximum height: h=pow(v*sin(θ),2)/2*g; 
Time in air: t = (2*v*sin(θ))/g; 
Range: r = (2*pow(v,2)*sin(θ)*cos(θ))/g; 



θ = angle that the projectile is launched (in whole degrees) 
v = initial velocity of the projectile (in meters/second) 
g = acceleration due to gravity = 9.8 meters/second2 

Теперь я не знаю, почему я получаю отрицательные результаты. Я полагаю, что я использовал неправильный синтаксис объявления, или, может быть, я даю неправильный ввод для угла и начальной скорости, или это потому, что дивизии округлены .. может кто-нибудь помочь мне выяснить, что является правильным способом решить эту проблему? (Я новичок в программирования C, и я хочу узнать)

+0

Я хотел бы работать только на это назначение, если я мог бы заменить «снаряд» с " учителем ", чтобы игровое поле было более ровным для целей. –

+6

Триг функции в 'math.h' принимают аргументы в радианах, а не в градусах. – Mat

+1

Получаете ли вы правильный ответ, когда делаете расчет вручную? Сравните каждую часть формулы в вашей программе с соответствующим вычислением руки. Ограничьте его до места, которое отличается. Ограничьте его дальше. В конце концов вы будете сузить его до одной функции. Прочтите документацию для этой функции. –

ответ

0

правильные формулы, как указано ниже

Maximum height: h=pow(v*sin(θ*M_PI/180),2)/(2*g); 
Time in air: t = (2*v*sin(θ*M_PI/180))/g; 
Range: r = (2*pow(v,2)*sin(θ*M_PI/180)*cos(θ*M_PI/180))/g; 

Вы можете даже уменьшить формулу диапазона до pow(v,2)*sin(2*θ*M_PI/180)/g

в sin(2θ) = 2*sin(θ)*cos(θ)

Из комментариев @Mat, @BLUEPIXY и @Sanhadrin

+2

Большинство реализаций определяют M_PI, вы знаете. –

0

Спасибо за ваш ответ, я не знал, что грех & cos использование радиан. Я должен был переписать всю вещь, и это, как она выглядит сейчас:

#include<stdio.h> 
#include<math.h> 

int main(void){ 
    int theta; 
    float h, g=9.8, t, r, v; 

    printf("Type a value for the angle that the projectile is launched (in whole degrees): "); 
    scanf("%d",&theta); 
    printf("Type a value for the initial velocity of the projectile (in m/s): "); 
    scanf("%f",&v); 


    theta = theta*M_PI/180; 
    h = pow(v*sin(theta),2)/(2*g); 
    t = (2*v*sin(theta))/g; 
    r = (2*pow(v,2)*sin(theta)*cos(theta))/g; 

    printf("The maximum height is %f m, the time it takes for the projectile to hit the ground is %f s and it's range is %f m\n", h, t, r); 

    return 0; 
} 

И когда я запускаю его:

Type a value for the angle that the projectile is launched (in whole degrees): 110 
Type a value for the initial velocity of the projectile (in m/s): 6.2 
The maximum height is 1.388691 m, the time it takes for the projectile to hit the ground is 1.064718 s and it's range is 3.566673 m 
Смежные вопросы