Buscar

Aula06 Switch2011

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 40 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 40 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 40 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

Comandos Comandos 
d d ld d lcondicionais e de seleçãocondicionais e de seleção
Condicional
• seleção simples
• seleção dupla
• seleção múltipla
1
Comando condicional simplesComando condicional simples
if ( expressão lógica )
C Linguagem algorítmica
if ( expressão lógica )
{
comando1;
d
se < expressão lógica >
< comandoS >comandon;
}
< comandoS >
< expressão lógica > verdadeira expressão lógica 
falsa
< comando1 >
+ de 1
< comando2 > comando
2
Comando de seleção duplaComando de seleção dupla
se < expressão lógica >if (expressão lógica)
Linguagem algorítmicaC
p g
< comando >
senão
< comando >
( p g )
comando;
else 
comando;
< expressão lógica > verdadeirafalsa
< comando1 >< comando1 >
+ de 1
< comando2 >< comando2 > comando
3
Constantes
Sintaxe: 
Constantes
Sintaxe 
#define < identificador em maiúsculas> <valor inicial>
V l l i id tifi d d d d d Valores ou locais identificados onde os dados armazenados 
nunca se alteram durante a execução de um programa.
C j id tifi d ( d ) d d l d Caso sejam identificadas (nomeadas), devem ser declaradas 
antes de serem usadas, com a especificação do conteúdo 
válido seguindo a referência às bibliotecas utilizadasválido, seguindo a referência às bibliotecas utilizadas.
Identificadores de constantes devem utilizar apenas p
letras maiúsculas!
E #d fi PI 3 1416 // l d i lEx: #define PI 3.1416 // valor do pi, real
#define INT5 5 // valor 5, inteiro
4
Seja o problema:j p
Imprimir uma mensagem de acordo com um p g
código recebido:
1 Mensagem 11 - Mensagem 1
2 - Mensagem 2
3 - Mensagem 3
4 - Mensagem 44 Mensagem 4
Para qualquer valor diferente de 1, 2, 3 ou 
4 d t d 4, deve ser apresentada a mensagem 
“Mensagem de erro”.
5
Soluções: If e If elseç
/* Imprime uma mensagem, de acordo 
com um código lido - solução usando If 
simples */
/* Imprime uma mensagem, de acordo com 
um código lido – solução usando if – else */
#include <stdio h>p
#include <stdio.h>
#include <stdlib.h>
int main ( )
{
#include <stdio.h>
#include <stdlib.h>
int main ( )
{
int cod;{
int cod;
printf("\nCodigo (1 a 4): ");
scanf ("%d", &cod);
if (cod == 1)
int cod;
printf("\nCodigo (1 a 4): ");
scanf ("%d", &cod);
if (cod == 1)
printf ("\nMensagem 1\n");if (cod == 1)
printf ("\nMensagem 1\n");
if (cod == 2)
printf ("\nMensagem 2\n");
p ( g )
else
if (cod == 2)
printf ("\nMensagem 2\n");
else
f ( d 3)
p g
if (cod == 3)
printf ("\nMensagem 3\n");
if (cod == 4)
printf ("\nMensagem 4\n");
if (cod == 3)
printf ("\nMensagem 3\n");
else
if (cod == 4)
i tf ("\ M 4\ ")printf ( \nMensagem 4\n );if (cod < 1 || cod > 4)
printf ("\nMensagem de erro\n");
system("Pause");
return 0;
printf ("\nMensagem 4\n");
else // sobrou erro!
printf ("\nMensagem de erro\n");
system("Pause");
return 0;
6
return 0;
}
return 0;
}
Comando de Seleção múltiplaComando de Seleção múltipla
< expressão >
Expressão = x1
Expressão = x2
Expressão = xn
Expressão = x2
< comando n>< comando 1 > < comando 2 >
7
Comando de seleção múltiplap
funcionamento
NN N N
Cod = 3Cod = 2 Cod = 4
SS S
Cod = 1
S
Mensagem 4
S
Mensagem 2
S
Mensagem 3
S
ErroMensagem 1
S
Mensagem 4Mensagem 2 Mensagem 3 ErroMensagem 1
Testes feitos em ordemTestes feitos em ordem
8
Comando de seleção múltipla
seletor
ç p
C Linguagem algorítmica
switch (expressão)
{
escolha ( expressão)
opção < conteúdo 1 > : 
case constante1 :
instruções1 ;
case constante2 :
< comando >;
opção < conteúdo 2 > : 
d
constante2
instruções2 ;
...
case constante :
< comando >;
...
opção < conteúdo n > :case constanten :
instruçõesn ;
[default:
i t õ ]
opção < conteúdo n > : 
< comando >;
[ por faltainstruções; ]
}
[ p
< comandos > ]
fim escolha
9
Comando de seleção múltiplaComando de seleção múltipla
• Expressão: int, long ou char.
seletorC
switch (expressão)
{
• Constantes: literais, do mesmo 
tipo da expressão.
case constante1 :
instruções1 ;
case constante2 :
p p
• Valor da expressão comparado a 
conteúdos (na sequência em queconstante2
instruções2 ;
...
case constante :
conteúdos (na sequência em que 
estão).
• Se expressão = conteúdo (semprecase constanten :
instruçõesn ;
[default:
i t õ ]
• Se expressão = conteúdo (sempre 
constante literal), comando
associado é executado até que instruções; ]
}
q
break seja encontrado.
• Se nenhum conteúdo for igual,Se nenhum conteúdo for igual, 
comandos associado a default 
(opcional!) são executados.10
Solução: switch/case Solução: switch/case --
Executa todas as instruções após a condição Executa todas as instruções após a condição 
//Prog. incorreto, apresenta mais de uma mensagem por codigo
#include <stdio h>
pp
de sucessode sucesso
#include <stdio.h>
#include <stdlib.h>
int main ( )
{
Expressão
{
int cod ;
printf("\nCodigo (1 a 4): ");
scanf ("%d" &cod);scanf ( %d , &cod);
switch (cod)
{
case 1: printf ("\nMensagem 1\n");
Lista de constantes
case printf ( \nMensagem \n );
case 2: printf ("\nMensagem 2\n");
case 3: printf ("\nMensagem 3\n");
case 4: printf ("\nMensagem 4\n");p ( g )
default: printf ("\nMensagem de erro\n");
}
system("Pause");
return 0;
}
11
Solução: switch/case Solução: switch/case --
Executa todas as instruções após a condição Executa todas as instruções após a condição 
//Prog. incorreto, apresenta mais de uma mensagem por codigo
#include <stdio h>
pp
de sucessode sucesso
Comando break:#include <stdio.h>
#include <stdlib.h>
int main ( )
{
Comando break:
• Uso limitado ao switch (programação 
estruturada!);
{
int cod ;
printf("\nCodigo (1 a 4): ");
scanf ("%d" &cod);
• Interrompe a execução interna do switch, 
transferindo e execução para o próximo 
comando do programa.scanf ( %d , &cod);
switch (cod)
{
case 1: printf ("\nMensagem 1\n");
• Sintaxe: break; .
case printf ( \nMensagem \n );
case 2: printf ("\nMensagem 2\n");
case 3: printf ("\nMensagem 3\n");
case 4: printf ("\nMensagem 4\n");p ( g )
default: printf ("\nMensagem de erro\n");
}
system("Pause");
return 0;
}
12
Solução: switch/case Solução: switch/case --
Executa todas as instruções após a condição Executa todas as instruções após a condição 
//Prog. incorreto, apresenta mais de uma mensagem por codigo
#include <stdio h>
pp
de sucessode sucesso
#include <stdio.h>
#include <stdlib.h>
int main ( )
{{
int cod ;
printf("\nCodigo (1 a 4): ");
scanf ("%d" &cod);scanf ( %d , &cod);
switch (cod)
{
case 1: printf ("\nMensagem 1\n");break;p f ( \ g m \ ); ;
case 2: printf ("\nMensagem 2\n");break;
case 3: printf ("\nMensagem 3\n");break;
case 4: printf ("\nMensagem 4\n");break;p ( g )
default: printf ("\nMensagem de erro\n");
}
system("Pause");
Usado somente 
com switch!
system( Pause );
return 0;
}
13
Uso de seleção condicionalç
9Condicional Simples : if9Condicional Simples : if
¾ execução de comando (simples ou composto) depende de 
1 condição: pode ou não ser executado.
9Seleção Dupla : if-else
¾ 2 comandos (simples o composto) c ja e ec ção é¾ 2 comandos (simples ou composto), cuja execução é 
mutuamente exclusiva: nunca acontece de serem 
executados juntos ou de nenhum dos 2 ser executado.
9Seleção múltipla : switch
¾ grupos de 1 ou mais comandos cuja decisão de execução 
depende da comparação de um valor obtido com diversos 
possíveis valores pré-estabelecidos (+ de 2).
14
Seja o problema:Seja o problema:
Fazer um programa que calcule o preço de um Fazer um programa que calcule o preço de um 
produto, a partir do tempo levado em sua produção 
e dotempo gasto no projeto do produto (mínimo 1 e do tempo gasto no projeto do produto (mínimo 1 
mês cada).
Usar a seguinte a tabela para calcular o preço:g p p ç
– 2 meses: R$ 1.000,00
– 3 meses: R$ 1.500,00
– 4 meses: R$ 2.000,00
– mais de 4 meses: R$ 2.500,00
15
Preço de um produto, a partir do tempo Preço de um produto, a partir do tempo 
//Calcula preco a ser cobrado por um servico
#i l d tdi h
levado em sua produçãolevado em sua produção
#include <stdio.h>
#include <stdlib.h>
int main ( )
{{
int tempo_prod, tempo_projeto;
printf("Tempo de projeto: ");
scanf("%d", &tempo_projeto);
i tf("T d d ")printf("Tempo de producao: ");
scanf("%d", &tempo_prod);
switch (tempo_prod + tempo_projeto)
{{
case 2 : printf ("\nPreco: R$ 1.000,00\n");
break; 
case 3 : printf ("\nPreco: R$ 1.500,00\n");
b k;break;
case 4 : printf ("\nPreco: R$ 2.000,00\n");
break; 
default: printf ("\nPreco: R$ 2.500,00\n");p ( $ , );
}
return 0; } 
Expressão inteira 
com operadores
16
Seja o problema:j p
Fazer um programa que simule uma calculadora 
que executa as quatro operações aritméticas que executa as quatro operações aritméticas 
(soma, subtração, produto e divisão). 
O programa deve ler os dois valores (operandos) e O programa deve ler os dois valores (operandos) e 
a operação que deverá ser efetuada. 
Após o cálculo, dar a resposta.p , p
17
//executa uma das quatro operações aritméticas sobre dois operandos
#i l d tdi h#include <stdio.h>
#include <stdlib.h>
int main ( )
{ 
float operando1 operando2; Solução não float operando1, operando2; 
char operador; 
printf("\nOperador: "); 
scanf("%c", &operador); 
printf("\nOperando 1: ");
Solução não 
controla o 
problema da 
divisão por zeroprintf( \nOperando 1: ); 
scanf("%f", &operando1); 
printf("\nOperando 2: "); 
scanf("%f", &operando2); 
switch (operador)
divisão por zero.
switch (operador)
{
case '+': printf("\nresultado: %f\n", operando1 + operando2);
break;
case '-': printf("\nresultado: %f\n", operando1 - operando2);case : printf( \nresultado: %f\n , operando1 operando2); 
break;
case '*': printf("\nresultado: %f\n", operando1 * operando2); 
break;
case '/': printf("\nresultado: %f\n", operando1 / operando2);p ( , p p );
break;
default: printf ("\nOperador invalido");
}
return 0; 
}
18
//executa uma das quatro operações aritméticas sobre dois operandos:
#include <stdio.h>
#include <stdlib.h>
i t i ( )int main ( )
{ 
float operando1, operando2; 
char operador; 
printf("\nOperador: ");printf( \nOperador: ); 
scanf("%c", &operador); 
printf("\nOperando 1: "); 
scanf("%f", &operando1); 
printf("\nOperando 2: "); 
Solução controla 
o problema da scanf("%f", &operando2); 
switch (operador)
{
case '+': printf("\nresultado: %f\n", operando1 + operando2);
break;
o problema da 
divisão por zero.
break;
case '-': printf("\nresultado: %f\n", operando1 - operando2); 
break;
case '*': printf("\nresultado: %f\n", operando1 * operando2); 
break;;
case '/': if (operando2) // verdadeiro se diferente de zero!!!
printf("\nresultado: %f\n", operando1 / operando2);
else
printf ("\nDivisao por zero\n");
breakbreak;
default: printf ("\nOperador invalido");
}
return 0; 
}}
19
Seja o problema:j p
Processar e informar uma venda de livros em uma livraria. 
Para isso, obter código do tipo de livro vendido (A, B, C) e 
ú d id d 
g p
número de unidades. 
Preços: 
Tipo A - R$ 10,00 p
Tipo B - R$ 20,00
Tipo C - R$ 30,00
20
// Calcula preço de uma venda de livro:
#include <stdio.h>
#include <stdlib h>#include <stdlib.h>
int main ( )
{ 
char codigo;
float a pagar;float a_pagar;
int numero_unidades;
printf("Codigo do livro: "); 
scanf("%c", &codigo);
printf("Numero de unidades: "); printf( Numero de unidades ); 
scanf("%d", &numero_unidades);
switch (codigo)
{
case 'A':
 ' ' d d * 10 case 'a': a_pagar = numero_unidades * 10; 
break; 
case 'B':
case 'b': a_pagar = numero_unidades * 20; 
b k 
Default com mais de 
um comando.
break; 
case 'C':
case 'c': a_pagar = numero_unidades * 30; 
break;
default: printf("Codigo errado!"); 
Imprime se 
p m t 0!default: printf("Codigo errado!"); 
a_pagar = 0; 
}
printf("\nO valor total a pagar eh: R$ %.2f\n", a_pagar); 
return 0; 
pagamento = 0!
return 0; 
}
21
// Calcula preço de uma venda de livro:
#include <stdio.h>
#include <stdlib.h>#include stdlib.h
int main ( )
{ 
char codigo;
float a_pagar;
i t id dint numero_unidades;
printf("Codigo do livro: "); 
scanf("%c", &codigo);
printf("Numero de unidades: "); 
s nf("%d" &n m nid d s);scanf("%d", &numero_unidades);
switch (codigo)
{
case 'A':
case 'a': a pagar = numero unidades * 10; case a : a_pagar numero_unidades 10; 
break; 
case 'B':
case 'b': a_pagar = numero_unidades * 20; 
break; break; 
case 'C':
case 'c': a_pagar = numero_unidades * 30; 
break;
default: printf("Codigo errado!\n"); Imprime somente se p m t ! 0!p ( g )a_pagar = 0; 
}
if (a_pagar > 0) // só imprime se válido
printf("\nO valor total a pagar eh: R$ %.2f\n", a_pagar); 
return 0; 
pagamento != 0!
return 0; 
}
22
// Calcula preço de uma venda de livro:
#include <stdio.h>
#include <stdlib.h> Para integrar#include stdlib.h
#include <ctype.h> // funções toupper e tolower
int main ( )
{ 
char codigo;
fl t
case 'A':
e
case 'a':float a_pagar;
int numero_unidades;
printf("Codigo do livro: "); 
scanf("%c", &codigo);
di t l ( di ); // con erte caractere lido para minúsc la se possí el
case a :
codigo = tolower(codigo); // converte caractere lido para minúscula, se possível
printf("Numero de unidades: "); 
scanf("%d", &numero_unidades);
switch (codigo)
{{
case 'a': a_pagar = numero_unidades * 10; 
break; 
case 'b': a_pagar = numero_unidades * 20; 
break; break; 
case 'c': a_pagar = numero_unidades * 30; 
break;
default: printf("Codigo errado!\n"); 
a_pagar = 0; _p g
}
if (a_pagar > 0) // só imprime se válido
printf("\nO valor total a pagar eh: R$ %.2f\n", a_pagar); 
return 0; 
}}
23
Seja o problema:j p
Processar e informar uma venda de livros em uma livraria. 
Para isso, obter código do tipo de livro vendido (A, B, C) e 
ú d id d 
g p
número de unidades. 
Preços: 
Tipo A - R$ 10,00 p
Tipo B - R$ 20,00
Tipo C - R$ 30,00
Se tipo = B, ofereça 10% de desconto para compras a vista.
24
...
char codigo;
float a_pagar, desconto;
int numero unidades resposta; Oferece descontoint numero_unidades, resposta;printf("Codigo do livro: "); 
scanf("%c", &codigo);
printf("Numero de unidades: "); 
scanf("%d", &numero_unidades);
switch (codigo)
Oferece desconto
no livro B
switch (codigo)
{
case 'A':
case 'a': a_pagar = numero_unidades * 10; 
break; 
case 'B':case B :
case 'b': printf("A vista? (1 - sim; 0 - nao): ");
scanf("%d", &resposta); 
a_pagar = numero_unidades * 20; 
if (resposta) // se a vista, calcula e informa o desconto
{{
desconto = a_pagar * 0.1;
a_pagar = a_pagar - desconto;
printf("\nO valor do desconto eh: R$ %.2f\n", desconto);
} 
break;break; 
case 'C':
case 'c': a_pagar = numero_unidades * 30; 
break;
default: printf("Codigo errado!\n");default: printf( Codigo errado!\n ); 
a_pagar = 0; 
}
if (a_pagar > 0) // só imprime se válido
printf("\nO valor total a pagar eh: R$ %.2f\n", a_pagar); 
system("Pause");system( Pause );
return 0; 
}
25
Seja o problema:Seja o problema:
Fornecido um código caractere correspondente a Fornecidoum código caractere, correspondente a 
um estado civil, devolver por extenso o estado 
civil correspondente.p
Devem ser aceitas na entrada tanto maiúsculas 
quanto minúsculas.
Codificação dos estados civis considerados:
S - Solteiro
C C dC - Casado
D - Divorciado
V ViúvV - Viúvo
Qualquer outro caractere de entrada deve ser 
acusado como estado civil incorretoacusado como estado civil incorreto.
26
//Apresenta o estado civil correspondente ao caractere informado
#include <stdio.h>
#include <stdlib h>#include <stdlib.h>
#include <ctype.h> // funções toupper e tolower
int main ( )
{ 
char estado civil; char estado_civil; 
printf("\nEstado Civil (C - Casado, S - Solteiro, D - Divorciado ou V - Viuvo):"); 
scanf("%c", &estado_civil); 
switch (estado civil) Valores literais char devem serswitch (estado_civil)
{ 
case 'c': 
case 'C': printf ("\nCasado\n");
break;
Valores literais char devem ser 
colocados entre apóstofros.
break;
case 's':
case 'S': printf ("\nSolteiro\n");
break; 
 'd'
O modo de 
funcionamento do
h/ case 'd':
case 'D': printf ("\nDivorciado\n"); 
break; 
case 'v':
 'V' i f ("\ Vi \ ")
switch/case permitiu 
aceitar para cada 
opção de estado civil 
t t iú l t case 'V': printf ("\nViuvo\n");
break;
default: printf ("\nEstado Civil incorreto\n"); 
} 
tanto maiúscula quanto 
minúscula.
return 0; 
}
27
//Apresenta o estado civil correspondente ao caractere informado
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h> // funções toupper e tolower
int main ( )
{ { 
char estado_civil; 
printf("\nEstado Civil (C - Casado, S - Solteiro, D - Divorciado ou V - Viuvo):"); 
scanf("%c", &estado_civil); 
estado_civil = tolower(estado_civil); // se maiúscula, converte pata minúscula
switch (estado_civil)
{ 
case 'c': printf ("\nCasado\n"); Reduz testecase c : printf ( \nCasado\n );
break;
case 's': printf ("\nSolteiro\n");
break; 
Reduz teste 
apenas para 
minúsculas
case 'd': printf ("\nDivorciado\n"); 
break; 
case ‘v': printf ("\nViuvo\n");
break;break;
default: printf ("\nEstado Civil incorreto\n"); 
} 
return 0; 
}}
28
Seja o problema:j p
C f t i t i f id t 0 10 Conforme uma nota inteira fornecida, entre 0 10, 
imprimir uma das seguintes mensagens:
0 a 5 – Reprovado0 a 5 Reprovado
6 a 9 – Aprovado
10 – Aprovado com louvor. pro a o com ou or.
Em C, esse problema pode ser resolvido tanto 
 ã d f 
p p
por uma sucessão de ifs, quanto por um 
comando switch/case.
29
Mensagem dependendo de nota 
inteira: com ifs
//Recebida uma nota, fornecer uma das seguintes mensagens:
//0 a 6: Reprovado; 7 a 9: Aprovado; 10: Aprovado com louvor. 
inteira: com ifs
p ; p ; p m
#include <stdio.h>
#include <stdlib.h>
int main ( )
{ { 
int nota; 
printf("\nNota (0 a 10): "); 
scanf("%d", &nota); 
if (nota <0 || nota > 10) // elimina notas inválidasif (nota <0 || nota > 10) // elimina notas inválidas
printf(“Nota inválida!\n”);
else
if (nota <=6)
printf("\nReprovado\n");printf( \nReprovado\n );
else
if (nota nota <= 9)
printf("\nAprovado\n"); 
else // só sobrou nota = 10else // só sobrou nota = 10
printf("\nAprovado com louvor\n"); 
return 0; 
}
30
// Recebida uma nota fornecer uma das seguintes mensagens:
Mensagem dependendo de nota inteira: com switch/case.
// Recebida uma nota, fornecer uma das seguintes mensagens:
//0 a 6: Reprovado; 7 a 9: Aprovado; 10: Aprovado com louvor. 
#include <stdio.h>
#include <stdlib.h>
int main ( )
{ { 
int nota; 
printf("\nNota (0 a 10): "); 
scanf("%d", &nota); 
if (nota < 0 || nota > 10)( || )
printf(“Nota inválida!\n”);
else
switch (nota)
{
case 0:case 0:
case 1:
case 2:
case 3:
case 4:
case 5: case 5: 
case 6: printf("\nReprovado\n");
break;
case 7:
case 8:case 8
case 9: printf("\nAprovado\n"); 
break;
case 10: printf("\nAprovado com louvor\n"); // ou default
}
return 0; return 0; 
}
31
Mas se a nota não for inteira?
Nesse caso, em C, apenas ifs
podem ser usados para testar as podem ser usados para testar as 
condições.
Switch/case não é mais uma 
opção, já que só opera com 
expressões int long ou charexpressões int, long ou char.
32
Aninhamento de switch/cases:
Seja o problema:
Realizar uma de três tarefas conforme solicitação do Realizar uma de três tarefas, conforme solicitação do 
usuário:
1 - emissão de mensagens de aprovação ou reprovação 
dependendo do valor de uma nota inteira;dependendo do valor de uma nota inteira;
2 - cálculo do preço a ser pago por um serviço;
3 - indicação por extenso de um estado civil informado.
Na solução apresentada a seguir, foram usados comandos Na solução apresentada a seguir, foram usados comandos 
switch/case para resolver, tanto a ativação das opções 
do usuário, quanto a solução de cada tarefa solicitada.
T i i h d i h/ d Tem-se assim um aninhamento de switch/cases no caso do 
cálculo do preço de um serviço. 
Observar que nesses casos os valores das expressões são 
33
Observar que nesses casos os valores das expressões são 
avaliados de forma independente nos switch/cases.
/* Obtém dados e informa resultados, a partir de opção do usuário:
#include <stdio.h>
#include <stdlib.h>
int main ( )
switch (opcao)
{
case 1: printf("\nNota (0 a 10): "); ( )
{
int opcao; // define o que sera feito
int tempo_prod, tempo_projeto; // variaveis para calculo preco servico
int nota; // varivavel para opcao relativa a nota
h d i il // i l d d i il
p f( \ ( ) );
scanf("%d", &nota); 
switch (nota)
{
case 0:
case 1:
Aninhamento de switch/cases
char estado_civil; // variavel para opcao de estado civil
printf (“ Informe o que deseja que seja executado:\n”);
printf("\nOpcao 1 - mensagem nota"); 
printf("\nOpcao 2 - preco servico"); 
i tf("\ O 3 t d i il\ \ ") 
(...) 
} // fim do switch/case da nota
break; 
case 2: printf("Tempo de projeto: ");
scanf("%d", &tempo_projeto);printf("\nOpcao 3 - estado civil\n\n"); 
scanf("%d", &opcao);
( , p _p j );
printf("Tempo de producao: ");
scanf("%d", &tempo_prod);
switch (tempo_prod + tempo_projeto)
{
case 2 : printf ("\nPreco: R$ 1.000,00\n");p ( $ , )
break; 
(...)
} // fim do switch/case da preco servico
break;
case 3: printf("\nEstado Civil (C - Casado, S - Solteiro, D - Divorciado ou p ( ( , ,
V - Viuvo):"); 
scanf(" %c", &estado_civil); 
switch (estado_civil)
{ 
case 'c': 
case 'C': printf ("\nCasado\n");
break;
(...) 
} // fim do switch/case do estado civil 
break; 
} // /} // fim do switch/case opcao
return 0; 
}
34
Vantagens e Desvantagens do 
it h/switch/case:
V tVantagens
• O código produzido é mais claro. 
A ló i fi i id t
Desvanta ens
• A lógica fica mais evidente.
Desvantagens
• Serve como alternativa apenas para casos em que 
sejam testadas apenas igualdades envolvendo sejam testadas apenas igualdades envolvendo 
expressões int, long ou char.
• Não pode testar intervalos!!
(IF...ELSE é mais abrangente!!)
35
Uso de seleção condicionalç
9Condicional Simples : if9Condicional Simples : if
¾ execução de comando (simples ou composto) depende de 
1 condição: pode ou não ser executado.
9Seleção Dupla : if-else
¾ 2 comandos (simples ou composto), cuja execução é 
mutuamente exclusiva: nunca acontece de seremmutuamente exclusiva: nunca acontece de serem 
executados juntos ou de nenhum dos 2 ser executado.
9Seleção múltipla : switchSeleção múltipla : switch
¾ grupos de 1 ou mais comandos cuja decisão de execução 
depende da comparação de um valor obtido com diversos 
possíveis valores pré-estabelecidos (+ de 2).
¾ Adequado para a implementaçãode menus.
¾ Indequado para associar comandos a intervalos ou diversos 
valores
36
Ex:Ex: Fazer o trecho de um programa C que, dependendo
do conteúdo de “codigo”, atribua o conteúdo especificado
na tabela abaixo à variável “resultado”. 
Codigo ResultadoCodigo Resultado
1 Resultado + 5
2 Inalterado2 Inalterado
3 Resultado – 2
4 Inalterado
5 Resultado – 2
6 2* (Resultado +1)
7 Inalterado7 Inalterado
8 0
9 09 0
10 0
11 123
37
...
//uso de seleção dupla
if (codigo == 1)
Resultado + 51
Inalterado4
Resultado –23
Inalterado2
ResultadoCódigo
( g )
resultado = resultado + 5;
else 
if (codigo == 3 || codigo == 5) 08
Inalterado7
2* (Resultado +1)6
Resultado –25
Inalterado4
if (codigo 3 || codigo 5)
resultado = resultado – 2;
else 
if (codigo == 6)
12311
010
09
if (codigo == 6) 
resultado = 2 * (resultado + 1);
else 
if ( di > 7 && di < 11) código if (codigo > 7 && codigo < 11)
resultado = 0;
else
g
inválido?
if (codigo == 11)
resultado = 123;
...
resultado = 123; 
else
resultado = 123; 
elseelse 
If (codigo != 4 && codigo != 2 && codigo != 7)
printf(“código inválido!”);
else 
If (codigo < 1 || codigo > 11)
printf(“código inválido!”);
38
...
// uso de switch case:
switch (codigo) Resultado + 51 I lt d2
ResultadoCódigo
switch (codigo)
{
case 1: resultado = resultado + 5;
break; 2* (Resultado +1)6
Resultado –25
Inalterado4
Resultado –23
Inalterado2
break;
case 2:
case 4:
case 7: break; // não faz nada
 12311
010
09
08
Inalterado7
( )
case 3:
case 5: resultado = resultado – 2;
break;
case 6: resultado = 2 * (resultado + 1);
12311
case 6: resultado = 2 * (resultado + 1);
break;
case 8:
case 9:case 9:
case 10: resultado = 0;
break; 
case 11: resultado = 123;
break; 
default: printf(“Codigo informado invalido!”); // não precisa break 
}
39
Escreva um programa para fazer o cálculo das 
seguintes conversões entre sistemas de medida:seguintes conversões entre sistemas de medida:
a) dada uma temperatura na escala Celsius fornecer a a) dada uma temperatura na escala Celsius, fornecer a 
equivalente em graus Fahrenheit, e vice-versa;
fórmula de conversão: 1º F = (9 / 5)º C + 32 ( )
b) dada uma medida em polegadas, fornecer a equivalente 
em milímetros, e vice-versa;
ó l lfórmula de conversão: 1 pol = 24,5 mm 
O programa deve mostrar uma tela com as quatro as 
possíveis mudanças de sistema de medida e solicitar possíveis mudanças de sistema de medida, e solicitar 
qual a que deverá ser realizada. Em seguida, deve ler o 
valor e fornecer o valor convertido como resposta.
40

Outros materiais