Ir ao conteúdo

C Exercício de Centena (C)


Ir à solução Resolvido por devair1010,

Posts recomendados

Postado

5. Ler um número com três dígitos e imprimir se o algarismo da casa das centenas é par.

 


Eu Dividi o numero de três dígitos por 100 - Por Exemplo 200 / 100 = 2  (PAR)

Só que também poderia ser um número com virgula - Por Exemplo 268 / 100 = 2,68 (PAR)

 

E depois tentei diferenciar no IF 2 || 4 || 6 || 8 ||  

                                                   printf("CENTENA PAR");

 

Mas como visto não deu muito certo!! ksaksoaskaosk

 

Poderiam me dar algumas dicas??

 

 

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

int main()
{

    int num, centena;

    printf("DIGITE UM NUMERO COM TRES DIGITOS: \n");
    scanf("%d", &num);

    centena = num / 100;

    if (centena == 2 || 4 || 6 || 8){
     printf ("CENTENA PAR");
    }
    else if (centena == 1||3||5||7||9){
     printf("CENTENA IMPAR");
    }




    return 0;
}

 

  • Curtir 1
  • Amei 1
Postado
1 hora atrás, Pedrockz disse:

Eu Dividi o numero de três dígitos por 100 - Por Exemplo 200 / 100 = 2  (PAR)

Só que também poderia ser um número com virgula - Por Exemplo 268 / 100 = 2,68 (PAR)

 

Não, não poderia. Você declarou isso como int então é um valor integral, sem decimais. A divisão vai truncar o valor. Não pensou em testar? Algo como mostrar o resultado?

	int a = 268;
	printf("268, 268/100 %d %d\n", a, a / 100);

Que mostraria

        268, 268/100 268 2

Só uma linha afinal.

 

 if (centena == 2 || 4 || 6 || 8)
{
   ...

Aqui você tem um problema. Computadores não entendem contexto. Você não pode escrever isso. Ou melhor, pode mas não expressa o que você quer testar...

	if  (
		(centena == 2) ||
		(centena == 4) ||
		(centena == 6) ||
		(centena == 8)
        )
    {};

Isso é o que você quer testar. Não pode omitir a condição.

 

adicionado 15 minutos depois
if (centena == 2 || 4 || 6 || 8)
{
     printf ("CENTENA PAR");
}

Talvez seja o caso de explicar o que está escrito acima. O que está escrito para o compilador C.

É uma questão de prova comum em C e operadores afinal.

 

  • Em C 0 é falso. Qualquer outra coisa é verdadeira. if(2) é verdadeiro, if(4), qualquer coisa menos if(0) é verdadeiro.
  • A expressão acima tem DOIS operadores: == e ||
  • == é avaliado antes de ||
  • 2, 4 ,6 e 8 são como eu disse verdadeiro
if ( (centena == 2) || 4 || 6 || 8 )
     printf ("CENTENA PAR");

Assim é como vai ser avaliado. Sempre use parenteses. Se centena for 2 a primeira expressão vai ser true.

Mas como 4 é verdadeiro basta isso para (a OU b OU c OU d) ser verdade, certo?


Então essa expressão é sempre verdadeira.

 

O compilador deve ter dado um aviso que você não considerou... Veja o que diz no meu compilador:

image.png.13bc2b9529306bf542e9aa6667eac65d.png

 

Pois é: constante não nula || constante não nula é sempre uma constante não nula...

  • Curtir 1
  • Obrigado 2
  • Solução
Postado

@Pedrockz      esse jeito de verificar se o numero é par realmente não é muito eficaz não , melhor seria usar o operador mod que na linguagem c é esse  %  , 

if( centena % 2 ==0)

    printf(" eh  par\n");

else

    printf('eh  Impar\n\n");

 

  • Obrigado 1
Postado

Pessoal fiz da seguinte forma e esta rodando!!

Me corrige se eu estiver errado

 

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

int main()
{

    int num, centena;

    printf("DIGITE UM NUMERO COM TRES DIGITOS: \n");
    scanf("%d", &num);

    centena = num / 100;

    if (centena == 2){
     printf ("CENTENA PAR");
    }
    else if (centena == 4){
    printf ("CENTENA PAR");
    }
    else if (centena == 6){
    printf ("CENTENA PAR");
    }
    else if (centena == 8){
    printf ("CENTENA PAR");
    }
    else{
    printf("CENTENA IMPAR");
    }

    return 0;
}

 

adicionado 4 minutos depois

Simples e Rápido !! Obrigado

 

Em 19/05/2020 às 16:40, devair1010 disse:

@Pedrockz      esse jeito de verificar se o numero é par realmente não é muito eficaz não , melhor seria usar o operador mod que na linguagem c é esse  %  , 


if( centena % 2 ==0)

    printf(" eh  par\n");

else

    printf('eh  Impar\n\n");

 

 

  • Curtir 2
Postado

@Pedrockz      está bom , e  funcionado bem ,  você colocou a mesma linha 4 vezes ;      Gastou tempo digitando e ocupou mais espaço na memória , que apesar de ser pouco , em um programa grande isso exigiria grande quantidade de bytes  ,  em um pc com 15 GigaBytes de memória não causaria problemas , mas em equipamento mais simples como um arduíno ,  aí talvez o programa nem coubesse na memória dele , e também é bom manter o código identado , para que vai ler é mais fácil de entender .

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!