• Nenhum resultado encontrado

Estruturas de seleção

N/A
N/A
Protected

Academic year: 2021

Share "Estruturas de seleção"

Copied!
17
0
0

Texto

(1)

PC-I © MAP’2019 Estruturas de seleção

Estruturas de seleção

94

Execução condicional

Etapa em um programa onde uma condição é avaliada e, dependendo do resultado, diferentes ações podem ser realizadas.

V F

(2)

PC-I © MAP’2019 Estruturas de seleção

Condicional simples

Uma ou mais ações serão executadas se,


e apenas se, uma determinada expressão


for verdadeira.

96

Números pares

Leia um número inteiro e, se o mesmo for divisível por 2, exiba a mensagem “O número digitado é par.”

Leia os valores de A e B e, se B for diferente de zero, calcule a divisão de A por B.

F

V expressão

Condicional composta

Se uma determinada expressão for 


verdadeira, algumas ações serão 


executadas. Se a expressão for falsa, 


outras ações serão executadas.

Números pares e ímpares

Leia um número inteiro e, se o mesmo for divisível por 2, exiba a mensagem “O número informado é par.” Caso contrário, exiba a mensagem “O número informado é ímpar”.

∞ (versão Tropa de Elite)

Leia os valores de A e B e, se B for diferente de zero, calcule a divisão de A por B. Caso contrário, exiba a mensagem “Pede pra sair!”

F expressão V

(3)

PC-I © MAP’2019 Estruturas de seleção

Condicional múltipla

A condição avaliada permite
 mais de 2 opções. 98 F V expressão F V expressão F V expressão

Expressões condicionais

• Estabelecem uma comparação entre os dados (constantes ou variáveis) de um programa.

• O resultado dessa comparação é interpretado pela linguagem como um valor lógico booleano (verdadeiro ou falso).

• As expressões condicionais podem envolver operadores aritméticos,

(4)

PC-I © MAP’2019 Estruturas de seleção

Operadores relacionais

Estabelecem relações entre os dados de um programa.

100

Operador relacional Significado Prioridade

== igual baixa != diferente baixa < menor alta <= menor ou igual alta > maior alta >= maior ou igual alta

Operadores relacionais tem prioridade mais baixa que os operadores aritméticos. a é menor do que b? a < b

a é maior do que a soma b + c? a > b + c

a é igual a zero? a == 0

a é diferente de zero? a != 0

Verdadeiro e Falso na linguagem C

A avaliação de uma expressão relacional produz um valor booleano (verdadeiro ou falso), que é convertido para um valor numérico:

• 0, se a expressão for avaliada como falsa.

• 1, se a expressão for avaliada como verdadeira.

Expressão relacional

Expressão envolvendo dados e/ou operadores aritméticos, e operadores relacionais.

5 == 5.0

1, pois não há diferença entre variáveis de tipos numéricos.

5 == '5'

0, pois o valor inteiro do caractere '5' é 53.

(5)

PC-I © MAP’2019 Estruturas de seleção

Operadores lógicos

Utilizados para testar mais de uma condição, simultaneamente.

102

Operador lógico Significado Prioridade

! NOT altíssima

&& AND alta

|| OR baixa

Operadores lógicos tem prioridade mais

baixa que os operadores relacionais (exceto o !).

||

expressão 11 0 expressão 2 1 1 1 0 1 0

&&

expressão 11 0 expressão 2 1 1 0 0 0 0 expressão !expressão 1 0 0 1

Verdadeiro e Falso na linguagem C

A avaliação de uma expressão lógica produz um valor booleano (verdadeiro ou falso), que é convertido para um valor numérico:

• 0, se a expressão for avaliada como falsa.

• 1, se a expressão for avaliada como verdadeira.

Expressão lógica

Expressão envolvendo dados e/ou operadores aritméticos e/ou operadores relacionais e/ ou operadores lógicos.

Generalizando...

• Qualquer valor ou expressão diferente de zero será considerada como verdadeira. • Qualquer valor ou expressão igual à zero será considerada como falsa.

(6)

PC-I © MAP’2019 Estruturas de seleção

Exemplo

Sendo a = 3, b = 1 e c = –1, determine o valor da seguinte expressão: ( ( (b + c <= a) + !(2*b) ) && c ) || (3 - !c + 1) Substituindo os valores de a, b e c: ( ( (1 + (-1) <= 3) + !(2*(1) ) && (-1) ) || (3 - !(-1) + 1) ( ( (0 <= 3) + !(2) ) && (-1) ) || (3 - 0 + 1) ( ( 1 + 0 ) && (-1) ) || 4 ( 1 && (-1) ) || 4 1 || 4 1 Portanto a expressão é verdadeira.

104

Estrutura condicional simples

if()

A sintaxe da estrutura if() é: if()

Estrutura utilizada para avaliar uma condição simples.

Atenção

Não se deve usar “;” após o if().

if (expressão)

{

// comandos a serem executados se a expressão for verdadeira.

(7)

PC-I © MAP’2019 Estruturas de seleção

A importância dos delimitadores de bloco { e }

As instruções que deverão ser executadas, no caso da expressão da

estrutura if() ser avaliada como verdadeira, deverão ser escritas

dentro de um bloco delimitado pelos símbolos { e }.

No caso da expressão da estrutura if() ser considerada falsa,

todo o bloco de comandos será ignorado e o programa prossegue a partir do primeiro comando após o bloco.

106

Dica importante

Para facilitar a visualização, os comandos dentro de um bloco também devem ser recuados.

Atenção!

Se os delimitadores de bloco { e } forem omitidos, a estrutura if() assume como bloco apenas o primeiro comando após o if().

Exemplo: bloco de comandos

Considere o seguinte trecho de código:

E se os delimitadores de bloco do primeiro if() forem removidos?

aprovado = 0; // aprovado vale FALSO if (media >= 5.0)

{

aprovado = 1; // aprovado vale VERDADEIRO

puts("PARABÉNS!!!"); }

if (aprovado == 0)

puts("Você foi reprovado!");

Se a expressão media >= 5.0 for verdadeira...

o aluno será considerado aprovado e será parabenizado.

Se a expressão media >= 5.0 for falsa...

(8)

PC-I © MAP’2019 Estruturas de seleção

Estrutura condicional simples

if()

Exemplo: Ler um número inteiro e informar se o mesmo é par.

108

#include <stdio.h>

int main()

{

int A;

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

if (A % 2 == 0) {

printf("O numero digitado é par.\n"); } return(0); } V Início Fim A A%2 == 0 “PAR” “A?” F

Estrutura condicional simples

if()

Exemplo: Ler os coeficientes da função de 2º grau f(x) = ax2 + bx + c

e calcular as raízes reais, caso existam. #include <stdio.h>

#include <math.h>

int main()

{

float a, b, c, delta, x1, x2;

printf("Digite os coeficientes da equacao ax^2 + bx + c = 0: "); scanf("%f %f %f", &a, &b, &c);

delta = b*b – 4*a*c;

if (delta >= 0) {

x1 = (-b + sqrt(delta))/(2*a); x2 = (-b – sqrt(delta))/(2*a);

printf("As raizes reais sao:\n x1 = %f\n x2 = %f\n", x1, x2); }

(9)

PC-I © MAP’2019 Estruturas de seleção

Estrutura condicional simples

if()

Exemplo: Ler 3 valores numéricos distintos e exibir o maior deles.

110 #include <stdio.h> int main() { float a, b, c; float maior;

printf("Digite 3 números distintos: "); scanf("%f %f %f", &a, &b, &c);

if ( a > b && a > c ) { maior = a; } if ( b > a && b > c ) { maior = b; } if ( c > a && c > b ) { maior = c; }

printf("O maior numero digitado é %f\n", maior);

return(0); }

Estrutura condicional simples

if()

Exemplo: Verificar se um número real x pertence ao intervalo [–1, 1].

#include <stdio.h>

int main()

{

float x;

printf("Digite um número: "); scanf("%f", &x); if (x >= -1 && x <= 1) { printf("Pertence.\n”); } return(0); } #include <stdio.h> int main() { float x;

printf("Digite um número: "); scanf("%f", &x); if ( !(x < -1 || x > 1) ) { printf("Pertence.\n”); } return(0); }

(10)

PC-I © MAP’2019 Estruturas de seleção

Estrutura condicional composta

if()-else

A sintaxe da estrutura if()-else é:

112

if()-else

Estrutura utilizada para avaliar uma condição composta.

Atenção

Não se deve usar “;” após o if(), nem após o else.

if (expressão)

{

// comandos a serem executados se a expressão for verdadeira.

}

else

{

// comandos a serem executados se a expressão for falsa.

}

Estrutura condicional composta

if()-else

Exemplo: Ler um número inteiro e informar se o mesmo é par ou ímpar.

#include <stdio.h>

int main()

{

int A;

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

if (A % 2 == 0) {

printf("O numero digitado é par.\n"); }

else {

printf("O numero digitado é impar.\n"); } return(0); } F Início Fim A A%2 == 0 “IMPAR” “A?” “PAR” V

(11)

PC-I © MAP’2019 Estruturas de seleção

Estrutura condicional composta

if()-else

114 #include <stdio.h> #include <math.h> int main() { float a, b, c, delta, x1, x2;

printf("Digite os coeficientes da equacao ax^2 + bx + c = 0: "); scanf("%f %f %f", &a, &b, &c);

delta = b*b – 4*a*c;

if (delta >= 0) {

x1 = (-b + sqrt(delta))/(2*a); x2 = (-b – sqrt(delta))/(2*a);

printf("As raizes reais sao:\n x1 = %f\n x2 = %f\n", x1, x2); }

else {

printf("Delta = %f\n", delta);

printf("A funcao nao possui raizes reais\n"); }

return(0); }

Estrutura condicional composta

if()-else

Exemplo: Para valores de a, b e c informados pelo usuário, verifique se a expressão abaixo é verdadeira ou falsa:

(!(2*b != c) == b && a – b >= !c) || (b - a == 4*c) #include <stdio.h>

int main()

{

float a, b, c;

printf("Informe os valores de a, b e c: "); scanf("%f %f %f", &a, &b, &c);

if ( (!(2*b != c) == b && a – b >= !c) || (b - a == 4*c) )

printf("A expressão é verdadeira.\n"); else

printf("A expressão é falsa.\n");

return(0); }

(12)

PC-I © MAP’2019 Estruturas de seleção

if()

×

if()-else

Neste exemplo, mesmo que a média M seja maior ou igual a 7.0 no primeiro teste, o programa ainda irá executar os outros 2 testes (desnecessário).

116

Média (versão Tropa de Elite)

Leia os valores das 4 notas e calcule a média aritmética M. Se M for maior ou igual a 7.0 exiba a mensagem “Aprovado”. Caso contrário, se M for maior ou igual a 5.0, exiba a mensagem “Realizar Prova P5”, senão exiba a mensagem “Vai voltar pro saco”.

if ( M >= 7.0 )

printf("Aprovado.\n");

if ( M >= 5.0 && M < 7.0 )

printf("Realizar Prova P5.\n");

if ( M < 5.0 )

printf("Vai voltar pro saco.\n");

Aninhamento

Técnica de seqüenciar os testes de modo a melhorar o desempenho do programa.

expressão1 V comandos executados se a expressão1 for verdadeira F expressão2 V comandos executados se a expressão2 for verdadeira F comandos executados se a expressão2 for falsa

(13)

PC-I © MAP’2019 Estruturas de seleção

Aninhamento

Se a média M for maior ou igual a 7.0, não há necessidade de realizar outros testes. 118 if ( M >= 7.0 ) printf("Aprovado.\n"); else if ( M >= 5.0 && M < 7.0 )

printf("Realizar Prova 5.\n");

else

printf("Vai voltar pro saco.\n");

Atenção

Uma cláusula else sempre pertence ao if imediatamente anterior. Caso isso não for desejável, deve-se utilizar os delimitadores de bloco { e }.

Aninhamento

Exemplo: Ler 2 números inteiros e exibir o maior deles. #include <stdio.h>

int main()

{

int a, b;

printf("Digite 2 numeros inteiros: "); scanf("%d %d", &a, &b);

if ( a > b )

printf("O maior número é: %d\n", a);

else

if ( b > a )

printf("O maior número é: %d\n", b); else

printf("Dããã! Você digitou 2 números iguais...\n");

return(0); }

(14)

PC-I © MAP’2019 Estruturas de seleção

Aninhamento

Exemplo: Ler 3 números inteiros distintos e exibi-los em ordem crescente.

120

printf("Digite 3 numeros inteiros distintos: "); scanf("%d %d %d", &a, &b, &c);

if ( a > b ) if ( a > c ) if ( b > c ) printf("%d %d %d\n", c, b, a); else printf("%d %d %d\n", b, c, a); else printf("%d %d %d\n", b, a, c); else if ( b > c ) if ( a > c ) printf("%d %d %d\n", c, a, b); else printf("%d %d %d\n", a, c, b); else printf("%d %d %d\n", a, b, c);

Aninhamento

Exemplo: Ler uma nota e exibir o conceito correspondente.

printf("Informe a nota: "); scanf("%f", &nota);

if ( nota >= 9.0 )

printf("Conceito A.\n");

else if ( nota >= 7.5 ) printf("Conceito B.\n"); else if ( nota >= 5.0 ) printf("Conceito C.\n"); else if ( nota >= 3.0 ) printf("Conceito D.\n"); else

printf("Conceito E.\n");

(15)

PC-I © MAP’2019 Estruturas de seleção

Aninhamento: outra versão

O usuário poderá escolher qualquer operação, pressionando as respectivas teclas. A tecla selecionada pelo usuário será lida como um caractere.

122

Aninhamento: versão else-if()

Muda apenas a forma de organizar os comandos da estrutura if()-else.

char op; float a, b;

// comandos para apresentar o menu

scanf("%c", &op);

printf("Digite 2 valores nao-nulos: "); scanf("%f %f", &a, &b);

if ( op == '+' ) printf("Soma = %f\n", a + b); else if ( op == '-' ) printf("Diferenca = %f\n", a - b); else if ( op == '*' ) printf("Produto = %f\n", a * b); else if ( op == '/' ) printf("Quociente = %f\n", a / b); else

puts("Opcao invalida!");

(16)

PC-I © MAP’2019 Estruturas de seleção

A estrutura condicional múltipla switch()

O aninhamento de várias

estruturas compostas if()-else (ou else-if()) permite o

tratamento de expressões

condicionais que permitem mais de duas alternativas.

Se a expressão resultar em um valor do tipo int ou char, é possível utilizar a estrutura condicional múltipla switch().

124 switch(expressão) { case constante1: //comandos1 break; case constante2: //comandos2 break; ... case constanteN: //comandosN break; default: //comandos }

Funcionamento da estrutura switch()

1. A expressão é avaliada.

2. O fluxo de execução é desviado para o rótulo case cujo valor equivale ao da expressão. Serão executados todos os comandos até que seja encontrado o comando break.

3. A execução do comando break desvia o fluxo de execução para o

primeiro comando após a estrutura switch().

4. Se nenhum case corresponde ao valor da expressão, então o fluxo de execução será desviado para o rótulo default

(17)

PC-I © MAP’2019 Estruturas de seleção

Menu de opções: versão switch()

126

char op; float a, b;

puts("Selecione a operacao:\n"); puts(" [+] Adicao”); puts(" [-] Subtracao"); puts(" [*] Multiplicacao"); puts(" [/] Divisao"); printf("Opcao> "); scanf("%c", &op);

printf("Digite 2 valores: "); scanf("%f %f", &a, &b);

switch( op )

{

case '+': printf("Soma = %f\n", a + b); break; case ‘-': printf("Diferenca = %f\n", a - b); break;

case ‘*': printf("Produto = %f\n", a * b); break;

case ‘/': if (b != 0) printf("Quociente = %f\n", a / b); else puts("Divisao por zero!");

break;

default : puts("Opcao invalida!\n"); }

return(0);

O comando break

Cuidado!

A omissão do comando break causará a execução dos case’s subseqüentes.

int main()

{

int dd, mm, aaaa;

printf("Digite a data no formato dd-mm-aaaa: "); scanf("%d-%d-%d", &dd, &mm, &aaaa);

switch( mm ) {

case 4:

case 6:

case 9:

case 11: puts("Mes com 30 dias."); break;

case 2: puts("Este mes tem (geralmente) 28 dias."); break;

default: puts("Mes com 31 dias."); }

return(0); }

Referências

Documentos relacionados

Os coeficientes de correlação entre as medidas numa mesma planta variaram de 0,37 a 0,96, sendo apresentado uma divergência nos valores de DTN de em média 0,165°C (111%) o que

• Árvores são ideais para armazenar hierarquias, além de serem mais rápidas e eficientes do que as estruturas de dados lineares... • É formada por um “conjunto de

– Os elementos devem estar ordenados – Realizar a busca pelo meio do vetor.

O estudo objetiva apontar para o uso de periódicos como fonte histórica, registrar e investigar como o Jornal NH, durante o período de dezembro de 1990 a

Ao término da locação, a entrega das chaves só será processada após vistoria de saída, mediante a exibição dos comprovantes de quitação de todas as

II - serviços públicos da Administração Pública Municipal considerados essenciais, como saúde, assistência social, segurança pública, abastecimento de água,

Assim, concluímos que essas medidas alternativas de resolução de conflitos, a mediação e a conciliação, tendo como objetivo inicial de implantação a solução

08h30 10h00 Mesa Redonda TRATAMENTO NÃO FARMACOLÓGICO DA OBESIDADE. Moderadores: Luciano Teixeira (PE) e Bruna Costi