Estruturas de Repetição no C - facom.ufu.brelaine/disc/OP/Aula7-EstruturasRepeticao-C.pdf ·...
Transcript of Estruturas de Repetição no C - facom.ufu.brelaine/disc/OP/Aula7-EstruturasRepeticao-C.pdf ·...
Aula 7 – Oficina de Programação Estruturas de Repetição no C
Profa. Elaine Faria UFU - 2017
Aula de Hoje
• Estruturas de repetição:• do…while• while• for
Introdução
• Apresentar as estruturas de repetição do…while, while e for... as quais nos permitem executar um trecho de algoritmo zero ou mais vezes.
• Apresentar os comandos de desvio de fluxo incondicional: break, continue.
Exemplo: A Lâmpada não funciona• Desligue o interruptor• Retire e coloque a lâmpada que funciona• Acione o interruptor• Se a lâmpada não acender
• Obtenha uma lâmpada nova• Retire a lâmpada queimada• Coloque a lâmpada nova• Se a lâmpada não acender
• Obtenha uma lâmpada nova• Retire a lâmpada queimada• Coloque a lâmpada nova• Se a lâmpada não acender 1- ?
Repetição detarefas
Exemplo: A Lâmpada não funciona
• Desligue o interruptor• Retire e coloque a lâmpada que funciona• Acione o interruptor• Enquanto a lâmpada não acender
• Obtenha uma lâmpada nova• Retire a lâmpada queimada• Coloque a lâmpada nova
Estruturas de repetição (laço)
Em C existem 3 estruturas principais de laço:
1) Laço do-while2) Laço while3) Laço for
Estruturas de repetição (laço)• Estrutura de repetição para número indefinido
de repetições:- Repetição com pós-condição (condição no final)ü Estrutura do-while
- Repetição com pré-condição (condição no início)ü Estrutura while
• Estrutura de repetição para número definido de repetições: ü Estrutura for
Terminologia• O código repetido em um laço (loop) é chamado
corpo do laço.
• O corpo do laço é constituído de um ou mais comandos.
• Cada repetição do corpo do laço é chamada de uma iteração do laço.
• A iteração é controla por um teste de condição.
• A condição de controle é uma expressão booleana (verdadeira ou falsa).
Estrutura de repetição(Para número indefinido de repetições)
• Essa estrutura de repetição é utilizada quando não se sabe o número de vezes que um trecho de código deve ser repetido.
• Embora, também possa ser utilizada quando se sabe esse número.
• C, implementa dois comandos para esta situação:à Comando do... whileà Comando while
Estrutura de repetição(Para número indefinido de repetições)
• Uma diferença importante entre os laços while e do-while envolve o momento em que a condição é verificada.
• No do-while,• o corpo do laço é executado primeiro, e a
condição verificada depois• No while,
• a expressão de controle é verificada antes que o corpo do laço seja executado.
Estrutura de repetição
• Repetição com pós-condição (teste no final):
repita corpo do laçoate(condição)
do{ corpo do laço;}while(condição);
à Algoritmo
à Linguagem C
Laço do-while
Formato:do{
comandos; alteração;}while(condição);
• O corpo do laço é executado uma ou mais vezes.
Exemplo#include <stdio.h>int main(){ int x; do { printf(“Digite um inteiro positivo”); scanf(“%d”, &x); // alteração }while(x <= 0);
return 0;}
Estrutura de repetição
• Repetição com pré-condição (teste no início):
enquanto (condição) faca corpo do laçofimenquanto
while (condição){ corpo do laço;}
à Algoritmo
à Linguagem C
Laço while
Formato:inicialização;while(condição){
comandos; alteração;}
• O corpo do laço é executado zero ou mais vezes
Laço while• A inicialização é uma expressão que atribui um valor inicial ao contador.• A condição verifica se a contagem chegou ao fim.• A alteração modifica o valor do contador.• Enquanto a contagem não termina, o corpo do laço associado ao while é repetidamente executado.
Exemplo#include <stdio.h>int main() { int x = 0; // inicialização while (x < 5) // condição { printf(“Valor de x: %d”, x); x = x + 1; // alteração } return 0;}
while e do-while
int x = -1;do{ printf(“Valor de x: %d”, x); x=x+1;} while (x > 0);
int x = -1;while (x > 0){ printf(“Valor de x: %d”, x); x = x+1;}
do-while
while
Revisão • No laço while a expressão de teste é avaliada
antes do corpo do laço ser executado;
• No laço do-while a expressão de teste é avaliada depois do corpo do laço ser executado;
• Um laço do-while é sempre encerrado por ponto-e-vírgula;
• O corpo do laço while pode ser nunca executado. Por outro lado o corpo do laço do-while é sempre executado pelo menos uma vez.
Operadores
- Operadores aritméticos +, -, *, /, %
- Operadores relacionais >, <, >=, <=, !=, ==
- Operadores lógicos: &&, ||, !
- Operador de Atribuição =
- Operador de Incremento e Decremento ++ e --
Operador de incremento edecremento
• Operador de incremento: ++ Exemplo: n = 5; n++; // ++n
• Operador de decremento: -- Exemplo:
n = 5; n--; // --n
Exemplo#include <stdio.h>int main() { int x = 0; // inicialização while (x < 5) // condição { printf(“Valor de x: %d”, x); x++; // Igual a x = x + 1 } return 0;}
Desafio de Programação
• Um número natural triangular é igual à soma dos n primeiros números naturais consecutivos, a partir de 1. Por exemplo, 1, 3, 6, 10, 15, ... são triangulares.
• Dado um natural n>=1, informe se ele é triangular.
Exercício• à Explique porque é errado fazer
while (num=10) { ... }
Estruturas de repetição (laço)• Estrutura de repetição para número indefinido de
repetições:- Repetição com pré-condição (condição no início)ü Estrutura while
- Repetição com pós-condição (condição no final)ü Estrutura do-while
• Estrutura de repetição para número definido de repetições: ü Estrutura for
Estrutura de repetição(Para número definido de repetições)
• Tem seu funcionamento controlado por uma variável que conta o número de vezes que o comando é executado.
• Em C, essa estrutura é implementada pelo comando for, cuja forma básica é a seguinte:
for (inicialização; condição; alteração) comandos;
Estrutura de repetição
para vc de vi ate vf passo inc faca corpo do laçofimpara
for (inicialização; condição; alteração){ corpo do laço;}
à Algoritmo
à Linguagem C
Exemplo 1#include <stdio.h>int main(){ int i, n; n = 10; for (i = 0; i < n; i++) { printf(“\nExibe esta mensagem 10 vezes!”); } return 0;}
Exemplo 2#include <stdio.h>int main(){ int up, down;
for (up = 0, down=10; up < down; up++, down--) { printf("up = %d, down= %d\n",up,down); }
return 0;}
Desafio de Programação• O quadrado de um número natural n é dado pela
soma dos n primeiros números ímpares consecutivos. Por exemplo:
à 12=1 à 22=1+3 à 32=1+3+5 à 42=1+3+5+7• Dado um número n, calcule seu quadrado
usando a soma de ímpares ao invés de produto.
Comandos de desvio condicional• As vezes é preciso alterar o fluxo de controle de
uma estrutura de laço.
• As duas formas para se alterar o fluxo de controle são: break ou continue
• Comando break: • Encerra o laço
• Comando continue: • Encerra a iteração atual do corpo do laço
Comandos de desvio condicional
• Comando break:
• Pode ser usado no corpo de qualquer estrutura de laço C
• Causa a saída imediata do laço e o controle é passado para o próximo estágio do programa
Comandos de desvio condicional• Comando break (Exemplo 1)
int main() { int x = 0; while (x < 5) { printf(“\nValor de x: %d”, x); if(x == 3) { printf(“\nx igual a 3”); break; } x = x + 1; } printf(“\nFora do laço while”); return 0;}
Comandos de desvio condicional• Comando break (Exemplo 2)
int main() { int x = 0; while (x < 5) { printf(“\nValor de x: %d”, x); x = x + 1; break;
printf(“\nDepois do incremento.”); } printf(“\nFora do laço while”);
return 0;}
Comandos de desvio condicional
• Comando continue:
– O comando continue força a próxima iteração do laço e pula o código que estiver abaixo.
– Nos laços while e do-while ele faz com que o controle do programa vá diretamente para o teste condicional e depois continua o processo do laço.
Comandos de desvio condicional
• Comando continue:
– No for, o computador primeiro executa o incremento do laço e, depois, o teste condicional, e finalmente faz com que o laço continue.
– O comando continue deve ser evitado, pois pode causar dificuldades de leitura e confusão ao se manter o programa.
Comandos de desvio condicional• Comando continue (Exemplo)
int main() { int x = 0; while (x < 5) { printf(“\nValor de x: %d”, x); x = x + 1; continue;
printf(“\nDepois do incremento.”); } printf(“\nFora do laço while”);
return 0;}
Laço aninhados
• É perfeitamente legal aninhar um laço dentro do outro.
• Quando fizer isto, lembre-se de que qualquer comando break ou continue se aplicam ao laço mais interno que o contenha.
Laço aninhadosExemplo 1:for(i=0;i<10;i++){ for(j=0;j<10;j++) printf(“%d “,j);
printf(“\n”);}
Laços Aninhados
int x = 0; int y = 5; while (x < 5) { printf(“Valor de x: %d”, x); while (y > 0) { printf(“Valor de y: %d”, y); y = y - 1; } x = x + 1; }
Exemplo 2:
Exercícios1- Faça um programa em C que apresente os quadrados dos números inteiros de 15 a 200.
2- Faça um programa em C que determine e mostre os cinco primeiros múltiplos de 3, considerando números maiores do que 0
3- Faça um programa em C que calcule e mostre a soma dos 50 primeiros números pares
Exercícios
4- Faça um programa em C que mostre todos os números ímpares entre 1 e 50.
5- Faça um programa em C que leia um número N, some todos os números inteiros de 1 a N, e mostre o resultado
Exercícios
6- Crie um programa em C que receba vários números inteiros e positivos e imprima o produto dos números ímpares digitados e a soma dos pares. O algoritmo encerra quando o zero ou um número negativo é digitado.
7- Escreva um programa em C que calcule a média dos números reais digitados pelo usuário. Termine a leitura se o usuário digitar zero.
Exercícios8- Escreva um programa em C que repita 10 vezes os seguintes passos: recebe quatro números inteiros, calcula e mostra a soma desses números.
à Implemente uma solução usando a estrutura de repetição while.à Implemente uma solução usando a estrutura de repetição do-while.à Implemente uma solução usando a estrutura de repetição for.