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

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

Transcript of 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/

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

condição.V.

.F.

Fluxograma 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:

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

while

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

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

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

#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

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

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

Estrutura com Teste no Final

condição.F.

.V.

Fluxograma do … while

...

C1

C2

Cn

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:

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

do … while

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

}

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

do … while

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

Estrutura de Repetição Contada

.V.

.F.

Fluxograma for

Comando

Início , Cond., Incr.

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

}

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

for

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

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;

}

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.

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

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.

FIFIMM

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

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.

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

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

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

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

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