Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

of 42 /42
Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello http://www.joinville.udesc.br/portal/ professores/flavio/

Embed Size (px)

Transcript of Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

Page 1: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

Linguagem C

LPG-I – Estruturas de Repetição

Prof. Flavio Marcellohttp://www.joinville.udesc.br/portal/professores/flavio/

Page 2: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

Linguagem C ESTRUTURA DE REPETIÇÃO

– Repetição com Teste no Início– Repetição com Teste no Final– Repetição Contada

Page 3: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

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

Page 4: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

Estrutura com Teste no Início

condição.V.

.F.

Fluxograma while

Page 5: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

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:

Estrutura com Teste no Início (while)

while (<condição>) {

<Comando_1>;...

<Comando_N>;

} Se no primeiro teste da condição resultado for FALSO, os

comandos dentro do loop NÃO serão executados NEM uma vez.

Loop

Page 6: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

while

Exemplo 1: Encontrar o menor dentre um conjunto de 05 valores digitados.

Page 7: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

// ALGORITMO EncontraMenor_em5

#include <stdio.h>

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: ”);

scanf (“%i”, &num);

if (num < menor)

menor = num;

qtdenumlidos = qtdenumlidos + 1;

}

printf (“Menor Valor Encontrado: %i ”, menor);

}

A variável de controledeve ter um valor conhecido.

Então ela foi inicializada antes.

A variável de controle deve ter seu valor modificado

dentro do “laço”.Neste caso a variável foi incrementa em 1

Page 8: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

Exemplo 3: Desenvolver um algoritmo 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 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 (100PONTOS 150)

while

São necessários 3 contadores

Page 9: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

#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

Page 10: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

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.

while

Page 11: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

// 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 = 0; SOMA_Ptos = 0;

printf ("PONTOS: "); scanf ("%i", &PONTOS_Teste);

while (PONTOS_Teste > 0) {

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();

}

NUM_Alunos NUM_Alunos dever ser zerado antes do Enquanto

e então incrementado em 1 dentro do

Laço de repetição

NUM_Alunos NUM_Alunos dever ser zerado antes do Enquanto

e então incrementado em 1 dentro do

Laço de repetição

Page 12: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

Estrutura com Teste no Final

condição.F.

.V.

Fluxograma do … while

...

C1

C2

Cn

Page 13: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

do {<Comando_1>;

...<Comando_N>;

}while (<condição>);

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:

Page 14: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

Exemplo 1: Desenvolver algoritmo que permita a leitura de numeros positivos e acumule seu somatório, imprimindo o resultado no final.

do … while

Page 15: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

#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 ();

}

Page 16: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

Exemplo 2: Desenvolver um algoritmo para escrever os 05 primeiros múltiplos de 13.

do … while

Page 17: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

//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);

}

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.

1326395265

Monitor

Variáveis Condição

Loop

Loop

Page 18: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

Estrutura de Repetição Contada

.V.

.F.

Fluxograma for

Comando

Início , Cond., Incr.

Page 19: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

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:

Estrutura de Repetição Contada (for)

for (<inicialização> ;<condição>; <incremento>) {

<Comando_1>;...

<Comando_N>;

}

Page 20: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

Exemplo 1: Desenvolver algoritmo que permita imprimir os números de 1 a 5.

for

Page 21: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

#include <stdio.h>

main () {

int cont;

for (cont = 1; cont <= 5; cont = cont +1) {

printf (“%i\n”, cont);

}

}

cont cont <= 5

? ?

... ...

1 ?

1 .V.

2 .V.

2 .V.

... ...

6 .F.

12345

Monitor

Condição

Loop

Passo1 - Inicializa a variável de controle.

Passo2 - Testa a condição, de for verdadeira executa o conjunto de instruções, caso contrário encerra loop.

Passo3 - Incrementa variável de controle; retorna ao Passo2.

Page 22: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

Comparativo: (for) X (while)

for while int i, N, Valor,Soma=0;

scanf ("%i",&N);

for(i= 0; i<N; i++) {

scanf ("%i", &Valor);

Soma = Soma + Valor;

}

int i, N, Valor,Soma=0;

scanf ("%i",&N);

i = 0;

while (i < N) {

scanf ("%i", &Valor);

Soma = Soma + Valor;

i = i + 1;

}

Page 23: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

Qual Estrutura Usar ???

for Sabe-se o número de repetições

while Não sabe-se o número exato de repetições

do ... while Não sabe-se o número de repetições, executando pelo menos uma vez.

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.

Page 24: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

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.

Page 25: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

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.

Page 26: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

Exercícios Propostos01. 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;

}

}

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).

K = 6

Page 27: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

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.

Page 28: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

FIFIMM

Page 29: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

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.

Page 30: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

// 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);

}

}

Page 31: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

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

}

}

}

}

Page 32: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

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.

Page 33: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

#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);

}

Page 34: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

#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);

}

Page 35: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

Exercícios Propostos01. 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;

}

}

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).

K = 6

Page 36: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

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.

Page 37: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

//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 01a

Page 38: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

//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 01b

Page 39: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

//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 02

Page 40: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

//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();}

Exercícios Proposto 04

Page 41: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

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

Page 42: Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello

...

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