Ir ao conteúdo

Posts recomendados

Postado
#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

Postado

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
Postado
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
Postado

@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

Postado

@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.

Postado
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

Postado

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

 

Postado
#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

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!