Você está na página 1de 7

Next: 15 Outras Estruturas de Up: 1 Programao Bsica em Previous: 13

Mais sobre funes


Subseces

14.1 O comando de repetio while


o Exemplo 1:

14.2 Estilo de formatao para estruturas de repetio


o 14.2.1 Colocao das chaves
o 14.2.2 Necessidade ou no das chaves
o 14.2.3 Uso de espao em branco
o 14.2.4 Laos aninhados
Exemplo 2:
Exemplo 3:
Exemplo 4:

14 Estruturas de Repetio
A linguagem C possui comandos para repetir uma sequncia de instrues.
Estas estruturas de repetio, tambm conhecidas como laos (do
ingls loops). A principal construo que veremos o while2

14.1 O comando de repetio while


O comando de repetio while tem duas partes: a expresso de teste e o corpo
da repetio. O formato do while :
while (expresso teste)
corpo da repetio
A expresso teste inicialmente avaliada para verificar se o lao deve
terminar. Caso a expresso seja verdadeira (isto , diferente de 0 (zero)),
o corpo da repetio executado. Depois desta execuo, o processo
repetido a partir da expresso teste. O corpo do lao, por sua vez, pode ser
uma sentena simples ou composta.

O exemplo abaixo mostra o uso do comando de repetio while:


int contador = 0;
while( contador < 5 )
{
printf( "contador = %d\n", contador);
contador += 1;
}
printf("ACABOU !!!!\n");

Sada:
contador = 0
contador = 1
contador = 2
contador = 3
contador = 4
ACABOU !!!!

Neste exemplo, a expresso de teste contador < 5, e o corpo do lao a


sentena printf().
Se examinarmos cuidadosamente este exemplo, veremos que a varivel
contador inicializada com 0 (zero) quando definida. Depois disso, a
expresso de teste verificada e, como 0 < 5 verdadeiro, o corpo da
repetio executado. Assim, o programa imprime contador = 0, e incrementa
contador de um (atravs do ps-decremento indicado no argumento de
printf()). Em seguida, a expresso de teste verificada novamente e todo o
processo se repete at que contador seja 4 e contador = 4 seja impresso.
Depois disso, contador incrementado para 5 e o teste executado. Mas desta
vez, 5 < 5 falso, ento o lao no continua. A execuo do programa

continua na sentena que segue o lao (no caso, imprimir a frase ACABOU
!!!).
Aps a execuo do while, a varivel contador tem valor 5.
No exemplo acima, h uma sentena simples no corpo da repetio. Quando
este for definido por uma sentena composta (bloco), no se deve esquecer de
usar as chaves ({ e }) para delimitar o bloco da sentena composta.
O exemplo seguinte mostra um uso mais apropriado do comando while: Em
situaes onde o nmero de repeties no conhecido antes do inico do
comando while:
Exemplo 1:
Este programa pede nmeros ao usurio at que a soma de todos os nmeros
digitados for pelo menos 20.
#include <stdio.h>
main( ){
int total = 0, num;
while( total < 20 ) {
printf( "Total = %d\n", total );
printf( "Entre com um numero: " );
scanf( "%d", &num );
total += num;
}
printf( "Final total = %d\n", total );
}

Exemplo de sada:
Total
Entre
Total
Entre
Total
Entre
Final

= 0
com um numero: 3
= 3
com um numero: 8
= 11
com um numero: 15
total = 26

Inicialmente, dado o valor 0 varivel total, e o teste verdadeiro (0 < 20).


Em cada iterao, o total impresso e o usurio digita um nmero que
somado a total. Quanto total for maior ou igual a 20, o teste do while torna-se
falso, e a repetio termina.

14.2 Estilo de formatao para estruturas de repetio

A regra principal ser consistente. Assim, seu programa ser mais legvel.
14.2.1 Colocao das chaves
H trs estilos comuns de colocar as chaves:
while (expressao)
{
sentenca;
}
while (expressao)
{
sentenca;
}
while (expressao) {
sentenca;
}

APENAS UM DESTES ESTILOS deve ser consistentemente usado para as


sentenas for, while e do ... while. Use o estilo com o qual voc se sentir mais
confortvel.
14.2.2 Necessidade ou no das chaves
Foi mencionado anteriormente que as chaves ({ e }) podem ser omitidas
quando o corpo da repetio contiver apenar uma sentena. Por exemplo:
while( i < 5 )
i += 1;

Embora as chaves possam ser omitidas, h uma nica razo para coloc-las
sempre:
while( i < 5 ) {
i += 1;
}

Quando voc adicionar algo ao programa, voc poder adicionar uma


sentena para um lao com apenas uma sentena. Se voc fizer isso, vital
que voc tambm adicione chaves. Se voc no fizer isso, a segunda sentena
do lao no ser considerada como parte do lao. Por exemplo:
while( i < 5 )
i += 1;
j += 1;

na verdade o mesmo que:


while( i < 5 )
i += 1;
j += 1;

enquanto a inteno era na realidade:


while( i < 5 ) {
i += 1;
j += 1;
}

14.2.3 Uso de espao em branco


A outra questo de formato se deve ser colocado um espao em branco
depois do while e antes do abre parnteses ((). Por exemplo:
while (i<5)

ou
while (i<5)

ou
while( i < 5 )

Isto tambm uma escolha pessoal. Porm seja consistente em sua escolha !
14.2.4 Laos aninhados
possvel colocar um lao dentro de outro (lao aninhado).
Exemplo 2:
#include <stdio.h>
int main( ){
int linha, coluna;
linha = 1;
while (linha < 5)
{
coluna = 1;
while (coluna < 5)
{
printf( "%3d", linha * coluna );
coluna += 1;
}
linha += 1;
}
printf( "\n" );
}

Sada:
1
2

2
4

3
6

4
8

3
4

6 9 12
8 12 16

No exemplo acima, para cada iterao do lao externo, o lao interno imprime
uma linha com nmeros e depois pula de linha.
Exemplo 3:
Este exemplo parecido com o anterior, exceto que o printf() colocado
dentro do lao interno. Como era de se esperar uma nova linha impressa
aps cada valor ao invs de ser depois de 4 valores.
#include <stdio.h>
int main( ){
int linha, coluna;
linha = 1;
while (linha < 5)
{
coluna = 1;
while (coluna < 5)
{
printf( "%3d", linha * coluna );
printf( "\n" );
coluna += 1;
}
linha += 1;
}
}

Sada:
1
2
3
4
2
4
6
8
3
6
9
12
4
8
12
16

Exemplo 4:
#include <stdio.h>
int main( ){

int linha, coluna;


printf("\n");
linha = 1;
while (linha < 8)
{
printf( "\t" );
coluna = 1;
while (coluna < linha)
{
printf( "*" );
coluna += 1;
}
printf( "\n" );
linha += 1;
}
}

Sada:
*
**
***
****
*****
******
*******
********