Ir ao conteúdo
  • Cadastre-se

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


Posts recomendados

#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

Link para o comentário
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 1
  • Obrigado 1
Link para o comentário
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
Link para o comentário
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

Link para o comentário
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

Link para o comentário
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;
}

 

Link para o comentário
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 2
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!