Upload
hoangkien
View
233
Download
0
Embed Size (px)
Citation preview
Estruturas de repetição (Ciclos)
1Universidade Metodista de Angola, Departamento de Engenharias
Introdução
Vamos começar por tentar resolver os seguintes exercícios com base nos conhecimentosQue já temos até agora.
Problema 1:
Escreva um programa em ANSI-C que escreve os primeiros 10 números inteiros no ecrã.
Problema 2:
Escreva um programa em C que escreve os primeiros 100 números inteiros no ecrã.
Problema 3:
Escreva um programa em C que escreve os primeiros 1000 números inteiros no ecrã.
Problema 4:
Escreva um programa em C que escreve os primeiros 10.000 números inteiros no ecrã.
Estruturas de repetição (Ciclos)
2Universidade Metodista de Angola, Departamento de Engenharias
#include <stdio.h>#include <stdlib.h>
int main(){
printf(“1”);printf(“2”);printf(“3”);printf(“4”);printf(“5”);printf(“6”);printf(“7”);printf(“8”);printf(“9”);printf(“10”);
exit(0);}
Solução do Problema 1
#include <stdio.h>#include <stdlib.h>
int main(){
putchar(‘1’);putchar(‘2’);putchar(‘3’);putchar(‘4’);putchar(‘5’);putchar(‘6’);putchar(‘7’);putchar(‘8’);putchar(‘9’);putchar(‘10’); //erro
exit(0);}
ou
#include <stdio.h>#include <stdlib.h>
int main(){
putchar(‘1’);putchar(‘2’);putchar(‘3’);putchar(‘4’);putchar(‘5’);putchar(‘6’);putchar(‘7’);putchar(‘8’);putchar(‘9’);putchar(‘1’);putchar(‘0’);
exit(0);}
ou
#include <stdio.h>#include <stdlib.h
int main(){
puts(“1”);puts(“2”);puts(“3”);puts(“4”);puts(“5”);puts(“6”);puts(“7”);puts(“8”);puts(“9”);puts(“10”);
exit(0);}
Solução 1 Solução 4Solução 3Solução 2
ou
Estruturas de repetição (Ciclos)
3Universidade Metodista de Angola, Departamento de Engenharias
Solução do Problema 1
Outputs:
Solução 1 Solução 2 Solução3 Solução4
imprime o seguinte: não funciona imprime o seguinte: imprime o seguinte:
12345678910 12345678910 123455678910
• Resolução do Problema 2, tinha que se usar 100 instruções printf ou puts. • Resolução do Problema 3, tinha que se usar 1000 instruções printf ou puts.• Resolução do Problema 4, tinha que se usar 10.000 instruções printf ou puts.
• Não é a melhor forma de programar.• Existem instruções em C que permitem fazer repetições• Essas instruções são as seguintes:
• Instrução while também conhecido por ciclo while• Instrução do-while• Instrução for também conhecido por ciclo for
– Essas instruções são as mesmas na linguagem C++, linguagem java.– Quando se diz que são as mesmas quer dizer a sintaxe é exactamente igual nessas linguagens de
programação.– No visual basic a sintaxe é um pouco diferente.
Estruturas de repetição (Ciclos)
4Universidade Metodista de Angola, Departamento de Engenharias
• Vamos então estudar cada uma delas, começando pela sintaxe e depois exemplos.• Lembrem-se que queremos resolver o problema 2, problema 3 e o problema
4.• Instrução while
Sintaxe:while ( condição )
instrução ou bloco de instruções;
Estruturas de repetição (Ciclos)
5Universidade Metodista de Angola, Departamento de Engenharias
condiçãoNão Sim
Instruções; ou bloco de instruções
Entrada do ciclo
Saída do ciclo
Fluxograma da instrução while
Interpretação: enquanto a condição for verdadeira executar o bloco de instruções
Estruturas de repetição (Ciclos)
6Universidade Metodista de Angola, Departamento de Engenharias
#include <stdio.h>#include <stdlib.h>
int main(){
int i = 1;
while( i <= 10 ){
printf(“%d”,i);i++;
}exit(0);}
Solução do problema 1Usando a instrução while
#include <stdio.h>#include <stdlib.h>
int main(){
int i = 1;
while( i <= 100 ){
printf(“%d”,i);i++;
}exit(0);}
Solução do problema 2Usando a instrução while
#include <stdio.h>#include <stdlib.h>
int main(){
int i = 1;
while( i <= 1000 ){
printf(“%d”,i);i++;
}exit(0);}
Solução do problema 3Usando a instrução while
Instrução while
• Instrução do-whileSintaxe:
doinstrução ou bloco de instruções;
while ( condição );
Estruturas de repetição (Ciclos)
7Universidade Metodista de Angola, Departamento de Engenharias
condiçãoNão Sim
Instruções; ou bloco de instruções
Entrada do ciclo
Saída do ciclo
Fluxograma da instrução do-while
Interpretação: do fazer while enquanto
Fazer, enquanto….As instruções são executadas pelo menos
uma vez.
Estruturas de repetição (Ciclos)
8Universidade Metodista de Angola, Departamento de Engenharias
#include <stdio.h>#include <stdlib.h>
int main(){
int i = 1;
do{
printf(“%d”,i);i++;
}while( i <= 10 );exit(0);}
Solução do problema 1Usando a instrução do-while
#include <stdio.h>#include <stdlib.h>
int main(){
int i = 1;
do{
printf(“%d”,i);i++;
}while( i <= 100 );exit(0);}
Solução do problema 2Usando a instrução do-while
#include <stdio.h>#include <stdlib.h>
int main(){
int i = 1;
do{
printf(“%d”,i);i++;
}while( i <= 1000 );exit(0);}
Solução do problema 3Usando a instrução do-while
Instrução do-while
Estruturas de repetição (Ciclos)
9Universidade Metodista de Angola, Departamento de Engenharias
• Instrução forSintaxe:
for( inicializações ; condição ; pos-instrução)instrução ou bloco de instruções;
Fluxograma da instrução for
condiçãoNão Sim
Instruções; ou bloco de instruções
Entrada do ciclo
Saída do ciclo
inicializações
Pós-instrução
for( i = 1 ; i <= 10 ; i++ ){printf(“%d”,i);
}
Exemplo:
Estruturas de repetição (Ciclos)
10Universidade Metodista de Angola, Departamento de Engenharias
#include <stdio.h>#include <stdlib.h>
int main(){
int i;
for( i = 1 ; i <= 100 ; i++){
printf(“%d”,i);}
exit(0);}
Solução do problema 1Usando a instrução for
#include <stdio.h>#include <stdlib.h>
int main(){
int i;
for( i = 1 ; i <= 10 ; i++ ){
printf(“%d”,i);}
exit(0);}
Solução do problema 2Usando a instrução for
#include <stdio.h>#include <stdlib.h>
int main(){
int i;
for( i = 1 ; i <= 1000 ; i++){
printf(“%d”,i);}
exit(0);}
Solução do problema 3Usando a instrução forInstrução for
Estruturas de repetição (Ciclos)
11Universidade Metodista de Angola, Departamento de Engenharias
condiçãoNão Sim
Instruções; ou bloco de instruções
Entrada do ciclo
Saída do ciclo
condiçãoNão Sim
Instruções; ou bloco de instruções
Entrada do ciclo
Saída do ciclo condiçãoNão Sim
Instruções; ou bloco de instruções
Entrada do ciclo
Saída do ciclo
inicializações
Pós-instrução
Fluxograma do ciclo while Fluxograma do ciclo do-while Fluxograma do ciclo for
Resumo
Testa a condição antes de Executar as instruções
As instruções são executadasZero ou mais vezes
Testa a condição depois de Executar as instruções
As instruções são executadasUma ou mais vezes
Testa a condição antes de Executar as instruções
As instruções são executadasZero ou mais vezes
• Instrução break1. Terminar a execução das instruções dentro da instrução switch.2. A instrução break, quando aplicada a um ciclo, termina o correspondente
ciclo.
• Instrução continue– A instrução continue dentro de um ciclo, permite passar para próxima
iteração.
Estruturas de repetição (Ciclos)
12Universidade Metodista de Angola, Departamento de Engenharias
#include <stdio.h>#include <stdlib.h>
int main(){
int i;
for( i = 1 ; i <= 30 ; i++ ){
if(i==15)break;
else printf(“%d ”,i);
}exit(0);}
Exemplo usando a instrução break
O que é que esse programa imprime no ecrã?
Resposta: O programa imprime:1 2 3 4 5 6 7 8 9 10 11 12 13 14
Imprime todos os números inteiros entre 0 e 15
Estruturas de repetição (Ciclos)
13Universidade Metodista de Angola, Departamento de Engenharias
#include <stdio.h>#include <stdlib.h>
int main(){
int i;
for( i = 1 ; i <= 30 ; i++ ){
if(i%2==0)continue;
else printf(“%d ”,i);
}exit(0);}
Exemplo usando a instrução continue
O que é que esse programa imprime no ecrã?
Resposta: O programa imprime:1 3 5 7 9 11 13 15 16 17 19 21 23 25 27 29
Imprime todos os números impares entre 0 e 30
Estruturas de repetição (Ciclos)
14Universidade Metodista de Angola, Departamento de Engenharias
#include <stdio.h>
int main(){
int i, j, n;char c;
printf("introduza um número:");scanf("%d",&n);//c=getchar();printf("introduza um caracter:");scanf("%c",&c);
for( i = 1 ; i <= n ; i++){
for( j = 1 ; j <= n ; j++)putchar(c);putchar('\n');
}exit(0);
}
O programa exemplifica dois ciclos for Encadeados.
Este exemplo foi tirado do livro do prof.Luis Damas. (pag 150).
O programa pede ao utilizador que insiraUm número e um caracter, e posteriormenteEscreve n linhas, cada uma delas com n caracteres.
exemplo:
Introduza um número: 4Introduza um caracter:#Output:# # # # # # # ## # # ## # # #
Os ciclos podem ser encadeados
• Ciclos que nunca terminam, ou seja, a condição é sempre verdadeira• Exemplos
• Esses tipos de ciclos são normalmente usados quando não se sabe a partida o número de vezes que se vai iterar o ciclo.
• Para terminar o ciclo infinito usa-se a instrução break ou return;
• No slide que se segue, é mostrado dois exemplos de terminação de ciclos infinitos usando as instruções break e return.
• O exemplo que se segue, permite esclarecer a diferença entre a instrução break e a instrução return.
Estruturas de repetição (Ciclos)
15Universidade Metodista de Angola, Departamento de Engenharias
Ciclos infinitos
while (1)instruções;
doInstruções; while(1);
for( ; ; )instruções;
#include <stdio.h>#include <stdlib.h>
int main()
int i=1;
for( ; ; ){
if(i==3)break;
i++;}printf("Rubem");exit(0);
}
Estruturas de repetição (Ciclos)
16Universidade Metodista de Angola, Departamento de Engenharias
#include <stdio.h>#include <stdlib.h>
int main()
int i=1;
for( ; ; ){
if(i==3)return;
i++;}printf("Rubem");exit(0);
}
Output:Rubem
Output:None - Nothing
O break termina o ciclo O return sai da função, ou seja, sai da função main
Exercícios
17Universidade Metodista de Angola, Departamento de Engenharias
Escreva um programa em Linguagem C que lê um inteiro positivo e determina se esse número é primo.Solução:
O número 7 é primo?
7 % 1 = 07 % 2 = 17 % 3 = 17 % 4 = 37 % 5 = 27 % 6 = 17 % 7 = 0
O número 6 é primo?
6 % 1 = 06 % 2 = 06 % 3 = 06 % 4 = 26 % 5 = 16 % 6 = 0
iresto
num
resto = 0 e i = num
resto = 0 e i ≠ num
18Universidade Metodista de Angola, Departamento de Engenharias
inicio
Ler (num)
i = 2
resto=num % i
resto == 0 e num == i ?
resto == 0 e num ≠ i ?
“é primo”
“não é primo”
i <= num ?
i++
fim
sim
não
sim
não
sim
não
do-while clcle
#include <stdio.h>#include <stdlib.h>
int main(){
int num,i,resto;
i=2;printf("insira um inteiro positivo:");scanf("%d",&num);do{
resto = num % i;if(resto == 0 && num == i){printf("\n%d é primo\n",num);
}elseif(resto == 0 && num != i){
printf("\n%d ñ é primo\n",num);break;
}i++;
}while(i <= num);
exit(0);}
Solução 1
19Universidade Metodista de Angola, Departamento de Engenharias
inicio
Ler (num)
divisor = 2resto=num % divisor
resto != 0
resto = num % divisor
divisor ++
num == divisor ?
“é primo” “é primo”
fim
sim
sim
não
não
while cicle
#include <stdio.h>#include <stdlib.h>
int main(){int num,divisor,resto;
printf(“insira um numero:");scanf("%d",&num);
divisor=2;
resto = num % divisor;
while(resto != 0){divisor++;
resto = num % divisor;}
if(divisor == num)printf("%d é primo",num);
elseprintf("%d ñ é primo",num);
exit(0); }
Solução 2
20Universidade Metodista de Angola, Departamento de Engenharias
Esses algoritmo ou programas só funcionampara números inteiros maiores que 1
#include <stdio.h>#include <stdlib.h>
int main(){int num,i,resto;i=2;printf("insira um inteiro positivo:");scanf("%d",&num);
if(num == 1){ /*Para n = 1*/printf(“%d é primo”,num);return;
}
do{
resto = num % i;if(resto == 0 && num == i){
printf("\n%d é primo\n",num);}else
if(resto == 0 && num != i){printf("\n%d ñ é primo\n",num);break;
}i++;
}while(i <= num);
exit(0);}
#include <stdio.h>#include <stdlib.h>
int main(){int num,divisor,resto;
printf(“insira um numero:");scanf("%d",&num);divisor=2;
if(num == 1){//para n=1printf(“%d é primo”,num);return;
}resto = num % divisor;
while(resto != 0){divisor++;
resto = num % divisor;}
if(divisor == num)printf("%d é primo",num);
elseprintf("%d ñ é primo",num);
exit(0); }