Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Por que a soma esta dando errado?

#include <stdio.h>

int soma(int* nums, int size) {

    int total = 0;

    for(int i = 0; i < size; i++) {

        total = nums[i] + nums[i++];

    }

    return total;

}


int main() {

    int nums[] = {4, 8, 15, 16, 23, 42};

    int size = sizeof(nums)/sizeof(int);

    soma(nums, size);

    int total = soma;

    printf("Soma é %d \n", total);

}
1 resposta
solução!

Olá Tibério, tudo bem?

Fiz algumas alterações no seu código e ficou assim:

#include <stdio.h>

int soma(int* nums, int size) {

    int total = 0;

    for(int i = 0; i < size; i++) {

        total = total + nums[i];

    }

    return total;

}


int main() {

    int nums[] = {4, 8, 15, 16, 23, 42};

    int size = sizeof(nums)/sizeof(int);

    int resposta = soma(nums, size);

    printf("Soma é %d \n", resposta);

}

Primeiramente eu fiz uma pequena correção da lógica do método soma. Acredito que o objetivo é armazenar o somatório na variável total, fazendo com que total sempre tenha o valor atual e adicione o próximo número.

Então, baseando-se no código, a sequência de passos que o código executará ficará assim:

        total = 0; // total começa em 0
        // começa o loop e tem que somar 4, 8, 15, 16, 23, 42
        total = total + 4; // total fica 4 e falta somar 8, 15, 16, 23, 42
        total = total + 8; // total fica 12 e falta somar 15, 16, 23, 42
        total = total + 15; // total fica 27 e falta somar 16, 23, 42
        total = total + 16; // total fica 43 e falta somar 23, 42
        total = total + 23; // total fica 66 e falta somar 42
        total = total + 42; // total fica 108
        // acaba o loop
        return total; //retorna 108

Também fiz uma alteração no main, atribuindo o retorno do método soma na variável resposta. Eu preferi renomear a variável para evitar confusões.

Espero que eu tenha ajudado!