Os laços de
repetição permite que um conjunto de instruções seja repetido até que
uma condição seja encontrada. A linguagem C suporta os mesmos tipos de laços que
outras linguagens estruturadas modernas. Os laços em C são o for,
o while e o do-while. Nesse post teremos como foco
o Laço FOR
Forma Geral:
for (inicialização; condição; incremento){
comandos;
}
Na sua forma simples,
a inicialização é um comando de atribuição usado para inicializar
a variável de controle do laço.
A condição é
usualmente uma expressão relacional que determina quando o laço terminará pelo
teste da variável de controle do laço contra algum valor.
O incremento usualmente
define como a variável de controle do laço mudará cada vez que a repetição for
realizada.
Para um exemplo
simples, o seguinte programa imprime os números de 1 a 100 na tela:
#include <stdio.h>
main(){
int x;
for (x = 1; x <= 100; x++){
printf (“%d - “, x);
}
}
Neste programa, x
é inicializado em 1. Desde que x seja menor ou igual a 100,
a função printf( ) é chamada. Depois que a função printf( )
retorna, x é incrementado em 1 e testado para ver se é
menor ou igual a 100. Este processo repete-se até que x seja
maior que 100, ponto este em que a repetição termina.
Neste exemplo, x
é a variável de controle do laço, que é modificada e
verificada cada vez que o laço é executado.
Obs:
O laço for
nem sempre precisa executar de maneira crescente. Um laço negativo é
criado pelo decremento “x--” em vez do incremento “x++” da variável de controle
do laço .
Por exemplo, este
programa imprime os números de 100 a 1 na tela.
#include
<stdio.h>
main(){
int x;
for (x = 100; x > 0; x--){
printf (“%d - “, x);
}
}
Porém, você não está
restrito a incrementar ou decrementar a variável de controle do laço. Você pode
mudar esta variável da maneira que desejar. Por exemplo, este laço imprime os
números de 0 a 100 de cinco em cinco.
#include
<stdio.h>
main(){
int x;
for (x = 0; x <= 100; x = x
+ 5){
printf (“%d - “, x);
}
}
Usando-se um bloco de
código, é possível que um for repita múltiplos comandos, como
mostrado neste exemplo, que imprime o quadrado dos números de 0 a 99.
#include
<stdio.h>
main(){
int i;
for (i = 100; i < 100; i++){
printf (“Este é o valor de
i: %d “, i);
printf (“ e i ao quadrado:
%d\n”, i * i);
}
}
- VARIÁVEIS DO LAÇO for
A discussão
mencionada descreve a forma mais comum do laço for.
Entretanto, muitas
variações são permitidas, o que aumenta o seu poder, flexibilidade e
aplicabilidade em certas situações em programação.
Uma das variações
mais comuns é o uso de duas ou mais variáveis de controle do laço. Aqui está um exemplo que usa duas
variáveis, x e y, para controlar o laço.
#include
<stdio.h>
main(){
int
x, y;
for
(x = 0, y = 0; x + y < 100; x++, y++){
printf (“%d - ”, x + y);
}
}
Este programa imprime
os números de 0 a 98 de dois em dois. Note que as vírgulas são usadas para
separar os comandos de inicialização e incremento. A vírgula é um operador
da linguagem C que significa essencialmente “faça isto e isto”.
A cada interação por
meio do laço, tanto x como y são incrementadas e os
dois devem estar com o
valor correto para que o laço se encerre.
A expressão
condicional não tem necessariamente que envolver teste de variáveis de controle
do laço com algum valor-alvo. De fato, a condição pode ser qualquer expressão
válida da linguagem C. Isso significa que é possível fazer o teste por meio de
muitas condições de terminação. Por exemplo, este programa ajuda a ensinar
crianças a somar. Se a criança cansa e quer parar, ela digita N quando
perguntada se quer mais. Preste especial atenção à parte da condição do laço for.
A expressão condicional faz com que o for seja executado até 99
ou até que o usuário responda não à
solicitação.
#include <stdio.h>
#include
<ctype.h>
main(){
int i, j, resposta;
char fim = ‘ ‘;
for (i = 0, i < 100
&& fim != ‘N’; i++){
for
(j = 1; j < 10; j++){
printf (“quanto é %d + %d? “, i, j);
scanf (“%d”,
&resposta);
if (resposta != (i + j)){
printf (“errado\n”);
}
else{
printf (“certo\n”);
}
}
printf (“Mais ?”);
fim = toupper(getche());
printf (“\n”);
}
}
Uma outra
interessante variação do laço for é possível porque, atualmente,
cada uma das três partes da declaração do for podem consistir de qualquer
expressão válida da linguagem C. Elas não precisam ter nada que faça a seção
ser usada de maneira padrão. Considerando isso, vejamos o seguinte exemplo:
#include <stdio.h>
void
prompt(){
printf
(“Informe um inteiro: ”);
}
int readnum(){
int t;
scanf (“%d”, &t);
return t;
}
void
sqrnum (int num){
printf
(“%d\n”, num * num);
}
main(){
int t;
for (prompt(); t = readnum();
prompt()) {
sqrnum(t);
}
}
Esse programa
primeiro apresenta uma solicitação e, então, aguarda pela resposta. Quando um
número é informado, o seu quadrado é exibido e novamente é feita uma
solicitação. Isso prossegue até que um 0 seja digitado. Se você olhar com atenção
o laço for na função main( ), verá que cada parte
do for é compreendida por chamadas a funções que fazem a
solicitação ao usuário e recebem um número do teclado. Se o número informado é
zero, o laço termina, já que a expressão condicional será falsa; caso
contrário, o quadrado do número é calculado. Assim, nesse laço for as
partes de inicialização e incremento são usadas de modo não tradicional, mas
perfeitamente válido.
Outra característica
interessante do laço for é que pedaços da definição do laço não
necessitam estar lá. Na verdade, não é necessário que uma extensão esteja
presente em qualquer das partes as expressões são opcionais. Por exemplo, este
laço será executado até que o número 10 seja informado.
for (x = 0; x!= 10; )
scanf (“%d”, &x);
Note que a parte de
incremento da definição do for está vazia. Isso significa que,
cada vez que o laço é repetido, a variável x é testada para
verificar se ela é igual a 10, mas x não é modificado de nenhuma
forma. Entretanto, se você digital 10, a condição do laço torna-se falsa e o
laço encerra-se.
·
O LAÇO INFINITO
Um dos usos mais
interessantes do laço for é na criação de laços infinitos.
Nenhuma das três expressões que formam o laço for são requeridas,
portanto, é possível fazer um laço sem fim, deixando-se a expressão condicional
vazia, como mostra este exemplo.
for
( ; ; ){
printf
(“Este laço será executado para sempre.\n”);
}
·
A INTERRUPÇÃO DE UM
LAÇO for
A construção for
( ; ; ) não cria necessariamente um laço infinito tendo em vista uma
nova aplicação da declaração break da linguagem C. Quando
encontrada
em algum lugar dentro
do corpo de um laço, a declaração break faz com que o laço termine.
O controle do programa segue no código posterior do laço, como mostrado aqui.
for ( ; ; ){
ch = getche(); //lê um caractere
if (ch = ‘A’) {
break; //sai do laço
}
}
printf (“Você digitou a letra A”);
Este laço é executado
até que um caractere A seja digitado no teclado. Espero que tenha
esclarecido algumas de suas duvidas em relação ao laço de repetição FOR, qual
quer duvida ou sugestão deixe um comentário.
Para dar continuidade aos posts sobre linguagem C, escolha um dos links abaixo:
“Um autor é um louco que, insatisfeito de enfadar os homens de seu tempo, ainda quer enfadar as gerações futuras.”
(Montesquieu)
sequencias de Fibonacci, um clássico pedidos nas provas de programação.
ResponderExcluir