OR,并且少于不按预期的C语言运行的运算符

时间:2019-01-25 22:16:12

标签: c logical-operators relational-operators

我正在练习一本名为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)

2 个答案:

答案 0 :(得分:6)

if (v || u <= 0)不是说“如果v小于或等于零,或者u小于或等于零”,就像我认为您认为的那样。实际上是在说“如果v不为零,或者u小于或等于零”。

操作a || b测试a是否评估为非零,如果不是,则测试b是否评估为非零。如果ab都不为零,则表达式为true。

在C中,相等和关系运算符,例如==!=<><=>=产生结果{ {1}}如果关系为真,1如果关系为假,则允许您在条件表达式中使用它们。

正确的条件是:

0

答案 1 :(得分:0)

if (v || u <= 0)将v视为布尔变量,因此对于每个非零值都为true。因此,对于任何非零v,您的if是否为真。 使用if (v <= 0 || u <= 0)