• Nenhum resultado encontrado

Controle de Fluxo - Condicionais

N/A
N/A
Protected

Academic year: 2021

Share "Controle de Fluxo - Condicionais"

Copied!
23
0
0

Texto

(1)

   

Controle de Fluxo - Condicionais

1

INF1005 – Programação I

Prof. Hélio Lopes

lopes@inf.puc-rio.br

sala 408 RDC

controle de fluxo - condicionais

tópicos

if

if…else

if…else if…else

expressões booleanas

operadores relacionais e lógicos

switch

referência

Capítulo 4 da apostila

(2)

tomada de

decisão

3

condicionais (tomada de decisão) - if

if  (  expressao  booleana  )    /*  se  expressao  for  verdadeira...  */  

{    

 bloco  de  comandos  1          /*  ...  executa  o  bloco  de  comandos  1,  */  

}  

próximo  comando...                  /*  prossegue  para  próximo  comando  após  if  */  

if  (  nota  <  5.0  )                      /*  se  expressao  for  verdadeira...  */  

{    

 printf("Reprovado");          /*  ...  executa  o  bloco  de  comandos  1,  */  

}  

printf("\nfim");                        /*  prossegue  para  próximo  comando  após  if  */  

exemplo

(3)

condicionais (tomada de decisão) – if...else

if  (  expressao  booleana  )    /*  se  expressao  for  verdadeira,...  */  

{    

 bloco  de  comandos  1          /*  ...  executa  o  bloco  de  comandos  1,  */  

}   else     {    

 bloco  de  comandos  2          /*  ...  senão,  executa  o  bloco  de  comandos  2  */  

}  

próximo  comando...                  /*  depois  prossegue  para  próximo  comando  após  if  */  

verdadeiro:  expressao  !=  0   falso:  expressao  ==  0   5 if  (  media  >=  6.0  )     {    printf("Aprovado\n");   }   else     {  

 printf("Em  prova  final\n");   }   printf("\nfim");  

exemplo

exemplo

#include  <stdio.h>    

int  main  (void)   {  

 float  media;  

 printf("Digite  sua  media:  ");    scanf("%f",  &media);    if  (media  >=  6)      {      printf("Aprovado\n");    }    else      {  

   printf("Em  prova  final\n");    }    return  0;   }     #include  <stdio.h>    

int  main  (void)   {  

 float  media;  

 printf("Digite  sua  media:  ");    scanf("%f",  &media);  

 if  (media  >=  6)    

   printf("Aprovado\n");    else    

   printf("Em  prova  final\n");  

 return  0;   }  

Quando só tem um comando, não precisa marcar como bloco entre { e }

05_01_cond_media.c

(4)

tomada de decisão

exemplo: qualificando a temperatura

casos de teste:

5°C 15°C 25°C 35°C

quente agradável frio

20°C

30°C

muito frio

10°C

7

Cuidado!

/*  temperatura  (versao  1  -­‐  INCORRETA)  */   #include  <stdio.h>  

int  main  (void)   {  

 int  temp;  

 printf("Digite  a  temperatura:  ");    scanf("%d",  &temp);    if  (temp  <  30)      if  (temp  >  20)        printf("Temperatura  agradavel  \n");    else      printf("Temperatura  quente  \n");    return  0;   }   Em C, um else está associado ao último if "sem else".

O que acontece quando a temperatura for: •  5oC ?

•  15oC ?

•  25oC ?

(5)

Cuidado!

/*  temperatura  (versao  1  -­‐  INCORRETA)  */   #include  <stdio.h>  

int  main  (void)   {  

 int  temp;  

 printf("Digite  a  temperatura:  ");    scanf("%d",  &temp);    if  (temp  <  30)      if  (temp  >  20)        printf("Temperatura  agradavel  \n");    else      printf("Temperatura  quente  \n");    return  0;   }  

O que acontece quando a temperatura for: •  5oC ? •  15oC ? •  25oC ? •  35oC ? 9

ainda incompleto

/*  temperatura  (versao  2  -­‐  INCOMPLETA)  */   #include  <stdio.h>  

int  main  (void)   {  

int  temp;  

 printf("Digite  a  temperatura:  ");    scanf("%d",  &temp);    if  (temp  <  30)    {      if  (temp  >  20)        printf("Temperatura  agradavel  \n");      }    else      printf("Temperatura  quente  \n");    return  0;   }  

O que acontece quando a temperatura for: •  5oC ? •  15oC ? •  25oC ? •  35oC ? 05_05_temp_erro2.c 10

(6)

versão correta

/*  temperatura  (versao  3  -­‐  correta)  */  

#include  <stdio.h>   int  main  (void)   {  

     int  temp;  

     printf("Digite  a  temperatura:  ");        scanf("%d",  &temp);  

     if  (temp  <  10)  

           printf("Temperatura  muito  fria  \n");        else  if  (temp  <  20)  

           printf("Temperatura  fria  \n");        else  if  (temp  <  30)  

           printf("Temperatura  agradavel  \n");        else  

           printf("Temperatura  quente  \n");  

     return  0;   }  

O que acontece quando a temperatura for: •  5oC ? •  15oC ? •  25oC ? •  35oC ? 05_07_temp_ok.c 11

encadeamento de if...else

/*  encadeamento  if...  else  */  

 

if  (  expressao1  )     {    

 bloco  de  comandos  1  

}  

else  if  (  expressao2  )   {    

 bloco  de  comandos  2  

}  

else  if  (  expressao3  )   {    

 bloco  de  comandos  3  

}  

else  

{    

 bloco  de  comandos  n  /*  executado  quando  todas  as  expressões  são  falsas  */  

}  

/*  próximo  comando  */  

/*  exemplo  anterior  */  

if  (temp  <  10)  

     printf("Temperatura  muito  fria  \n");  

else  if  (temp  <  20)  

     printf("Temperatura  fria  \n");  

else  if  (temp  <  30)  

     printf("Temperatura  agradavel  \n");  

else  

(7)

exercício

Escreva um programa em C que leia uma média e exiba o status do aluno:

  AP se o aluno está aprovado (média final >= 6)   RM se o aluno está reprovado (média final < 3)   PF se ou em prova final (caso contrário)

________________________________________________________  

________________________________________________________  

________________________________________________________  

________________________________________________________  

________________________________________________________  

________________________________________________________  

________________________________________________________  

________________________________________________________  

________________________________________________________  

________________________________________________________  

________________________________________________________  

________________________________________________________  

________________________________________________________  

 

EX. 01 13

exercício

Escreva um programa em C que leia uma média e exiba o status do aluno:

  AP se o aluno está aprovado (média final >= 6)   RM se o aluno está reprovado (média final < 3)   PF se ou em prova final (caso contrário)

#include  <stdio.h>    

int  main  (void)   {  

 float  media;  

 printf("Digite  a  media:  ");    scanf("%f",  &media);    

 if  (media  >=  6)      printf("AP");    else  if  (media  <  3)      printf("RM");    else      printf("PF");          return  0;   }     EX. 01 05_exerc_cond_media_if.c 14

(8)

dúvidas?

15

O que tem de errado com esse código?

if  (  media  >=  6.0  )    

{  

 printf("Aprovado\n");   }  

else  if  (  media  <  6.0  )   {  

 printf("Em  prova  final\n");   }  

printf("\nfim");  

Isso é conceitualmente ruim. Por quê?

if  (  media  >=  6.0  )     {    printf("Aprovado\n");   }   else   {  

 printf("Em  prova  final\n");   }  

(9)

expressão booleana

quando avaliada resulta no valor

falso ou

verdadeiro

em C:

0 significa falso

qualquer outro valor significa

verdadeiro

por convenção, utiliza-se geralmente o valor

1

para representar

verdadeiro

17

operadores relacionais

> < <= >= == !=

numa expressão booleana, a comparação de

dois operandos resulta em

0

, caso a expressão seja

falsa

, ou

1

, caso a expressão seja

verdadeira

Exemplo:

int a=10, b=10, c=5;

a > b

resulta em 0 (falso)

b > c

resulta em 1 (verdadeiro)

a == b resulta em 1 (verdadeiro)

b != c

resulta em 1 (verdadeiro)

03_15_op_rel.c

(10)

operadores lógicos

combinam expressões ou valores booleanos

conjunção (and)

(operador binário)

&&

a && b

disjunção (or)

(operador binário)

||

a || b

negação (not)

(operador unário)

!

!a

19

operadores lógicos – conjunção

&& (and)

|| (or) ! (not)

true && true resulta em true true && false resulta em false false && true resulta em false false && false resulta em false

exemplos

(1 > 0) && (2 > 0) é avaliada como 1 && 1, e resulta em 1 (verdadeiro) (1 > 0) && (2 < 0) é avaliada como 1 && 0, e resulta em 0 (falso) (2 < 0) && (1 > 0) resulta em 0 (false)

(11)

operadores lógicos – conjunção – exemplo

21

if  (  media  >=  5.0  &&  nota1  >=  3.0  &&  nota2  >=  3.0  &&  nota3  >=  3.0)     {  

 printf("Aprovado\n");   }  

operadores lógicos – disjunção

&& (and)

|| (or)

! (not)

true || true resulta em true true || false resulta em true false || true resulta em true false || false resulta em false

exemplos

(1 > 0) || (2 > 0) resulta em 1 (verdadeiro) (1 > 0) || (2 < 0) resulta em 1 (verdadeiro)

(2 < 0) || (1 > 0) é avaliada como 0 || 1, e resulta em 1 (verdadeiro) (1 < 0) || (2 < 0) é avaliada como 0 || 0, e resulta em 0 (falso)

(12)

operadores lógicos – disjunção – exemplo

23

if  (  media  <  5.0  ||  nota1  <  3.0  ||  nota2  <  3.0  ||  nota3  <  3.0)     {  

 printf("Em  prova  final\n");   }  

operadores lógicos - negação

&& (and) || (or)

! (not)

!true resulta em false !false resulta em true

exemplos

!(1 > 0) é avaliada como !1, e resulta em 0 (falso) !(1 < 0) é avaliada como !0, e resulta em 1 (verdadeiro)

(13)

operadores lógicos – negação – exemplo

25

if  (  !(  media  <  5.0  ||  nota1  <  3.0  ||  nota2  <  3.0  ||  nota3  <  3.0)  )   {    printf("Aprovado\n");   }  

dúvidas?

26 /*  conjunção  */  

if  (  media  >=  5.0  &&  nota1  >=  3.0  &&  nota2  >=  3.0  &&  nota3  >=  3.0)     {  

 printf("Aprovado\n");   }  

/*  disjunção  */  

if  (  media  <  5.0  ||  nota1  <  3.0  ||  nota2  <  3.0  ||  nota3  <  3.0)     {  

 printf("Em  prova  final\n");   }  

/*  negação  (e  disjunção)  */  

if  (  !(  media  <  5.0  ||  nota1  <  3.0  ||  nota2  <  3.0  ||  nota3  <  3.0)  )   {  

 printf("Aprovado\n");   }  

(14)

operadores lógicos

Seja:

int  a  =  2,  b  =  4,  c  =  5,  d  =  7;  

Avalie:

(a  <  b)  &&  (c  <  d)  

03_17_op_log.c 27 2 < 4 1 5 < 7 1 && 1 && 1 && 1

1 ambas expressões são avaliadas

EX. 02

operadores lógicos

Seja:

int  a  =  2,  b  =  4,  c  =  5,  d  =  7;  

Avalie:

(a  >  b)  &&  (c  <  d)  

2 > 4 0

0 não importa o que vem depois, pois a expressão combinada

sempre será falsa

&&

as expressões combinadas com && são avaliadas até que uma seja falsa (retornando 0) ou todas sejam verdadeiras (retornando 1)

(15)

operadores lógicos

Seja:

int  a  =  2,  b  =  4,  c  =  5,  d  =  7;  

Avalie:

(a  >  b)  ||  (c  >  d)  

03_17_op_log.c 29 2 > 4 0 5 > 7 0 || 0 || 0 || 0

0 ambas expressões são avaliadas

EX. 04

operadores lógicos

Seja:

int  a  =  2,  b  =  4,  c  =  5,  d  =  7;  

Avalie:

(a  <  b)  ||  (d  >  c)  

03_17_op_log.c 30 2 < 4 1

1 não importa o que vem depois, pois a expressão combinada

sempre será verdadeira

||

as expressões combinadas com || são avaliadas até que uma seja verdadeira (retornando 1) ou todas sejam falsas (retornando 0)

(16)

dúvidas?

31

exemplo – conversão de nota em conceito

Leia uma nota de 0 a 10 e escreva o conceito

equivalente, conforme a seguinte tabela:

notas conceitos 9.0 a 10.0 A 8.0 a 8.9 B 7.0 a 7.9 C 5.0 a 6.9 D menor que 5.0 F

(17)

exemplo – conversão de nota em conceito (1)

33

#include  <stdio.h>   int  main  (void)  {  

 float  nota;  

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

 if  (nota  >=  9.0)  {      printf("A");    }  

 if  (nota  >=  8.0  &&  nota  <  9.0)  {      printf("B");  

 }  

 if  (nota  >=  7.0  &&  nota  <  8.0)  {      printf("C");  

 }  

 if  (nota  >=  5.0  &&  nota  <  7.0)  {      printf("D");    }    if  (nota  <  5.0)  {      printf("F");    }    return  0;   }  

Esta solução é boa?

Por quê?

Por que não?

notas conceitos 9.0 a 10.0 A 8.0 a 8.9 B 7.0 a 7.9 C 5.0 a 6.9 D menor que 5.0 F

exemplo – conversão de nota em conceito (2)

34

#include  <stdio.h>   int  main  (void)  {  

 float  nota;  

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

 if  (nota  >=  9.0)  {      printf("A");    }  

 else  if  (nota  >=  8.0)  {      printf("B");    }  

 else  if  (nota  >=  7.0)  {      printf("C");    }  

 else  if  (nota  >=  5.0)  {      printf("D");    }    else  {      printf("F");    }    return  0;   }   notas conceitos 9.0 a 10.0 A 8.0 a 8.9 B 7.0 a 7.9 C 5.0 a 6.9 D menor que 5.0 F

(18)

exemplo – conversão de nota em conceito (3)

35

#include  <stdio.h>   int  main  (void)  {  

 float  nota;  

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

 if  (nota  >=  9.0)      printf("A");    else  if  (nota  >=  8.0)      printf("B");    else  if  (nota  >=  7.0)      printf("C");    else  if  (nota  >=  5.0)      printf("D");    else  

   printf("F");    return  0;   }  

O que mudou nesta

solução?

notas conceitos 9.0 a 10.0 A 8.0 a 8.9 B 7.0 a 7.9 C 5.0 a 6.9 D menor que 5.0 F

dúvidas?

(19)

raízes de equações do segundo grau

As raízes da equação

são:

Escreva um programa que leia os coeficientes

a

,

b

,

c

e

exiba as raízes reais da equação, se houver.

Utilize a função

double sqrt(double)

da biblioteca

math.h

para calcular a raiz quadrada de um número.

37 EX. 06

!=​−#±√⁠​#↑2 −4'( /2' 

'​!↑2 +#!+(=0

cálculo de volume

Escreva um programa que:

1.  apresente um menu para o usuário com as opções:

1 – caixa, 2 – esfera, 3 – cilindro e 4 – cone 2.  leia do teclado a opção desejada

3.  leia as dimensões do objeto selecionado

4.  calcule e escreva o volume do objeto

Lembre-se que:

38 EX. 07

*('+!'(',#,()='#(

*(+,+-./0(/,ℎ)=  4​/↑2 ℎ

(20)

dúvidas?

39

seleção – comando

switch

seleciona um dentre vários casos

(op

k

deve ser um inteiro ou caractere)

switch  (  expr  )     {  

     case  op1:  bloco  de  comandos  1;  break;  

     case  op2:  bloco  de  comandos  2;  break;  

...  

     default:    bloco  de  comandos  default;  break;   }  

...  

O switch seleciona apenas o ponto de entrada. O comando break é necessário para prosseguir a partir do comando que sucede o switch, pulando os cases seguintes.

(21)

/*  calculadora  de  quatro  operações  */  

#include  <stdio.h>    

int  main  (void)   {  

 float  num1,  num2;    char  op;  

 printf("Digite  uma  expressao:  numero  operador  numero\n");    scanf  ("%f  %c  %f",  &num1,  &op,  &num2);  

       switch  (op)      {  

   case  '+':  printf("  =  %f\n",  num1  +  num2);  break;      case  '-­‐':  printf("  =  %f\n",  num1  -­‐  num2);  break;      case  '*':  printf("  =  %f\n",  num1  *  num2);  break;      case  '/':  printf("  =  %f\n",  num1  /  num2);  break;      default  :  printf("Operador  invalido!\n");  break;    }    return  0;   }  

exemplo - calculadora

05_09_calc.c 41

dúvidas?

42

(22)

condicao

 ?  

expressao1

 :  

expressao2

;  

caso contrário, resulta no valor da expressao2  

condicionais if e ?

maximo  =  a  >  b  ?  a  :  b  ;  

if  (  

a  >  b

 )      

     

maximo  =  a;  

else    

     maximo  =  b;  

se condicao for verdadeira, resulta no valor da expressao1  

condicao é avaliada

condição é avaliada

se condição for verdadeira, executa esse comando

se condição for falsa, executa esse comando

43

exercício

No código do exercício anterior, substitua todos os if's pelo

operador condicional

?

EX. 06

#include  <stdio.h>    

int  main  (void)   {  

 float  media;  

 printf("Digite  a  media:  ");    scanf("%f",  &media);    

 if  (media  >=  6)  

   printf("AP");  

 else  if  (media  <  3)  

   printf("RM");    else      printf("PF");          return  0;   }    

(23)

exercício

No código do exercício anterior, substitua todos os if's pelo

operador condicional

?

#include  <stdio.h>    

int  main  (void)   {  

 float  media;  

 printf("Digite  a  media:  ");    scanf("%f",  &media);    

 printf((media  >=  6)?  "AP"  :  (media  <  3)  ?  "RM"  :  "PF");          return  0;   }   EX. 06 05_exerc_cond_media_noif.c 45

Nem sempre o código fica mais legível ou melhor utilizando o operador condicional.

dúvidas?

Prof. Hélio Lopes lopes@inf.puc-rio.br sala 408 RDC

Referências

Documentos relacionados

Com base na premissa do conhecimento como forma de promover a inovação, surge o tema da cooperação tecnológica, aliando ações conjuntas entre três agentes da economia:

1 — As comissões dos cursos de 1.º ciclo, previstas nos termos do n.º 2 do artigo 18.º, são propostas pelos respetivos diretores de curso à comissão pedagógica da FCT e

Portanto, devido à ausência de estudos sobre esses sintomas no município de Araranguá e a necessidade de aprimorar as políticas públicas de atenção à saúde da

b) Execução dos serviços em período a ser combinado com equipe técnica. c) Orientação para alocação do equipamento no local de instalação. d) Serviço de ligação das

AC AC TROMBONE II a VIII JLA JLA METAIS 4. AC AC

x Avaliar o impacte do programa de exercício físico na amplitude articular, na força muscular, na força de preensão palmar, no equilíbrio, no risco de queda e na...

Nessa medida, procedeu-se inicialmente à revisão da literatura disponível sobre a resiliência, com especial ênfase na sua relação com a prática desportiva e o suporte social,