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