Операторы цикла - C (СИ)
Формулировка задачи:
Найти сумму всех целых чисел из отрезка [A,B], которые кратны 5, не используя оператор if для проверки условия входа в циклы и в качестве одного из операторов тела цикла. Каждое решение должно быть реализовано в виде отдельной функции.
Код, который выдает неправильный результат:
Не понимаю, в каком виде выразить нахождение чисел, кратных 5 и запись их в переменную.
Листинг программы
- #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;
- }
Решение задачи: «Операторы цикла»
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;
- }
Объяснение кода листинга программы
- Включаем заголовочный файл
для использования функций вывода. - Функция norm5 принимает целочисленный аргумент a и возвращает результат в виде остатка от деления a на 5.
- Мы используем оператор остатка от деления (%) для получения остатка от деления аргумента a на 5.
- Если остаток от деления равен 0, то возвращаем исходное значение аргумента a. Иначе, вычитаем остаток от деления и прибавляем 5.
- Функция sum5 принимает два целочисленных аргумента a и b и возвращает сумму всех целых чисел от a до b, кратных 5.
- Инициализируем переменную s с начальным значением 0, которая будет использоваться в цикле для накопления суммы.
- Задаем начальное значение переменной a равным norm5(a), чтобы обеспечить первое число в диапазоне от a до b, кратное 5.
- Используем цикл for для перебора всех целых чисел от a до b, кратных 5.
- Внутри цикла добавляем текущее значение переменной a к переменной s.
- Возвращаем значение переменной s.
- В функции main вызываем функцию sum5 с аргументами 13 и 23.
- Выводим результат на консоль с помощью функции printf.
- Возвращаем 0, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д