Member 13702877 Ответов: 3

Почему этот код неверен?


этот код должен найти, являются ли два числа co_prime или нет.
почему этот код неверен?

Что я уже пробовал:

#include<stdio.h>
void main(){

int a,b,min,n,k;

printf("enter two nums");
scanf(" %d \t %d",&a,&b);

if(a<b){min=a;}
else{min=b;}

for(n=2;n<=min;n++){
  if(a%n==0&&b%n==0)
  {
     k=1;
     break;
  }
  else{
  k=0;
  break;
}
                    }
if(k=0){printf("these are coprimes");}else if(k=1){printf("these are not coprimes");}


}

KarstenK

Вы должны улучшить свой стиль кода: лучше намерение и больше скобок. Это также помогает избежать ошибок.

3 Ответов

Рейтинг:
2

Richard MacCutchan

if(k=0){printf("these are coprimes");}

Что означает, что множества K равен 0 и тогда если значение этого выражения равно 0 напечатать "эти coprimes". Таким образом, какое бы значение k ни содержалось до этого утверждения, оно всегда будет содержать ноль после него. Так и должно быть:
if (k == 0) // compare k with 0
{
    printf("these are coprimes");
}
else // no need for this if clause: if(k=1)
{
    printf("these are not coprimes");
}

Или несколько аккуратнее:
printf("these are ");
if (k > 0)
{
    printf("not ");
}
printf("coprimes\n");


Рейтинг:
1

Patrice T

Здесь нет решения, только советы:
- Отступы-это отличная помощь для раскрытия структуры вашего кода при правильном использовании. Любое неправильное использование только делает ваш код более запутанным, а непоследовательный стиль кодирования-это неправильное использование.
В вашем маленьком фрагменте кода отступы не согласованы, и вы используете 3 различных стиля кодирования.
Ваш код должен выглядеть так:

#include<stdio.h>
void main(){

  int a,b,min,n,k;

  printf("enter two nums");
  scanf(" %d \t %d",&a,&b);

  if(a<b){
    min=a;
  }
  else{
    min=b;
  }

  for(n=2;n<=min;n++){
    if(a%n==0&&b%n==0)
    {
      k=1;
      break;
    }
    else{
      k=0;
      break;
    }
  }
  if(k=0){
    printf("these are coprimes");
  }
  else if(k=1){
    printf("these are not coprimes");
  }
}


- Когда вы не понимаете, почему ваш код терпит неудачу, самое время использовать отладчик.

- Как программист, ваша задача также состоит в том, чтобы найти эффективные алгоритмы для решения проблем, с которыми вы сталкиваетесь.
2 числа являются со-простыми числами, когда их GCD равно 1, и существует очень хорошо известный алгоритм для GCD.
-----
Научитесь правильно делать отступы в вашем коде, это покажет его структуру, и это поможет чтению и пониманию. Это также помогает выявлять структурные ошибки.
Профессиональные редакторы программистов имеют эту функцию и другие, такие как сопоставление скобок и подсветка синтаксиса.
Блокнот++ Главная Страница[^]
личные[^]
-----
Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что он делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.
-----
Наибольший общий делитель - Википедия[^]


Рейтинг:
0

CPallini

Потому что это тааакий плохой отступ.

Или, возможно, потому, что

Цитата:
else{k=0;
перерыв;}
это явно неправильно.

Попробуй
#include <stdio.h>


int main()
{

  int a, b, min, n;

  printf("please, enter two numbers (> 1) ");
  scanf(" %d  %d",&a,&b);


  min = a < b ? a : b;

  if ( min < 2 )
  {
    printf("invalid input\n");
    return -1;
  }

  for( n=2; n<=min; n++)
  {
    if( a % n == 0 && b % n == 0)
      break;
  }

  printf("the numbers are");
  if (n <= min)
    printf(" not");
  printf(" coprimes\n");

  return 0;
}