Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda com exercício em C (Iniciante em programação)


CapivaraDeTroia

Pergunta

Olá a todos, sou iniciante em programação e estou com dificuldade no seguinte exercicio de linguagem em c

Dados n números inteiros positivos, calcular a soma dos que são primos.

Quando somo os números 3 e 5 por exemplo, só aparece como resultado o número 3, ou vice versa.

Minha programação até agora: 

#include <stdio.h>

int main () {
    int n,soma,i,div;
        n = 1;
        div = 0;
        soma = 0;
        while (n != 0) {


                printf("Digite valor maior que 0 (Digite 0 para para finalizar ");
                scanf("%d", &n);


                for (i = 1; i <= n; i++) {

                        if (n%i == 0) {
                            div = div + 1;

                        }
                        if (div == 2) {
                            soma = soma + n;
                        }
                }
        }
        printf("Soma: %d",soma);


    return 0;
}
 

Editado por CapivaraDeTroia
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

1) Ao enviar um código em uma postagem utilize a ferramenta para inserir código no texto (4° ferramenta do cabeçalho).

2) A sua variável div deve ser zerada a cada novo número testado. Da forma que está ai, se a pessoa digita inicialmente 4, após o for, div ficará com valor 3 e quando a pessoa digitar o segundo número, div continuará a partir de 3.

3) O teste de primo a partir da quantidade de divisores (div == 2) deve ser efetuada fora do for, visto que para números compostos div também vai assumir valor 2 em algum momento, porém finalizará maior.

4) Utilize algumas quebras de linhas para melhorar a interface do seu código.
Código corrigido:

#include <stdio.h>

int main () {
	int n,soma,i,div;
	n = 1;
	soma = 0;
	while (n != 0) {
		div = 0;		//zerando variável div a cada novo teste
		printf("Digite valor maior que 0 (Digite 0 para finalizar):\n");
		scanf("%d", &n);
		for (i = 1; i <= n; i++) {
			if (n%i == 0) {
				div = div + 1;
			}
		}
		if (div == 2) {
			soma = soma + n;
		}
	}
	printf("Soma dos primos: %d\n", soma);
	return 0;
}

5) Extra. A estrutura de repetição do se encaixa melhor nesse laço, visto que de qualquer forma ele será executado ao menos uma vez. Você também pode colocar as instruções fora do laço para deixar a tela do programa mais limpa. 

#include <stdio.h>

int main () {
	int i, n, soma=0, div;
	printf("Ola, esse programa calcula a soma de numeros primos digitados.\n");
	printf("Digite um numero natural (0 para finalizar):\n");
	do {
		div = 0;		//zerando variável div a cada novo teste
		scanf("%d", &n);
		for (i = 1; i <= n; i++) {
			if (n%i == 0) {
				div += 1;	//O operador += resume div = div +1
			}
		}
		if (div == 2) {
			soma += n;
		}
	} while(n != 0);
	printf("Soma dos primos: %d\n", soma);
	return 0;
}

 

Editado por Hazzu
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...