Я выяснил остальную часть программы, и у меня нет ошибок / предупреждений, но теперь моя проблема в том, что я получаю неправильный ответ из ввода, но я не знаю почему.

Соответствующий код:

int x;
float h;
printf("Enter a number:");
scanf("%d", &x);
h= (3x+2)/(2x-4);
printf("The answer is: %.2f \n", h);

Это дает мне округленное в меньшую сторону число. Например, если я введу 5, он вернет 2,00, тогда как должен вернуть 2,83.

Пожалуйста помоги!

Изменить: извините, я немного устал. Я написал свое уравнение для h как:

h= (3*x+2)/(2*x-4);
c
-1
Em Ren 20 Май 2014 в 13:43

2 ответа

Лучший ответ

Это недействительный код C. Вы не можете использовать неявное умножение (3x должно быть 3 * x и так далее).

Если вы это исправите, вам нужно, чтобы арифметические операции выполнялись в float, чтобы добиться большей точности. Самый простой способ - создать один из литералов float:

const float h = (3.f * x + 2) / (2 * x - 4);

Должен это сделать.

3
unwind 20 Май 2014 в 09:44

Это из-за неявного преобразования. Переменные h имеют тип с плавающей запятой. Но оператор / видит два целых числа, которые он должен разделить, и, следовательно, возвращает целое число в результате, которое неявно преобразуется в число с плавающей запятой. Если вы хотите деления с плавающей запятой, попробуйте сделать два операнда в / floats

float x;
float h;
printf("Enter a number:");
scanf("%f", &x);
h= (3*x+2)/(2*x-4);
printf("The answer is: %.2f \n", h);

ИЛИ

int x;
float h;
printf("Enter a number:");
scanf("%d", &x);
h= ((float)3*x+2)/((float)2*x-4);
printf("The answer is: %.2f \n", h);
0
Parikshit Sarnaik 20 Май 2014 в 12:59