我正在练习一本名为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: %i\n", 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函数中删除delete if语句可以正常工作,但是我希望程序为以下情况返回错误:例如我用(0,30)
答案 0 :(得分:6)
if (v || u <= 0)
不是说“如果v
小于或等于零,或者u
小于或等于零”,就像我认为您认为的那样。实际上是在说“如果v
不为零,或者u
小于或等于零”。
操作a || b
测试a
是否评估为非零,如果不是,则测试b
是否评估为非零。如果a
或b
都不为零,则表达式为true。
在C中,相等和关系运算符,例如==
,!=
,<
,>
,<=
和>=
产生结果{ {1}}如果关系为真,1
如果关系为假,则允许您在条件表达式中使用它们。
正确的条件是:
0
答案 1 :(得分:0)
if (v || u <= 0)
将v视为布尔变量,因此对于每个非零值都为true。因此,对于任何非零v,您的if是否为真。
使用if (v <= 0 || u <= 0)