Jump to content
Fórum Script Brasil
  • 0

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


Question

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;
}
 

Edited by CapivaraDeTroia
Link to post
Share on other sites

1 answer to this question

Recommended Posts

  • 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;
}

 

Edited by Hazzu
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      148691
    • Total Posts
      644531
×
×
  • Create New...