Estruturas de Controle
Linguagem de Programação Estruturada Prof. Leandro Carlos Fernandes
2º semestre 2015
Estruturas de Controle
• ESTRUTURA SEQUENCIAL
• ESTRUTURAS CONDICIONAIS – Estrutura Condicional Simples – Estrutura Condicional Composta
– Seleção entre duas ou mais Seqüências de Comandos
• ESTRUTURA DE REPETIÇÃO – Repetição com Teste no Início – Repetição com Teste no Final – Repetição Contada
1
Exemplo
• Calcular a área de um triangulo, dados os comprimentos de seus lados
algoritmo AreaTri declare
a,b, c, per, area: reais início
leia(a,b,c) per (a+b+c)/2
Execução do Programa AREATRI
• Primeira Execução:
A=3; B=4; C=5 PER=(3+4+5)/2 = 6
AREA= raiz (6*(6-3)*(6-4)*(6-5)) = raiz 36=6
• Segunda Execução:
A=3; B=4; C=9 PER=(3+4+9)/2 = 8
Execução do Programa AREATRI
• O que acontece é que nem sempre três
números reais são comprimentos dos lados de um triângulo.
• Três números só podem ser comprimento dos lados de um triângulo se cada um deles for menor que a soma dos outros dois.
A < B+C e B < (A+C) e C < (A+B)
4
Estrutura de Decisão
• Uma estrutura de decisão ou estrutura condicional permite a escolha do grupo de ações a ser executado quando determinadas condições, representadas por expressões lógicas, são ou não satisfeitas.
• Mas o que são as expressões lógicas?
5
EXPRESSÃO LÓGICA
Estruturas de Decisão
Expressão Lógica
• Denomina-se expressão lógica aquela cujos:
– operadores são relacionais ou lógicos e –os operandos são relações ou variáveis ou
constantes do tipo lógico.
• Exemplo: (A+B == 0) and (C != 1)
Operadores Relacionais
• Utilizam-se os operadores relacionais para realizar comparações entre dois valores de mesmo tipo primitivo.
– Tais valores podem ser constantes, variáveis ou expressões aritméticas
• O resultado obtido de uma relação é sempre um valor lógico.
8
Operador Relação
> Maior do que
>= Maior ou igual
< Menor do que
<= Menor ou igual
== Igual
!= Diferente de
Operadores Lógicos
• Utilizam-se três conectivos básicos para a formação de novas proposições lógicas compostas a partir de outras proposições lógicas simples.
9
Operador Função Exemplo
&& AND (E) (c >=‘0’ && c<=‘9’)
|| OR (OU) (a==‘F’ || b!=32)
! NOT (NÃO) (!var)
Tabela Verdade
A B ! A ! B A && B A || B
Verd. Verd. Falso Falso Verd. Verd.
Verd. Falso Falso Verd. Falso Verd.
Falso Verd. Verd. Falso Falso Verd.
Falso Falso Verd. Verd. Falso Falso
Precedência dos Operadores
( ) [ ] ->
! ~ ++ -- . - (unário) (cast) *(unário) sizeof
* / % + -<< >>
<<= >>=
== !=
&
^|
Maior precedência
COMANDOS CONDICIONAIS
Estruturas de Decisão
12
Estruturas de Decisão
• Classificados em três tipos:
–Comando Condicional Simples –Comando Condicional Composto
–Seleção entre duas ou mais seqüências de comandos
13
Comando Condicional Simples
• Estrutura decisão que permite a escolha do grupo de ações a ser executado quando determinada condição é satisfeita.
sim ? não
Comando Condicional Composto
• Estrutura decisão que permite a escolha entre dois grupos de ações a serem executado dependendo de se uma condição é ou não satisfeita.
sim ? não
O Comando IF
if ( expressão lógica)
execute comando ou bloco de comandos; Ex:
if ( num == 0 )
printf("O numero digitado eh zero");
16
Exemplo - IF
#include <stdio.h>
intmain () { intnum;
printf ("Digite um numero: ");
scanf ("%d",&num);
if(num > 10)
printf ("\n\n O numero e maior que 10");
if(num == 10) {
printf ("\n\n Voce acertou!\n");
printf ("O numero e igual a 10.");
}if(num < 10)
printf ("\n\n O numero e menor que 10");
return 0;
}
17
O comando IF-ELSE
• Podemos pensar no comando elsecomo sendo um complemento do comando if. O comando if completo tem a seguinte forma geral:
if(condição) {
seqüência_de_comandos_1;
} else{
O comando IF-ELSE
• A expressão da condição será avaliada:
–Se ela for diferente de zero, a
seqüência_comandos_1 será executada.
– Se for zero a seqüência_comandos_2será executada.
• É importante nunca esquecer que, quando
Exemplo IF – ELSE
#include <stdio.h>
intmain ( ) { intnum;
printf ("Digite um numero: ");
scanf ("%d", &num);
if(num == 10) {
printf ("\n\n Voce acertou!\n");
printf ("O numero e igual a 10.\n");
}else{
printf ("\n\n Voce errou!\n");
printf ("O numero e diferente de 10.\n");
return 0;} }
20
Aninhamento de IF
• É possível aninhar construções do tipo if- else em diversos níveis:
– O ifaninhado é
simplesmente um ifdentro da declaração de um outro ifmais externo.
– O único cuidado que devemos ter é o de saber exatamente a qual ifum determinado elseestá ligado.
if(cond1) if(cond2)
comandos if2;
elsecomandos else2;
elseif(cond3) if(cond4)
comandos if4;
elsecomandos else4;
elsecomandos else3;
21
Aninhamento de IF
#include <stdio.h>
intmain () { intnum;
printf ("Digite um numero: ");
scanf ("%d", &num);
if(num == 10) {
printf ("\n\n Voce acertou!\n");
printf ("O numero e igual a 10.\n");
}else{
if(num > 10)
printf ("O numero e maior que 10.");
elseprintf ("O numero e menor que 10.");
return} 0;
}
Aninhamento de IF’s
• Observe sempre a correspondência entre if’se else’s
• Note que neste caso, a definição de um bloco de comandos garante a correta interpretação do aninhamento dos comandos
if(cond1) if(cond2)
comandos if2;
elsecomandos else1;
if(cond1) { if(cond2)
comandos if2;
}else
comandos else1;
Encadeamento IF-ELSE-IF
if (teste_1) <comando_1>;
else if (teste _2) <comando _2>;
else if (teste _3) <comando _3>;
. . .
else <comando _n>;
• No encadeamento apenas um dos ncomandos será executado: o primeiro cujo teste for verdadeiro
24
Encadeamento IF-ELSE-IF
• A estrutura if-else-ifé apenas uma extensão da estrutura if- else. Sua forma geral é:
if(condição_1) {
seqüência_de_comandos_1;
} else if(condição_2) { seqüência_de_comandos_2;
} . . .
else if(condição_n) {
seqüência_de_comandos_n;
} else{
seqüência_de_comandos_default;
}
25
Exemplo ELSE-IF
#include <stdio.h>
intmain () { intnum;
printf ("Digite um numero: ");
scanf ("%d",&num);
if(num > 10)
printf ("\n\n O numero e maior que 10");
else if(num == 10) {
printf ("\n\n Voce acertou!\n");
printf ("O numero e igual a 10.");
Encadeamento IF-ELSE-IF
• Exemplo: escrever o nome de um dígito
‘0’“zero”, ‘1’“um”, etc.
...if(ch == ‘0’) printf(“Zero”);
else if(ch==‘1’) printf(“Um”);
else if(ch==‘2’) printf(“Dois”);
else if...
else if(ch==‘9’) printf(“Nove”);
A Expressão Condicional
• Quando o compilador avalia uma condição, ele quer um valor de retorno para poder tomar a decisão. Mas esta expressão não necessita ser uma expressão no sentido convencional.
Uma variável sozinha pode ser uma "expressão" e esta retorna o seu próprio valor.
• Assim: intnum;
if(num!=0) ....
if (num==0) ....
for(i = 0; string[i] != '\0'; i++) equivalem: intnum;
if (num) ....
if(!num) ....
for(i = 0; string[i]; i++)
28
O Operador “?”
• Uma expressão como:
if(a > 0) b = -150;
else
b = 150;
pode ser simplificada usando-se o operador ?da
seguinte maneira:
b = (a > 0) ? -150 : 150;
29
Exemplo
• O que faz o trecho de código abaixo ?
...
intnum = 0;
scanf(“%d”, &num);
printf(”O numero eh %s\n”, (num%2==0)? “par” :“impar” );
O comando Switch
switch( valor ) { casevalor1:
comandos1;
break;
casevalork:
comandosk;
break;
default:
comandos_default;
break;
}
switch
case:
case:break;
case:
break;
switch
case:
case:break;
case:
break;
O
O comando switché próprio para se testar uma variável em relação a diversos valores pré-estabelecidos.
O comando Switch
• A expressão valoré avaliada e o valor obtido é comparado com os valores associados às cláusulas caseem seqüência
• Quando o valor associado a uma cláusula é igual ao valor do switchos respectivos comandos são executados até encontrar um break
• Se não existir um breakna cláusula selecionada, os comandos das cláusulas seguintes são executados em ordem até encontrar um breakou esgotarem-se as cláusulas do switch
• Se nenhuma das cláusulas contém o valor de seleção, a cláusula default, se existir, é executada
32
Exemplo Switch
switch( char_in ) {
case'.': printf("Ponto.\n");
break;
case',': printf("Virgula.\n");
break;
case':': printf("Dois pontos.\n");
break;
case';': printf("Ponto e virgula.\n");
break;
default: printf("Nao eh pontuacao.\n");
}
33
Exemplo Switch sem break
switch( char_in ) {
case’0’: putchar(‘0’); /* 0123456789 */
case‘1’: putchar(‘1’); /* 123456789 */
case’2’: putchar(‘2’); /* 23456789 */
case’3’: putchar(‘3’); /* 3456789 */
case‘4’: putchar(‘4’); /* 456789 */
case‘5’: putchar(‘5’); /* 56789 */
case’6’: putchar(‘6’); /* 6789 */
case’7’: putchar(‘7’); /* 789 */