Ir ao conteúdo

C O zero deve apenas exibir os resultados e NÃO deve ser lido como a MENOR IDADE


Ir à solução Resolvido por Ansi C,

Posts recomendados

Postado
//Faça um programa que, para um número indeterminado de pessoas: leia a idade de cada uma,
//sendo que a idade 0 (zero) indica o fim da leitura e não deve ser considerada.
//A seguir calcule: O número de pessoas; A idade média do grupo; A menor idade e a maior idade.
#include<stdio.h>
#include<locale.h>
main()
{
setlocale(LC_ALL,"Portuguese");
int cont,soma,menor,maior,idade;
idade++;

printf("\n------ Digite '0' (zero) para EXIBIR RESULTADOS ------\n");		
	while (idade>0)
		{
		printf("\nInsira as idades das pessoas!");
		printf("\n");
			scanf("%i",&idade);
			
 		soma=soma+idade;
	 	cont ++;
			
	 	if (idade>0 && idade<menor)//Não deve ler o Zero inserido, pois o zero deve apenas encerrar e exibir resultados
			menor = idade;
	 	if (idade > maior)
			maior = idade;
		}
		cont--;
	printf("\nNúmero de pessoas = %i", cont);	
	printf("Média de idade: %i",soma/cont);
	printf("\nMaior idade = %i", maior);
	printf("\nMenor idade = %i", menor); 
}

Tá acontecendo que quando o usuário digitar ZERO o programa deve exibir os resultados, mas o número ZERO está sendo lido na VAR IDADE, exibindo assim o ZERO como a menor idade do grupo, o q não pode acontecer. No primeiro IF eu coloquei (idade>0) mas mesmo assim, a idade vem no valor de ZERO e é lida pela variável.

Postado

Olá@Dunes .

― Existem certos erros no teu código. Porém, a rotina está correta (― Funcional).

A rotina: seleção (Maior e Menor) idade está operacional.

if(idade > 0 && idade < menor)menor= idade;
if(idade > maior)maior= idade;

Se idade ← 0 a declaração será ignorada, tanto no 1 IF, quando é no 2 IF.

 

 

― Existe até uma certa redundância nesse expressão, pois em C toda expressão com resultado diferente de 0, é logicamente uma expressão verdadeira, assim sendo, zero é sempre falso. Daí com esse conceito em mente retificamos o código assim.

if(idade && idade < menor)menor= idade;
if(idade > maior)maior= idade;

Se idade ← 0 a declaração será ignorada, tanto no 1 IF, quando é no 2 IF.

 


Resolvo: garantido que o primeiro dado (primeira idade) inicie as variáveis da memória de idade maior , e de idade menor  e de idade soma. Em outra rotina, incremento a valor de idade numero. Só então inicia-se o loop.

 

― Está claro pra você? Algo mais a acrescentar ??
Pode falar O.k!

 

 

  • Obrigado 1
Postado

Obrigado por me responder!

Você poderia me informar os erros presentes no meu código? (para fins didáticos) lembrando que tenho q usar o comando While, e qual seria a versão final do código completo funcional?

adicionado 0 minutos depois

@AnsiC

  • Solução
Postado

@Dunes Nós  temos aqui uma política local de não fornecer respostas para exercício. Somente cuidamos das perguntas objetivas. Daí com relação aos certos erros cometidos:

 

  1. Qual é a assinatura na linguagem C para função principal main que o GCC orienta?
  2. Por que main(){ ... } assinada dessa forma sem valor de retorno específico funciona? Quando explicitamente pela norma C é recomendo, e culturalmente vinculado, int main(void){...}, int main(int argc, char *argv[]){...}. Principalmente quando o ambiente é restrito (sistema operacionais)?
  3. Qual a importância de iniciar as variáveis antes de usá-las? 
  4. Qual a diferença em pre-incremento e pós-incremento? Qual situação lógica no uso de um ou do outro?
  5. Documentar código é importante? Ou é perda de tempo?

― Agora observe o resultado seu código no meu computador, os resultados foram além de um certo 0. Parte das perguntas acima estão relacionadas ao que vem abaixo:

 

 

 

CdH201810011536.png

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!