Questões resolvidas sobre IF ELSE

Propomos, no artigo passado, uma série de questões e desafios em linguagem C para você resolver usando os conceitos que você aprendeu sobre o teste condicional IF ELSE.

Tente ao máximo resolver! Pense, raciocine, pense mais uma vez...só assim você será um bom programador C.


Clique aqui e saiba como obter seu certificado de programação C! Entre já no Mercado de Trabalho!

Exercícios resolvidos sobre IF ELSE em C



0. Faça um programa que peça dois números ao usuário e mostre qual o maior e qual o menor

Vamos declarar dois números inteiros: x e y
Pedimos para o usuário preencher o valor de x, em seguida o de y.

Primeiro vamos checar se x é maior que y através do operador maior igual que, como teste para o teste condicional IF. Caso seja verdade, dizemos que x é maior. Caso seja falso, o teste cai no ELSE e diz que y é maior.
Código C:
#include <stdio.h>

int main()
{
    int x, y;
    printf("Digite o numero 1: ");
    scanf("%d", &x);

    printf("Digite o numero 2: ");
    scanf("%d", &y);

    if(x > y)
        printf("Maior: x = %d", x);
    else
        printf("Maior: y = %d", y);

}

Note que, na linha abaixo do IF e na linha abaixo do ELSE nós não colocamos o código entre chaves {}.
Só podemos fazer isso se o código abaixo do IF ou do ELSE possuam SOMENTE UMA LINHA.
Isso mesmo, o C só irá interpretar a linha imediatamente abaixo do IF ou do ELSE como fazendo parte desses testes condicionais.

Ou técnica muito importante, que ensinaremos aqui nesse tutorial de C, é o uso de uma terceira variável que irá receber o valor do maior número entre x e y.
Vejam só:


#include <stdio.h>

int main()
{
    int x,
        y,
        maior;
    printf("Digite o numero 1: ");
    scanf("%d", &x);

    printf("Digite o numero 2: ");
    scanf("%d", &y);

    if(x > y)
        maior = x;
    else
        maior = y;

    printf("O maior numero eh: %d", maior);


}




1. Faça um programa que receba três inteiros e diga qual deles é o maior e qual o menor. Consegue criar mais de uma solução?

Vamos declarar três variáveis: num1, num2 e num3.
Primeiro vamos checar se num1 é maior que num2. Se for, dentro do IF fazemos outro teste pra saber se num1 é maior que num3 também, se for, é porque num1 é o número maior.

Aqui notamos um detalhe importante e muitíssimo usado em programação: if else aninhados.
Ou seja, aninhar é colocar um dentro do outro. No caso, colocamos outro teste if-else dentro de um teste if.

No caso, primeiro testamos se num1 é maior que num2. Somente se num1 for maior que num2 é que vamos testar se num1 é maior que num3.
Se num1 não for maior que num2, o teste pra saber se num1 é maior que num3 nem acontece.

É importante você identar tudo, para saber a qual IF cada ELSE pertence. É extremamente importante que você tenha essa organização para não criar confusão.

Pois bem, testamos para saber se num1 é maior que num2.
Aqui, outro caso pode acontecer: num1 é maior que num2, mas num1 não é maior que num3.
Raciocine comigo: se num1 é maior que num2 e num3 é maior que num1, então num3 também é maior que num2 e num3 é o maior número.
Pronto, aqui terminamos o primeiro IF, em que num1 é sempre maior que num2.

Agora, pode ser que num2 seja maior que num1. Isso cai no ELSE maior.
Ok, aqui sabemos que num2 é maior que num1. Fazemos outro teste condicional IF ELSE dentro desse else maior para saber se num2 é maior que num3 também, se for, mostramos que num3 é o maior.

Porém, se num2 não for maior que num3, é óbvio que num3 é maior que num2. 
Como num2 é maior que num1 e se num3 é maior que num2, obviamente num3 também é maior que num1, e mostramos que num3 é o maior número.

O raciocínio para descobrir o menor número é parecido, porém, ao invés de usar o operador maior que (>), se usa o operador menor que (<). Tente!
Código C:
#include <stdio.h>

int main()
{
    int num1,
        num2,
        num3;

    printf("Digite o numero 1: ");
    scanf("%d", &num1);

    printf("Digite o numero 2: ");
    scanf("%d", &num2);

    printf("Digite o numero 3: ");
    scanf("%d", &num3);


    // Lógica para descobrir o maior número
    if (num1 > num2)
    {
        if(num1 > num3)
        {
            printf("O maior numero e: %d\n", num1);
        }
        else
        {
            printf("O maior numero e: %d\n", num3);
        }
    }
    else
    {
        if(num2 > num3)
        {
            printf("O maior numero e: %d\n", num2);
        }
        else
        {
            printf("O maior numero e: %d\n", num3);
        }
    }

    // Lógica para descobrir o menor número
    if(num1 < num2)
    {
        if(num1 < num3)
        {
            printf("O menor numero e: %d", num1);
        }
        else
        {
            printf("O menor numero e: %d", num3);
        }
    }
    else
    {
        if(num2 < num3)
        {
            printf("O menor numero e: %d", num2);
        }
        else
        {
            printf("O menor numero e: %d\n", num3);
        }
    }


}


Uma outra maneira de fazer seria usando duas outras variáveis para armazenar o maior e o menor número: 'menor' e 'maior'.
Ao final, exibimos apenas um printf mostrando o valor dessas variáveis.
Veja como ficou nosso código em C:

Código C:
#include <stdio.h>

int main()
{
    int num1,
        num2,
        num3,
        maior,
        menor;

    printf("Digite o numero 1: ");
    scanf("%d", &num1);

    printf("Digite o numero 2: ");
    scanf("%d", &num2);

    printf("Digite o numero 3: ");
    scanf("%d", &num3);


    // Lógica para descobrir o maior número
    if (num1 > num2)
    {
        if(num1 > num3)
            maior = num1;
        else
            maior = num3;
    }
    else
    {
        if(num2 > num3)
            maior = num2;
        else
            maior = num3;
    }

    // Lógica para descobrir o menor número
    if(num1 < num2)
    {
        if(num1 < num3)
            menor = num1;
        else
            menor = num3;
    }
    else
    {
        if(num2 < num3)
            menor = num2;
        else
            menor = num3;
    }

    printf("O maior numero e: %d\n", maior);
    printf("O menor numero e: %d\n", menor);

}


2. Escreva um programa em C que recebe um inteiro e diga se é par ou ímpar.
Use o operador matemático % (resto da divisão ou módulo) e o teste condicional if.

Essa questão é bem simples e já foi resolvida de uma maneira em nosso artigo sobre operadores de comparação e teste em C.
http://www.cprogressivo.net/2013/02/Fazendotestesecomparacoes-operadordeigualdademaiormenormaiorigualmenorigualdediferencaedemoduloourestodadivisao.html

Lá mostramos que o IF identifica se o número é par, se não for, vai pro ELSE.
Vamos fazer o contrário aqui: se cair no IF é porque o número é ímpar. Se cair no ELSE, é porque é par.

Pra saber se um número é par, é só testar se o o resto da divisão desse número por 2 é 0.
É fácil ver que, para checar se um número é ímpar, basta testar se o resto da divisão desse número por 2 é 1.  Assim, nosso simples aplicativo em C fica:
Código C:
#include <stdio.h>

int main()
{
    int num;

    printf("Digite um numero: ");
    scanf("%d", &num);

    if( num%2 == 1 )
        printf("%d e ímpar\n", num);
    else
        printf("%d e par\n", num);
}



3. Escreva um programa que pergunte o raio de uma circunferência, e sem seguida mostre o diâmetro, comprimento e área da circunferência.

Nas outras questões vínhamos usando apenas números inteiros em nossas aplicaçõe em C. Porém, nada impede você de usar float ou double, irá funcionar do mesmo jeito.

Mas nessa questão temos que usar float, pois vamos tratar de números com casas decimais, como o pi.
Fora isso, a questão é bem óbvia e simples. Basta aplicar as fórmulas matemáticas:

Código C:
#include <stdio.h>

int main()
{
    float raio,
          pi = 3.14,
          diametro,
          comprimento,
          area;

    printf("Digite o raio: ");
    scanf("%f", &raio);

    diametro = 2 * raio;
    comprimento = 2 * pi * raio;
    area = pi * raio * raio;

    printf("Diametro %.2f\n", diametro);
    printf("Comprimento %.2f\n", comprimento);
    printf("Area %.2f\n", area);
}

Deixamos para você o exercício de criar um programa em C, igual ao passado, porém usando somente a variável 'raio'.



4. Para doar sangue é necessário ter entre 18 e 67 anos. Faça um aplicativo na linguagem C que pergunte a idade de uma pessoa e diga se ela pode doar sangue ou não. Use alguns dos operadores lógicos OU (||) e E (&&).

Vamos agora aliar nossos conhecimentos sobre o teste condicional IF ELSE com os operadores lógicos, tudo já foi devidamente ensinado aqui em nossa apostila online de C.

Note que, para doar sangue é necessário ter 18 anos ou mais, E TAMBÉM é necessário ter 67 anos ou menos.
Ou seja, podemos fazer usando o operador lógico &&: (ter 18 anos ou mais) && (ter 67 anos ou menos).
Código C:
#include <stdio.h>

int main()
{
    int idade;

    printf("Digite sua idade: ");
    scanf("%d", &idade);

    if( (idade >= 18) && (idade <=67))
        printf("Voce pode doar sangue\n");
    else
        printf("Voce nao pode doar sangue\n");
}


No código passado mostramos o que era necessário para doar sangue e cair no IF.
Agora vamos fazer o contrário: vamos fazer o teste no IF para mostrar a mensagem de que o usuário NÃO pode doar sangue.

Para NÃO PODER doar sangue o usuário deve ter menos de 18 anos OU mais de 67 anos, concorda?
Então, usaremos o operador lógico ||: (ter menos de 18 anos) || (ter mais de 67 anos)
Código C:
#include <stdio.h>

int main()
{
    int idade;

    printf("Digite sua idade: ");
    scanf("%d", &idade);

    if( (idade < 18) || (idade > 67))
        printf("Voce nao pode doar sangue\n");
    else
        printf("Voce pode doar sangue\n");
}



5. Escreva um programa que pergunte o dia, mês e ano do aniversário de uma pessoa e diga se a data é válida ou não. Caso não seja, diga o motivo. Suponha que todos os meses tem 31 dias e que estejamos no ano de 2013.

Um dia válido é aquele que está entre 1 e 31. Um número abaixo de 1 ou acima de 31 será considerado inválido.
Um mês válido é aquele que está entre 1 e 12. Um número abaixo de 1 ou acima de 12 será considerado inválido.
Um ano de nascimento válido é aquele que está abaixo do ano atual. Como estamos em 2013, se alguém fornecer dados de ano 2014 ou outro ano acima disso, será considerado inválido.

Vamos mostrar, mais uma vez, nesse tutorial mais um exemplo de if-else aninhados.

Primeiro fazemos o teste para saber se a idade é inválida.
Se for, o IF roda e acaba o programa.

Caso a idade seja válida, nosso programa em C vai para o ELSE.
No ELSE, testamos se o mês é inválido. Se for, mostra a mensagem de erro e programa acaba aí.
Se o mês for válido, testamos se o ano é invalido. Se for, mostra a mensagem de erro do ano e o programa em C acaba.
Se o ano for inválido, mostra a mensagem que o ano é inválido.
Porém, se o ano também for válido, mostra a mensagem que a data é válida e se encerra nossa aplicação C.

Note que a data só é válida se o dia for válido. Dentro dessa condição, o mês deve ser válido também.
E dentro da condição de verdadeiro do mes, o ano deve ser válido também. Assim, a mensagem de data correta só é exibida se os 3 testes (dia, mes e ano) validarem a data.
Código C:
#include <stdio.h>

int main()
{
    int dia,
        mes,
        ano;

    printf("Dia: ");
    scanf("%d", &dia);

    printf("Mes: ");
    scanf("%d", &mes);

    printf("Ano: ");
    scanf("%d", &ano);


    if((dia < 1) || (dia > 31))
        printf("Dia invalido\n");
    else //se o dia for válido
        if( (mes < 1) || (mes > 12) )
            printf("Mes invalido\n");
        else // além do dia, o mês for válido
            if( ano > 2013 )
                printf("Ano invalido\n");
            else //se além do dia e mês, o ano for válido
                printf("Data valida\n");


}



Desafio 1. Crie um programa em C que peça um número ao usuário e armazene ele na variável x. Depois peça outro número e armazene na variável y.
Mostre esses números. Em seguida, faça com que x passe a ter o valor de y, e que y passe a ter o valor de x.
Dica: você vai precisar usar outra variável.

O que vamos fazer é aqui é simplesmente trocar os valores de duas variáveis: x e y
Parece simples e bobo, mas não é óbvio e esse algoritmo é muito importante, e você verá ele aqui no curso C Progressivo várias vezes, e durante sua carreira como programador C.

Se queremos trocar o valor de x pelo valor de y, basta fazermos:
x = y;

Agora, queremos fazer com que y receba o valor de x:
y = x;

Correto? Não, errado.
y não terá o valor antigo de x, pois agora x tem um novo valor (y). Então, como resolver?

Vamos usar uma variável de apoio, também chamada de variável temporária.
Ela servirá para armazenar o valor antigo de x. Assim, y pode pegar o valor antigo de x.
Código C:
#include <stdio.h>

int main()
{
    int x,
        y,
        tmp;

    printf("x =  ");
    scanf("%d", &x);

    printf("y =  ");
    scanf("%d", &y);

    printf("\nTrocando os valores de x e y...\n");

    // É importante que entenda e decore as seguintes linhas
    // Elas são muito importantes e usadas em programação C
    tmp = x;
    x = y ;
    y = tmp;

    printf("\nx = %d \ny = %d\n",x,y);

}


12 comentários:

John Santos disse...

Exércicio 0 o meu ficou assim

#include

int main(void){

int x, y;

printf("Digite um número: ");
scanf("%d", &x);

printf("Digite outro número: ");
scanf("%d", &y);

if(x > y){
printf(" %d é o Maior e %d é o Menor!\n", x, y);
}
else{
printf("%d é o Menor e %d é o Maior!\n", x, y);
}

return 0;
}

Anônimo disse...

Ola a todos, primeiramente gostei muito da didatica e a preocupacao de ajudar o proximo passando esses conhecimentos a outros interessados em aprender C. Faco engenharia eletrica e aprendi muito por aqui também.

No exercicio 0, foi solicitado tanto o maior numero como o menor numero tambem para mostrar na tela, entao eu fiz assim:

#include

/*Desafio 3. Crie um programa em C que recebe uma nota (entre 0.0 e 10.0) e checa se você passou direto, ficou de recuperação ou foi reprovado na matéria.
A regra é a seguinte:
Nota 7 ou mais: passou direto
Entre 4 e 7: tem direito de fazer uma prova de recuperação
Abaixo de 4: reprovado direto*/

int main()
{
float nota;

printf("Digite a nota do aluno: ");
scanf(" %f", &nota);

if(nota >= 7)
{
printf("\nParabens, voce passou direto\n\n");
}
else
{
if(nota >= 4)
{
printf("\nVoce esta de recuperacao, ainda tem chance de passar, entao estude.\n");
}
else
{
printf("\nSinto muito, voce perdao, sera necessario repetir a materia, deveria estudar mais.\n");
}
}
return 0;
}

Bruno Caique disse...

ja o exercicio 1 eu fiz assim:

#include
#include
#include

//Faça um programa que receba três inteiros e diga qual deles é o maior e qual o menor. Consegue criar mais de uma solução?


int main()
{
int x, y, z;

printf("Digite o primeiro numero: ");
scanf(" %d", &x);

printf("\n\nDigite o segundo numero: ");
scanf(" %d", &y);

printf("\n\nDigite o terceiro numero: ");
scanf(" %d", &z);

if(x > y & x > z)
{
printf("\n\nO maior numero eh %d", x);
}
if(y > x & y > z)
{
printf("\n\nO maior numero eh %d", y);
}
if(z > x & z > y)
{
printf("\n\nO maior numero eh %d", z);
}

if(x < y & x < z)
{
printf("\n\nO menor numero eh %d", x);
}
if(y < x & y < z)
{
printf("\n\nO menor numero eh %d", y);
}
if(z < x & z < y)
{
printf("\n\nO menor numero eh %d", z);
}

return 0;
}

Kassi Teles disse...

a minha numero 1 ficou assim.. mas acho que ficou grande demais...


// Faça um programa que receba três inteiros e diga qual deles é o maior e qual o menor. Consegue criar mais de uma solução?

#include

int main(void)

{
int num1, num2, num3, maior, menor;

printf("escreva 3 numeros:\n\n");
scanf("%d" "%d" "%d", &num1, &num2, &num3);

if (num1>num2)
{
maior = num1;
}
else
{
maior = num2;
}

if (maior>num3)
{
printf("o numero %d é maior \n\n\n", maior);
}
else
{
printf("o numero maior é o %d\n\n", num3);
}

if (num1<num2)
{
menor = num1;
}
else
{
menor = num2;
}
if (menor<num3)
{
printf("o numero %d é menor\n\n", menor);
}
else
{
printf("o numero menor é o %d\n\n", num3);
}

}

Hagliberto Alves disse...

/*Desafio 1. Crie um programa em C que peça um número ao usuário e armazene ele na variável x.
Depois peça outro número e armazene na variável y.
Mostre esses números. Em seguida, faça com que x passe a ter o valor de y, e que y passe a ter o valor de x.
Dica: você vai precisar usar outra variável.*/
#include
#include
int main (void){
int x, y, aux;
printf("Digite um numero:\n");
scanf("%i", &x);
printf("Digite outro numero:\n");
scanf("%i", &y);

aux = x;
x = y;
y = aux;

printf("Os numeros que eram: %i e %i\t agora sao: %i e %i que bonitinhu!\n", y, x, x, y);

return 0;
}

Everton pacheco .Pacheco disse...

um programa que valide um numero fornecido pelo usuario. este numero devera obrigatoriamente ser entre 50 e 70 ou ser superior a 100 para qualquer outro valor fornecido pelo usuario devera aparecer essa msg "este numero nao é valido. digite novamente" o programa so pode terminar quando o usuario digitar 10 valores

Ghost Blogger disse...

Estarei passando uma informação, pra quem esta se batendo para achar o símbolo barra vertical "|":
é só apertar as teclas:
shift + \= |

MAC disse...

//5. Escreva um programa que pergunte o dia, mês e ano do aniversário de uma pessoa
// e diga se a data é válida ou não. Caso não seja, diga o motivo.
// Suponha que todos os meses tem 31 dias e que estejamos no ano de 2013.

//MAC

#include
int main()
{
int dia,mes,ano;
printf("Qual dia voce nasceu\n");
scanf("%d",&dia);
if ((dia<1)||(dia>31))
{
printf("dia invalido");
return 0;
}

printf("Qual mes voce nasceu\n");
scanf("%d",&mes);
if ((mes<1)||(mes>12))
{
printf("mes invalido");
return 0;
}
printf("Qual ano voce nasceu\n");
scanf("%d",&ano);
if ((ano<1900)||(ano>2013))
{
printf("ano invalido");
return 0;
}
printf("%d/%d/%d data valida",dia,mes,ano);
}

dicas de tudo e mais um pouco... disse...

No exercício 5 diz que se errar a data ele para na hora, mas não, se errar data e o mês ele só avisa sobre o dia errado. Da mesma forma que se errar o dia, mes e ano ele só avisa do dia, ou seja, ele sempre pega o nível da linha superior e mostra o erro. O resto ele ignora.

Anônimo disse...

Muito Bom!!

Anônimo disse...

Excelente curso! Muito obrigado pelo trabalho muito competente!!!

Maicon Sousa disse...

//O MEU PRIMEIRO FICOU ASSIM JA QUE SE PEDE O MENOR E O MENOR

/*Faça um programa que peça dois números ao usuário e mostre qual o maior e qual o menor*/
#include
main()
{
int n1, n2, maior, menor;

printf ("digite o primeiro numero : ");
scanf ("%d", &n1);
printf ("digite o primeiro numero : ");
scanf ("%d", &n2);

if (n1>n2)
{

maior=n1;
menor=n2;
printf ("maior %d menor %d", maior, menor);
}
else
{
maior=n2;
menor=n1;
printf ("maior %d menor %d", maior, menor);
}

}

Gostou desse tutorial de C?
Sabia que o acervo do portal C Progressivo é o mesmo, ou maior que, de um livro ou curso presencial?
E o melhor: totalmente gratuito.

Mas para nosso projeto se manter é preciso divulgação.
Para isso, basta curtir nossa página no Facebook e/ou clicar no botão +1 do Google.
Contamos e precisamos de seu apoio.