#c
Вопрос:
У меня есть проблемы с моей функцией, так как после первого выражения значения, вставленные в мои параметры (float x, float y), внезапно становятся равными 0.
Я вызвал эту функцию с помощью main (), вывод для c = x/y работает так, как ожидалось. Но для d = x — (y * c) это дает мне результат 0, я проверяю, в чем проблема, и, похоже, это связано с x и y, так как они оба по какой-то причине имеют значения 0
Я не закончил свою функцию для наибольшего общего делителя, так как я все еще застрял в этой проблеме
»’
int gcd (float x, float y) { int c = x / y; printf ("This's your quotient: %dn", c); int d = x - ( y * c ); // d = 0 since y, x = 0 printf ("This's your remainder: %dn", d); printf ("c %dn",c); // works normally printf ("y %fn",y); // y = 0 printf ("x: %fn",x); // x = 0 }
Комментарии:
1. Не могли бы вы поделиться тем, что вы называете этой функцией, выводом, который она выдает, и почему вы считаете, что этот вывод неверен?
2. Я вызвал эту функцию с помощью main (), вывод для c = x/y работает так, как ожидалось. Но для d = x — (y * c) это дает мне результат 0, я проверяю, в чем проблема, и, похоже, это связано с x и y, так как они оба по какой-то причине имеют значения 0
3. Обновите вопрос с помощью кода вместо комментария, включающего тестовые данные. Это не самый большой алгоритм с общим знаменателем (gcd). Ваш gcd(17, 2) дает мне 8, 1, 2.0 и 17.0 (не уверен, почему вы печатаете x и y в обратном порядке, хотя это не имеет значения).
4. Единственная проблема, которую я вижу с кодом, заключается в том, что вы передаете его в формате float, но выполняете целочисленную математику.
gcd(16.1,2)
возвращает 2 и 0, что неверно (d должен быть 0,1). Если y равен 0, у вас есть деление на ноль, а если y мал, то c может переполниться.5. Спасибо за совет, Аллан, я все еще выясняю, как использовать переполнение стека. И то, что ваш результат, кажется, работает нормально. Но по какой-то причине, когда я вставляю значения, x y становится 0. Например, мои результаты для (25,7) равны 4 , 0 , 0,00, 0,00
Ответ №1:
Вот пример кода, который устраняет проблемы, которые я заметил, и изменяет подпись, чтобы отделить вычисления от вывода:
#include lt;stdio.hgt; void quotient_reminder(unsigned x, unsigned y, unsigned *q, unsigned *r) { if(y == 0) return; *q = x / y; *r = x - (y * *q); // d = 0 since y, x = 0 } int main() { unsigned q, r; quotient_reminder(25.0, 7.1, amp;q, amp;r); printf ("This's your quotient: %un", q); printf ("This's your remainder: %un", r); }
и это вернется:
This's your quotient: 3 This's your remainder: 4