Introdução à Programação
Ciclos – 1ª parte
Sumário
„ Ciclos
„
while
„ Exercícios com instruções condicionais e
ciclos
Introdução à Programação 2006/2007
Ciclos (while)
while ( <expressão> )
<instrução>;
„ Enquanto <expressão> for diferente
de zero ou verdadeira, <instrução> é
executada repetidamente.
„ Instrução do ciclo : Corpo do ciclo
Introdução à Programação 2006/2007
Exemplo
int main ()
{
Ciclo é executado
int contador=0;
enquanto contador<10
while (contador<10)
{
printf ("Numero %d\n",contador);
Ciclo entre {}
contador++;
Contador tem de mudar
}
para o ciclo terminar
return 0;
}
Introdução à Programação 2006/2007
Exercício 1
„ Faça um programa que peça um inteiro ao utilizador
e imprima a tabuada desse número.
„
„
Se o utilizador introduzir o valor 7:
7x1=7
7 x 2 = 14
7 x 3 = 21
...
7 x 10 = 70
Implemente o programa recorrendo a um ciclo while
Introdução à Programação 2006/2007
Exemplo de Solução
int main ()
{
int tabuada, corrente=1;
printf ("Qual a tabuada? ");
scanf("%d", &tabuada);
while (corrente<=10)
{
printf ("\t%d x %d = %d\n",tabuada,
corrente,
tabuada*corrente);
corrente++;
}
return 0;
}
Introdução à Programação 2006/2007
Exercício 2
„ Escreva um programa que permita a um
aluno introduzir uma sequência arbitrária de
notas e que afixe no ecrã, como resultado, a
média aritmética simples correspondente
„
„
O programa lê as notas individualmente
enquanto estas forem válidas para aprovação
(entre 10 e 20)
O programa terminará quando for introduzido
um valor que não seja válido como nota de
aprovação.
Introdução à Programação 2006/2007
Exemplo de Solução
int main () {
int nota, somatorio=0, nrNotas=0;
printf ("Insira nota: ");
scanf ("%d",&nota);
while ((nota>=10)&&(nota<=20)) {
somatorio+=nota;nrNotas++;
printf ("Insira nota: ");
scanf ("%d",&nota);
}
printf ("Media das notas: %f\n",
(float)somatorio/nrNotas);
return 0;
}
Introdução à Programação 2006/2007
Exercício 3
„ Faça um programa que tenha uma função que
detecte se um inteiro é número par ou impar:
„
„
A função devolve um valor que indica se o numero é
par sem imprimir qualquer mensagem
A mensagem que indica se o inteiro é ou não par é
gerada na função main.
Introdução à Programação 2006/2007
Exemplo de Solução
/* Funcao devolve 1 se for par, 0 se impar */
int ePar (int n) {
if ((n % 2)==0)
return 1;
else
return 0;
}
int main () {
int numero;
printf ("Qual o numero? "); scanf("%d", &numero);
if (ePar(numero))
printf ("O numero e par\n");
else
printf ("O numero e impar\n");
return 0;
}
Introdução à Programação 2006/2007
Exercício 3a
„ Adicione ao programa uma função que detecte se
um inteiro é número primo:
„
Um número primo é um número natural maior que 1,
cujos únicos divisores positivos é 1 e o próprio
número
Introdução à Programação 2006/2007
Exemplo de Solução
/* Devolve 0 se nao for primo */
int ePrimo (int n) {
int divisores,teste;
divisores=0; // numero de divisores para alem de 1 e n
teste=2; // 1 e'
é divisor
divisor de
de todos
todos os
os inteiros
inteiros
if (n<2)
return 0;
while (teste<n
(teste<n)&&
{ divisores<1) {
if ((n % teste)==0)
Quantos testes
divisores++;
faz?
teste++;
}
return divisores==0; // Nao ha divisores, entao primo
}
Introdução à Programação 2006/2007
Outro Exemplo de Solução
/* Devolve 0 se nao for primo */
int ePrimo (int n) {
int divisor=2; // Todos numeros sao divisiveis por 1.
// Comecamos por 2.
if (n<=1)
return 0; // So pode ser primos numeros > 1
while (divisor <n) // n e divisivel por n.Testamos ate n-1
{
if ((n % divisor)==0)
return 0; // Achamos um divisor! Nao e primo.
divisor++; // Vamos testar o proximo inteiro.
}
return 1; // Quando nao ha divisores, e' primo
}
Introdução à Programação 2006/2007
Exercício 3b
„ Usando a função anterior, construa um programa
que vá aceitando números inteiros, terminando
quando lhe for apresentado um valor não positivo
„
O programa deverá detectar a introdução de um
número primo, escrevendo no ecrã uma mensagem
adequada.
Introdução à Programação 2006/2007
Exemplo de Solução
int main () {
int numero;
printf ("Qual o numero? ");
scanf("%d", &numero);
while (numero>0) {
if (ePrimo(numero))
printf ("O numero e primo\n");
else
printf ("O numero nao e primo\n");
printf ("Qual o numero? ");
scanf("%d", &numero);
}
printf ("Numero nao positivo. Adeus!\n");
return 0;
}
Introdução à Programação 2006/2007
Repetido?
Exercício 3c
„ Altere o programa anterior de modo a que
passe a mostrar os N primeiros números
primos
„
A quantidade de números primos a mostrar é
definida pelo utilizador
Exemplo: Para 4 números primos:
2, 3, 5, 7
Introdução à Programação 2006/2007
Exemplo de Solução
int
int main
main ()
() {{
int
int nPrimos,
nPrimos, primos,
primos, contador;
contador;
printf
printf ("Quantos
("Quantos numeros
numeros primos
primos quer?
quer? ");
");
scanf("%d",
scanf("%d", &nPrimos);
&nPrimos);
contador=1;
contador=1; primos=0;
primos=0;
while
while (primos<nPrimos)
(primos<nPrimos)
{{
if
printf (", "); /* separa os numeros */
if (primos>0)
(ePrimo(contador))
{if (ePrimo(contador))
{ printf ("%d\n", contador);
printf primos++;
("%d", contador);
primos++;
}
}
contador++;
} contador++;
}
return
0;
} printf (”\n");
return 0;
Introdução à Programação 2006/2007
}
Download

doc2