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

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

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

Найти сумму всех целых чисел из отрезка [A,B], которые кратны 5, не используя оператор if для проверки условия входа в циклы и в качестве одного из операторов тела цикла. Каждое решение должно быть реализовано в виде отдельной функции. Код, который выдает неправильный результат:
#include<stdio.h>
#include<conio.h>
#include<math.h>
 
int sum1(int a, int b);
int sum2(int a, int b);
int sum3(int a, int b);
 
int main() {
 
    int a, b;
    int re1, re2, re3; //результаты решения задачи
    int sum; //исходные данные
 
    //Ввод исходных данных
    printf("Vvedite nachalo otrezka a \n");
    scanf_s("%f", &a);
    printf("Vvedite konets otrezka b \n");
    scanf_s("%f", &b);
 
    re1 = sum1(a, b);
    re2 = sum2(a, b);
    re3 = sum3(a, b);
 
    //Вывод результата
    printf("Dlya tsikla WHILE resul'tat: %d\n", re1);
    printf("Dlya tsikla DO...WHILE resul'tat: %d\n", re2);
    printf("Dlya tsikla FOR resul'tat: %d\n", re3);
 
    getchar();
    getchar();
    return 0;
}
 
// вычисление значения суммы чисел циклом while
int sum1(int a, int b)
{
    int i = a, sum = 0;
    while (i <= b && i % 5 == 0)
    {
        sum = sum + i;
        i++;
    }
    return sum;
}
 
// вычисление значения суммы чисел циклом do..while
int sum2(int a, int b)
{
    int i = a, sum = 0;
    do
    {
        sum = sum + i;
        i++;
    } while (i <= b && i % 5 == 0);
    return sum;
}
 
// вычисление значения суммы чисел циклом for
int sum3(int a, int b)
{
    int i, sum = 0;
    for (i = a; i % 5 == 0; i++)
    {
        sum = sum + i;
        i++;
    }
    return sum;
}
Не понимаю, в каком виде выразить нахождение чисел, кратных 5 и запись их в переменную.

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

textual
Листинг программы
#include <stdio.h>
 
int norm5(int a)
{
    int r = a % 5;
    return r == 0 ? a : a - r + 5;
}
 
int sum5(int a, int b)
{
    int s = 0;
    for (a = norm5(a); a <= b; a += 5)
    {
        s += a;
    }
    return s;
}
 
int main(void)
{
    printf("%d\n", sum5(13, 23));
    return 0;
}

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

  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
Похожие ответы