Buscar

Aula06_Estruturas de controle_if-else

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 42 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 42 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 42 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Algoritmos e 
Programação
Estruturas de decisão (if...else, switch)
Universidade Federal da Grande Dourados
Faculdade de Ciências Exatas e de Tecnologias
Curso de Bacharelado em Sistemas de Informação
Profª Janne Oeiras Lachi
1
Tomada de decisão
 O objetivo da aula é estudar a tomada de 
decisão
 Veremos:
 Desvio condicional simples
 Desvio condicional composto
 Desvio condicional encadeado
2
Desvio condicional simples
 Na Linguagem C utiliza-se a instrução:
 if (<condição>)
 Se a condição estabelecida for verdadeira, serão 
executadas todas as instruções definidas dentro 
do bloco do if
 Depois serão executadas todas as instruções 
existentes após o bloco do if
 Se a condição estabelecida for falsa, serão 
executadas as instruções definidas após o bloco 
do if
3
Desvio condicional simples
4
int main()
{
 if (<condicao>)
 {
 }
 return 0;
}
Comandos dentro do bloco se são executados
caso a condição seja VERDADEIRA
Por bloco queremos dizer o conjunto de 
comandos delimitado por { e }
Se você utilizar apenas 1 instrução não 
precisa de { e }
Desvio condicional simples: exemplo
5
#include <stdlib.h>
#include <stdio.h>
int main()
{
 int x=1,a=0;
 system("chcp 1252 > nul");
 if (0==1)
 {
 x = 0;
 a = 1;
 }
 printf("\nO número x é %d e a é %d\n", x, a);
 return 0;
} O resultado mostrado na tela será:
O número x é 1 e a é 0.
Desvio condicional simples: exemplo
6
#include <stdlib.h>
#include <stdio.h>
int main()
{
 int x=1,a=0;
 system("chcp 1252 > nul");
 if (0==1)
 
 x = 0;
 a = 1;
 
 printf("\nO número x é %d e a é %d\n", x, a);
 return 0;
}
Aqui a intenção era colocar 2 comandos dentro do if, porém
não foram usados { e } para delimitar o bloco.
Nesse caso a condição é FALSA, mas a atribuição a=1 será 
executada
O resultado mostrado na tela será:
O número x é 1 e a é 1.
Desvio condicional simples: exemplo
7
 if (0==1)
 x = 0;
 a = 1;
Não adianta somente dar o recuo nesse caso.
É necessário delimitar com { e } 
Caso contrário o compilador entende que é para fazer 
if (0==1)
 x= 0;
a=1;
Ou seja, o bloco do if vai até o comando x=0;
A atribuição a=1 é um comando na seqüência do comando if 
e por isso é executada.
Desvio condicional simples
8
Comandos dentro do bloco if NÃO são executados 
caso a condição seja FALSA
Somente o que vem depois
int main()
{
 if (<condicao>)
 {
 }
 .
 .
 .
 return 0;
}
Por isso, no exemplo errado anterior, a=1 é executado 
porque a comparação 0==1 é FALSA e não é executado o 
comando x=0;.
if (0==1)
 x= 0;
a=1;
Erro comum
9
#include <stdlib.h>
#include <stdio.h>
int main()
{
 int x=1,a=0;
 system("chcp 1252 > nul");
 if (0==1);
 {
 x = 0;
 a = 1;
 }
 printf("\nO número x é %d e a é %d\n", x, a);
 return 0;
} O resultado mostrado na tela será:
O número x é 0 e a é 1.
Colocar ; após a condição
O if termina aqui
Os comandos a seguir dentro das chaves 
não estão atrelados ao if e são executados
Desvio condicional simples: exemplo
10
Elaborar um algoritmo que leia dois valores numéricos reais 
desconhecidos. Em seguida o algoritmo deve efetuar a adição dos dois 
valores lidos e apresentar o resultado se ele for maior que 10.
#include <stdio.h>
int main()
{
 float x, y, soma;
 system("chcp 1252 > nul");
 printf(“Informe dois números reais:”);
 scanf(“%f%f”, &x, &y);
 soma = x+y;
 if (soma > 10)
 {
 printf(“O valor da adição dos dois 
 números é: %f”, soma);
 }
 return 0;
}
Construindo nosso programa em C
11
#include <stdio.h>
int main()
{
 float x, y, soma;
 system("chcp 1252 > nul");
 printf(“Informe dois números reais:”);
 scanf(“%f%f”, &x, &y);
 soma = x+y;
 if (soma > 10)
 printf(“O valor da adição dos dois números é: %f”, soma);
 return 0;
}
Note que neste caso, você pode suprimir o uso de 
{ } para delimitar o if porque dentro dele há apenas 
1 comando (compare com o slide anterior).
Outro exemplo de erro
12
#include <stdio.h>
int main()
{
 float x, y, soma;
 system("chcp 1252 > nul");
 printf(“Informe dois números reais:”);
 scanf(“%f%f”, &x, &y);
 soma = x+y;
 if (soma > 10);
 printf(“O valor da adição dos dois números é: %f”, soma);
 return 0;
}
Neste caso, o compilador não dá erro
Não tem o que fazer no if
E sempre faz o printf que vem em seguida
Desvio condicional composto
 Na Linguagem C utiliza-se a instrução:
 if (<condição>) else
 Se a condição estabelecida for verdadeira, serão 
executadas todas as instruções definidas entre if 
(<condição>) else
 Se a condição estabelecida for falsa, serão 
executadas as instruções definidas dentro do 
bloco do else
 Somente após uma das possibilidades anteriores é 
que o programa executada as instruções 
existentes após o bloco do else
13
Desvio condicional composto
14
Comandos dentro do bloco if são executados
caso a condição seja VERDADEIRA
int main()
{
 if (<condicao>)
 {
 }
 else
 {
 }
 return 0;
}
Desvio condicional composto
15
int main()
{
 if (<condicao>)
 {
 }
 else
 {
 }
 .
 .
 .
 return 0;
}
Comandos dentro do bloco else são executados
caso a condição seja FALSA
Desvio condicional composto: exemplo
16
#include <stdlib.h>
#include <stdio.h>
int main()
{
 char nome1[30], nome2[30];
 float altura1, altura2;
 system("chcp 1252 > nul");
 printf("\nInforme o nome da 1ª pessoa:");
 scanf("%s", nome1);
 printf("\nInforme a altura da 1ª pessoa:");
 scanf("%f", &altura1); 
 printf("\nInforme o nome da 2ª pessoa:");
 scanf("%s", nome2); 
 printf("\nInforme a altura da 2ª pessoa:");
 scanf("%f", &altura2);
 if (altura1 > altura2)
 printf("\nPessoa mais alta é %s", nome1);
 else
 printf("\nPessoa mais alta é %s", nome2);
 return 0;
}
Desvios condicionais encadeados
 São usados quando há necessidade de 
estabelecer algumas verificações lógicas de 
condições definidas sucessivamente
 Uma determinada ação de um programa só 
pode ser executada se um conjunto anterior 
de condições for verificado
 Pode ser usada uma condição dentro de outra 
condição
17
Desvio condicional encadeado
18
if (<condição1>)
{
 <instruções para condição1 verdadeira>
}
else 
{
 if (<condição2>)
 {
 <instruções para condição2 verdadeira, porém condição1 falsa>
 }
 else
 {
 <instruções para condição1 e condição2 falsas>
 }
}
 Sintaxe em Linguagem C
Um problema
 Elaborar um algoritmo que efetue o cálculo do 
reajuste de salário de um funcionário. Considere 
que o funcionário deve receber um reajuste de 
15% caso seu salário seja menor ou igual a R$ 
622,00. Se seu salário for maior que R$ 622,00, 
mas menor ou igual a R$ 1.000,00, seu reajuste 
deve ser 10%. Caso seja maior que 1.000,00, o 
reajuste deverá ser de 5%.
 É possível ver 3 condições no problema acima:
 Se salário <= R$ 622,00, reajuste de 15%
 Se R$ 622,00 < salário <= R$ 1.000,00, reajuste 
de 10%
 Se salário > R$ 1.000,00, reajuste de 5%
19
Desvio condicional encadeado: 
exemplo
20
#include <stdlib.h>
#include <stdio.h>
int main()
{
 float salario, novo_salario;
 system("chcp 1252 > nul");
 printf("\nInforme o salário:");
 scanf("%f", &salario);
 if (salario < 622)
 novo_salario = salario * 1.15;
 else
 {
 if (salario <= 1000)novo_salario = salario * 1.10;
 else
 novo_salario = salario * 1.05;
 }
 printf("\nO novo salário é %.2f:", novo_salario);
 return 0;
}
programa REAJUSTA_SALARIO
var
 NOVO_SALARIO : real
 SALARIO: real
inicio
 leia SALARIO
 se (SALARIO < 622) então
 NOVO_SALARIO  SALARIO * 1.15
 senão 
 se (SALARIO <= 1000) então
 NOVO_SALARIO  SALARIO * 1.10
 senão
 NOVO_SALARIO  SALARIO * 1.05
 fim_se
 fim_se
fim
Múltipla escolha
 Pode ser usada quando o algoritmo prevê 
opções de escolha para o usuário
 Ou quando houver a necessidade de usar uma 
seqüência grande de instruções do tipo se 
uma após a outra ou encadeadas/aninhadas
21
Um problema exemplo
 Elaborar um programa que leia o destino do 
passageiro, se a viagem inclui retorno (ida e 
volta) e informar o preço da passagem 
conforme a tabela a seguir.  
22
Destino Ida Ida e Volta
Região Norte R$622,00 R$900,00
Região Nordeste R$350,00 R$650,00
Região Centro-Oeste R$350,00 R$600,00
Região Sul R$300,00 R$550,00
Exemplo: resolvendo com se
 Elaborar um algoritmo que leia o destino do passageiro, se a viagem inclui 
retorno (ida e volta) e informar o preço da passagem conforme a tabela a 
seguir.  
23
Programa VIAGEM
var
 DESTINO, IDA_VOLTA: caractere
início
 escreva “Informe o destino da viagem (Norte, Nordeste, Centro-oeste, 
Sul):”
 leia DESTINO
 escreva “É ida e volta (S ou N)?”
 leia IDA_VOLTA
 se (IDA_VOLTA = “S”) então
 se (DESTINO = “Norte”) então
 escreva “Preço da passagem é R$ 900,00”
senão
 se (DESTINO = “Nordeste”) então
 escreva “Preço da passagem é R$ 650,00”
 senão
 se (DESTINO = “Centro-oeste”) então
 escreva “Preço da passagem é R$ 600,00”
 senão
 escreva “Preço da passagem é R$ 550,00”
 fim_se
 fim_se
fim_se
Destino Ida Ida e 
Volta
Região Norte R$622,
00
R$900,0
0
Região Nordeste R$350,
00
R$650,0
0
Região 
Centro-Oeste
R$350,
00
R$600,0
0
Região Sul R$300,
00
R$550,0
0
Exemplo: resolvendo com se
 Elaborar um algoritmo que leia o destino do passageiro, se a viagem inclui 
retorno (ida e volta) e informar o preço da passagem conforme a tabela a 
seguir.  
24
Programa VIAGEM
var
 DESTINO, IDA_VOLTA: caractere
início
 escreva “Informe o destino da viagem (Norte, Nordeste, Centro-oeste, 
Sul):”
 leia DESTINO
 escreva “É ida e volta (S ou N)?”
 leia IDA_VOLTA
 se (IDA_VOLTA = “S”) então
 <comandos>
 senão
se (DESTINO = “Norte”) então
 escreva “Preço da passagem é R$ 622,00”
senão
 se (DESTINO = “Nordeste”) então
 escreva “Preço da passagem é R$ 350,00”
 senão
 se (DESTINO = “Centro-oeste”) então
 escreva “Preço da passagem é R$ 350,00”
 senão
 escreva “Preço da passagem é R$ 300,00”
 fim_se
 fim_se
fim_se
 fim_se
fim
Destino Ida Ida e 
Volta
Região Norte R$622,
00
R$900,0
0
Região Nordeste R$350,
00
R$650,0
0
Região 
Centro-Oeste
R$350,
00
R$600,0
0
Região Sul R$300,
00
R$550,0
0
Sintaxe: Português estruturado
caso <variável>
seja <valor 1> faça <operação 1>
seja <valor 2> faça <operação 2>
.
.
.
seja <valor n> faça <operação n>
senão <operação>
fim_caso
25
Exemplo: resolvendo com caso
 Elaborar um programa que leia o destino do passageiro, se a viagem inclui 
retorno (ida e volta) e informar o preço da passagem conforme a tabela a 
seguir.  
26
Programa VIAGEM
var
 OPCAO: inteiro
início
 escreva “1- Norte (ida)”
 escreva “2- Norte (ida e volta)”
 escreva “3- Nordeste (ida)”
 escreva “4- Nordeste (ida e volta)”
 escreva “5- Centro-oeste (ida)”
 escreva “6- Centro-oeste (ida e volta)”
 escreva “7- Sul (ida)”
 escreva “8- Sul (ida e volta)”
 escreva “Escolha uma opção (1 a 8):”
 leia OPCAO
 caso OPCAO
seja 1 faça 
 escreva “Preço da passagem é R$ 500,00”
seja 2 faça 
 escreva “Preço da passagem é R$ 900,00”
Destino Ida Ida e 
Volta
Região Norte R$500,
00
R$900,0
0
Região Nordeste R$350,
00
R$650,0
0
Região 
Centro-Oeste
R$350,
00
R$600,0
0
Região Sul R$300,
00
R$550,0
0
Exemplo: resolvendo com se
 Elaborar um algoritmo que leia o destino do passageiro, se a viagem inclui 
retorno (ida e volta) e informar o preço da passagem conforme a tabela a 
seguir.  
27
Programa VIAGEM
var
 OPCAO: inteiro
início
 <comandos escreva>
 leia OPCAO
 caso OPCAO
seja 1 faça 
 escreva “Preço da passagem é R$ 500,00”
seja 2 faça 
 escreva “Preço da passagem é R$ 900,00”
seja 3 faça 
 escreva “Preço da passagem é R$ 350,00”
seja 4 faça 
 escreva “Preço da passagem é R$ 650,00”
seja 5 faça 
 escreva “Preço da passagem é R$ 350,00”
seja 6 faça 
 escreva “Preço da passagem é R$ 600,00”
seja 7 faça 
 escreva “Preço da passagem é R$ 300,00”
seja 8 faça 
 escreva “Preço da passagem é R$ 550,00”
 senão
 escreva “Você digitou uma opção inválida!”
 fim_caso
fim
Destino Ida Ida e 
Volta
Região Norte R$500,
00
R$900,0
0
Região Nordeste R$350,
00
R$650,0
0
Região 
Centro-Oeste
R$350,
00
R$600,0
0
Região Sul R$300,
00
R$550,0
0
O comando switch: múltipla escolha
 Permite selecionar uma entre várias ações 
alternativas;
 O comando if-else pode ser usado para 
executar testes para escolha de uma entre 
várias alternativas, mas a visualização do 
código fica deselegante e menos 
compreensível;
 O comando switch tem um formato limpo e 
claro;
 É comumente usado para construção de 
menus onde o usuário escolhe uma opção.
28
Switch: sintaxe
29
switch (expressão)
{
 case <valor>:
<linha de comando>;
break;
 case <valor>:
<linha de comando>;
break;
 .
 .
 .
 default: /* para casos não previstos */
<linha de comando>;
break;
}
O comando break tem a finalidade 
de encerrar a operação ocorrida 
dentro do case.
Se não houver o break, será testado 
o próximo case e a lógica estará 
errada.
Switch: sintaxe
30
switch (expressão)
{
 case <valor>:
<linha de comando>;
break;
 case <valor>:
<linha de comando>;
break;
 .
 .
 .
 default: /* para casos não previstos */ 
<linha de comando>;
break;
}
O default é o caso padrão se o 
programa não tiver entrado em 
nenhuma condição prevista (cases 
anteriores)
O uso de default é opcional.
Switch: sintaxe
31
switch (expressão)
{
 case <valor>:
<linha de comando>;
break;
 case <valor>:
<linha de comando>;
break;
 .
 .
 .
 default: /* para casos não previstos */ 
<linha de comando>;
break;
}
Não existe ; aqui
Precisa dos : aqui em cada case
Não existe { e } dentro do case
Switch: exemplo
32
switch (x) /* O comando switch testa o valor armazenado na variável x */
{
 case 1:
printf (“A variável x possui o valor correspondente a 1”);
break;
 case 2:
printf (“A variável x possui o valor correspondente a 2”);
break;
 case 3:
printf (“A variável x possui o valor correspondente a 3”);
break;
 default: 
printf (“Nenhuma das opções anteriores...”);
break;
}
O switch funciona apenas com 
números inteiros e a manipulação de 
um único caractere. Exemplo: 1, 5, 
‘s’, ‘@’ etc.
Seja x uma variável do tipo int
Switch: exemplo
33
switch (letra)
{
 case ‘A’:
printf (“A variável letra possui o valor correspondente a A”);
break;
 case ‘B’:
printf (“A variável letra possui o valor correspondente a B”);
break;
 default: 
printf (“Nenhuma das opções anteriores...”);
break;
}
O switch funciona apenascom 
números inteiros e a manipulação de 
um único caractere. Exemplo: 1, 5, 
‘s’, ‘@’ etc.
Seja letra uma variável do tipo char
Exemplo: usando o switch em C
34
Destino Ida Ida e 
Volta
Região Norte R$500,
00
R$900,0
0
Região Nordeste R$350,
00
R$650,0
0
Região 
Centro-Oeste
R$350,
00
R$600,0
0
Região Sul R$300,
00
R$550,0
0
#include <stdio.h>
#include <stdlib.h>
int main()
{
 int opcao;
 printf("\n1- Norte (ida)\n");
 printf("\n2- Norte (ida e volta)\n");
 printf("\n3- Nordeste (ida)\n");
 printf("\n4- Nordeste (ida e volta)\n");
 printf("\n5- Centro-oeste (ida)\n");
 printf("\n6- Centro-oeste (ida e volta)\n");
 printf("\n7- Sul (ida)\n");
 printf("\n8- Sudeste (ida e volta)\n");
 printf("\nEscolha a opção (1 a 8):");
 scanf("%d", &opcao);
 switch(opcao)
 {
 case 1:
 printf("\nPreço da passagem é R$622,00.\n\n");
 break;
 case 2:
 printf("\nPreço da passagem é R$900,00.\n\n");
 break;
 case 3:
 printf("\nPreço da passagem é R$350,00.\n\n");
 break;
 case 4:
 printf("\nPreço da passagem é R$650,00.\n\n");
 break;
 case 5:
 printf("\nPreço da passagem é R$350,00.\n\n");
 break;
 case 6:
 printf("\nPreço da passagem é R$600,00.\n\n");
 break;
Exemplo: usando o switch em C 
(continuação)
35
 case 7:
 printf("\nPreço da passagem é R$300,00.\n\n");
 break;
 case 8:
 printf("\nPreço da passagem é R$550,00.\n\n");
 break;
 default:
 printf("\nOpção inválida\n");
 break;
 }
 system ("pause");
 return 0;
}
Um problema exemplo
36
 Elaborar um algoritmo que imprime na tela a 
situação do aluno após a sua nota ser 
digitada. Baseie-se na tabela abaixo: 
Nota Situação
0 a 2 Nota péssima
3 a 4 Nota ruim
5 a 6 Nota um pouco ruim
7 Nota boa
8 a 9 Nota muito boa
10 Nota excelente
Neste problema pressupõe-se que a nota do 
aluno é do tipo inteiro
Exemplo: usando o switch em C
37
#include <stdio.h>
#include <stdlib.h>
int main()
{
 int nota;
 printf("\nInforme a nota do aluno:");
 scanf("%d", &nota);
 printf("\nNota ");
 switch(nota)
 {
 case 0:
 case 1:
 case 2:
 printf(“péssima\n\n");
 break;
 case 3:
 case 4:
 printf(“muito ruim\n\n“);
 break; 
 
Exemplo: usando o switch em C (cont.)
38
 case 5:
 case 6:
 printf(“ruim\n\n");
 break;
 case 7:
 printf(“boa\n\n“);
 break;
 case 8:
 case 9:
 printf(“muito boa\n\n");
 break;
 case 10:
 printf(“excelente\n\n“);
 break;
 default:
 printf(“inválida”);
 break;
 }
 system(“pause”);
 return 0;
}
 
 
Comentários
 Você pode incluir no meio do seu código 
comentários
 Podem ser colocados em qualquer lugar e são 
tratados pelo compilador como espaços em 
branco
 Ajudam a quem desenvolve o programa e 
qualquer pessoa que lê o programa fonte
 São usados para documentar o código
 Começam por /* e terminam por */
39
Comentários
40
/* programa que dados três números, verifica se A +B é menor 
que C. */
 
#include <stdlib.h> /* biblioteca para o comando system */
#include <stdio.h> /* biblioteca para o printf e scanf */
int main()
{
 int A, B, C;
 system("chcp 1252 > nul");
 printf("\nInforme três números inteiros");
 scanf("%d%d%d", &A, &B, &C); 
 if (A + B < C)
 printf("\nC é maior que A + B");
 return 0;
}
Comentários: atenção!
41
/* Esse é um /* comentario */ ilegal */
 
#include <stdlib.h>
#include <stdio.h>
int main()
{
 int A, B, C;
 system("chcp 1252 > nul");
 printf("\nInforme três números inteiros");
 scanf("%d%d%d", &A, &B, &C); 
 if (A + B < C)
 printf("\nC é maior que A + B");
 return 0;
}
Não pode haver comentários 
dentro de comentários.
Referências
 Ulysses de Oliveira. Programando em C. D. Rio 
de Janeiro; Editora Ciência moderna, 2008 
 Victorine Viviane Mizrahi. Treinamento em 
linguagem C. São Paulo: Pearson Prentice Hall, 
2008. 
 Fernando Antônio Vanini. Introdução à 
linguagem C. 
http://www.dcc.unicamp.br/~vanini/inf512/a
ula2_1.html
42

Outros materiais