A maior rede de estudos do Brasil

Grátis
154 pág.
Linguagem C/C++ - UNIPAN

Pré-visualização | Página 10 de 35

tipos de laços que outras linguagens estruturadas modernas. Os laços em C são o 
for, o while e o do-while. Cada um deles será examinado separadamente. 
 
3.7 O LAÇO for 
 
A forma geral do laço for é 
 
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. 
Estas três maiores divisões devem ser separadas por ponto-e-vírgula. O 
laço for continuará a execução do programa no comando seguinte a for. 
Para um exemplo simples, o seguinte programa imprime os números de 1 
a 100 na tela: 
 
#include <stdio.h> 
 
void 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 
 34 
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. 
O laço for nem sempre precisa executar de maneira crescente. Um laço 
negativo é criado pelo decremento em vez do incremento 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> 
 
void 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> 
 
void 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últiplas 
comandos, como mostrado neste exemplo, que imprime o quadrado dos números de 
0 a 99. 
 
#include <stdio.h> 
 
void 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); 
 } 
} 
 
Um ponto importante sobre o laço for é que o teste condicional é sempre 
realizado no início do laço. Isso significa que o código dentro do laço pode nunca ser 
 35 
executado se a condição é falsa logo de início. Por exemplo: 
 
x = 10; 
 
for (y = 10; y != x; ++y){ 
 printf (“%d “, y); 
} 
 
printf (“%d”, y); 
 
Este laço nunca será executado, pois as variáveis x e y são de fato iguais 
quando o laço é testado pela primeira vez. Isso faz com que a expressão seja 
avaliada como falsa, nem o corpo do laço nem a parte de incremento do próprio laço 
será executado. Portanto, a variável y terá o valor 10 associado a ela e a saída será 
somente o número 10 impresso uma vez na tela. 
 
3.7.1 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> 
 
void 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. 
 36 
 
#include <stdio.h> 
#include <ctype.h> 
 
void 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 main(){ 
 int t; 
 
 for (prompt(); t = readnum(); prompt()) { 
 sqrnum(t); 
 } 
} 
 
void prompt(){ 
 printf (“Informe um inteiro: ”); 
} 
 
 37 
int readnum(){ 
 int t; 
 
 scanf (“%d”, &t); 
 return t; 
} 
 
void sqrnum (int num){ 
 printf (“%d\n”, num * num); 
} 
 
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 lêem 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. 
 
3.7.2 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”); 
} 
 
3.7.3 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 
 38 
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