Ir ao conteúdo
  • Cadastre-se

C Exercício de estrutura de repetição


ngiovana

Posts recomendados

Estou aprendendo a programar em C e esse exercício me confundiu muito:

 

Tem-se um conjunto de dados contendo a altura e o sexo (masculino, feminino) de
50 pessoas. Faça um algoritmo que calcule e escreva:
• A maior e a menor altura do grupo;
• A média de altura das mulheres;
• O número de homens.

 

Acho que compliquei muito pra fazer o código, e além disso, no caso da pessoa digitar errado na hora de escolher o sexo ele contabiliza do mesmo jeito (se digitar errado 3 vezes ela só pode registrar a informação de 47 pessoas).

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

void main (){
float ah,am,maiah=0,maiam=0,menah=3,menam=3,mdam=0;
int nh=0,nm=0,i=1,caso;
	for (i=1;i<=50;i++){             
	printf ("Escolha uma opção: \n1- Masculino\n2- Feminino\n");
	scanf ("%d",&caso);
		switch (caso){
			case 1:
				printf ("Digite sua altura: ");
				scanf ("%f",&ah);
					if (ah>maiah){
						maiah = ah;
					}
					if (ah<menah){
						menah = ah;
					}
					nh++;
			break;
			case 2:
				printf ("Digite sua altura: ");
				scanf ("%f",&am);
				mdam = mdam + am;
					if (am>maiam){
						maiam = am;
					}
					if (am<menam){
						menam = am;
					}
					nm++;
			break;
			default:
				printf ("Erro! Tente novamente.");
			}
		}
		if (maiah>maiam){
			printf ("A maior altura do grupo é: %f e é de um homem.\n",maiah);
		}
		if (maiah<maiam){
			printf ("A maior altura do grupo é: %f e é de uma mulher.\n",maiam);
		}
		if (maiah==maiam) {
		    	printf ("A maior altura do grupo é: %f, uma mulher e um homem medem esta mesma altura.\n",maiah);
			}	
		
		if (menah<menam){
			printf ("A menor altura do grupo é : %f e é de um homem.\n",menah);
		}
		if (menah>menam){
				printf ("A menor altura do grupo é: %f e é de uma mulher.\n", menam);
			}
		if (menah==menam) {
				printf ("A menor altura do grupo é: %f, uma mulher e um homem medem esta mesma altura.\n",menam);
			}
		
		printf ("A média da altura das mulheres é de %f\n",mdam/nm);
		printf ("O número de homens é de %d",nh);
			
	}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Boa tarde. A pergunta sobre o sexo você pode colocar dentro de um Do..While obrigando o usuário a digitar uma das duas alternativas, na condição de ficar preso nesse laço até digitar a informação correta. Talvez tenha outras maneiras de fazer esse teste.

Acho que do jeito que você fez ele contabiliza mesmo mostrando a mensagem de erro pois conta uma iteração (uma volta no laço de repetição).

 

Outra coisa.

Você quer saber a maior e a menor altura do grupo. Você pode fazer a pergunta de altura e essas comparações antes do switch case, para os 2 sexos ao mesmo tempo, não precisando criar dezenas de variáveis só para isso. Assim, você criaria uma maiorAltura e menorAltura somente.

Dentro do CASE das mulheres você pode usar uma variável de somaAlturaMulheres e uma contaMulheres. Ao final do programa você faz a média simples.

Para saber o número de homens ficou certo. É só uma variável incrementável (nh+).

Eu usaria nomes de variáveis mas claras de ler, como 'numeroHomens' ou 'numHomens' ou 'quantHomens'.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Obrigada, agora ficou muito mais simples!

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

void main (){
float maiorAltura=0,menorAltura=3,alturaMulheres=0,h;
int nh=0,nm=0,i=1,caso;
	for (i=1;i<=5;i++){ 
	printf ("Digite sua altura: \n");
	scanf ("%f",&h);
	if (h>maiorAltura){
		maiorAltura = h;
	}
	if (h<menorAltura){
		menorAltura = h;
	}            
	do{	
	printf ("Escolha uma opção: \n1- Masculino\n2- Feminino\n");
	scanf ("%d",&caso);
	if (caso != 1 && caso != 2){
		printf ("Erro! Digite novamente.\n");
	}
	}while (caso != 1 && caso != 2);
		switch (caso){
			case 1:
					nh++;
			break;
			case 2:
				alturaMulheres = alturaMulheres + h;
					nm++;
			break;
			
			}
		}
		printf ("A maior altura do grupo é: %f\n",maiorAltura);
		printf ("A menor altura do grupo é: %f\n",menorAltura);
		printf ("A média da altura das mulheres é: %f\n",alturaMulheres/nm);
		printf ("O número de homens é: %d",nh);
	}

 

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