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 (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õ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 ("nnEscolha a fruta pelo numero:nn");
printf ("t(1)...Mamaon");
printf ("t(2)...Abacaxin");
scanf("%d", &i);
} while ((i<1)||(i>2));
switch (i)
{
case 1:
printf ("ttVoce escolheu Mamao.n");
break;
case 2:
printf ("ttVoce 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.
• Exercício de Fixação:
PRÁTICA:
Escrever um programa que
conforme as chaves muda a
lógica dos 8 leds.
LINGUAGEM C

2 controle fluxo

  • 1.
    Linguagem C Estruturas deControle de Fluxos Disciplina: AAM Profa. Ana Watanabe 1/2013 vol.4
  • 2.
    “regozijai-vos sempre.” ITessalonicenses 5:16
  • 3.
    Linguagem C • Objetivoda aula: • ESTRUTURAS DE CONTROLE DE FLUXO • Exercício de Fixação
  • 4.
    Linguagem C • ESTRUTURASDE 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.
  • 5.
    Linguagem C Comandos detestes 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
  • 6.
    Linguagem C Comandos detestes de condições if Forma geral do comando if é: if (condição) comando; else comando; Obs.: A parte else é opcional
  • 7.
    Linguagem C • Exemplos if(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.
  • 8.
    Linguagem C • “escada”if-else-if: É muito comum encontrar programas da seguinte forma: if (condição) comando; else if (condição) comando; else comando;
  • 9.
    Linguagem C • Ocomputador 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.
  • 10.
    Linguagem C Comandos detestes 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.
  • 11.
    Linguagem C Forma geraldo switch switch (variável) { case constante1: seqüência de comandos break; case constante2: seqüência de comandos break; default: seqüência de comandos }
  • 12.
    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.
  • 13.
    Linguagem C default • Ocomando 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.
  • 14.
    Linguagem C break • Quandoo 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.
  • 15.
    Linguagem C importante: • Oswitch 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.
  • 16.
    Linguagem C Comandos decontrole 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
  • 17.
    Linguagem C for • Oloop 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.
  • 18.
    Linguagem C Inicialização • Naforma 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.
  • 19.
    Linguagem C Condição • Acondiçã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.
  • 20.
    Linguagem C Incremento • Oincremento 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.
  • 21.
    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 ++) ; }
  • 22.
    Linguagem C Exemplo 2 /*conta de 100 a 1 */ main() { int x; for (x = 100; x > 0; x --) ; }
  • 23.
    Linguagem C Exemplo 3 /*conta de 0 a 100, 5 em 5 */ main() { int x; for (x = 0; x <= 100; x = x + 5) ; }
  • 24.
    Linguagem C Loop infinito •Podemos fazer um comando for executar para sempre simplesmente não especificando sua parte condicional. Veja: for (;;) { }
  • 25.
    Linguagem C Saindo deum 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; }
  • 26.
    Linguagem C While •O whileexecuta um comando (ou bloco de comandos) enquanto uma condição for verdadeira. A forma geral do while é: while (condição) comando;
  • 27.
    Linguagem C While Exemplo 1 pausa() { chartecla = ‘0’; printf(“Tecle ESPAÇO para continuar...”); while (tecla != ‘ ’) tecla = getche(); }
  • 28.
    Linguagem C Exemplo 1 pausa() { chartecla = ‘0’; printf(“Tecle ESPAÇO para continuar...”); while (tecla != ‘ ’) tecla = getche(); }
  • 29.
    Linguagem C do while •Aocontrá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.
  • 30.
    Linguagem C do while •A forma geral do loop do while é: do { comando; } while (condição);
  • 31.
    Linguagem C Um dosusos 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:
  • 32.
    Linguagem C int main() { int i; do { printf ("nnEscolha a fruta pelo numero:nn"); printf ("t(1)...Mamaon"); printf ("t(2)...Abacaxin"); scanf("%d", &i); } while ((i<1)||(i>2)); switch (i) { case 1: printf ("ttVoce escolheu Mamao.n"); break; case 2: printf ("ttVoce escolheu Abacaxi.n"); break; } }
  • 33.
    Linguagem C Interrupção deloops •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..
  • 34.
    Linguagem C O quefaz esta rotina? for(t=0; t<100; ++t) { count=1; for(;;) { printf("%d", count); count++; if(count==10) break; } }
  • 35.
    Linguagem C O quefaz 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; } }
  • 36.
    Linguagem C Comando continue •Ocomando 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.
  • 37.
    Linguagem C Exemplo: Oque faz o programa? main() { int x; for (x = 0; x < 100; x ++) { if (x % 2) continue; printf(“%d ”, x); } }
  • 38.
    Linguagem C /* programapara 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); } }
  • 39.
    Linguagem C O Comandogoto •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.
  • 40.
    Linguagem C O Comandogoto • A forma geral é: nome_do_rótulo: .... goto nome_do_rótulo; ....
  • 41.
    Linguagem C •O comandogoto 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.
  • 42.
    Linguagem C •Existem algumassituaçõ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.
  • 43.
    • Exercício deFixação: PRÁTICA: Escrever um programa que conforme as chaves muda a lógica dos 8 leds. LINGUAGEM C