Как я могу сделать функцию и получить совокупную сумму предыдущих чисел? - PullRequest
0 голосов
/ 21 мая 2019

Что я хочу сделать, это получить суммарную сумму предыдущих целых чисел, начиная с 1, например: Если мой ввод 4, то функция должна работать таким образом; 1 + (1 + 2) + (1 + 2 + 3) + (1 + 2 + 3 + 4) = 20. И вывод должен быть 20. Кроме того, я должен сделать это с помощью функции, а не в main (); функция при использовании int n в качестве единственной переменной.

Я пытался создать функцию, которая добавляет от 1 к целому числу N, и использовать 'for', чтобы заставить N начинаться с 1, чтобы он мог полностью добавлять целые числа, пока не достигнет N.

#include <stdio.h>
int sum(int n);
int main() {

    int n, input, sum;
    sum = 0;
    scanf("%d", &n);
    for (n = 0; n <= input; n++) {
        sum += n;
    }
    printf("%d", sum);
    return 0;
}

int sum(int n) {
    int i, n, sum = 0;
    scanf("%d", &n);
    for (i = 1; i <= n; i += 1){
        sum += i;
    }   
return n;
}

То, что я ожидал, когда входное значение равно 4, равно 20, но фактическое значение равно 10.

Ответы [ 3 ]

1 голос
/ 21 мая 2019

Я бы написал так, замечания там, где были сделаны изменения

#include <stdio.h>
int sum(int n);
int main() {

int n, input, sum;
// sum = 0;  // no need for this
scanf("%d", &n);
/* the next for has no use
for (n = 0; n <= input; n++) {
    sum += n;
} */
// I would be adding some input sanitazing if possible here
printf("%d", sum(n));
   return 0;
}

int sum(int n) {
  int i, /*n, */ rsum = 0; // n is already a parameter, rsum for running sum

  // scanf("%d", &n);   // nope nope, scanf and printf should be avoided in functions
  for (i = 1; i <= n; i++){    // changed i +=1 with i++ , easier to read
     for (j=1;j<=i;j++) // need this other loop inside  
          rsum += j;
   }   
 return rsum;
}
0 голосов
/ 21 мая 2019

Вот это с одной петлей; очень быстро.

#include <stdio.h>

int cumulative_sum(int m)
{
    int sum = 0;
    for(int n=1; n<=m; ++n) sum += n*(n+1);
    return sum/2;
}

int main(void)
{
    int n;
    printf("Input value N: ");
    scanf("%d", &n);

    printf("Answer is %d\n", cumulative_sum(n));
    return 0;
}
0 голосов
/ 21 мая 2019

Основная проблема заключается в функции, вы выполняете только 1 цикл (у вас есть также некоторые логические вещи, которые компилятор должен вам сказать, например, одинаковые имена переменных и функций ... например.),

, поэтому, если вы поставите 4 as the input, цикл будет делать только 1+2+3+4, но если ваш случай отличается, вы хотите сделать suma для всех итераций, таких как 1 + (1+2) + (1+2+3) + (1+2+3+4)

, которые вы делаете только последнимишаг в основном (1 + 2 + 3 + 4), 4 итерации (4x сума), но на самом деле вам нужно 10 итераций (из-за суммы всех конкретных сумм элементов)

Как предложено, попробуйте отладитьВаш код - Что такое отладчик и как он может помочь мне диагностировать проблемы? - это действительно поможет вам понять ваш код

Как уже упоминалось, проблема в

int sum(int n) {
    int i, n, sum = 0;
    scanf("%d", &n);
    for (i = 1; i <= n; i += 1){
        sum += i;
    }   
return n;
}

Вы должны сделать две петли, например.как показано ниже:

 int sum,n = 0;

    //scanf("%d", &n);
    n = 4; //input simulation 

    //just for demonstration
    int iterations = 0;

    //counter for total loops (how many "brackets" needs to be count)
    for(int loopsCounter = 1; loopsCounter <= n;loopsCounter++){
        //counter for child elements in brackets (like 1+2 ,1+2+3, ..)
        for (int sumaLoopCounter = 1; sumaLoopCounter <= loopsCounter; sumaLoopCounter++){
            //simply make sum with the given number 
            /* first step 0 +1 
             second 1+2 added to previous suma = 1+3
             third 1+2+3,.. added to previous = 4+6
             ...
            */
            sum += sumaLoopCounter;

            //just testing for demonstration
            iterations++; //iterations = iterations + 1
        }       
    }


    printf("%i \n",iterations);
    printf("%i",sum);

Затем вы получили результат, как и ожидалось - сумма всех «элементов скобок» и 10 итераций, что соответствует количеству необходимых дополнений

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