Linguagem C
LPG-I – Estruturas de Repetição
Prof. Flavio Marcello
http://www.joinville.udesc.br/portal/professores/flavio/
Linguagem C

ESTRUTURA DE REPETIÇÃO
– Repetição com Teste no Início
– Repetição com Teste no Final
– Repetição Contada
Estrutura de Repetição

Permite que uma seqüência de comandos
seja executada repetidamente até que uma
determinada condição de interrupção seja
satisfeita.

São de 3 Tipos:
 while
 do ... while
 for
Estrutura com Teste no Início
Fluxograma while
.F.
condição
.V.
Estrutura com Teste no Início (while)



A variável de controle é iniciada antes do Enquanto;
A variável de controle é incrementada dentro do Enquanto.
Enquanto o resultado da condição é verdadeiro (!=0, 1)
executa repetidamente um conjunto de instruções.
Sintaxe:

while (<condição>) {
<Comando_1>;
...
<Comando_N>;
}
Loop
Se no primeiro teste da condição resultado for FALSO, os
comandos dentro do loop NÃO serão executados NEM uma vez.
while
Exemplo 1: Encontrar o menor dentre um
conjunto de 05 valores digitados.
// ALGORITMO EncontraMenor_em5
#include <stdio.h>
Então ela foi
inicializada antes.
int qtdenumlidos, num, menor;
main () {
printf (“Algoritmo Encontrar Menor Valor num conjunto de 05 valores”);
prinf (“Digite 1º Valor: ”);
scanf (“%i”, &num);
menor = num;
qtdenumlidos = 1;
while (qtdenumlidos < 5) {
printf (“Digite novo Valor: ”);
A variável de controle
deve ter um valor conhecido.
scanf (“%i”, &num);
if (num < menor)
menor = num;
qtdenumlidos = qtdenumlidos + 1;
}
A variável de controle deve
ter seu valor modificado
dentro do “laço”.
Neste caso a variável
foi incrementa em 1
printf (“Menor Valor Encontrado: %i ”, menor);
}
while
Sãolernecessários
Exemplo 3: Desenvolver um algoritmo para
um conjunto de
valores correspondentes aos pontos que 3alunos
obtiveram em
contadores
um teste.
Quando o valor fornecido for um número negativo, isto é um sinal
que não existem mais pontos para serem lidos.

Contar e escrever quantos alunos fizeram o teste.

Contar e escrever quantos alunos tiveram nota baixa (PONTOS
< 50)

Contar e escrever quantos alunos tiveram nota alta
(100PONTOS  150)
#include <stdio.h>
#include <conio.h>
// Programa Estatistica_de_Testes
int NUM,ALTAS,BAIXAS,PONTOS;
void main () {
NUM = 0;
ALTAS = 0;
BAIXAS = 0;
printf ("FORNECA OS PONTOS OBTIDOS: ");
scanf ("%i", &PONTOS);
while (PONTOS > 0) {
if ((PONTOS >= 100) && (PONTOS <= 150))
ALTAS = ALTAS+1;
if (PONTOS < 50)
BAIXAS = BAIXAS+1;
NUM = NUM + 1;
printf ("PONTOS: "); scanf ("%i", &PONTOS);
}
printf ("NUMERO DE NOTAS: %i", NUM);
printf ("NUMERO DE NOTAS ALTAS: %i", ALTAS);
printf ("NUMERO DE NOTAS BAIXAS:%i", BAIXAS);
getch (); }
Contadores Inicializados
com ZERO
while
Exemplo 3: Desenvolver algorítmo para ler um
conjunto de valores correspondentes aos
pontos que alunos obtiveram em um teste.

Quando o valor fornecido for um número
negativo, isto é um sinal de que não existem
mais pontos para serem lidos.
Contar quantos alunos fizeram o teste;
 Escrever o media de pontos de alunos.

// Algoritmo Contagem_Pontos_Alunos
#include <stdio.h>
#include <conio.h>
int PONTOS_Teste;
float SOMA_Ptos, NUM_Alunos;
void main () {
printf ("Algoritmo Contagem de Pontos dos Alunos");
NUM_Alunos dever ser
zerado
NUM_Alunos = 0;
SOMA_Ptos = 0;
antes do Enquanto
printf ("PONTOS: ");
scanf ("%i", &PONTOS_Teste);
e então incrementado
em 1 dentro do
while (PONTOS_Teste > 0) {
Laço de repetição
NUM_Alunos = NUM_Alunos + 1;
SOMA_Ptos = SOMA_Ptos + PONTOS_Teste;
printf ("PONTOS: ");
scanf ("%i", &PONTOS_Teste);
}
printf ("TOTAL DE ALUNOS: %i ", NUM_Alunos);
if (NUM_Alunos > 0)
printf ("Media de Pontos: %f ", SOMA_Ptos / NUM_Alunos);
getch();
}
Estrutura com Teste no Final
Fluxograma do … while
C1
...
C2
Cn
.V.
condição
.F.
Estrutura c/ Teste no Final (do … while)

Semelhante ao while, porém, a condição é testada ao
final do laço, então os comandos dentro do laço são
executados pelo menos 1 vez.

Enquanto que o resultado da condição for verdadeiro
(!=0 , 1) executa-se um conjunto de instruções.
Sintaxe:

do {
<Comando_1>;
...
<Comando_N>;
}
while (<condição>);
do … while
Exemplo 1: Desenvolver algoritmo que
permita a leitura de numeros positivos e
acumule seu somatório, imprimindo o
resultado no final.
#include <stdio.h>
#include <conio.h>
//ALGORITMO SomaPositivos
int numero, soma;
void main () {
soma = 0;
printf ("Programa para somar N valores positivos");
do {
printf ("Digite um valor: ");
scanf ("%i", &numero);
if (numero > 0)
soma = soma + numero;
} while (numero > 0);
printf ("Soma dos Valores: %i", soma);
getch ();
}
do … while
Exemplo 2: Desenvolver um algoritmo para
escrever os 05 primeiros múltiplos de 13.
Variáveis
Loop
Condição
num
cont
vezes
cont < vezes
?
?
?
?
...
...
...
...
13
0
5
?
26
1
5
.V.
39
2
5
.V.
52
3
5
.V.
65
4
5
.V.
78
5
5
.F.
Loop
Monitor
//Programa Azarao
#include <stdio.h>
int num, cont, vezes;
main () {
num = 13;
cont = 0;
vezes = 5;
do {
printf ("%i ", num);
num = num +13;
cont = cont +1;
}
while (cont < vezes);
}
Estrutura de Repetição Contada
Fluxograma for
.F.
Início , Cond., Incr.
.V.
Comando
Estrutura de Repetição Contada (for)
A variável de controle é iniciada da estrutura;
 A variável de controle é incrementada dentro da estrutura.
 Para o resultado da condição verdadeiro (!=0, 1) executa-se
um conjunto de instruções.
 Então, neste tipo de estrutura manipulam-se
automaticamente todos os detalhes da repetição controlada
por contador.
Sintaxe:

for (<inicialização> ;<condição>; <incremento>) {
<Comando_1>;
...
<Comando_N>;
}
for
Exemplo 1: Desenvolver algoritmo que
permita imprimir os números de 1 a 5.
#include <stdio.h>
Condição
main () {
int cont;
for (cont = 1; cont <= 5; cont = cont +1) {
printf (“%i\n”, cont);
}
Loop
}
cont
cont <= 5
?
?
...
...
1
?
1
.V.
2
.V.
2
.V.
...
...
6
.F.
Passo1 - Inicializa a variável de controle.
Passo3 - Incrementa variável de controle;
retorna ao Passo2.
Monitor
Passo2 - Testa a condição, de for
verdadeira executa o conjunto de
instruções, caso contrário encerra loop.
Comparativo: (for) X (while)
for
int i, N, Valor,Soma=0;
scanf ("%i",&N);
for(i= 0; i<N; i++) {
scanf ("%i", &Valor);
Soma = Soma + Valor;
}
while
int i, N, Valor,Soma=0;
scanf ("%i",&N);
i = 0;
while (i < N) {
scanf ("%i", &Valor);
Soma = Soma + Valor;
i = i + 1;
}
Qual Estrutura Usar ???
for
Sabe-se o número de repetições
while
Não sabe-se o número exato de
repetições
Não sabe-se o número de
repetições, executando pelo
menos uma vez.
do ... while

Toda estrutura while pode ser convertida para
do...while e vice-e-versa;

Toda estrutura for pode ser convertida em while, mas
nem toda estrutura while pode ser convertida em for.
Exercício 1
Fazer um algoritmo para ler 2 valores e
executar uma das seguintes operações
matemáticas, de acordo com a escolha do
usuário:
- 1 – soma,
- 2 – subtração,
- 3 – multiplicação
- 4 – divisão.
Exercício 2
Em uma corrida de automóveis com N
voltas, foram anotados os tempos, em
ordem, de um piloto a cada volta. Fazer um
programa que dê o melhor e o pior tempo e
em que volta aconteceram.
Exercícios Propostos
01. Faça um Algoritmo para calcular o fatorial de 5, faça outro algoritmo para calcular o fatorial de
um valor digitado pelo usuário.
02. Faça o algoritmo para calcular o n-ésimo termos da série de Fibonacci. A série de Fibonacci: 1, 1,
2, 3, 5, 8, 13, 21, 34, ... .
03. Quanto vale k no fim do seguinte procedimento (exemplo10)?
k = 0;
para (i  0; i <=2; i  i+1) {
para (j  i; j<=2; j  j+1) {
k  k + 1;
K=6
}
}
04. Escreva um algoritmo que lê 5 valores para A, um de cada vez, escrevendo, ao final, quantos
destes valores são negativos.
05. Dado um conjunto de n notas de alunos, contar o número de alunos que foram aprovados.
Considera-se aprovado o aluno que obteve nota igual ou maior que 5.0
06. Fornecer a média aritmética simples das n notas de um aluno, indicando também sua situação
final (média>=9 excelente, média>=7 bom, média>=5 regular, média<5 insuficiente).
Desafio
A prefeitura de uma cidade fez uma pesquisa entre seus
habitantes, coletando dados sobre o salário e número
de filhos. A prefeitura deseja saber:

Média do salário da população;

Média do número de filhos;

Maior salário;

Percentual de pessoas com salário até R$ 100,00.

O final da leitura de dados se dará com a entrada de
um salário negativo.
FIM
Exercício 1
Fazer um algoritmo para ler 2 valores e
executar uma das seguintes operações
matemáticas, de acordo com a escolha do
usuário:
- 1 – soma,
- 2 – subtração,
- 3 – multiplicação
- 4 – divisão.
// Algoritmo Múltipla_Escolha Versao 01
#include <stdio.h>
main () {
float A, B, X;
int Op;
Op = 0;
printf ("Programa Calculadora (Operacoes
entre 2 valores) ");
printf ("\nEntre com o valor de A: ");
scanf ("%f", &A);
printf ("\nEntre com o valor de B: ");
scanf("%f", &B);
do {
printf ("\n1. Soma");
printf ("\n2. Subtração");
printf ("\n3. Multiplicação");
printf ("\n4. Divisão");
printf ("\nOpção (1 a 4): ");
scanf ("%i", &Op);
}
while ((Op < 1) || (Op > 4));
if (Op == 1) {
X = A + B;
printf ("X = %.2f", X);
}
else
if (Op == 2) {
X = A - B;
printf ("X = %.2f", X);
}
else
if (Op == 3) {
X = A * B;
printf ("X = %.2f", X);
}
else
if ( B != 0) {
X = A / B;
printf ("X = %.2f", X);
}
}
// Algoritmo Múltipla_Escolha Versao 02
#include <stdio.h>
main () {
float A, B, X;
int Op;
Op = 0;
printf ("Programa Calculadora (Operacoes
entre 2 valores) ");
printf ("\nEntre com o valor de A: ");
scanf ("%f", &A);
printf ("\nEntre com o valor de B: ");
scanf("%f", &B);
do {
printf ("\n1. Soma");
printf ("\n2. Subtração");
printf ("\n3. Multiplicação");
printf ("\n4. Divisão");
printf ("\nOpção (1 a 4): ");
scanf ("%i", &Op);
}
while ((Op < 1) || (Op > 4));
switch (Op){
case 1: { X = A + B;
printf ("\nX = %.2f", X);
break;
}
case 2: { X = A - B;
printf ("\nX = %.2f", X);
break;
}
case 3: { X = A * B;
printf ("\nX = %.2f", X);
break;
}
case 4: { if ( B != 0) {
X = A * B;
printf ("\nX = %.2f", X);
break;
}
}
}
}
Exercício 2
Em uma corrida de automóveis com N
voltas, foram anotados os tempos, em
ordem, de um piloto a cada volta. Fazer um
programa que dê o melhor e o pior tempo e
em que volta aconteceram.
#include <stdio.h> //ALGORITMO CorridaAutomovel;
int num_voltas, conta_volta, melhor_volta, pior_volta;
float tempo_volta, melhor_tempo, pior_tempo;
main () {
printf ("Entre com o numero total de voltas da corrida: ");
scanf ("%i", &num_voltas);
printf ("Entre com 1o tempo: ");
scanf ("%f", &tempo_volta);
conta_volta = 1;
melhor_volta = 1;
melhor_tempo = tempo_volta;
pior_volta = 1;
pior_tempo = tempo_volta;
while (conta_volta < num_voltas) {
conta_volta = conta_volta +1;
printf (“\nEntre com %io tempo : “, conta_volta +1);
scanf ("%f", &tempo_volta);
if (tempo_volta > pior_tempo) {
pior_tempo = tempo_volta;
pior_volta = conta_volta;
}
if (tempo_volta < melhor_tempo) {
melhor_tempo = tempo_volta;
melhor_volta = conta_volta;
}
}
printf (“\nMelhor volta = %i com tempo = %.4f", melhor_volta, melhor_tempo);
printf (“\nPior volta = %i com tempo = %.4f", pior_volta, pior_tempo);
}
#include <stdio.h> //ALGORITMO CorridaAutomovel;
int num_voltas, conta_volta, melhor_volta, pior_volta;
float tempo_volta, melhor_tempo, pior_tempo;
main () {
printf ("Entre com o numero total de voltas da corrida: ");
scanf ("%i", &num_voltas);
printf ("Entre com 1o tempo: ");
scanf ("%f", &tempo_volta);
melhor_volta = 1;
melhor_tempo = tempo_volta;
pior_volta = 1;
pior_tempo = tempo_volta;
for (conta_volta  2; conta_volta <= num_voltas; conta_volta = conta_volta +1) {
printf (“\nEntre com %io tempo: “, conta_volta);
scaf ("%f", &tempo_volta);
if (tempo_volta > pior_tempo) {
pior_tempo = tempo_volta;
pior_volta = conta_volta;
}
if (tempo_volta < melhor_tempo) {
melhor_tempo = tempo_volta;
melhor_volta = conta_volta;
}
}
printf (“\nMelhor volta = %i com tempo = %.4f", melhor_volta, melhor_tempo);
printf (“\nPior volta = %i com tempo = %.4f", pior_volta, pior_tempo);
}
Exercícios Propostos
01. Faça um Algoritmo para calcular o fatorial de 5, faça outro algoritmo para calcular o fatorial de
um valor digitado pelo usuário.
02. Faça o algoritmo para calcular o n-ésimo termos da série de Fibonacci. A série de Fibonacci: 1, 1,
2, 3, 5, 8, 13, 21, 34, ... .
03. Quanto vale k no fim do seguinte procedimento (exemplo10)?
k = 0;
for (i = 0; i <=2; i = i+1) {
for (j = i; j<=2; j = j+1) {
k = k + 1;
K=6
}
}
04. Escreva um algoritmo que lê 5 valores para A, um de cada vez, escrevendo, ao final, quantos
destes valores são negativos.
05. Dado um conjunto de n notas de alunos, contar o número de alunos que foram aprovados.
Considera-se aprovado o aluno que obteve nota igual ou maior que 5.0
06. Fornecer a média aritmética simples das n notas de um aluno, indicando também sua situação
final (média>=9 excelente, média>=7 bom, média>=5 regular, média<5 insuficiente).
Desafio
A prefeitura de uma cidade fez uma pesquisa entre seus
habitantes, coletando dados sobre o salário e número
de filhos. A prefeitura deseja saber:

Média do salário da população;

Média do número de filhos;

Maior salário;

Percentual de pessoas com salário até R$ 100,00.

O final da leitura de dados se dará com a entrada de
um salário negativo.
Exercícios Proposto 01a
//ALGORITMO Fatorial
#include <stdio.h>
#include <conio.h>
int fat, n, i;
main () {
n = 5;
fat = 1;
for (i = 2; i <= n; i++ )
fat = fat * i;
printf ("Fatorial de %i: %i", n, fat);
getch();
}
Exercícios Proposto 01b
//ALGORITMO Fatorial
#include <stdio.h>
#include <conio.h>
int fat, n, i;
main () {
printf ("Digite o numero para calcular Fatorial: ");
scanf("%i", &n);
fat = 1;
for (i = 2; i <= n; i++ )
fat = fat * i;
printf ("\nFatorial de %i: %i", n, fat);
getch();
}
Exercícios Proposto 02
//ALGORITMO Fibonacci
#include <stdio.h>
#include <conio.h>
main () {
int antes, atual, aux, n;
antes = 0;
atual = 1;
printf ("Total de termos: ");
scanf ("%i", &n);
while (n > 0) {
printf ("%i ", atual);
aux = atual;
atual = atual + antes;
antes = aux;
n = n-1;
}
getch();
}
Exercícios Proposto 04
//Algoritmo Quantos_Negativos
#include <stdio.h>
#include <conio.h>
main () {
float A;
int i, N = 0;
for (i = 0; i < 5; i++) {
printf("Digite o %i numero: ",i+1);
scanf("%f", &A);
if (A < 0)
N = N + 1;
}
printf ("Número de valores negativos = %i", N);
getch();
}
Desafio
#include <stdio.h>
#include <conio.h>
main () {
float sal, media_sal, media_filhos, maior_sal, soma_sal100, perc_sal100, soma_sal;
int filhos, soma_filhos, sal100, contador;
sal = 0;
soma_sal = 0;
maior_sal = 0;
soma_filhos = 0;
contador = 0;
sal100 = 0;
while (sal >= 0) {
printf ("Salario da familia R$ ");
scanf ("%f", &sal);
if ( sal >= 0){
printf ("Nro de filhos: ");
scanf ("%i", &filhos);
soma_sal = soma_sal + sal;
soma_filhos = soma_filhos + filhos;
contador = contador + 1;
if (sal > maior_sal) {
maior_sal = sal;
}
...
...
if (sal <= 100) {
sal100 = sal100 + 1;
// soma_sal100 = soma_sal100 + sal;
}
}
}
if (contador > 0) {
media_sal = (float) soma_sal / contador;
media_filhos = (float) soma_filhos / contador;
perc_sal100 = (float)(sal100 * 100) / contador;
}
else
media_sal=media_filhos=perc_sal100=0;
printf ( "\nMedia do salario da populacao R$ %.2f", media_sal);
printf ( "\nMedia do numero de filhos = %.2f", media_filhos);
printf ( "\nMaior Salario R$ %.2f", maior_sal);
printf ( "\nPerc. de pessoas com salario ate' R$ 100,00 = %.2f", perc_sal100);
getch();
}
Download

do while