Операторы цикла - 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, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д