Проблема создания промежуточного итога в C - PullRequest
1 голос
/ 29 сентября 2010

Я новичок в программировании, новичок и на этом сайте, так что привет ... Я пытаюсь получить промежуточную сумму для целых чисел от одного до 10, но я получаю бессмысленные ответы, и я просто не могу понять почему. Чтобы попытаться выяснить, что идет не так, я добавил

printf(" running total is %d\n", sum);

строка в цикле while, но только что получила еще ту же ерунду ... пожалуйста, смотрите http://codepad.org/UxEw6pFU для результатов ....

Я уверен, что у этого есть ослепительно очевидное решение ... Я просто слишком глуп, чтобы видеть это! кто-нибудь знает, что я делаю не так?

#include <stdio.h>


int main(void)      {

    int count,sum,square;           
    int upto=10;                 

    count = 0;                
    square = 0;                 

    while (++count < upto)   {   
        square = count * count;
        printf("square of %d is %d",count,square);     
        sum =square + sum;
        printf(" running total is %d\n", sum);
    }

    printf("overall total of squares of integers 1 thru 10 is %d\n", sum);           

    return 0;
}

Ответы [ 6 ]

9 голосов
/ 29 сентября 2010

Вам нужно инициализировать сумму до 0.

РЕДАКТИРОВАТЬ Как другие заявили после этого, причина, по которой вы видите мусор, заключается в том, что sum не инициализируется и содержитчто есть в памяти.Это может быть что угодно, и использование его с sum = square + sum добавит квадрат к неинициализированному значению.

1 голос
/ 29 сентября 2010

Сразу же, вы ни к чему не инициализируете 'sum'.

edit: очищенная версия, хотя в зависимости от компилятора может потребоваться включить режим C99, иначе старые компиляторы могут не поддерживатьначальные объявления в цикле for.

#include <stdio.h>

int main()
{

    const int COUNT_MAX = 10;
    int sum = 0;

    for ( int i = 1; i <= COUNT_MAX; ++i )
    {
        sum += i*i;
    }

    printf("The sum of squares from 1 to 10 is: %d\n", sum);

    return 0;
}
1 голос
/ 29 сентября 2010

Вы никогда не инициализируете значение sum.

При первом запуске кода

sum = square + sum;

Значение sum (справа) является произвольным числом, поскольку оно не было инициализировано.Таким образом, результирующее значение sum (слева) - это произвольное число плюс square.

Просто добавьте оператор sum = 0, как вы уже для count и square

0 голосов
/ 29 сентября 2010

Вы должны сделать:

sum=0;

и удалите

square=0;
0 голосов
/ 29 сентября 2010

сумма не инициализирована

0 голосов
/ 29 сентября 2010

Инициализируйте sum с помощью 0, в противном случае он содержит произвольные данные:

sum = 0;

См .: http://codepad.org/e8pziVHm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...