0

我正在做一本名为“用 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 de if 语句工作正常,但我希望程序在例如我使用时返回错误(0, 30)

4

2 回答 2

6

if (v || u <= 0)并不是说“如果v小于或等于零或如果u小于或等于零”,就像我相信你认为的那样。它实际上是在说“如果v不为零,则 ORu小于或等于零”。

该操作a || b 测试是否a评估为非零,如果不是,则测试是否b评估为非零。如果其中一个ab非零,则表达式为真。

在 C 语言中,等式和关系运算符(如==, !=, <, >, <=and )在关系为真时>=产生结果1,如果关系0为假,则允许您在条件表达式中使用它们。

正确的条件是:

if (v <= 0 || u <= 0)
于 2019-01-25T22:18:39.197 回答
0

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

于 2019-01-26T01:42:48.720 回答