Ir ao conteúdo

Posts recomendados

Postado

Como que eu faço a média nesse caso? Eu realmente não to conseguindo. 

E há algo que eu possa melhorar meu código?

#include<stdio.h>

int main(){
	
	int idade, maior_idade=0, maior_18=0, menor_5=0, i=1;
	float media=0;
	
	while(i<=10){
		printf("Digite sua idade: ");
		scanf("%d", &idade);
		media += idade;
		if(idade > 18){
			maior_18 = maior_18 + 1;
		}
		if (idade < 5){
			menor_5 = menor_5 + 1;
		}
		if (idade > maior_idade) {
			maior_idade = idade;
		}
		i++;
	}
	
		printf("A media da idade do grupo é de: %d\n", media / 10);
		printf("A quantidade de pessoas com mais de dezoito é de: %d\n", maior_18);
		printf("A quantidade de pessoas com menos de 5 anos é de: %d\n", menor_5);
		printf("A maior idade digitada foi de: %d", maior_idade);
	
}
  • Curtir 1
Postado

O compilador deve tá bem confuso porque você prometeu que media seria do tipo float e em seguida inicializou com um inteiro (0) e, se não bastasse, dividiu por outro inteiro (10). Bom, assumindo que alguém não possa ter uma idade de 22.7 anos, utilize int como o tipo de media.

 

33 minutos atrás, Robs156 disse:
int media=0;

 


Se há algo pra melhorar? bom, eu diria exatamente ter mais cuidado na hora de associar valores aos tipos corretos porque um compilador de C é bem permissivo e não vai checar muitas coisas por você. Na duvida, e quando possível, eles farão conversões automáticas dos valores envolvidos e que frequentemente não funcionam.

  • Curtir 1
Postado
15 minutos atrás, V!OLADOR disse:

O compilador deve tá bem confuso porque você prometeu que media seria do tipo float e em seguida inicializou com um inteiro (0) e, se não bastasse, dividiu por outro inteiro (10). Bom, assumindo que alguém não possa ter uma idade de 22.7 anos, utilize int como o tipo de media.

 


Se há algo pra melhorar? bom, eu diria exatamente ter mais cuidado na hora de associar valores aos tipos corretos porque um compilador de C é bem permissivo e não vai checar muitas coisas por você. Na duvida, e quando possível, eles farão conversões automáticas dos valores envolvidos e que frequentemente não funcionam.

Nossa, eu viajei quando citei essa média como float...

Sou iniciante e ainda erro nessas bobeiras, obrigado por alertar sobre isso. Obrigado, irmão.

  • Obrigado 1
Postado

@Robs156    isso mesmo que o  @V!OLADOR   disse ,  e  use um cast para escrever a média :

printf("A media da idade do grupo é de: %4.2f               \n\
      \rA quantidade de pessoas com mais de dezoito é de: %d\n\
      \rA quantidade de pessoas com menos de 5 anos é de: %d\n\
      \rA maior idade digitada foi de: %d                   \n",
        (float) media / 10 , maior_18 , menor_5 , maior_idade );
	

 

  • Curtir 1
Postado

Bom dia a todos! Eu já estou há um bom tempo tentando resolver isso aqui, mas eu não consigo fazer com que a média de homens cadastrados dê diferente de zero. Eu só consegui fazer com que a média do grupo desse normal quando coloquei em cima do pedido do sexo. Testei sem pedir o sexo e foi normal. Então acredito que o bug esteja quando peço o sexo da pessoa... tentei de tudo, mas não vai. Gostaria mesmo de saber onde estou errando. Sou iniciante e não consigo enxergar

#include <stdio.h>

int main() {

  int i=1, idade, mc=0, hc=0, media=0, media_h;
  char sexo;
  
  while(i<=5){
    printf("Digite sua idade: \n");
    scanf("%d", &idade);
     media = media + idade;
    printf("Digite seu sexo: ");
    scanf("%s", &sexo);
    i++;
    
    if(sexo == 'f'){
    	mc = mc + 1;
	} else {
		if(sexo == 'm'){
			hc = hc + 1;
			media_h= media_h + idade;
		}
		
		
	}

	}

    printf("media: %d\n", media/5);
    printf("mulheres cadastradas: %d\n", mc);
    printf("homens cadastrados: %d\n", hc);
    printf("A idade média dos homens cadastrados é de: %d", media_h);
 
}
  • Curtir 1
Postado
18 horas atrás, devair1010 disse:

@Robs156    isso mesmo que o  @V!OLADOR   disse ,  e  use um cast para escrever a média :

printf("A media da idade do grupo é de: %4.2f               \n\
      \rA quantidade de pessoas com mais de dezoito é de: %d\n\
      \rA quantidade de pessoas com menos de 5 anos é de: %d\n\
      \rA maior idade digitada foi de: %d                   \n",
        (float) media / 10 , maior_18 , menor_5 , maior_idade );
	

 

Obrigado, irmão!!!

  • Curtir 1
Postado
5 horas atrás, Robs156 disse:

Bom dia a todos! Eu já estou há um bom tempo tentando resolver isso aqui, mas eu não consigo fazer com que a média de homens cadastrados dê diferente de zero.

Veja que aqui você está pegando como string ao invés ser como caractere.

5 horas atrás, Robs156 disse:
scanf("%s", &sexo);

jeito "correto".

	scanf("%c", &sexo);

 

de preferência a usar fgets ao invés scanf, ler a linha inteira e bem mais seguro do que só ler um caractere.

exemplo

#include <stdio.h>
#include <ctype.h>      /* Para utilizar a função toupper */

/* Constantes */
#define T_BUFFER 256

#define QUANTIDADE_CADASTROS 5

int main()
{
    int
        contador, idade = 0,
        quantidade_homens = 0, media_homens = 0,
        quantidade_mulhers = 0, media_mulheres = 0,
        media_geral = 0;

    char buffer[T_BUFFER];
    char sexo;  /* ԅ(≖‿≖ԅ)  */
  
    for (contador = 0; contador < QUANTIDADE_CADASTROS; contador++) {
        printf("Digite sua idade: \n");
        /* Checa se a idade é valida */
        do {
            fgets(buffer, T_BUFFER, stdin);     /* Prefira sempre pegar toda a linha */
            sscanf(buffer, "%d", &idade);
            if (idade <= 0 || idade > 100) {
                printf("Idade invalida!\nDigite-a novamente\n");
            }
        } while (idade <= 0 || idade > 100);
        /* media_geral = media_geral + idade; */
        media_geral += idade;
        printf("Digite seu sexo: ");
        /* Checa se o sexo é valido */
        do {
            fgets(buffer, T_BUFFER, stdin);
            sscanf(buffer, "%c", &sexo);
            if (toupper(sexo) != 'F' && toupper(sexo) != 'M') {
                printf("Sexo invalido!\nDigite novamente apenas F ou M\n");
            }
        } while (toupper(sexo) != 'F' && toupper(sexo) != 'M');
        if (toupper(sexo) == 'F') {
    	    /* quantidade_mulhers = quantidade_mulhers + 1; */
    	    quantidade_mulhers++;
        } else {
            /* quantidade_homens = quantidade_homens + 1; */
            /* media_homens = media_homens + idade; */
            quantidade_homens++;
            media_homens += idade;
	    }
	}
    printf("media: %d\n", media_geral/QUANTIDADE_CADASTROS);
    printf("mulheres cadastradas: %d\n", quantidade_mulhers);
    printf("homens cadastrados: %d\n", quantidade_homens);
    printf("A idade média dos homens cadastrados é de: %d", media_homens/QUANTIDADE_CADASTROS);
    return(0);
}

Versão online!

  • Curtir 1
Postado

Seu programa não está bom ainda.

 

Porque chamada as somas de média??? São apenas somas.

 

 int i=1, idade, mc=0, hc=0, media=0, media_h;

 

  • porque media_h não merece um valor inicial e as outras medias --- que são apenas somas --- merecem???
  • Declare uma variável por linha. É melhor pra você e pra todo mundo.

 

7 horas atrás, Robs156 disse:
  int i=1, idade, mc=0, hc=0, media=0, media_h;
  char sexo;
  
  while(i<=5){
    printf("Digite sua idade: \n");
    scanf("%d", &idade);
     media = media + idade;
    printf("Digite seu sexo: ");
    scanf("%s", &sexo);
    i++;

 

 

  • leia o manual: teste o rertorno de scanf(). É ingênuo seguir se não ler nada.
  • esse while tem um valor inicial, uma variável de controle e um incremento. Tem um comando para isso e é o for. Pra que tentar mudar a realidade? Ficou muito pior assim. O simles:
  char sexo;  
  for( int i = 0; i<5; i+=1)
  {
    printf("Digite sua idade: \n");
    scanf("%d", &idade);
    media = media + idade;
    printf("Digite seu sexo: ");
    scanf("%s", &sexo);
  }

 

assim i só existe dentro do loop. Mais seguro e compacto.

 

    printf("media: %d\n", media_geral/QUANTIDADE_CADASTROS);
    printf("mulheres cadastradas: %d\n", quantidade_mulhers);
    printf("homens cadastrados: %d\n", quantidade_homens);
    printf("A idade média dos homens cadastrados é de: %d", media_homens/QUANTIDADE_CADASTROS);

 

Pra que 4 printf de uma linha ao invés de um printf de 4 linhas? É mais difícil de ler, de manter e de digitar. E umas 20 vezes mais lento.

 

    char sexo[20];   
    for(int i=0;i<5;i+=1)
    {
        printf("Digite sua idade: \n");
        scanf("%d", &idade);
        soma += idade;
        printf("Digite seu sexo: ");
        scanf("%s", sexo);
    }
   if(sexo[0] == 'f') // ..... o simples

 

TESTE o retorno de scanf. Leia a string e us no teste a primeira letra. Mais esperto. Assim consome toda a linha sem chamar outras funções.

 

    printf("media: %d\n", media_geral/QUANTIDADE_CADASTROS);

 

Lembrando do ensino fundamental já se vê que tem algo errado: a média é a soma dividida pelo total de parcelas. E não devia ser algo inteiro. Sim, a idade média pode ser de 12.25 anos. É uma média afinal.
 

E se não vai operar com a média não precisa da variável. 

 

    printf("media: %f\n", (float) soma_geral/ QUANTIDADE_CADASTROS );

 

Não parece mais simples?

  • Obrigado 1

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!