Linguagem C
Estruturas de Controle de
Fluxos
Disciplina: AAM
Profa. Ana Watanabe
1/2013
vol.4
“regozijai-vos sempre.” I Tessalonicenses 5:16
Linguagem C
• Objetivo da aula:
• ESTRUTURAS DE CONTROLE DE FLUXO
• Exercício de Fixação
Linguagem C
• ESTRUTURAS DE CONTROLE DE FLUXO
• Os comandos de controle de fluxo são a
base de qualquer linguagem.
• C tem um conjunto muito rico e poderoso de
comandos de controle de fluxo.
• Eles se dividem em comandos de teste de
condições e comandos de controle de loop.
Linguagem C
Comandos de testes de condições
Estes comandos avaliam uma condição e
executam um bloco de código de acordo com o
resultado. São eles:
• if
• switch
Linguagem C
Comandos de testes de condições if
Forma geral do comando if é:
if (condição)
comando;
else
comando;
Obs.: A parte else é opcional
Linguagem C
• Exemplos
if (x)
if (y)
printf(“1”);
else
printf(“2”);
Neste caso, o else
pertence ao
segundo if.
if (x) {
if (y) printf(“1”);
}
else
printf(“2”);
Neste caso, o else
pertence ao primeiro
Linguagem C
• “escada” if-else-if: É muito comum encontrar
programas da seguinte forma:
if (condição)
comando;
else if (condição)
comando;
else
comando;
Linguagem C
• O computador avalia as expressões
condicionais de cima para baixo.
• Assim que encontra uma condição verdadeira,
ele executa o comando associado a ela e passa
por cima do resto da “escada”.
• Se nenhuma condição for verdadeira, o
computador executará o else final.
Linguagem C
Comandos de testes de condições: Switch
É um comando de vários desvios
• No switch, o computador testa uma variável
sucessivamente contra uma lista de constantes
inteiras ou de caracteres e executa um
comando ou bloco de comandos quando
encontrar uma coincidência.
Linguagem C
Forma geral do switch
switch (variável) {
case constante1:
seqüência de comandos
break;
case constante2:
seqüência de comandos
break;
default:
seqüência de comandos
}
Linguagem C
Dicas importantes:
• De modo geral, a sequência de comandos do
case não precisam estar entre chaves.
• Porém, se o primeiro comando dentro de um
case for a declaração ao de uma variável, será
necessário colocar todos os comandos desse
case dentro de um par de chaves.
Linguagem C
default
• O comando default será executado se não for
encontrada nenhuma coincidência na lista de
constantes.
• Caso não seja colocado um comando default
e não haja coincidência, nenhum comando
será executado.
Linguagem C
break
• Quando o computador encontra alguma
coincidência, ele executa os comandos
associados àquele case até encontrar break
ou o fim do comando switch.
• É um erro comum programadores
esquecerem de colocar o break após os
comandos.
Linguagem C
importante:
• O switch difere do if, já que o primeiro só
pode testar igualdade e a expressão
condicional if pode ser de qualquer tipo.
• Não pode haver duas constantes case com
valores iguais no mesmo switch.
• Podem ser colocados comandos switch
dentro de comandos switch.
• Pode ser deixado um case vazio quando mais
de uma condição usa o mesmo código.
Linguagem C
Comandos de controle de loops
• Os comandos de controle de loops permitem
que o computador repita um conjunto de
instruções até que alcance uma certa
condição.
• Em C temos os seguintes comandos de
controle de loop:
• for
• while
• do while
Linguagem C
for
• O loop for em C é muito mais forte e mais flexível que o da
maioria das outras linguagens.
• Sua forma geral é:
for (inicialização; condição; incremento)
comando;
• Observe que as três partes do loop for são separadas por
ponto e vírgula.
• Nenhuma destas partes precisa existir. Ao omitir a condição
ao do comando for, criamos um laço infinito.
Linguagem C
Inicialização
• Na forma mais simples, inicialização é
um comando de atribuição que o
compilador usa para estabelecer a
variável de controle de loop.
•A inicialização pode conter qualquer
comando válido em C.
Linguagem C
Condição
• A condição é uma expressão de relação
que testa se a condição final desejada
pelo loop for ocorreu.
• Aqui também pode ser colocado
qualquer comando válido em C.
Linguagem C
Incremento
• O incremento define a maneira como a
variável de controle do loop será alterada
cada vez que o computador repetir o
loop.
• Também aqui, podemos colocar
qualquer comando válido em C.
Linguagem C
Exemplo 1
/* conta de 1 a 100 – pode ser
usado pra retardo de tempo */
main()
{
int x;
for (x = 1; x <= 100; x ++) ;
}
Linguagem C
Exemplo 2
/* conta de 100 a 1 */
main()
{
int x;
for (x = 100; x > 0; x --) ;
}
Linguagem C
Exemplo 3
/* conta de 0 a 100, 5 em 5 */
main()
{
int x;
for (x = 0; x <= 100; x = x + 5)
;
}
Linguagem C
Loop infinito
• Podemos fazer um comando for
executar para sempre simplesmente
não especificando sua parte
condicional. Veja:
for (;;)
{
}
Linguagem C
Saindo de um loop
Podemos usar o comando break para
encerrar um for a qualquer momento.
main()
/* O loop será executado 10 vezes */
{
int a;
for (a = 1; a < 100; a++)
if (a == 10) break;
}
Linguagem C
While
•O while executa um comando (ou bloco
de comandos) enquanto uma condição
for verdadeira.
A forma geral do while é:
while (condição)
comando;
Linguagem C
While
Exemplo 1
pausa()
{
char tecla = ‘\0’;
printf(“Tecle ESPAÇO para continuar...”);
while (tecla != ‘ ’)
tecla = getche();
}
Linguagem C
Exemplo 1
pausa()
{
char tecla = ‘\0’;
printf(“Tecle ESPAÇO para continuar...”);
while (tecla != ‘ ’)
tecla = getche();
}
Linguagem C
do while
•Ao contrário do loop for e do loop
while, que testam a condição no
começo do loop, o loop do while
verifica a condição somente no final.
•Desta forma, o loop será executado
pelo menos uma vez.
Linguagem C
do while
• A forma geral do loop do while é:
do {
comando;
} while (condição);
Linguagem C
Um dos usos da estrutura do-while
é em menus, nos quais você quer
garantir que o valor digitado pelo
usuário seja válido, conforme
apresentado a seguir:
Linguagem C
int main ()
{
int i;
do
{
printf ("\n\nEscolha a fruta pelo numero:\n\n");
printf ("\t(1)...Mamao\n");
printf ("\t(2)...Abacaxi\n");
scanf("%d", &i);
} while ((i<1)||(i>2));
switch (i)
{
case 1:
printf ("\t\tVoce escolheu Mamao.\n");
break;
case 2:
printf ("\t\tVoce escolheu Abacaxi.\n");
break;
}
}
Linguagem C
Interrupção de loops
•Quando precisamos encerrar um loop
sem que sua condição de encerramento
esteja satisfeita, podemos utilizar o
comando break.
O break faz com que a execução do
programa continue na primeira
linha seguinte ao loop ou bloco que está
sendo interrompido..
Linguagem C
O que faz esta rotina?
for(t=0; t<100; ++t)
{
count=1;
for(;;)
{
printf("%d", count);
count++;
if(count==10) break;
}
}
Linguagem C
O que faz esta rotina?
for(t=0; t<100; ++t)
{
count=1;
for(;;)
/* imprimirá os números de 1 a 10 cem vezes na tela.*/
{
printf("%d", count);
count++;
if(count==10) break;
}
}
Linguagem C
Comando continue
•O comando continue funciona de maneira
parecida com o comando break.
•Porém, em vez de forçar o
encerramento, continue força a próxima
iteração do loop e pula o código que
estiver no meio.
Linguagem C
Exemplo: O que faz o programa?
main()
{
int x;
for (x = 0; x < 100; x ++) {
if (x % 2) continue;
printf(“%d ”, x);
}
}
Linguagem C
/* programa para imprimir os números
pares entre 0 e 98 */
main()
{
int x;
for (x = 0; x < 100; x ++) {
if (x % 2) continue;
printf(“%d ”, x);
}
}
Linguagem C
O Comando goto
•O goto é o último comando de controle de
fluxo. Ele pertence a uma classe à parte:
a dos comandos de salto incondicional.
•O goto realiza um salto para um local
especificado. Este local é determinado por
um rótulo. Um rótulo, na linguagem C,
é uma marca no programa. Você dá o nome
que quiser a esta marca.
Linguagem C
O Comando goto
• A forma geral é:
nome_do_rótulo:
....
goto nome_do_rótulo;
....
Linguagem C
•O comando goto deve ser utilizado com
parcimônia, pois o abuso no seu uso tende
a tornar o código confuso.
•O goto não é um comando necessário,
podendo sempre ser substituído por outras
estruturas de controle.
•Recomendamos que o goto nunca seja
usado.
Linguagem C
•Existem algumas situações muito específicas
onde o comando goto pode tornar um código
mais fácil de se entender se ele for bem
empregado.
•Um caso em que ele pode ser útil é quando
temos vários loops e ifs aninhados e se queira,
por algum motivo, sair destes loops e ifs todos de
uma vez.
•Neste caso um goto resolve o problema mais
elegantemente que vários breaks, sem contar
que os breaks exigiriam muito mais testes. Ou
seja, neste caso o goto é mais elegante e
mais rápido.
LINGUAGEM C
• Exercício de Fixação:
PRÁTICA:
Escrever um programa que
conforme as chaves muda a
lógica dos 8 leds.
Download

Linguagem C