该程序可以很好地编译,但是在我运行它时会返回一条消息“Floating Point Exception”。我看过其他线程,问题似乎是被0除,但我查看了程序,整个程序中没有被零除。我什至使用了绝对值函数。
顺便说一句,该程序旨在减少分数。
输入示例:6
12
,表示分数6/12
预期输出:1/2
#include <stdio.h>
/*declaring variables*/
int num1, num2, num1b, num2b, gcd, x;
int higher, lower, higher_2, lower_2;
/*declaring functions*/
int find_gcd(int num1, int num2);
void reduce(int numerator, int denominator, int *reduced_numerator, int *reduced_denominator);
int main(void)
{
do
{
printf("enter 2 numbers: ");
scanf("%d %d", &num1, &num2);
reduce(higher, lower, &higher_2, &lower_2);
printf("enter 0 to end program and any number continue: \n");
scanf("%d", &x);
} while(x != 0);
return 0;
}
void reduce(int numerator, int denominator, int *reduced_numerator, int *reduced_denominator)
{
num1=numerator;
num2=denominator;
gcd =find_gcd(numerator, denominator);
*reduced_numerator = (numerator/abs(gcd));
*reduced_denominator = (denominator/abs(gcd));
printf("The GCD is %d/%d\n", *reduced_numerator, *reduced_denominator);
}
int find_gcd(int m, int n)
{
while (n != 0) {
int remainder = m % n;
m = n;
n = remainder;
}
return m;
}
最佳答案
您的主要问题是您没有将输入值num1
和num2
传递到reduce()
函数中。相反,您要传递全局变量higher
和lower
。您没有为其分配任何值,但是默认情况下全局变量始终初始化为0。因此,您会遇到异常,因为在reduce()
中将0除以0。您可以使用调试器进行验证。
如果我按如下方式更改main()
,则您的代码至少可以在6
和12
作为输入的情况下用于您的测试用例:
int main(void)
{
do
{
printf("enter 2 numbers: ");
scanf("%d %d", &num1, &num2);
reduce(num1, num2, &higher_2, &lower_2);
printf("enter 0 to end program and any number continue: \n");
scanf("%d", &x);
} while(x != 0);
return 0;
}
输出:
如注释中所示,您还应该摆脱全局变量和虚假变量。因此,您应该首先删除代码中的以下几行:
/*declaring variables*/
int num1, num2, num1b, num2b, gcd, x;
int higher, lower, higher_2, lower_2;
然后,让您的
main()
函数以以下方式启动:int main(void)
{
int num1, num2, higher_2, lower_2, x;
...
}
并且您的
reduce()
函数应如下所示:void reduce(int numerator, int denominator, int *reduced_numerator, int *reduced_denominator)
{
int gcd = find_gcd(numerator, denominator);
*reduced_numerator = (numerator/abs(gcd));
*reduced_denominator = (denominator/abs(gcd));
printf("The GCD is %d/%d\n", *reduced_numerator, *reduced_denominator);
}
到目前为止,您尚未在
higher_2
函数中使用变量lower_2
和main()
,但我想您打算这样做。如果没有,您也可以将它们与reduce()
函数的参数3和4一起删除。您提供的代码还有另一个问题(感谢@ user3629249指出):您缺少
abs()
函数的包含项。因此,您需要在代码的开头添加#include <stdlib.h>
行(include <math.h>
也是如此,在Windows上也是include <Windows.h>
)。