Ir ao conteúdo
  • Cadastre-se
Gustavo Malheiro

C Por que o percent está ficando com o valor 0?

Recommended Posts

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

int main(void){

	setlocale(LC_CTYPE,"Portuguese_Brazil");
    int valor[10];
    int i, total, media = 0;
    float percent;
    int j = 0;

    for(i=0; i<10; i++) {
        printf("Digite o %dª número: ", i+1);
        scanf("%d",&valor[i]);

        total = valor[i] + total;
        media = total/10;
    }
    printf("\n Média = %d\n", media);

    for (i=0; i<10; i++) {
        if (valor[i] > media) {
            j++;
        }
    }

    percent = (j/100)*10;
    printf("\n%.2f\n", percent);


    system("pause");
	return 0;
}

Por algum motivo que eu não consigo identificar, minha variável percent está aparecendo como 0 na execução do programa. Sendo que a conta não deveria dar 0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tanto no percent quanto na media estão sendo calculadas divisões inteiras, ou seja 60/100 = 0 com 60 de resto, isso acontece pois está dividindo número inteiro por número inteiro, então a linguagem entende que quer fazer a divisão inteira.

 

Então use números de ponto nos números literais para indicar que quer fazer operações com pontos flutuantes.

 

percent = (j/100.0)*10.0;

 

  • Curtir 2
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
15 minutos atrás, Gustavo Malheiro disse:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

int main(void){

	setlocale(LC_CTYPE,"Portuguese_Brazil");
    int valor[10];
    int i, total, media = 0;
    float percent;
    int j = 0;

    for(i=0; i<10; i++) {
        printf("Digite o %dª número: ", i+1);
        scanf("%d",&valor[i]);

        total = valor[i] + total;
        media = total/10;
    }
    printf("\n Média = %d\n", media);

    for (i=0; i<10; i++) {
        if (valor[i] > media) {
            j++;
        }
    }

    percent = (j/100)*10;
    printf("\n%.2f\n", percent);


    system("pause");
	return 0;
}

Por algum motivo que eu não consigo identificar, minha variável percent está aparecendo como 0 na execução do programa. Sendo que a conta não deveria dar 0

Pelo que vi, no seu programa você declarou inicialmente a variável 'j' como inteiro e depois pediu para mostrá-la como sendo float... Dividindo um valor inteiro menor do que 100  por 100, o compilador irá interpretá-lo como 0.

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Gustavo Malheiro

Sugiro mudar os tipos das variáveis total e media para float para q o cálculo da média seja feito de maneira correta, inicializando ambas com o valor 0

 

Editado: Essa solução foi apresentada sem resolver a questão de inicializar a variável total com o valor 0

Editado por giu_d
Erro na explicação
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

:thumbsup:

Editado por AnsiC
Falha ao enviar mensagem

Compartilhar este post


Link para o post
Compartilhar em outros sites

@giu_d A lógica do programa dele estava certa, o valor da média já foi calculado antes desse for, ele só está contando quantos números acima da média foram digitados para calcular a percentagem de números acima da média.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

:thumbsup:

Como ficou o programa?

Editado por AnsiC

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Gustavo Malheiro Seu programa calcula a média 10 vezes (calculando errado 9 vezes pois ainda não obteve o valor final do total), coloque o calculo da média depois/fora do ciclo for para calcular apenas 1 vez.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
5 minutos atrás, AnsiC disse:

Como ficou o programa?

 

Também gostaria de saber isso

adicionado 6 minutos depois

Não seria preciso inicializar a variável total com 0?

adicionado 34 minutos depois

@isrnick  mas se não inicializar a variável total com 0 dá uma olhada como fica os resultados aqui:

 

Capturar1.PNG.ff09ab8eafd089dca533466569e0310d.PNG

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como ficou o resultado final?

 

adicionado 20 minutos depois

Eu arriscaria uma resposta. Já bem receoso d acabar errando novamente:

 

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

void fflush_stdin() {
    int ch;
    while ((ch = getchar()) != '\n' && ch != EOF);
}

int main(void) {

    setlocale(LC_CTYPE, "Portuguese_Brazil");

    float valores[10]; // para q sejam aceitos números com casas decimais
    int i, j;
    float media = 0, total = 0;
    float percent;

    for(i = 0; i < 10; i++) {

        printf("Digite o %2dº número: ", i + 1);
        scanf("%f", &valores[i]);
        fflush_stdin();

        total += valores[i];
    }

    media = total / i;

    printf("\nMédia = %.2f\n", media);

    j = 0;
    for (i = 0; i < 10; i++) {
        if (valores[i] > media) {
            j++;
        }
    }

    percent = (j / 100.0) * 10.0;

    printf("\nPorcentagem = %.2f\n\n", percent);

    system("pause");

    return 0;
}

 

Editado por giu_d
Erro no código
  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

int main(void){

	setlocale(LC_CTYPE,"Portuguese_Brazil");
    int valor[10];
    int i, total, media = 0;
    float percent;
    int j = 0;

    for(i=0; i<10; i++) {
        printf("Digite o %dª número: ", i+1);
        scanf("%d",&valor[i]);

        total = valor[i] + total;
        media = total/10;
    }
    printf("\n Média = %d\n", media);

    for (i=0; i<10; i++) {
        if (valor[i] > media) {
            j++;
        }
    }

    percent = (j*100.0)/10.0;
    printf("\no percentual é de %.1f \n", percent);


    system("pause");
	return 0;
}

O código ficou assim. Aparentemente deu certo

  • Curtir 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×