[CAPÍTULO 1] - [CAPÍTULO 2] - [CAPÍTULO 3]
[PARTE 1] - [PARTE 2] - [PARTE 3] - [PARTE 4] - [PARTE 5] - [PARTE 6] - [PARTE 7] - [PARTE 8]
[PARTE 1] - [PARTE 2] - [PARTE 3] - [PARTE 4] - [PARTE 5] - [PARTE 6] - [PARTE 7] - [PARTE 8]
Controle de Fluxo: Laços e Desvios Incondicionais
Laços:
Em C, há três comandos de ITERAÇÃO ou LAÇOS:-
for
-
while
-
do ... while
for
) ou com o final em aberto (como nos laços while
e do ... while
).
Laço for:
FORMA GERALfor( INICIALIZAÇÃO ; CONDIÇÃO ; INCREMENTO ) COMANDO;
-
INICIALIZAÇÃO
- geralmente um comando de atribuição para colocar um valor na variável de controle do laço; -
CONDIÇÃO
- é uma expressão relacional que determina quando o laço acaba; -
INCREMENTO
- define como a variável de controle do laço varia cada vez que o laço é repetido; -
COMANDO
- um único comando ou um bloco de comandos executados enquato aCONDIÇÃO
é verdadeira.
VARIAÇÕES
1. Operador Vígula - uma das variações mais comuns é o uso do operador vírgula para permitir que duas ou mais variáveis controlem o laço:
for( x = 0 , y = 100 ; x < y ; x ++ , y -= x ) printf("x = %i, y = %i\n",x,y);
2. Laço infinito - Nenhuma das três expressões que formam um laço
for
é obrigatória. Assim, você pode criar um laço infinito assim:for ( ; ; ) printf(" Laço infinito \n");
3. Laço sem corpo - Um comando pode ser vazio. Isso significa que o corpo do laço
for
(ou qualquer outro laço) também pode ser vazio.int pausa ( unsigned long int p) { for ( t = 0 ; t < p ; t++ ) ; }
Laço while
FORMA GERALwhile( CONDIÇÃO ) COMANDO;
COMANDO
é executado enquanto a CONDIÇÃO
for verdadeira ( diferente de zero ); quando for falsa, o controle passa para a linha após COMANDO
. VARIAÇÕES
1. Laço infinito :
while ( 1 ) printf(" Laço infinito \n");
2. Laço sem corpo.
int pausa ( unsigned long int p) { while ( p-- ) ; }
Laço do ... while
Ao contrário dos laços for
e while
, que testam a condição do laço no começo, o laço do ... while
verifica a condição ao final do laço. Isso significa que um laço do ... while
SEMPRE SERÁ EXECUTADO AO MENOS UMA VEZ.FORMA GERAL
do { COMANDO; } while( CONDIÇÃO );
Embora as chaves não sejam necessárias quando apenas um comando está presente, elas são geralmente usadas para evitar confusão (para você, não para o compilador) com o
while
.O laço
do ... while
repete até que a CONDIÇÃO
se torne falsa.VARIAÇÕES
1. Laço infinito :
do{ printf(" Laço infinito \n"); } while ( 1 )
2. Laço sem corpo.
int pausa ( unsigned long int p) { do {} while ( p-- ); }
Desvios Incondicionais:
-
return
-
goto
-
break
-
continue
O comando return
Este comando é usado para retornar de uma função. Ele é um comando de desvio porque faz com que a execução retorne (salte de volta) ao ponto em que a chamada à função foi feita. Se
return
tem um valor associado a ele, esse valor é o valor de retorno da função. Se nenhum valor de retorno é especificado, assume-se que apenas lixo é retornado (alguns compiladores irão automaticamente retornar 0 se nenhum valor for especificado, mas não conte com isso).FORMA GERAL
return EXPRESSÃO;
O comando goto
Na programação estruturada, não há nenhuma situação que necessite do goto
. No entanto, o goto
é uma conveniência que, se usada com prudência, pode ser uma vantagem em certas situações.FORMA GERAL
goto RÓTULO; ... RÓTULO:
O comando
goto
requer um RÓTULO - um identificador válido seguido por dois-pontos).O RÓTULO tem de estar na mesma função do
goto
que o usa — não é permitido desvios entre funções.O RÓTULO pode vir antes, e não apenas depois, do comando
goto
.laço infinito
LOOP: printf("laço infinito\n"); goto LOOP;
O comando break
O comando break
tem dois usos. Você pode usá-lo para terminar um case
em um comando switch
(vide aula Controle de Fluxo: Comandos de Seleção). Você pode também utilizá-lo para forçar uma terminação imediata de um laço, evitando o teste condicional normal do laço.Quando o comando
break
é encontrado dentro de um laço, o laço é imediatamente terminado e o controle do programa retorna ao comando seguinte ao laço.
O comando continue
O comando continue
trabalha de uma forma pouco parecida com a do comando break
. Porém, em vez de forçar a terminação, continue
força que ocorra a próxima iteração do laço, pulando qualquer código intermediário.Para o laço
for
, o comando continue
faz com que o incremento e o teste condicional sejam executados.Para os laços
while
e do ... while
, o controle do programa passa para o teste condicional.int conta_espacos(const char * str) { int i = 0, nesp = 0; while ( str[i] ) { if ( str[i] != ' ' ) continue; nesp ++; } return nesp; }
Leitura Recomendada:
- CCT capítulo 3
- K&R capítulos 3
Bibliografia e fonte:
- [CCT] Schildt, H. (1996) C, completo e total: 3a Ed.. São Paulo, Makron.
- LP, UFMA; Coutinho, Lucian. Linguagem de programação para ciencia da computação da ufma.http://www.deinf.ufma.br/~lrc/2009.1/LP/
- [K&R] KERNIGHAN, B. e RITCHIE, D. (1990) C, a linguagem de programação: padrão ANSI. Rio de Janeiro: Campus.
- DEITEL, H. M. (1999) Como programar em C. Rio de Janeiro: LTC.
- Módulo Consultoria e Informática (1989) Linguagem C: programação e aplicações. Rio de Janeiro: LTC.
Coloque aqui o seu email