Escolar Documentos
Profissional Documentos
Cultura Documentos
Motivação
Escrever um programa para calcular a soma dos 5 primeiros números
inteiros positivos.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int soma;
soma = 1 + 2 + 3 + 4 + 5;
int main()
{
int soma;
soma = 0;
soma = soma + 1;
soma = soma + 2;
soma = soma + 3;
soma = soma + 4;
soma = soma + 5;
printf("Soma = %d\n", soma);
system("PAUSE");
return(0);
}
Motivação
A cada comando, adiciona-se um novo termo:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int termo, soma;
termo = 0; soma = 0;
termo = termo + 1; soma = soma + termo;
termo = termo + 1; soma = soma + termo;
termo = termo + 1; soma = soma + termo;
termo = termo + 1; soma = soma + termo;
termo = termo + 1; soma = soma + termo;
printf("Soma = %d\n", soma);
system("PAUSE");
return(0);
}
Fluxograma
F exibir o valor da
ainda há termos a termo < 5 soma
soma
adicionar?
V
Fim fim do algoritmo
calcular o próximo termo = termo + 1
termo
adicionar o termo à
soma e retornar soma = soma + termo
Definição
F Sintaxe:
expressão
while (expressão)
{
V
// comandos executados enquanto
comandos executados // a expressão for verdadeira
enquanto a expressão }
for verdadeira
Atenção
Não se usa “;” após o while()
Exemplo: estrutura de repetição while()
Calcular a soma dos 500 primeiros inteiros positivos.
#include <stdio.h>
Início
#include <stdlib.h>
den = 1;
soma = 0;
while (1.0/den > 0.00001)
{
soma = soma + 1.0/den;
den++;
}
printf("Soma = %d\n", soma);
system("PAUSE");
return(0);
}
Mas só dá pra fazer somas?
Escrever um programa para calcular n! = 1 × 2 × 3 × ... × n.
Início #include <stdio.h>
#include <stdlib.h>
int main()
“n?” {
int i, n;
n double fat;
printf(”Apresentar o fatorial de:");
i=0 scanf("%d", &n);
i = 0;
fat = 1 fat = 1;
while ( i < n )
F
{
i<n fat i++;
fat = fat * i;
V
Fim }
i=i+1 printf(”%d! = %.0f\n", n, fat);
system("PAUSE");
fat = fat * i return(0);
}
Tipos de estruturas de repetição
Atenção
Não se usa “;” após o do
Exemplo: estrutura de repetição do-while()
Calcular a precisão do computador.
#include <stdio.h>
Início #include <stdlib.h>
V do
1 + eps > 1 {
F eps = eps/2;
} while ( 1 + eps > 1 );
eps
printf(”Precisao: %f\n", eps);
Fim system("PAUSE");
return(0);
}
Repetição e seleção
Exibir quais e quantos são os números ímpares de um intervalo [a, b]
informado pelo usuário.
int main()
{
int a, b, num, cont;
printf("Intervalo: ");
scanf("%d %d", &a, &b);
num = a;
cont = 0;
while (num <= b)
{
if (num % 2 != 0)
{
cont++;
printf("%d\n", num);
}
num++;
}
printf("Existem %d numeros impares no intervalo [%d, %d]\n", cont, a, b);
system("PAUSE");
return(0);
}
Outro exemplo
Determinar o maior de um conjunto de 10 valores informados pelo usuário.
int main()
{
float maior, valor;
int cont;
maior = -999999;
cont = 0;
while (cont < 10)
{
printf("Valor: ");
scanf("%f", &valor);
if (valor > maior)
maior = valor;
cont++;
}
printf("Maior valor informado: %f\n", maior);
system("PAUSE");
return(0);
}
Repetição dentro de repetição
Imprimir a tabuada do 1 ao 10.
int main()
{
int a, b, valor;
a = 1;
while (a <= 10)
{
printf("\nTabuada do %d\n", a);
b = 1;
while (b <= 10)
{
valor = a * b;
printf(”%2d x %2d = %3d\n", a, b, valor);
b++;
}
a++;
}
system("PAUSE");
return(0);
}
Repetições com intervenção do usuário
int main()
{
int num;
char op;
do
{
system("CLS");
printf("Informe um numero inteiro: ");
scanf("%d", &num);
if (num % 2 == 0)
printf("%d é par\n", num);
else
printf("%d é ímpar\n", num);
system("PAUSE");
return(0);
}
O que será feito?
int main()
{
float soma, termo;
Se condição for:
int cont, n; soma < 1000
printf("Número de termos: ");
scanf("%d", &n); Serão somados termos até que a
cont = 0; soma ultrapasse 1000.
soma = 0;
termo = 0;
do {
termo > 0
cont++; A soma considera apenas termos
soma = soma + termo; positivos.
printf("Novo termo: ");
scanf("%f", &termo);
} while (condição);
cont < n
printf("Soma: %f (%d termos)\n",soma,cont); Serão somados exatamente n
system("PAUSE");
termos.
return(0);
}
Controle do número de repetições
• A cada execução dos comandos de uma estrutura de repetição dá-se o
nome de iteração.
system("PAUSE");
return(0);
}
Tipos de estruturas de repetição
inicialização
Sintaxe:
for(inicialização; expressão; incremento)
F
expressão {
// comandos executados enquanto
V
// a expressão for verdadeira
comandos executados
}
enquanto a expressão
for verdadeira
incremento Atenção
Não se usa “;” após o for()
Exemplo: estrutura de repetição for()
Exibir os n primeiros números ímpares positivos.
int main()
{
int impar, n, cont; variável de controle
system("PAUSE");
return(0);
} Neste exemplo, a condição de execução do laço interno
depende do valor da variável de controle do laço externo.
O laço infinito
Uma estrutura de repetição pode apresentar execução infinita se:
A condição de execução for mal formulada: a expressão realiza
comparações exatas (== ou !=) ou envolve variáveis de controle cujo valor
não se altera.
A atualização da variável de controle não produz os valores esperados,
devido às limitações na representação de números reais pelo computador.
float x, y;
x = 1.0;
y = 0.1; // atenção: este valor não admite representação exata!
while( x != 0.0 )
{
x = x - y;
printf("%.1f\n", x);
}
Comandos de controle de fluxo
break;
Ignora os comandos restantes do bloco, desviando imediatamente o fluxo de execução do
programa para o primeiro comando após o final do bloco.
continue;
Ignora os comandos restantes do bloco e força a próxima iteração do laço, dependendo do
valor da expressão de controle.
exit(0);
Encerra a execução do programa.
Comandos de controle de fluxo: break;
Exemplo: Adivinhe o número que estou pensando...
#include <time.h>
int main()
{
int cont = 0, num, chute;
srand( time(0) ); // inicializa o gerador de números aleatórios
num = rand() % 100; // rand() gera um número inteiro entre 0 e 2 31 – 1
system(“PAUSE”);
return(0);
}
Comandos de controle de fluxo: exit(0);
Exemplo: Apresentar o inverso de n valores (até que não seja possível.)
int main()
{
int i, n;
float valor;
printf("Quantos valores deseja informar? ");
scanf("%d", &n);
for ( i = 0; i < n; i++ )
{
printf("%do. valor: ", i+1);
scanf("%f", &valor);
if ( valor == 0.0 )
{
puts("Divisão por zero!");
system("PAUSE");
exit(0);
}
printf("O inverso de %f é %f\n", valor, 1.0/valor);
}
system(“PAUSE”);
return(0);
}