Linguagem C v12

43
Linguagem C Estruturas de Controle de Fluxos Disciplina: AAM Profa. Ana Watanabe 1/2013 vol.4

description

Linguagem C v12

Transcript of Linguagem C v12

Page 1: Linguagem C v12

Linguagem C

Estruturas de Controle de Fluxos

Disciplina: AAM

Profa. Ana Watanabe

1/2013 vol.4

Page 2: Linguagem C v12

“regozijai-vos sempre.” I Tessalonicenses 5:16

Page 3: Linguagem C v12

Linguagem C

• Objetivo da aula:

• ESTRUTURAS DE CONTROLE DE FLUXO

• Exercício de Fixação

Page 4: Linguagem C v12

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.

Page 5: Linguagem C v12

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

Page 6: Linguagem C v12

Linguagem C

Comandos de testes de condições ifForma geral do comando if é:

if (condição) comando;else comando; Obs.: A parte else é opcional

Page 7: Linguagem C v12

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.

Page 8: Linguagem C v12

Linguagem C

• “escada” if-else-if: É muito comum encontrar programas da seguinte forma:

if (condição) comando;else if (condição) comando; else comando;

Page 9: Linguagem C v12

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.

Page 10: Linguagem C v12

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.

Page 11: Linguagem C v12

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 }

Page 12: Linguagem C v12

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.

Page 13: Linguagem C v12

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.

Page 14: Linguagem C v12

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.

Page 15: Linguagem C v12

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.

Page 16: Linguagem C v12

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

Page 17: Linguagem C v12

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.

Page 18: Linguagem C v12

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.

Page 19: Linguagem C v12

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.

Page 20: Linguagem C v12

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.

Page 21: Linguagem C v12

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 ++) ;}

Page 22: Linguagem C v12

Linguagem C Exemplo 2

/* conta de 100 a 1 */

main(){int x;for (x = 100; x > 0; x --) ;}

Page 23: Linguagem C v12

Linguagem C Exemplo 3/* conta de 0 a 100, 5 em 5 */

main(){int x;for (x = 0; x <= 100; x = x + 5) ;}

Page 24: Linguagem C v12

Linguagem C

Loop infinito

• Podemos fazer um comando for executar para sempre simplesmentenão especificando sua partecondicional. Veja:for (;;) { }

Page 25: Linguagem C v12

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;}

Page 26: Linguagem C v12

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;

Page 27: Linguagem C v12

Linguagem C

While

Exemplo 1

pausa(){char tecla = ‘\0’;printf(“Tecle ESPAÇO para continuar...”);while (tecla != ‘ ’)tecla = getche();}

Page 28: Linguagem C v12

Linguagem C

Exemplo 1

pausa(){char tecla = ‘\0’;printf(“Tecle ESPAÇO para continuar...”);while (tecla != ‘ ’) tecla = getche();}

Page 29: Linguagem C v12

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.

Page 30: Linguagem C v12

Linguagem C

do while

• A forma geral do loop do while é:

do { comando; } while (condição);

Page 31: Linguagem C v12

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:

Page 32: Linguagem C v12

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;}}

Page 33: Linguagem C v12

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..

Page 34: Linguagem C v12

Linguagem C

O que faz esta rotina?for(t=0; t<100; ++t){count=1;for(;;){printf("%d", count);count++;if(count==10) break;}}

Page 35: Linguagem C v12

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;}}

Page 36: Linguagem C v12

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.

Page 37: Linguagem C v12

Linguagem C

Exemplo: O que faz o programa?main(){int x;for (x = 0; x < 100; x ++) {if (x % 2) continue;printf(“%d ”, x);}}

Page 38: Linguagem C v12

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);}}

Page 39: Linguagem C v12

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.

Page 40: Linguagem C v12

Linguagem C

O Comando goto

• A forma geral é:nome_do_rótulo:....goto nome_do_rótulo;....

Page 41: Linguagem C v12

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.

Page 42: Linguagem C v12

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.

Page 43: Linguagem C v12

• Exercício de Fixação:

PRÁTICA:Escrever um programa que conforme as chaves muda a lógica dos 8 leds.

LINGUAGEM C