Capítulo 4 - Ciclos e Iteração



Este capítulo trata das várias instruções do C utilizadas na construção de ciclos ou execução repetida (e controlada) de outras instruções.

Tópicos



A instrução while

A instrução while é semelhante à que outras linguagens possuem. No entanto a utilização de uma expressão genérica como controle pode abrir novas possibilidades. A sintaxe geral da instrução while é:
while (expressão)
  instrução;
Um exemplo simples:
int x=3;

void main(void)
{
  while (x > 0) {
    printf("x = %d\n", x);
    x--;
  }
}

escreve no vídeo ...
x = 3
x = 2
x = 1
Uma vez que a instrução while pode receber uma expressão geral em vez de apenas uma condição (o valor da expressão é interpretada como TRUE se for diferente de 0, e como FALSE se for igual a 0), as instruções seguintes são todas legais:
while (x--);
while (x = x + 1);
while (x += 5);
Usando qualquer das expressões mostradas, estas são avaliadas sucessivamente até atingirem o valor 0 (FALSE).

Outros exemplos:

while (x++ != 10);

while ((ch = getchar()) != 'q')
  putchar(ch);

O primeiro exemplo leva i até 10. O segundo usa as funções standard do C getchar() e putchar() (declaradas em stdio.h) que lêem e escrevem um carácter respectivamente do teclado e para o vídeo. O ciclo while lê caracteres do teclado e mostra no vídeo até que o usuário entre um carácter 'q'.
 
 
Up

A instrução do-while

A instrução do-while testa a expressão que dela faz parte depois de executar as instruções do ciclo e continua enquanto se mantiver em TRUE. O ciclo é executado pelo menos 1 vez. A sua sintaxe é:
do
  instrução;
while (expressão);
O seguinte código
int x = 3;

void main(void)
{
  do
    printf("x = %d\n", x--);
  while (x > 0);
}

escreve ...
x = 3
x = 2
x = 1

 
Up

A instrução for

A sintaxe da instrução for é diferente do habitual para outras linguagens. Uma instrução for é então definida como:
for (expressão1; expressão2; expressão3)
  instrução;
A expressão1 é o inicializador, a expressão2 constitui o teste de terminação, e a expressão3 é o modificador (é executada em cada ciclo e pode fazer mais do que um simples incremento ou decremento). A instrução for é equivalente a um ciclo while com a seguinte construção:
expressão1;
while (expressão2) {
  instrução;
  expressão3;
}
Por exemplo, o seguinte código
int x;

void main(void)
{
  for (x=3; x>0; x--)
    printf("x = %d\n", x);
}

escreve no vídeo ...
x = 3
x = 2
x = 1
As próximas instruções for são todas legais:
for (x = 0; x <= 9 && x != 3; x++);
for (x = 0, y = 4; x <= 3 && y < 9; x++, y += 2);
for (x = 0, y = 4, z = 1000; z; z /= 10);
Reparar no uso do operador , para executar múltiplas acções. No terceiro ciclo, a execução continua até que z se torne 0 (FALSE).
 
 
Up

break e continue

As instruções break e continue permitem-nos controlar melhor a forma de execução dos ciclos: No exemplo seguinte pretende-se ler uma série de inteiros do teclado e fazer qualquer coisa com eles. No entanto se o valor lido for 0 terminamos a leitura, se o valor for negativo escrevemos uma mensagem de erro e terminamos o ciclo, e se for maior do que 100 ignoramos esse valor e passamos à leitura do seguinte.
while (scanf("%d", &value) && value != 0) {
  if (value < 0) {
    printf("Valor ilegal\n");
    break;
  }
  if (value > 100)
    continue;
  ...;
  /* processar value */
  ...;
}
A função scanf() lê valores do teclado e coloca-os em variáveis. Retorna o número de caracteres lidos se tiver sucesso e 0 no caso contrário. Assim, se houver uma leitura, ela retorna um valor diferente de 0, que é interpretado como TRUE.
 
 
Up

Exercícios

1. Escreva um programa que leia 10 números reais e escreva a sua média, máximo e mínimo.

2. Escreva um programa que leia valores inteiros até ser lido o valor -999. Quando isso acontecer deverá escrever a soma dos valores lidos.

3. Escreva um programa que leia um primeiro valor inteiro, que será uma base, e em seguida um segundo valor (deverá ser lido carácter a carácter até aparecer um que indica termino ex. # ) que deverá ser interpretado na base lida anteriormente. O programa deverá escrever o equivalente decimal do segundo valor.
      Exemplo:
 
 
Entrada Saída
10 1234# 1234
8 77# 63
2 1111# 15
4. Escreva um programa que leia um inteiro maior ou igual a 1 e calcule a seguinte sequência: se o valor for par deverá dividi-lo por 2, se for ímpar deverá multiplicá-lo por 3 e somar 1. Quando o resultado atingir o valor 1, a sequência termina. O programa deverá escrever todos os valores assim gerados, assim como o tamanho da sequência. Exemplo:

Valor inicial: 9
Próximo: 28
Próximo: 14
Próximo: 7
Próximo: 22
Próximo: 11
Próximo: 34
Próximo: 17
Próximo: 52
Próximo: 26
Próximo: 13
Próximo: 40
Próximo: 20
Próximo: 10
Próximo: 5
Próximo: 16
Próximo: 8
Próximo: 4
Próximo: 2
Próximo: 1
Gerada uma sequência de tamanho 20.
Se o valor entrado for menor do que 1 deverá indicar a ocorrência de um erro e terminar com uma mensagem de erro.

5. Escreva um programa que leia uma linha de texto e que conte o número de cada vogal existente na linha. O programa deverá imprimir o número total de caracteres lidos, o número de ocorrências de cada vogal e a respectiva percentagem relativamente ao total de caracteres.
 

Status de entrega dos exercicios do capitulo 4
 
 
 
Aluno Exercício 1 Exercício 2 Exercício 3 Exercício 4 Exercício 5
Altair IV-1 IV-2 IV-3 IV-4 IV-5
Auricélia  Cap 41 Cap 42 Cap 43 Cap 44 Cap 45
Edson Takahashi media Int_lido dec seq text
Elenice exerc 1 ----------- exerc3 exerc 4 exerc5
Gerson Mota exerc1 exerc2 exerc3 exerc4 exerc 5
Jose Luis 10 nros reais ---------- ---------- par e impar ContaCaracter
Reinaldo Cunha ex1-s4 ex2-s4 exerc 3 ex4_s4 exerc 5
Teresa exercicio 1 exercicio 2 exercicio 3 exercicio 4 exercicio 5

 
 
 
 
 
Up


[REV 8/98]