linguagem c estruturas de controle de fluxos disciplina: aam profa. ana watanabe 1/2013 vol.4
TRANSCRIPT
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 abase de qualquer linguagem.• C tem um conjunto muito rico e poderoso decomandos de controle de fluxo.• Eles se dividem em comandos de teste decondiçõ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 ifForma geral do comando if é:
if (condição) comando;else comando; Obs.: A parte else é opcional
Linguagem C
• Exemplosif (x) if (x) {if (y) if (y) printf(“1”); printf(“1”); }else else printf(“2”); printf(“2”); Neste caso, o else Neste caso, o else pertence ao pertence ao primeiro
segundo if.
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õescondicionais 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 CForma geral do switchswitch (variável) { case constante1: seqüência de comandos break; case constante2: seqüência de comandos break;default: seqüência de comandos }
Linguagem CDicas 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 avariável de controle de loop.
•A inicialização pode conter qualquercomando válido em C.
Linguagem C Condição
• A condição é uma expressão de relaçãoque testa se a condição final desejadapelo loop for ocorreu.
• Aqui também pode ser colocadoqualquer comando válido em C.
Linguagem C Incremento
• O incremento define a maneira como avariável de controle do loop será alterada cada vez que o computador repetir o loop.
• Também aqui, podemos colocarqualquer 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 simplesmentenão especificando sua partecondicional. Veja:for (;;) { }
Linguagem C
Saindo de um loopPodemos 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 blocode comandos) enquanto uma condiçãofor 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ê quergarantir 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 loopsem que sua condição de encerramentoesteja satisfeita, podemos utilizar ocomando break.
O break faz com que a execução do programa continue na primeiralinha 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 localespecificado. 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 emais rápido.
• Exercício de Fixação:
PRÁTICA:Escrever um programa que conforme as chaves muda a lógica dos 8 leds.
LINGUAGEM C