我正在做一本名为 C 语言编程的书的练习,试图解决练习 7.9,所以我的代码运行良好,直到我为函数添加一个条件语句,只接受大于 0 的变量
我尝试过以多种方式更改它,但似乎没有任何效果
// Program to find the least common multiple
#include <stdio.h>
int main(void)
{
int lcm(int u, int v);
printf("the least common multiple of 15 and 30 is: %in", lcm(15, 30));
return 0;
}
// Least common multiple
int lcm(int u, int v)
{
int gcd(int u, int v);
int result;
if (v || u <= 0)
{
printf("Error the values of u and v must be greater than 0");
return 0;
}
result = (u * v) / gcd(u, v);
return result;
}
// Greatest common divisor function
int gcd(int u, int v)
{
int temp;
while (v != 0)
{
temp = u % v;
u = v;
v = temp;
}
return u;
}
我希望 lcm(15, 30) 的输出为 30,但我不断收到错误,如果 lcm 函数内的删除 de if 语句工作正常,但我希望程序返回错误,例如我使用 (0, 30)
if (v || u <= 0)
并不是说"如果v
小于或等于零,或者如果u
小于或等于零",就像我相信你认为的那样。它实际上是在说"如果v
不为零,或者u
小于或等于零"。
该操作a || b
测试a
的计算结果是否为非零,如果没有,则测试b
的计算结果是否为非零。如果 a
或 b
不为零,则表达式为 true。
在 C 语言中,相等和关系运算符(如 ==
、!=
、<
、>
、<=
和 >=
1
关系是否为真,如果关系为假,则0
产生结果,允许您在条件表达式中使用它们。
正确的条件是:
if (v <= 0 || u <= 0)
if (v || u <= 0)
将 v 视为布尔变量,因此对于每个非零值都是正确的。所以你的 if 对于任何非零 v 都是真的。使用if (v <= 0 || u <= 0)