Você está na página 1de 26

Programação I

AULAS TEÓRICAS

UniMETRO/FATEC/LCC-BIF ProgramaçãoI/ M.T.Ditutala


Instruções de Controlo de Fluxo
2
 Caso não existissem, os programas seriam sempre executados de cima
para baixo e instrução após instrução
 Portanto essas instruções provocam o desvio do fluxo normal de
execução de um programa para uma instrução ou bloco de instruções
bem definidas
 As instruções de Controlo de Fluxo dividem-se em
 Instruções de Selecção
 if-else
 Switch-case
 Instruções de Repetição
 for
 while
 do-while
 São instruções cujo execução depende de uma condição lógica (V|F)
Instrução de Selecção IF
3

É a instrução usada para codificar algoritmos do estilo “Se


condição Então faça”
Dependendo do número e da dependência das condições
podemos ter:
Uma acção que depende apenas da Condição ser
verdadeira
if (expressão) //expressão deve ser verdadeira
Instrucao ou Bloco_instruções;
Exemplo:
if (opcao == 1)
printf (“\nA Opção é igual a 1”);
Instrução de Selecção IF
4

A acção a tomar depende da condição ser verdadeira ou


falsa.
if (expressão)
Instr_verdade ou Bloco_instruções_verdade;
else
Instr_falso ou Bloco_instruções_falsa;
Exemplo:
if (saldo >= 1000000,00)
printf (“\nVoce é Milhonario”);
else
printf (“\nEstude. Hás de lá chegar!!”);
Instrução de Selecção IF
5

 Várias acções a realizar dependendo também de várias condição


que são mutuamente exclusivas – IF Encadeados.
 Neste caso apenas uma das declarações será executada.
Encontrada a expressão verdadeira as demais já não são testadas.
if (expressão1)
Instr_verdade1 ou Bloco_instruções_verdade1;
else if(expressão2)
Instr_falso2 ou Bloco_instruções_falsa2;
else if(expressão3)
Instr_falso3 ou Bloco_instruções_falsa3;
else
Instr_falsaN ou Bloco_instruções_falsaN;
Instrução de Selecção IF
6

Existem situações em que a execução de uma acção


dependa primeiramente de outra condição. Neste caso diz-
se que os IF estão aninhados
Exemplo: Mostrar as notas de todos estudantes do sexo
feminino do IMETRO que tenham aprovado a Programação
I
Dados: Aprovado => nota >= 10; Disciplina == Prog I
if((strcmp(disciplina, “Prog I”)== 0)&&(nota >= 10))
if (sexo == ‘F’) //IF aninhado
printf(“\nNome: %s\nNota: %.2f”, nome,nota);
Instrução de Selecção IF
7

Os IF aninhados, na falta de atenção, levam à muitos


erros de execução.
Em caso de existência de um else em IF aninhados
surge a questão, à qual dos if o else está associado?
O C resolve isso associando um else ao if mais próximo
dele.
Para romper essa regra basta usar chavetas para
melhor delimitar as fronteiras.
Instrução Condicional Ternária ‘?’
8

Em certas situações a instrução


if (expressão)
Instr_verdade ou
Bloco_instruções_verdade;
else
Instr_falso ou Bloco_instruções_falsa;
Pode ser simplificada usando o operador Condicional
ternário ‘?’ da seguinte forma:
expressão ? instrução_verdadeira : instrução_falsa
Exercícios
9

Escrever um trecho de código que receba duas


variáveis inteiras e atribua à uma terceira variável o
maior valor.
Escreva um programa que lê um par de coordenadas
(x,y) inteiras e imprime uma mensagem informando
em qual quadrante está o ponto. O programa deve
identificar se o ponto está sobre algum dos eixos.
Instrução de Selecção SWITCH
10

 Para situação de decisão múltipla, com base no condição de igualdade usa-


se a instrução switch-case em detrimento do if-else-if
 Na declaração switch, a variável é sucessivamente testada contra uma lista de
inteiros (int) ou constantes caractere (char).
 Quando uma associação é encontrada, o conjunto de comandos associado aquele
case são executados
 A forma geral da declaração switch é:
switch (variável){
case const1: instrução1_Bloco1;
break;
case const2: instrução1_Bloco2;
break;
default: instrução_Bloco_Default;
}
 Notar que a instrução ou bloco default será executada apenas se
nenhum dos case for verificado
Diferenças entre if-else e switch-case
11

Há três coisas importantes a saber sobre a


declaração switch:
O switch testa somente igualdades
if testa qualquer expressão condicional
Duas constantes case no mesmo switch podem
ter valores iguais.
Uma declaração switch é mais eficiente que um
encadeamento if-else-if.
Comando break
12

O comando break é usado juntamente ao switch para


terminar as instruções dependentes de um case.
Isto é útil para evitar que as instruções dependentes
de cases posteriores sejam testadas e/ou executadas
SWITCH Aninhados
13

 Podemos ter uma instrução switch dependente de um case de uma outra


instrução switch.
 Diz-se neste caso que os switches estão aninhados
 Os cases dos switch interno e externo podem ter os mesmos valores. Isto
não cria conflito (erro)
switch(x){
case 1: switch(y){
case 0: printf (“erro de divisão por zero”);
break;
case 1: process (x, y);
}
break;
case 2: …..
}
Instrução switch - Exercício
14

Escreva um programa que pede para o usuário


entrar um número correspondente a um dia da
semana e que então apresente na tela o nome do dia.
utilizando o comando switch.
Instruções de Repetição
15

As instruções de repetição (ciclos ou laços)


permite que um conjunto de instruções seja repetido
até que uma condição seja verificada
Em C temos os ciclos for, while e do-while.
Ciclo for
16
 A forma geral do ciclo for é:
for (inicialização; condição; actualização){
instruções;
}
 Em geral, a inicialização é um comando de atribuição usado
para inicializar a variável de controle do ciclo.
 A condição é usualmente uma expressão relacional que
determina quando o laço terminará pelo teste da variável de
controle do laço contra algum valor.
 A actualização pode ser um incremento ou decremento da
variável de controlo, em cada iteração.
 Estas três maiores divisões devem ser separadas por ponto-e-
vírgula ‘;’
Ciclo for
17
 De modo geral quando se fala de ciclo for pensa-se logo no
incremento ou decremento da variável de controlo. Mas isso não é a
única forma de manipular essa variável.
 A actualização do valor da variável de controlo pode fazer-se de
qualquer outra forma
 No ciclo for o teste condicional é sempre realizado no
início do laço. Isso significa que o código dentro do ciclo pode
nunca ser executado se a condição for falsa logo de início
x = 10;
for (y = 10; y != x; y=y+5){
printf (“%d “, y);
}
printf (“%d”, y);
Ciclo for - Variáveis
18
 As variáveis do ciclo for (no cabeçalho) podem ser manipuladas
de diversas formas
 Pode-se usar duas ou mais variáveis de controlo do ciclo. Neste
caso elas devem ser separadas por vírgula ‘,’
 A condição pode ser qualquer expressão válida em C
 Não é obrigatório a presença das três expressões. Isto é
podemos omitir as expressões que não forem necessárias.
 Podemos omitir as três partes das variáveis do for para
criarmos ciclos infinitos. Neste caso mantém-se os ; que
separam cada parte.
 Podemos implementar um ciclo for que não faz nada. Isto é,
sem conteúdo. Neste caso coloca-se um ; logo a seguir aos
parêntesis do for ().
Ciclo for – Casos Notáveis
19
 Exemplos: Duas Variáveis for ( ; ; ){ Ciclo Infinito
int x, y; printf (“Mensagem”);
for (x = 0, y = 0; x + y < 100; x++, y+ }
+){ for (t = 0; t < ALGUM VALOR; t++);
printf (“%d”, x + y);
}
for (prompt(); t = readnum();
prompt()) { for Vazio
sqrnum(t);
Condição
}
for (x = 0; x!= 10; )
scanf (“%d”, &x);

Omissão de parte
Ciclo while
20
 A sintaxe do uso do ciclo while é:
While(expressao){
instrução_bloco;
}
 A expressão (lógica) é testada. Caso seja verdadeira então a instrução ou bloco de
instruções será executado. Isto se repete até que a expressão resulte em falso.
 Portanto é necessário actualizar o valor da expressão
 Como ocorre com o ciclo for, o while também verifica a condição do teste no
início. Isto quer dizer que caso a expressão seja falsa os comandos do ciclo while
não chegam a ser executdos.
 O While é bom em situações em que se exige que uma condição prévia seja
verificada.
 Podemos ter um ciclo while que não faça nada, isto é, sem instruções. Isto
consegue-se colocando ponto e vírgula ‘;’ após o teste da expressão
 Pode-se obter um ciclo infinito com o while desde que a expressão resulte sempre
verdadeira.
Ciclo while - Exercício
21
 Fazer um programa que calcule a soma dos números inteiros introduzidos pelo
utilizador até este introduzir o número zero (0) (Fim do Ciclo)
Ciclo do – while
22
 A sintaxe do uso do ciclo do – while é:
do {
instrução_bloco;
} While(expressao);
 Aqui a expressão (lógica) é testada depois de executada a instrução
ou bloco de instruções. Isto se repete até que a expressão resulte em
falso.
 Por isso é comum dizer-se que com o ciclo do – while as instruções
serão executadas pelo menos uma vez.
 Também é necessário actualizar o valor da expressão
 Pode-se obter um ciclo infinito com o do – while desde que a
expressão resulte sempre verdadeira.
 Pela sua natureza este ciclo é muito usado em menu, já que estes
deverão ser executados pelo menos uma vez.
Ciclos Aninhados
23

É comum ocorrerem problemas que exijam o uso de


um ciclo, interno, dentro de outro ciclo externo.
Em geral o externo controla uma variável e o interno
outra.
Exemplos
for(i = 1;i < 9;i++)
for(j = 1;j < 9;j++){
printf(“%d x %d = %d”,i,j,i*j); //Tabuada 1 – 9
}
Instruções de Desvio de Fluxo - break
24

 A instrução break é muito usada para forçar o término imediato de um ciclos


em caso de se verificar uma determinada condição.
 Quando uma instrução break é executada dentro de um ciclo, este é
imediatamente encerrado e o controlo do programa é retornado na instrução
seguinte ao ciclo.
 Em casos de ciclos aninhados o break interromperá apenas o ciclo mais
interno

for (t = 0; t < 100; ++t){


count = 1;
for ( ; ; ){
printf (“%d”, count);
count++;
if (count == 10)
break;
}
}
Instruções de Desvio de Fluxo - Continue
25

 A instrução continue funciona de maneira similar à break.


 Mas em vez de forçar a terminação, continue força a
execução da próxima iteração do ciclo, pulando qualquer
código que esteja depois dela.
 Para os ciclos while e do-while, uma declaração continue
fará com que o controle vá directamente para o teste
condicional e, então, prossiga o processo do ciclo.
 No caso do for, primeiro a parte do incremento do ciclo é
realizada, em seguida o teste condicional é executado e,
finalmente o laço continua
Instruções de Desvio de Fluxo - Continue
26

#include <stdio.h>

void main(){
int x;

for (x = 0; x < 100, x++){


if (x % 2) continue;
printf (“%d”, x);
}
}

Você também pode gostar