Você está na página 1de 39

Algoritmos: Turma 911-A

Estruturas de Deciso e Repetio

Prof. MSc. Felipe Alencar Lopes


felipe.alencar@ifal.edu.br

Comandos Condicionais

Comandos Condicionais
Tomada de deciso e mudana de fluxo de
controle
Expresses booleanas (lgicas)
Comandos:
if-else
switch
Operadores condicionais

Comandos Condicionais
Toda linguagem de programao precisa
oferecer pelo menos trs formas bsicas de
controle:
executar uma sequncia de instrues;
realizar testes para decidir entre aes
alternativas;
repetir uma sequncia de instrues.
Este conjunto de slides te guia para aprender a realizar testes para decidir
quais instrues executar

Modificando o Fluxo de Controle


A ordem de execuo de um programa denominado
fluxo de controle
Exceto quando especificado de outra forma, a ordem
de execuo linear, isto uma instruo aps a outra
em sequncia
Alguns comandos em programao nos permitem:
Decidir se a execuo de uma instruo deve ou no ser
feita

til para que certas instrues s sejam executadas


sob determinadas condies
Esta tomada de deciso baseada em expresses
booleanas

Expresso Booleana
O resultado da avaliao de uma expresso
booleana ou verdadeiro ou falso
Em C, no existe o tipo de dado boolean
Verdadeiro representado como 1
Falso representado como 0

Uma expresso booleana composta de


operandos booleanos (lgicos) e operadores
relacionais e/ou lgicos

Operadores Relacionais
So usados para fazer comparaes

Operadores Lgicos
So usados para combinar comparaes
Operam em valores booleanos (0 ou 1)

Qual ser o valor de a e b?

Tabela Verdade
Uma tabela verdade contm todas as
combinaes verdadeiro-falso de uma
expresso booleana

Expresses Booleanas
Exemplos:

Expresses Booleanas
Exemplos:

Comandos Condicionais
Um comando condicional nos permite escolher
qual deve ser a prxima instruo executada em
um programa
A execuo de uma determinada instruo
depende de uma condio (expresso booleana)
A linguagem C oferece 3 tipos de comandos
condicionais:
if else
switch
comando ternrio

O comando if-else
if (expressaoBooleana) {
comandos
} else {
outros comandos
}
Se a avaliao de expressaoBooleana retornar verdadeiro, comandos so executados.
Caso contrrio, executa-se outros comandos.

O comando if-else - exemplo


#include <stdio.h>
int main ( )
{
float n1, n2, n3, m;
printf (\nEntre com 3 notas ) ;
scanf (%f %f %f, &n1, &n2, &n3);
m = (n1 + n2 + n3 ) / 3 ;
if (m >= 7.0) {
printf (\n Aluno aprovado. ) ;
printf ( Mdia igual a %f , m) ;
} else {
printf (\n Aluno reprovado. );
printf ( Mdia igual a %f , m) ;
}
return 0;
}

O comando if-else - variaes


if (expressaoBooleana) {
comandos
}
if (expressaoBooleana)
comando;
if (expressaoBooleana)
comando;
else outroComando;

Se a avaliao da expresso
retornar falso, no executa-se
nada.

O uso do bloco s necessrio


caso queira-se executar mais de
um comando.

O comando if-else - exemplo


#include <stdio.h>
int main ( )
{
int resposta ;
printf (\n Qual o valor de 10 + 14? );
scanf (%d, &resposta);
if (resposta == 10 + 14)
printf (\n Resposta correta ! );
return 0;
else no obrigatrio!
}

O comando if-else - exemplo


#include <stdio.h>
int main ( )
{
int num ;
printf (\nDigite um nmero: );
scanf (%d, &num);
if (num < 0)
printf (\n Nmero negativo ! );
else
printf (\n Nmero positivo ! );
return 0;
if-else com um nico comando.
}

O comando if-else exerccio de sala


Escreva um programa baseado no fluxograma a seguir. O
programa deve ler do usurio um caractere, que informa se tem
coco ralado (S ou N) e depois imprime os passos para fazer um
bolo.
Misture os ingredientes
Unte a forma com manteiga
Despeje a mistura na forma
Sem bolo
para voc

No

Tem coco
ralado?
Deixe a forma no forno

Sim

Despeje o coco na mistura

O comando if-else aninhado - exemplo


if (expressaoBooleana)
if (expressaoBooleana)
comando;
else outroComando;
else
maisUmComando;

O comando dentro do if ou else


pode ser outro if

O comando if-else aninhado


O que est errado neste programa?
#include <stdio.h >
int main ()
{
int temp ;
printf (\n Digite a temperatura: ) ;
scanf (%d, &temp) ;
if (temp < 30)
if (temp > 20)
printf (\n Temperatura agradvel ) ;
else printf (\n Temperatura muito quente ) ;
return 0 ;
}

O comando if-else aninhado


O que est errado neste programa?
#include <stdio.h >
int main ()
{
int temp ;
printf (\n Digite a temperatura: ) ;
scanf (%d, &temp) ;
if (temp < 30) {
if (temp > 20)
printf (\n Temperatura agradvel ) ;

else printf (\n Temperatura muito quente ) ;


return 0 ;
}

Tomando mltiplas decises


O comando if-else til para a escolha de uma entre duas
alternativas
Quando mais de duas alternativas so necessrias, pode ficar
deselegante utilizar vrios if-else encadeados
Para estes casos o comando switch pode ser a melhor opo

O comando switch
switch(expressao) {
case rotulo1:
Comandos1
break;
case rotulo2:
Comandos2
break;
... default:
Comandos3
}

Para executar um switch:


Avalia-se expressao
Executa-se os comandos do case cujo
rtulo igual ao valor resultante da
expresso
Executa-se os comandos de default caso o
valor resultante no seja igual a nenhum
rtulo

O comando switch exemplo


Calcular a diferena, o produto, o quociente
ou a soma de dois nmeros, dependendo da
operao escolhida e imprimir o resultado.

O comando switch exemplo


# include stdio.h
int main ()
{
char operador;
float a, b ;
float result = 0.0;
printf (\n Informe os 2 nmeros e a operao );
scanf (%f %f %c, &a, &b, &operador);
switch (operador) {
case +: result = a + b;
break;
case -: result = a - b;
break;
case *: result = a * b;
break;
case /: result = a / b;
break;
default : printf(\nOperador invalido);
}
printf (\nResultado igual a %f , result);
return 0 ;
}

O comando ternrio de deciso - ?


# include stdio.h
int main ()
{
char operador;
float a, b ;
float result = 0.0;
printf (\n Informe os 2 nmeros e a operao );
scanf (%f %f %c, &a, &b, &operador);
switch (operador) {
case +: result = a + b;
break;
case -: result = a - b;
break;
case *: result = a * b;
break;
case /: result = a / b;
break;
default : printf(\nOperador invalido);
}
printf (\nResultado igual a %f , result);
return 0 ;
}

O comando ternrio de deciso - ?


Considere as seguintes declaraes:
char a = a, b = b ;/* b tem valor 98*/
int i = 1, j = 2 ;
double x = 7.07 ;

Comandos de Repetio

Comandos de Repetio
Denominamos lao (loop em ingls) a uma
estrutura de repetio.
As estruturas de repetio, executam a repetio
de um conjunto de instrues enquanto uma
determinada condio verdadeira.
Em linguagem C, existem trs estruturas de
repetio, so elas: for, while e dowhile.
Cada uma destas estruturas tem a sua
particularidade em termos de funcionamento.

O comandos while e do...while


Esta estrutura de repetio, garante que o bloco de
instrues seja executado no mnimo uma vez, j que
a condio que controla o lao testada apenas no
final do comando.
A diferena entre o comando while e o dowhile
justamente o local onde a condio que controla o
lao testada.

O comandos while e do...while


No comando while a condio testada antes do
bloco de instrues, e caso a condio seja falsa a
repetio no ser executada.
No dowhile o bloco de comandos executado pelo
menos uma vez de forma obrigatria, independente
do resultado da expresso lgica
Vejamos um exemplo de cdigo usando o comando
do while

O comandos while e do...while


#include<stdio.h>
int main(void)
{
float nota1=0,nota2=0,media=0;
int resp;
do
{
printf("Digite a primeira nota: ");
scanf("%f",&nota1);
printf("Digite a segunda nota: ");
scanf("%f",&nota2);
media = (nota1 + nota2)/2;
printf("Media do aluno = %f\n",media);
printf("Digite 1 para continuar ou 2 para sair\n");
scanf("%d", &resp);
} while (resp==1);
return 0;
}

O comando for
Pseudocdigo Estrutura de repetio Para
Em pseudocdigo o lao for da linguagem C equivalente
ao comando Para.
Seu funcionamento simples.

Pseudocdigo:
Para (valor inicial at condio_final passo n) faa
Inicio
Instrues;
Fim;

onde:
valor_inicial uma instruo de atribuio do valor inicial do lao para a
varivel de controle.
condio final uma condio que controla o lao.
passo o incremento do lao.

O comando for
Utilizao do comando for
O lao for uma estrutura de repetio muito utilizada nos
programas em C.
muito til quando se sabe de antemo quantas vezes a
repetio dever ser executada.
Este lao utiliza uma varivel para controlar a contagem do
loop, bem como seu incremento.
Trata-se de um comando bem enxuto, j que prpria
estrutura faz a inicializao, incremento e encerramento
do lao.

O comando for - sintaxe


for(valor_inicial; condio_final;
valor_incremento)
{
instrues;
}

O comando for - exemplo


//Exemplo1: Programa usando loop for em C
#include <stdio.h>
#include <conio.h>
int main(void)
{
int contador; //varivel de controle do loop
for (contador = 1; contador <= 10; contador++)
{
printf("%d ", contador);
}
getch();
return(0);
}

O comando for
Lao for decrescente
Em certos casos, ao invs de incrementar, podemos
decrementar a varivel de controle e construir um lao
com contagem decrescente. Para tanto, devemos
inicializar a varivel de controle com um valor
adequado e construir a condio necessria para que o
lao seja finalizado.

O comando for
Lao for decrescente
//Exemplo 2 Lao com contagem decrescente
#include <stdio.h>
#include <conio.h>
int main(void)
{
int contador;
for (contador = 10; contador >= 1; contador--)
{
printf("%d ", contador);
}
getch();
return(0);
}

Comandos de Repetio exerccio de


sala
1.Crie um programa que leia trs notas de um aluno e
calcule sua mdia, informando se esse aluno est
aprovado ou reprovado (e.g., se a mdia for maior
que 6).