Você está na página 1de 50

PROGRAMAÇÃO DE

COMPUTADORES:
Instruções de controle:
estruturas de repetição

Galeno J. de Sena
UNESP / Guaratinguetá / Brazil
(galeno.sena@unesp.br)

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição

Instrução while:

Estrutura algorítmica:
enquanto (<condição>) faça
início Estrutura enquanto:
<instrução_1>; ➢ O bloco contendo as instruções
<instrução_2>; será executado repetidamente
... enquanto a <condição> for
<instrução_n>; verdadeira
fim; ➢ Laço de repetição, laço de
iteração, loop, looping, ...

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição

Instrução while:
Forma Geral (sintaxe):

while (<condição>)
<bloco de instruções>
<bloco de instruções>:
<condição>: expressão { <instrução_1>;
relacional ou lógica <instrução_2>;
...
<instrução_n>; }

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição
Instrução while:
while (<condição>)
<bloco de instruções>
Semântica:
1. A <condição> é avaliada
2. Se o resultado for verdadeiro:
a. O bloco de instruções será
executado
b. O controle retorna ao passo 1
3. Se o resultado for falso:
a. O controle é desviado para a
instrução seguinte ao while

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição: instrução while

Exemplo: Algoritmo: cálculo do volume de várias esferas


início
cálculo do // declaração de variáveis
volume de real: R, V; // raio, volume
várias esferas // entrada de dados
escreva("Entre com raio <= 0 para parar!");
escreva("Raio: ");
leia(R);
// calcula volumes enquanto R > 0
Algoritmo: enquanto (R > 0)
início
// cálculo/saída do volume
V = (4./3.)*PI*(R^3); // PI=3.141593...
escreva("V(", R, "): ", V);
// próxima esfera
escreva("Raio: ");
leia(R);
fim; // enquanto
fim. // algoritmo

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição: instrução while
Exemplo:
Programa para cálculo do volume de várias esferas
// determinação volume de várias esferas
#include <stdio.h>
#include <math.h>
main() {
float R, V; // raio, volume
// entrada de dados
printf("\nEntre com raio<=0 para parar!\n");
printf("Raio: ");
scanf("%f", &R);
// calcula volumes enquanto R > 0
while (R > 0) {
// cálculo/saída do volume
V = (4./3.)*acos(-1)*pow(R,3); // pi=arccos(-1)
printf("V(%.1f): %.2f\n", R, V);
// proxima esfera
printf("Raio: ");
scanf("%f", &R);
}
}
© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP
Instruções de controle:
Estruturas de repetição: instrução while
Exemplo:
Programa para cálculo do
volume de várias esferas
// determinação volume de várias esferas
#include <stdio.h>
#include <math.h>
main() {
float R, V; // raio, volume
// entrada de dados
printf("\nEntre com raio<=0 para parar!\n");
printf("Raio: ");
scanf("%f", &R);
// calcula volumes enquanto R > 0
while (R > 0) {
// cálculo/saída do volume
V = (4./3.)*acos(-1)*pow(R,3); // pi=arccos(-1)
printf("V(%.1f): %.2f\n", R, V);
// proxima esfera
printf("Raio: ");
scanf("%f", &R);
}
}

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição: instrução while
// determinação volume de n esferas
#include <stdio.h>
#include <math.h>
main() {
Exemplo: int n, // n: numero de esferas
Programa para i; // i: variável de controle (contadora)
cálculo do volume float r, v; // raio, volume
// entrada do número de esferas
de n esferas printf("Quantas esferas? ");
scanf("%d", &n);
i = 1; // inicializa variável contadora
// calcula volumes de n esferas
Repetição com while (i <= n){
variável de // raio da i-ésima esfera
printf("Raio: ");
controle scanf("%f", &r);
(contadora) // cálculo/saída do volume
v = (4./3.)*acos(-1)*pow(r,3); // pi=arccos(-1)
printf("Volume da %da esfera = %.2f\n", i, v);
// incremento da variável contadora
i++;
}
}

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição: instrução while
// determinação volume de n esferas
#include <stdio.h> Repetição com variável
#include <math.h>
main() { de controle (contadora)
int n, // n: numero de esferas
i; // i: variável de controle (contadora)
float r, v; // raio, volume
// entrada do número de esferas
printf("Quantas esferas? ");
scanf("%d", &n);
i = 1; // inicializa variável contadora
// calcula volumes de n esferas
while (i <= n){
// raio da i-ésima esfera
printf("Raio: ");
scanf("%f", &r);
// cálculo/saída do volume
v = (4./3.)*acos(-1)*pow(r,3); // pi=arccos(-1)
printf("Volume da %da esfera = %.2f\n", i, v);
// incremento da variável contadora
i++;
}
}

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição: instrução while

Observações sobre a instrução while:


➢ Implementação de uma estrutura de repetição com
teste no início: o bloco de instruções poderá não
ser executado nenhuma vez (ou, equivalentemente,
poderá ser executado 0, 1 ou mais vezes!)
➢ A execução do bloco de instruções deve fazer com
que a <condição> se torne falsa depois de um certo
número de iterações: caso contrário, o programa
não sairá do laço de repetição (“loop infinito”)
➢ Caso haja apenas uma instrução a ser repetida, as
chaves ({}) delimitadoras do bloco poderão ser
omitidas

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


// cálculo da média de um conjunto de
Instrução // n valores de entrada
#include <stdio.h>
while main() {
float x, s, m; // x: valor, s: soma, m: média
int i, n;
// entrada do número de valores
printf("\nn (>= 1) : ");
scanf("%d", &n);
i = 1; // inicializa variável contadora
Exemplo: s = 0; // inicializa variável de soma
while (i <= n) {
Cálculo da média // le valor
de um conjunto de printf("\nx = ");
scanf("%f", &x);
n valores de // acumula valor lido em s
entrada s = s + x; // "acumula" valor lido em s
// valores da i-ésima iteração
printf("n = %d, x = %.1f, s = %.2f\n", n, x, s);
// próximo valor de x
i++;
}
// cálculo e saída da média
if (n > 0) {
m = s / n;
printf("\nMedia = %.2f/%d=%.2f\n", s, n, m);
}
}

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição: instrução while
#include <stdio.h>
main() {
float x, s, m; // x: valor, s: soma, m: média
int n; // variável de controle (contadora)
// entrada do primeiro valor
printf("\nx (>= 0) : ");
scanf("%f", &x);
Exemplo: n = 0; // inicializa variável contadora
Cálculo da média de s = 0; // inicializa variável de soma
while (x >= 0) {
um conjunto de n = n+1; // incrementa variável contadora
valores de entrada s = s+x; // "acumula" valor lido em s
positivos (número de // valores da i-ésima iteração
printf("n = %d, x = %.1f, s = %.2f\n", n, x, s);
elementos // próximo valor de x
desconhecido) printf("\nx (>= 0) : ");
scanf("%f", &x);
}
// cálculo e saída da média
if (n > 0) {
m = s / n;
printf("\nMedia = %.2f/%d=%.2f\n", s, n, m);
}
}

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Instrução while
#include <stdio.h>
main() {
float x, s, m; // x: valor, s: soma, m: média
int n; // variável de controle (contadora)
// entrada do primeiro valor
printf("\nx (>= 0) : ");
scanf("%f", &x);
n = 0; // inicializa variável contadora
s = 0; // inicializa variável de soma
while (x >= 0) {
n = n+1; // incrementa variável contadora
s = s+x; // "acumula" valor lido em s
// valores da i-ésima iteração
printf("n = %d, x = %.1f, s = %.2f\n", n, x, s);
// próximo valor de x
printf("\nx (>= 0) : ");
scanf("%f", &x);
}
// cálculo e saída da média
if (n > 0) {
m = s / n;
printf("\nMedia = %.2f/%d=%.2f\n", s, n, m);
}
}
© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP
Instruções de controle:
Estruturas de repetição: instrução while
// le linha de texto e gera saída
// dos caracteres de entrada em maúsculo
#include <stdio.h>
#define EOL '\n' // "end of line"
main() {
Exemplo: int i=0, n; //i: índice chars; n: nro caracteres
programa que char linha[80]; // armazena linha de entrada
converte os // entrada da linha de texto
puts("Entre com uma linha de texto:");
caracteres de linha[i] = getchar(); // leitura primeiro caractere
uma linha de // entrada dos demais caracteres
entrada para while(linha[i] != EOL){
maiúsculas i++; // atualiza índice
linha[i] = getchar(); // leitura próximo char
}
n = i; // nro chars = último valor de i
// saída da linha, caracteres maiúsculos
i=0;
while (i < n){
putchar(toupper(linha[i])); // saída char (maiúsculo)
i++; // atualiza índice
}
}
© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP
Instruções de controle:
Estruturas de repetição: instrução while
// le linha de texto e gera saída
// dos caracteres de entrada em maúsculo
#include <stdio.h>
#define EOL '\n' // "end of line"
main() {
int i=0, n; //i: índice chars; n: nro caracteres
char linha[80]; // armazena linha de entrada
// entrada da linha de texto
puts("Entre com uma linha de texto:");
linha[i] = getchar(); // leitura primeiro caractere
// entrada dos demais caracteres
while(linha[i] != EOL){
i++; // atualiza índice
linha[i] = getchar(); // leitura próximo char
}
n = i; // nro chars = último valor de i
// saída da linha, caracteres maiúsculos
i=0;
while (i < n){
putchar(toupper(linha[i])); // saída char (maiúsculo)
i++; // atualiza índice
}
}
© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP
Instruções de controle:
Estruturas de repetição: instrução while
Exemplo: programa que gera saída de uma linha de entrada com
caracteres maiúsculos (versão mais compacta do exemplo anterior)

// le linha de texto e gera saída


// dos caracteres de entrada em maúsculo
#include <stdio.h>
#define EOL '\n' // "end of line"
main() {
int i=0, n; //i: índice chars; n: nro caracteres
char linha[80]; // armazena linha de entrada
// entrada da linha de texto
puts("Entre com uma linha de texto:");
// leitura dos caracteres (até EOL)
while((linha[i++] = getchar()) != EOL);
n = i; // nro chars = último valor de i
// saída da linha, caracteres maiúsculos
i=0;
while (i < n) // toupper(): conv. p/ maiúsculo
putchar(toupper(linha[i++]));
}

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição

Instrução do-while:

Forma Geral
do
(sintaxe): <bloco de instruções>
while (<condição>);

<bloco de instruções>:
<condição>: expressão { <instrução_1>;
relacional ou lógica <instrução_2>;
...
<instrução_n> }

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição: do-while

do
<bloco de instruções>
while (<condição>);

Semântica:
1. O <bloco de instruções> é
executado
2. A <condição> é avaliada
3. Se o resultado for verdadeiro:
O controle retorna ao passo 1
4. Se o resultado for falso:
O controle é desviado para a
instrução seguinte ao do-while

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição: instrução do-while
Exemplo: cálculo de n!
/* calcula e apresenta o valor de n! */
#include <stdio.h>
main() {
// declaração de variáveis
int n, fat, i; // fat: fatorial; i: contadora
// entrada/validação de n
do {
printf("\nEntre com n (n>=0): ");
scanf("%d", &n);
} while (n < 0);
// calculo do fatorial de n
// n! = 1 x 2 x 3 x ... x n
fat = 1; i = 1; // inicialização
printf("\n"); // para "pular" uma linha
do {
fat *= i; // multiplica valor da sequência
// mostra valores intermediários
printf("\ti = %d, fat = %d\n", i, fat);
i++; // próximo valor da sequência
} while (i <= n);
// saída
printf("\nFatorial de %d = %d\n", n, fat);
}

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição: instrução do-while
Exemplo: cálculo de n!
/* calcula e apresenta o valor de n! */
#include <stdio.h>
main() {
// declaração de variáveis
int n, fat, i; // fat: fatorial; i: contadora
// entrada/validação de n
do {
printf("\nEntre com n (n>=0): ");
scanf("%d", &n);
} while (n < 0);
// calculo do fatorial de n
// n! = 1 x 2 x 3 x ... x n
fat = 1; i = 1; // inicialização
printf("\n"); // para "pular" uma linha
do {
fat *= i; // multiplica valor da sequência
// mostra valores intermediários
printf("\ti = %d, fat = %d\n", i, fat);
i++; // próximo valor da sequência
} while (i <= n);
// saída
printf("\nFatorial de %d = %d\n", n, fat);
}
© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP
Instruções de controle:
Estruturas de repetição: instrução do-while
Exemplo: cálculo de n!
/* calcula e apresenta o valor de n! */
#include <stdio.h>
main() {
// declaração de variáveis
int n, fat, i; // fat: fatorial; i: contadora
// entrada/validação de n
do {
printf("\nEntre com n (n>=0): ");
scanf("%d", &n);
} while (n < 0);
// calculo do fatorial de n
fat = 1; i = 1; // inicialização
do
fat *= i++; // multiplica valor da sequência
while (i <= n);
// saída
printf("\nFatorial de %d = %d\n", n, fat);
}

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição: instrução while

Observações sobre a instrução do-while:


➢ Implementação de uma estrutura de repetição com teste no
final: o bloco de instruções será executado pelo menos
uma vez (ou, equivalentemente, será executado 1 ou mais
vezes!)
➢ A execução do bloco de instruções deve fazer com que a
<condição> se torne falsa depois de um certo número de
iterações: caso contrário, o programa não sairá do laço
de repetição (“loop” ou laço infinito)
➢ Caso haja apenas uma instrução a ser repetida, as chaves
({}) delimitadoras do bloco poderão ser omitidas
➢ É obrigatório o uso de um “;” no final de uma instrução
do-while!

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição: instrução do-while
#include <stdio.h>
int main () {
int i;
do {
printf ("\n\nSobre que pensador quer se informar:\n\n");
printf ("\t(1) Adam Smith\n");
printf ("\t(2) Abraham Maslow\n");
printf ("\t(3) Jurgen Habermas\n\n"); // Jürgen Habermas:
scanf("%d", &i);
Exemplo: } while ((i<1)||(i>3));
Menu de switch(i) {
case 1:
opções com printf("\t\tAdam Smith: pai da economia\n");
printf("\t\tTeoria do liberalismo economico\n");
do-while break;
case 2:
printf("\t\tAbraham Maslow: psicologo (EUA)\n");
printf("\t\tHierarquia de necessidades de Maslow\n");
break;
case 3:
printf("\t\tJürgen Habermas: filosofo alemao\n");
printf("\t\tTeoria do agir comunicativo\n");
break;
}
}
© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP
Instruções de controle:
Instrução do-while
#include <stdio.h>
int main () {
Exemplo:
int i; Menu de
do {
printf ("\n\nSobre que pensador quer se informar:\n\n");
opções com
printf ("\t(1) Adam Smith\n"); do-while
printf ("\t(2) Abraham Maslow\n");
printf ("\t(3) Jurgen Habermas\n\n"); // Jürgen Habermas:
scanf("%d", &i);
} while ((i<1)||(i>3));
switch(i) {
case 1:
printf("\t\tAdam Smith: pai da economia\n");
printf("\t\tTeoria do liberalismo economico\n");
break;
case 2:
printf("\t\tAbraham Maslow: psicologo (EUA)\n");
printf("\t\tHierarquia de necessidades de Maslow\n");
break;
case 3:
printf("\t\tJürgen Habermas: filosofo alemao\n");
printf("\t\tTeoria do agir comunicativo\n");
break;
}
}

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição encadeadas (while, do-while)
// determinação volume de n esferas
#include <stdio.h>
#include <math.h>
main() {
int n, i; // i: variável contadora
float r, v; // raio, volume
// entrada de dados
Exemplo: printf("\nQuantas esferas? ");
Cálculo do volume scanf("%d", &n);
i = 1; // inicializa variável contadora
de n esferas c/ // calcula volumes de n esferas
validação do raio while (i <= n) {
// entrada/validação i-ésimo raio
do {
printf("Raio: ");
scanf("%f", &r);
} while (r <= 0);
// cálculo/saída do volume
v = (4./3.)*acos(-1)*pow(r,3); // pi=arccos(-1)
printf("Volume da %da esfera = %.2f\n", i, v);
i++; // incremento var. contadora
}
}

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição encadeadas (while, do-while)
Exemplo: volume de n esferas c/ validação do raio
// determinação volume de n esferas
#include <stdio.h>
#include <math.h>
main() {
int n, i; // i: variável contadora
float r, v; // raio, volume
// entrada de dados
printf("\nQuantas esferas? ");
scanf("%d", &n);
i = 1; // inicializa variável contadora
// calcula volumes de n esferas
while (i <= n) {
// entrada/validação i-ésimo raio
do {
printf("Raio: ");
scanf("%f", &r);
} while (r <= 0);
// cálculo/saída do volume
v = (4./3.)*acos(-1)*pow(r,3); // pi=arccos(-1)
printf("Volume da %da esfera = %.2f\n", i, v);
i++; // incremento var. contadora
}
}

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição: o loop for

Instrução for: forma Geral (sintaxe):


for (<inicialização>; <condição>; <atualização>)
<bloco de instruções>

<bloco de instruções>:
<condição>: expressão { <instrução_1>;
relacional ou lógica <instrução_2>;
...
<instrução_n>; }

Repetição com variável de controle (contadora)

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle: laço for
for (<inicialização>; <condição>; <atualização>)
<bloco de instruções>
Semântica:

1. A expressão de <inicialização> é
executada: a variável contadora é
inicializada
2. A <condição> é avaliada
3. Se o resultado da avaliação for falso:
O controle será desviado para a
instrução seguinte ao for
4. Se o resultado for verdadeiro:
a. O <bloco de instruções> será
executado
b. A expressão de <atualização> é
executada: incremento ou decremento
da variável de controle
c. O fluxo de execução retorna ao
passo 2
© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP
Instruções de controle:
Estruturas de repetição: laço for
Exemplo:
Gera uma sequência de inteiros de 1 a n
#include <stdio.h>
int main()
{
int i, n;
printf("\nEntre com n: \n");
scanf("%d", &n);
// gera sequência de 1 a n
puts("Sequencia: ");
for (i=1; i<=n; i++) {
printf("%d\n", i);
}
}

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição: laço for
Exemplo:
Gera a tabuada de um valor n (1<=n<=9)

// tabuada de n, 1 <= n <= 9


#include<stdio.h>
#include<stdlib.h>
main() {
int i, n; //declaração de variáveis
// entrada de n
do {
printf("\nEntre com n (entre 1 e 9): ");
scanf("%d", &n);
} while(n<1 || n>9);
// gera tabuada
printf("\nTabuada de %d: \n", n);
for (i = 1; i <=10; i++)
printf("\n%2d x %2d = %2d" , n, i, n*i);
}

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição: laço for

Exemplo:
Gera a tabuada de um
valor n (1<=n<=9)
// tabuada de n, 1 <= n <= 9
#include<stdio.h>
#include<stdlib.h>
main() {
int i, n; //declaração de variáveis
// entrada de n
do {
printf("\nEntre com n (entre 1 e 9): ");
scanf("%d", &n);
} while(n<1 || n>9);
// gera tabuada
printf("\nTabuada de %d: \n", n);
for (i = 1; i <=10; i++)
printf("\n%2d x %2d = %2d" , n, i, n*i);
}
© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP
Instruções de controle:
Estruturas de repetição: laço for
Exemplo:
Gera a saída dos múltiplos de 4, no intervalo: [4,100]

#include<stdio.h>
main() {
int i; // variável contadora
// gera e mostra os múltiplos
for (i = 4; i<=100 ; i += 4) {// incrementa de 3 em 3.
printf("%3d\t", i);
}
}

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição: laço for
Exemplo:
Gera a saída dos múltiplos de 4, no intervalo: [4,100],
mostrando 5 valores em cada linha da saída
// mostra os múltiplos de 4
// entre 4 e 100
#include<stdio.h>
main() {
int i, j=0; // variável contadora
// gera e mostra os múltiplos
for (i = 4; i<=100 ; i += 4) { // incrementa de 4 em 4
printf("%3d\t", i);
// controle de saída: 5 valores por linha
j++;
if (j==5) {
printf("\n");
j=0;
}
}
}

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição: laço for
Exemplo: /* calcula e apresenta o valor de n! */
#include <stdio.h>
Programa para o main() {
cálculo de n! // declaração de variáveis
int n, fat, j; // fat: fatorial; j: contadora
// entrada/validação de n
do {
printf("\nEntre com n (n>=0): ");
scanf("%d", &n);
} while (n < 0);
// cálculo de n!
// n! = n x (n-1) x (n-2) x ... x 2 x 1
fat = 1; // inicialização
printf("\n"); // para "pular" uma linha
for (j=n; j>=1; j--) {
fat *= j; // multiplica valor da sequência
// mostra valores intermediários
printf("\ti = %d, fat = %d\n", j, fat);
}
// saída
printf("\nFatorial de %d = %d\n", n, fat);
}

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição: laço for
/* calcula e apresenta o valor de n! */ Exemplo:
#include <stdio.h>
main() { Programa para o
// declaração de variáveis cálculo de n!
int n, fat, j; // fat: fatorial; j: contadora
// entrada/validação de n
do {
printf("\nEntre com n (n>=0): ");
scanf("%d", &n);
} while (n < 0);
// cálculo de n!
// n! = n x (n-1) x (n-2) x ... x 2 x 1
fat = 1; // inicialização
printf("\n"); // para "pular" uma linha
for (j=n; j>=1; j--) {
fat *= j; // multiplica valor da sequência
// mostra valores intermediários
printf("\ti = %d, fat = %d\n", j, fat);
}
// saída
printf("\nFatorial de %d = %d\n", n, fat);
}

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição: laço for
Exemplo:
Programa para o cálculo de n!
/* inicialização/atribuição na instrução for */
#include <stdio.h>
main() {
// declaração de variáveis
int n, fat, j; // fat: fatorial; j: contadora
// entrada/validação de n
do { Qualquer das 3 partes de um for:
<inicialização>,
printf("\nEntre com n (n>=0): "); <condição>, <atualização>
scanf("%d", &n); Pode conter mais de uma instrução
} while (n < 0);
// calculo de n!
(separadas por vírgula)
// n! = n x (n-1) x (n-2) x ... x 2 x 1
for (fat=1, j=n; j>=1; fat*=j, j--); // ou fat*=j--
// saída
printf("\nFatorial de %d = %d\n", n, fat);
}
© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP
Instruções de controle:
Estruturas de repetição: laços for encaixados

Exemplo:
O laço for mais interno é executado
// for's "aninhados" (encaixados) repetidamente, para cada iteração do laço
// nested for loops for mais externo!
#include <stdio.h>
int main() {
int i, j; // declaração
// estruturas for "aninhadas"
for (i=0; i<2; i++) {
for (j=0; j<3; j++) {
printf("i = %d \t j = %d\n", i, j);
}
}
}

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição: laços for aninhados
/* calcula e apresenta os valores de
fatorial de k, para k = 0, ..., n */
#include <stdio.h>
main() {
// declaração de variáveis
int n, fat, j, k;
Exemplo: printf("\nEntre com n (n>=0): ");
Programa para scanf("%d", &n);
// calculo do fatorial de k, k=0, ..., n
o cálculo de k!, // k == 0 => k! = 1;
k = 0, …, n // k != 0 => k! = k x (k-1) x ... x 2 x 1
for (k=0; k<=n; k++) {
fat=1;
for (j=k; j>=1; j--) {
fat*=j;
}
printf("Fatorial de %d = %d\n", k, fat);
}
}

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição: laços for aninhados
Exemplo:
/* calcula e apresenta os valores de
fatorial de k, para k = 0, ..., n */
Programa para o cálculo de k!, k = 0, …, n
#include <stdio.h>
main() {
// declaração de variáveis
int n, fat, j, k;
printf("\nEntre com n (n>=0): ");
scanf("%d", &n);
// calculo do fatorial de k, k=0, ..., n
// k == 0 => k! = 1;
// k != 0 => k! = k x (k-1) x ... x 2 x 1
for (k=0; k<=n; k++) {
fat=1;
for (j=k; j>=1; j--) {
fat*=j;
}
printf("Fatorial de %d = %d\n", k, fat);
}
}

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição: laços for

// cálculo da média de um conjunto


// de valores de entrada (não negativos)
#include <stdio.h>
main() {
Exemplo: float x, s, m; // x: valor, s: soma, m: média
int n; // variável de controle (contadora)
Programa para // entrada do primeiro valor
cálculo da média printf("\nx (>= 0) : ");
scanf("%f", &x);
de um conjunto for(n=0, s=0; x>=0; n++){
de valores de s+=x; // acumula x (>=0)
printf("\nx (>= 0) : "); // próximo valor
entrada scanf("%f", &x);
}
// cálculo e saída da média
if (n > 0){
m = s / n;
printf("\nMedia = %.2f/%d=%.2f\n", s, n, m);
}
}

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição: laços for

// cálculo da média de um conjunto Exemplo:


// de valores de entrada (não negativos) Programa para cálculo da média de um
#include <stdio.h>
main() { conjunto de valores de entrada
float x, s, m; // x: valor, s: soma, m: média
int n; // variável de controle (contadora)
// entrada do primeiro valor
printf("\nx (>= 0) : ");
scanf("%f", &x);
for(n=0, s=0; x>=0; n++){
s+=x; // acumula x (>=0)
printf("\nx (>= 0) : "); // próximo valor
scanf("%f", &x);
}
// cálculo e saída da média
if (n > 0){
m = s / n;
printf("\nMedia = %.2f/%d=%.2f\n", s, n, m);
}
}

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição: laços for

Exemplo:
Programa que mostra o uso de uma variável do tipo char como
variável contadora em um laço for

#include<stdio.h>
/* mostra as letras minúsculas/maiúsculas
com os respectivos códigos ASCII */
main()
{
char ch, CH;
for (ch = 'a', CH = 'A'; ch <= 'z', CH <= 'Z'; ch++, CH++) {
printf("\nCaractere: %c Codigo (ASCII): %d", CH, (int) CH);
printf("\t\tCaractere: %c Codigo (ASCII): %d", ch, (int) ch);
}
}

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição: laços for
Exemplo:
Variável do tipo char como variável contadora em um laço for

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição
Instruções break/continue

Instrução break:
Finaliza a execução de um laço de repetição, desviando o controle para o
primeiro comando subsequente ao laço (ou, equivalentemente, para fora
do laço)
o No caso de várias estruturas de repetição “aninhadas”, o comando
break transferirá o controle para fora do laço que o contém, mas não
para fora de todas as estruturas de repetição externas
o Laços de repetição: while, do-while, for; utilizado também para sair de
um switch

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Estruturas de repetição
Instruções break/continue

#include <stdio.h>
#include <math.h>
main() {
int n, i;
float r, v;
// número de esferas
Exemplo: printf("Quantas esferas? ");
Cálculo do volume scanf("%d", &n);
i = 1;
de n esferas, // calcula volumes de n esferas
interropendo-se a while (i <= n) {
// raio da i-ésima esfera
execução se raio <= 0 printf("Raio: ");
scanf("%f", &r);
if (r <= 0) {
puts("\nRaio invalido!");
break; // sai do laço while
}
// cálculo/saída do volume
v = (4./3.)*acos(-1.0)*pow(r,3); // pi=arccos(-1)
printf("Volume da %da esfera = %.2f\n", i, v);
i++;
}
}

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Instruções de controle:
Estruturas de repetição
Instruções break/continue

Instrução continue:
Durante a execução de um laço de repetição, caso o controle encontre
uma instrução continue, o restante do <bloco de instruções> do laço será
ignorado:
o Estruturas com while/do-while: o controle é desviado para a execução
da expressão de <condição> do laço
o Estrutura com for: o controle é desviado inicialmente para a execução
da expressão de <atualização> do laço e, depois, para a expressão de
<condição>

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Estruturas de repetição
Instruções break/continue
#include <stdio.h>
#include <math.h>
main() {
int n, i;
float r, v;
// número de esferas
Exemplo: printf("Quantas esferas? ");
scanf("%d", &n);
Cálculo do volume i = 1; // inicializa contador
de n esferas // calcula volumes de n esferas
while (i <= n) {
(ignorando-se // raio da i-ésima esfera
valores de raios printf("Raio: ");
scanf("%f", &r);
negativos ou nulos) if (r <= 0) {
puts("Raio invalido!");
continue; // retorna ao teste do while
}
// cálculo/saída do volume
v = (4./3.)*acos(-1.0)*pow(r,3);
printf("Volume da %da esfera = %.2f\n", i, v);
i++; // incrementa contador
}
}

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Estruturas de repetição
Instruções break/continue
#include <stdio.h>
#include <math.h>
Exemplo:
main() { Cálculo do volume
int n, i;
float r, v;
de n esferas
// número de esferas
printf("Quantas esferas? ");
scanf("%d", &n);
i = 1; // inicializa contador
// calcula volumes de n esferas
while (i <= n) {
// raio da i-ésima esfera
printf("Raio: ");
scanf("%f", &r);
if (r <= 0) {
puts("Raio invalido!");
continue; // retorna ao teste do while
}
// cálculo/saída do volume
v = (4./3.)*acos(-1.0)*pow(r,3);
printf("Volume da %da esfera = %.2f\n", i, v);
i++; // incrementa contador
}
}

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Estruturas de repetição
Instruções break/continue
// determinação volume de n esferas Exemplo:
#include <stdio.h>
#include <math.h> Cálculo do volume
main() { de n esferas,
int n, i;
float r, v; ignorando-se r <= 0
// número de esferas (solução com for)
printf("Quantas esferas? ");
scanf("%d", &n);
// calcula volumes de n esferas
for (i=1; i<=n; i++) {
// raio da i-ésima esfera
printf("Raio: ");
scanf("%f", &r);
if (r <= 0) {
puts("Raio invalido!");
continue;
}
// cálculo/saída do volume
v = (4./3.)*acos(-1.0)*pow(r,3);
printf("Volume da %da esfera = %.2f\n", i, v);
}
}

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP


Estruturas de repetição
Instruções break/continue
// determinação volume de n esferas
#include <stdio.h> Exemplo:
#include <math.h>
main() { Cálculo do volume de n esferas,
int n, i; ignorando-se r <= 0 (solução com for)
float r, v;
// número de esferas
printf("Quantas esferas? ");
scanf("%d", &n);
// calcula volumes de n esferas
for (i=1; i<=n; i++) {
// raio da i-ésima esfera
printf("Raio: ");
scanf("%f", &r);
if (r <= 0) {
puts("Raio invalido!");
i--; // volta 1a iteração no for
continue;
}
// cálculo/saída do volume
v = (4./3.)*acos(-1.0)*pow(r,3);
printf("Volume da %da esfera = %.2f\n", i, v);
}
}

© UNESP/Sena, G. J. PC-IC-2021 FEG/UNESP

Você também pode gostar