Выдает неверный результат
Программа должна вывести сумму квадратов целых чисел Границы заданы от 5 в квадрате до 9 в квадрате При вводе 5 и 9 программа выдает результат 4369973 вместо 255 Из за чего это происходит ?
'''
#include <stdio.h>
int main()
{
int min, max, sum;
printf("Input min and max interger limit: ");
scanf("%d %d", &min, &max);
while (min != max)
{
for (int i = min*min; i <= max*max; ++i)
sum = sum + i * i;
printf("The sum of squares from %d to %d = %d \n", min*min,max*max,sum);
printf("Input min and max interger limit again: ");
scanf("%d %d", &min, &max);
}
printf("Well Done\n");
}
'''
Ответы (2 шт):
потому что вы делаете неправильный цикл:
for (int i = min*min; i <= max*max; ++i)
sum = sum + i * i;
255 будет если вы сложите суммы квадратов от 5 до 9, но никак не от 25 до 81:
255 = 25 + 36 + 49 + 64 + 81
т.е. ваш код должен быть такой:
for (int i = min; i <= max; ++i)
sum = sum + i * i;
конечно можно сделать указанный вами цикл, но это будет уже изврат
for (int i = min*min; i <= max*max; i = (int(sqrt(i)) + 1) * (int(sqrt(i)) + 1))
sum = sum + i;
P.S.
кроме того у вас также есть и другие ошибки:
- не инициализирована переменная
sum(int sum = 0)
Я тут исправил несколько ошибок; сравните со своим кодом и разберитесь, зачем и почему эти исправления... Намекаю: чему равна сумма при входе в главный цикл? а при его повторении?
int main()
{
int min, max, sum;
printf("Input min and max interger limit: ");
scanf("%d %d", &min, &max);
while (min < max)
{
sum = 0;
for (int i = min; i <= max; ++i)
sum = sum + i * i;
printf("The sum of squares from %d to %d = %d \n", min,max,sum);
printf("Input min and max interger limit again: ");
scanf("%d %d", &min, &max);
}
printf("Well Done\n");
}
Исправил также условие цикла на
while (min < max)
потому что если вы введете, скажем, 9 и 5 (а не 5 и 9) — то удивитесь результату :)
А вообще, можно просто написать, без цикла с суммированием:
printf("The sum of squares from %d to %d = %d \n",
min,max,(max*(1 + max)*(1 + 2*max) - min*(1 + (2*min - 3)*min))/6);