Estruturas de repetição
Programação de Computadores I
Natália Batista
https://sites.google.com/site/nataliacefetmg/
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
1. Repetição
(1/2)#include <stdio.h>
int main ( ) { printf ("1 ");
printf ("2 ");
: : :
printf ("10 ");
: : :
printf("1000\n");
}
Como imprimir os mil primeiros números naturais?
1000 linhas de código com printf!
Insano!!!
saída: 1 2 3 4 5 6 7 8 9 10 ... 1000
O trecho de código que será repetido várias vezes pode ser generalizado
Estrutura de repetição
1. Repetição
(2/2)2. Estruturas de repetição
A linguagem C++ possui três tipos de estruturas de repetição (loops ou laços):
for
while
do-while
Executam um ou mais comandos de forma repetida dependendo de uma condição.
3. For
(1/9) Recomendado quando há um número determinado de repetições.
Forma geral:
for (i = valor inicial; condição; passo){
comandos;
}
i: variável de controle
valor inicial: limite inferior
condição: enquanto for verdadeira haverá repetição
3. For
(2/9) Exemplo 1: Escrever os números inteiros de 1 a 5.
E se fossem 1000 números?
#include <stdio.h>
int main () { int num;
for (num = 1; num <= 5; num++){
printf ("%d ", num);
}
return 0;
}
3. For
(3/9) A primeira instrução é executada uma única vez, antes do início do laço.
A expressão a seguir é testada sempre que o fluxo do programa se encontrar no início do laço.
A segunda instrução é executada no final do laço, após a execução do bloco de instruções internas.
Cada execução do conjunto de instruções denomina-se uma iteração.
for (num = 1; num <= 5; num++){
printf ("%d ", num);
}
3. For
(4/9) Exemplo 1: Escrever os números inteiros de 1 a 5.
for (num = 1; num <= 5; num++){
printf ("%d ", num);
}
1ª iteração num = 1 2ª iteração num = 2 3ª iteração num = 3 4ª iteração num = 4 5ª iteração num = 5
3. For
(5/9) Exemplo 2: Escreva um algoritmo que imprima todos os números inteiros pares de 0 a 100.
#include <stdio.h>
int main(){
int i;
for (i = 0; i <= 100; i = i + 2) printf(“%d ”, i);
return 0;
}
3. For
(6/9) Exemplo 3: Construir um algoritmo que leia um número N, calcule e imprima o fatorial desse número.
3. For
(7/9) Exemplo 3: Construir um algoritmo que leia um número N, calcule e imprima o fatorial desse número.
Definição de fatorial:
Exemplo:
3. For
(8/9) Exemplo 3: Construir um algoritmo que leia um
número N, calcule e imprima o fatorial desse número.
#include <stdio.h>
main(){
int N, i, fat;
//Leitura
printf("Digite um numero: ");
scanf(“%d”, &N);
//Cálculo do fatorial fat = 1;
for (i = 1; i <= N; i++) fat = fat * i;
//Saída
printf("O fatorial de %d e igual a: %d", N, fat);
return 0;
3. For
(9/9) Flexibilidade: qualquer expressão de um laço “for” pode conter várias instruções separadas por vírgula.
➔ inicializa x e y com 0
➔ testa se x + y < 100
➔ executa comando
incrementa 1 a x, e x a y
for (x=0,y=0; x+y<100; ++x, y=y+x) printf(“%d”,x+y);
raramente usado
4. While
(1/12) Pode ser utilizado quando não se sabe o número de vezes que um trecho do
algoritmo deve ser repetido, embora também possa ser utilizada quando se conhece esse número.
4. While
(2/12) Forma geral
while (condição){
comandos;
}
4. While
(3/12) Essa estrutura baseia-se na análise da
condição: a repetição será feita enquanto a condição mostrar-se verdadeira.
4. While
(4/12) Exemplo 4: Escrever os números inteiros de 1 a 5.
int i = 1;
while (i <= 5){
printf(“%d “, i);
i++;
}
4. While
(5/12) Se o teste condicional do while (que fica no início) resultar em um valor falso logo na
primeira comparação, os comandos de
dentro da repetição não serão executados.
4. While
(6/12) Exemplo 5: Programa para calcular a área de um triângulo, que não permite a entrada de dados inválidos.
Neste caso são considerados dados inválidos aqueles menores ou iguais a 0. Se for lido um valor inválido, a leitura terá que ser
repetida.
#include <stdio.h>
int main(){
float base, altura, area;
base = 0;
while (base <= 0){
printf( "Digite a medida da base: ");
scanf(“%f”, &base);
}
altura = 0;
while (altura <= 0){
printf("\nDigite a medida da altura ");
scanf(“%f”, &altura);
}
area = base * altura / 2;
printf("Area = %f", area);
return 0;
}
4. While
(8/12) Pode a execução de um programa com processamento iterativo não terminar?
Observe:
s = 0;
i = 0;
while (i < 3) {
i--;
s = s + i;
}
Este laço ou loop nunca irá terminar!
(Erro de lógica)
s = 0;
i = 0;
while (i > -3) {
i--;
s = s + i;
}
Maneira correta
4. While
(9/12) Atenção!
• Em alguns casos, o loop infinito pode ser desejável.
• Exemplo: um programa que monitora um reator nuclear deve estar sempre em execução.
Neste caso, pode-se escrever:
while (1) {
...
}
4. While
(10/12)for (;;)
printf(“Este loop executará eternamente!\n”);
Laço infinito com for:
4. While
(11/12) Qual seria a saída se não fossem colocadas as chaves na instrução do while?
int i = 1;
while (i <= 5){
printf(“%d “, i);
i++;
}
4. While
(12/12) O que faz o programa a seguir?
include <stdio.h>
int main(){
int n = 10;
while (n) {
printf(“%d “, n);
n = n-1;
}
return 0;
while(n) é equivalente a:
while(n != 0)
5. Do-while
(1/8) Pode ser utilizado quando o número de repetições necessárias não é fixo.
Os comandos serão repetidos até a condição assumir o valor falso.
5. Do-while
(2/8) Forma geral
do {
comandos;
} while (condição);
5. Do-while
(3/8) Exemplo 6: Escrever os números inteiros de 1 a 5.
int i = 1;
do {
printf(“%d ”, i);
i++;
} while (i <= 5);
5. Do-while
(4/8) Qual a diferença entre o while e o do-while?
No do-while os comandos serão
repetidos pelo menos uma vez,
já que a condição de parada se
encontra no final.
5. Do-while
(5/8) Qual a diferença entre o for e os comandos while / do-while?
O número de vezes que o comando do for será executado é normalmente conhecido enquanto no while/do-while é desconhecido.
5. Do-while
(6/8) Exemplo 7: programa que lê o conceito obtido pelo aluno no semestre (de A a E) e imprime seu significado. O programa mantém-se aberto até que o usuário digite S (sair).
#include <stdio.h>
int main(){
char Conceito;
do{
//Leitura
printf("Digite o conceito obtido no semestre: ");
scanf(" %c", &Conceito);
//Seleção e impressão do conceito switch( Conceito ){
case 'a' :
case 'A' : printf("Excelente\n"); break;
case 'b' :
case 'B' : printf("Otimo\n"); break;
case 'c' :
case 'C' : printf("Bom\n"); break;
case 'd' :
case 'D' : printf("Regular\n"); break;
case 'e' :
case 'E' : printf("Ruim\n"); break;
case 's' :
case 'S' : printf("O programa sera encerrado.\n"); break;
default : printf("O conceito informado nao existe.\n");
}
} while (Conceito != ‘S’ && Conceito != ‘s’);
return 0;
5. Do-while
(8/8) Exercício: fazer o programa que calcula a área do triângulo (Exemplo 5) usando do- while.
Por que neste caso não é necessário realizar as atribuições iniciais da base e da altura?
6. Comparação entre os laços
7. Os comandos break e continue
break
- sai de um laço (for, while, do) e do switch
- o próximo comando a ser executado é o comando seguinte ao laço
continue
- vai para o início do laço
8. Atividades sugeridas
Leitura do livro-texto (Damas): Capítulo 4.
Fazer os exercícios do capítulo.