Операторы цикла - C (СИ)

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

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

Найти сумму всех целых чисел из отрезка [A,B], которые кратны 5, не используя оператор if для проверки условия входа в циклы и в качестве одного из операторов тела цикла. Каждое решение должно быть реализовано в виде отдельной функции. Код, который выдает неправильный результат:
Листинг программы
  1. #include<stdio.h>
  2. #include<conio.h>
  3. #include<math.h>
  4. int sum1(int a, int b);
  5. int sum2(int a, int b);
  6. int sum3(int a, int b);
  7. int main() {
  8. int a, b;
  9. int re1, re2, re3; //результаты решения задачи
  10. int sum; //исходные данные
  11. //Ввод исходных данных
  12. printf("Vvedite nachalo otrezka a \n");
  13. scanf_s("%f", &a);
  14. printf("Vvedite konets otrezka b \n");
  15. scanf_s("%f", &b);
  16. re1 = sum1(a, b);
  17. re2 = sum2(a, b);
  18. re3 = sum3(a, b);
  19. //Вывод результата
  20. printf("Dlya tsikla WHILE resul'tat: %d\n", re1);
  21. printf("Dlya tsikla DO...WHILE resul'tat: %d\n", re2);
  22. printf("Dlya tsikla FOR resul'tat: %d\n", re3);
  23. getchar();
  24. getchar();
  25. return 0;
  26. }
  27. // вычисление значения суммы чисел циклом while
  28. int sum1(int a, int b)
  29. {
  30. int i = a, sum = 0;
  31. while (i <= b && i % 5 == 0)
  32. {
  33. sum = sum + i;
  34. i++;
  35. }
  36. return sum;
  37. }
  38. // вычисление значения суммы чисел циклом do..while
  39. int sum2(int a, int b)
  40. {
  41. int i = a, sum = 0;
  42. do
  43. {
  44. sum = sum + i;
  45. i++;
  46. } while (i <= b && i % 5 == 0);
  47. return sum;
  48. }
  49. // вычисление значения суммы чисел циклом for
  50. int sum3(int a, int b)
  51. {
  52. int i, sum = 0;
  53. for (i = a; i % 5 == 0; i++)
  54. {
  55. sum = sum + i;
  56. i++;
  57. }
  58. return sum;
  59. }
Не понимаю, в каком виде выразить нахождение чисел, кратных 5 и запись их в переменную.

Решение задачи: «Операторы цикла»

textual
Листинг программы
  1. #include <stdio.h>
  2.  
  3. int norm5(int a)
  4. {
  5.     int r = a % 5;
  6.     return r == 0 ? a : a - r + 5;
  7. }
  8.  
  9. int sum5(int a, int b)
  10. {
  11.     int s = 0;
  12.     for (a = norm5(a); a <= b; a += 5)
  13.     {
  14.         s += a;
  15.     }
  16.     return s;
  17. }
  18.  
  19. int main(void)
  20. {
  21.     printf("%d\n", sum5(13, 23));
  22.     return 0;
  23. }

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

  1. Включаем заголовочный файл для использования функций вывода.
  2. Функция norm5 принимает целочисленный аргумент a и возвращает результат в виде остатка от деления a на 5.
  3. Мы используем оператор остатка от деления (%) для получения остатка от деления аргумента a на 5.
  4. Если остаток от деления равен 0, то возвращаем исходное значение аргумента a. Иначе, вычитаем остаток от деления и прибавляем 5.
  5. Функция sum5 принимает два целочисленных аргумента a и b и возвращает сумму всех целых чисел от a до b, кратных 5.
  6. Инициализируем переменную s с начальным значением 0, которая будет использоваться в цикле для накопления суммы.
  7. Задаем начальное значение переменной a равным norm5(a), чтобы обеспечить первое число в диапазоне от a до b, кратное 5.
  8. Используем цикл for для перебора всех целых чисел от a до b, кратных 5.
  9. Внутри цикла добавляем текущее значение переменной a к переменной s.
  10. Возвращаем значение переменной s.
  11. В функции main вызываем функцию sum5 с аргументами 13 и 23.
  12. Выводим результат на консоль с помощью функции printf.
  13. Возвращаем 0, чтобы указать, что программа успешно завершилась.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

6   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы