ИЛИ и меньше, чем операторы, не работающие, как предполагалось, язык C - PullRequest
0 голосов
/ 26 января 2019

Я выполняю упражнение из книги под названием «Программирование на языке 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, но я продолжаю получать сообщение об ошибке, если оператор delete de if внутри функции lcm работает нормально, но я хочу, чтобы программа возвращала ошибку, если для пример я использую (0, 30)

Ответы [ 2 ]

0 голосов
/ 26 января 2019

if (v || u <= 0) рассматривает v как логическую переменную, поэтому оно верно для каждого ненулевого значения.Так что ваше if верно для любого ненулевого v. Используйте if (v <= 0 || u <= 0)

0 голосов
/ 26 января 2019

if (v || u <= 0) не говорит "если v меньше или равно нулю ИЛИ если u меньше или равно нулю", как я полагаю, вы думаете, что это так. На самом деле говорится: «если v не равно нулю, ИЛИ u меньше или равно нулю».

Операция a || b проверяет, оценивается ли a как ненулевое, а если нет, то проверяется, оценивается ли b как ненулевое. Если либо a, либо b отличны от нуля, выражение является истинным.

В C операторы равенства и реляции, такие как ==, !=, <, >, <= и >=, дают результат 1, если отношение истинно, и 0 если оно ложно, позволяет использовать их в условных выражениях.

Правильное условие:

if (v <= 0 || u <= 0)
...