Além do ciclo while, existem mais dois tipos de ciclos na linguagem C. O ciclo for é um deles e trata-se de uma maneira mais compacta de escrever a instrução while. O exemplo seguinte mostra como é que podemos fazer o programa que escreve a palavra olá 100 vezes utilizando o ciclo for em vez do ciclo while.
#include <stdio.h> main() { int i; for( i = 1; i <= 100; i++ ) printf("Olá\n"); }No caso geral, a instrução for tem o seguinte formato:
for( expressão1; expressão2; expressão3 ) instrução
A expressão1 é executada apenas a primeira vez que o computador passa no ciclo for. Depois o valor da expressão2 é calculado. Se for verdadeiro, o computador executa instrução e depois executa a expressão3. Depois o processo repete-se, isto é, o valor da expressão2 é calculado novamente. Se for verdadeiro, ...
O ciclo for termina quando a expressão2 for falsa.
Tipicamente, a expressão1 é uma instrução de inicialização do ciclo (no nosso exemplo, i=1), a expressão2 é a condição de terminação do ciclo (no nosso exemplo, i <= 100) e a expressão3 corresponde a uma instrução que deve ser feita em cada iteração do ciclo (no nosso exemplo, i++).
De seguida apresenta-se alguns dos exemplos que fizemos na aula passada com a instrução for em vez da instrução while:
Programa para escrever no ecrã os números de 1 a 100
#include <stdio.h> main() { int i; for( i = 1; i <= 100; i++ ) printf("%d\n", i); }
Programa para calcular a soma dos N primeiros números naturais (1+2+3+...+N) em que N é um número introduzido pelo utilizador.
#include <stdio.h> main() { int i, s, n; printf("Introduz N:\n"); scanf("%d", &n); s = 0; for( i = 1; i <= n; i++ ) s = s + i; printf("A soma é %d\n", s); }
Qualquer ciclo for pode ser sempre escrito como um ciclo while.
for( expressão1; expressão2; expressão3 ) instrução
é equivalente a
expressão1; while( expressão2 ) { instrução expressão3; }
O ciclo while e o ciclo for testam a condição de terminação logo no início do ciclo. O terceiro e último ciclo que vão aprender chama-se do-while e testa a condição de terminação no final do ciclo. O caso geral da instrução é:
do instrução while (expressão);
Primeiro a instrução é executada e só depois é que o valor da expressão é calculado e testado. Se for verdadeiro, o programa volta a repetir a instrução que está dentro do ciclo. Se for falso, o programa continua com a instrução que aparece imediatamente a seguir ao do-while.
A diferença deste ciclo para os outros é que a instrução que está dentro do ciclo é executada pelo menos uma vez. No caso dos outros ciclos, a instrução que está dentro do ciclo pode nunca ser executada se a expressão for logo falsa à partida.
De seguida exemplica-se novamente alguns dos exemplos que fizemos, agora com o do-while:
Programa para escrever no ecrã os números de 1 a 100
#include <stdio.h> main() { int i; i = 1; do { printf("%d\n", i); i++; } while( i <= 100 ); }
Programa para calcular a soma dos N primeiros números naturais (1+2+3+...+N) em que N é um número introduzido pelo utilizador.
#include <stdio.h> main() { int i, s, n; printf("Introduz N:\n"); scanf("%d", &n); s = 0; i = 0; do { s = s + i; i++; } while( i <= n ); printf("A soma é %d\n", s); }
Em geral, o ciclo do-while não costuma ser muito utilizado. No entanto, existem algumas situações em que dá mais jeito programar com um do-while do que com um while ou com um for.
Exemplo: o programa seguinte é o nosso famoso programa para calcular a área de um círculo. Desta vez, se o utilizador introduzir um valor negativo para o raio, o programa volta a pedir um valor para o raio.
#include <stdio.h> #define PI 3.14159 main() { float area, raio; do { printf("Introduza o raio: "); scanf("%f", &raio); } while( raio < 0 ); area = PI * raio * raio; printf("A área é %f\n", area ); }
Se quisemos fazer este mesmo programa com a instrução while teríamos de fazer assim:
#include <stdio.h> #define PI 3.14159 main() { float area, raio; printf("Introduza o raio: "); scanf("%f", &raio); while( raio < 0 ) { printf("Introduza o raio: "); scanf("%f", &raio); } area = PI * raio * raio; printf("A área é %f\n", area ); }
Neste exemplo concreto, o programa que utiliza o do-while tem vantagens visto que o raio do círculo tem de ser introduzido pelo menos uma vez.
A instrução break faz com que o programa saia de dentro de um switch, for, while, ou do-while.