Programação Imperativa

Aula 10

Sumário


Ciclo for

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;
       }

Ciclo do-while

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.


Instrução break

A instrução break faz com que o programa saia de dentro de um switch, for, while, ou do-while.