Найдите ошибку в коде - C (СИ)

Узнай цену своей работы

Формулировка задачи:

#include<stdio.h>
#include<conio.h>
#include<math.h>
 
main() {
    int a, b, c, d,e,f,s;
    setlocale(0,"");
    printf("Введите натуральное число");
    scanf("%d", &a); b = a; f = c;
    for (c = 1; c <= a; c++)
    {
        b %= 10;
        a /= 10;
        d = a + b;
          f%= 10;
          c/= 10;
          e = c + f;
          if (e=d) {
              printf("%d",e);
          }
          else {
              printf("НЕТ");
          }
    }
}
Получается бесконечный цыкл,не пойму почему.

Решение задачи: «Найдите ошибку в коде»

textual
Листинг программы
#include<stdio.h>
#include<conio.h>
#include<math.h>
 
main() {
    int a, b, c, d,e,f,s;
    setlocale(0,"");
    printf("Введите натуральное число  ");
    scanf("%d", &a); b = a; 
    b %= 10;
    a /= 10;
    d = a + b;
     for (c = 1; c <= a; c++)
    { 
          c%= 10;
          c/= 10;
          c+=c;
          if (c=d) {
              printf("%d",c);
          }
          else {
              printf("НЕТ");
          }
    }
}

Объяснение кода листинга программы

  1. Включаемые заголовочные файлы:
    • stdio.h: содержит функции для ввода и вывода данных.
    • conio.h: содержит функции для работы с консолью.
    • math.h: содержит математические функции.
  2. Определение переменных:
    • a, b, c, d, e, f, s: целочисленные переменные для выполнения арифметических операций.
  3. Установка локали:
    • setlocale(0, ``);: функция setlocale() используется для установки локали, которая определяет формат ввода и вывода чисел, в данном случае локаль не указана, поэтому по умолчанию используется локаль системы.
  4. Ввод числа:
    • printf(Введите натуральное число);
    • scanf(%d, &a);: пользователь вводит натуральное число, которое сохраняется в переменной a.
  5. Арифметические операции:
    • b = a;: переменная b инициализируется значением переменной a.
    • b %= 10;: остаток от деления b на 10 сохраняется в переменной b.
    • a /= 10;: переменная a делится на 10 и результат присваивается ей же.
    • d = a + b;: переменная d равна сумме a и b.
    • for (c = 1; c <= a; c++)
      • c %= 10;: цикл for используется для выполнения операции остатка от деления для каждого числа от 1 до a, результат сохраняется в переменной c.
      • c /= 10;: каждое число от 1 до a делится на 10 и результат присваивается переменной c.
      • c += c;: переменная c увеличивается на значение самой себя.
      • if (c = d) {...} else {...}: проверяется, равно ли значение переменной c значению переменной d, если да, то выполняется блок кода внутри if, иначе выполняется блок кода внутри else.
  6. Вывод числа:
    • printf(%d, c);: в консоль выводится значение переменной c.
  7. Ошибка в коде:
    • Отсутствует оператор break в цикле for, что может привести к бесконечному циклу при определенных условиях.
    • Неопределенное поведение при выполнении операции if (c = d) вместо if (c == d), так как = используется для присваивания значений, а не для сравнения.

Оцени полезность:

12   голосов , оценка 3.833 из 5