Выдает неверный результат

Программа должна вывести сумму квадратов целых чисел Границы заданы от 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 шт):

Автор решения: Zhihar

потому что вы делаете неправильный цикл:

    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.

кроме того у вас также есть и другие ошибки:

  1. не инициализирована переменная sum (int sum = 0)
→ Ссылка
Автор решения: Harry

Я тут исправил несколько ошибок; сравните со своим кодом и разберитесь, зачем и почему эти исправления... Намекаю: чему равна сумма при входе в главный цикл? а при его повторении?

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);
→ Ссылка