2. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Tópicos
Δ Laços de repetição:
• For;
• While;
Δ Estruturas:
• Vetores;
• Matrizes;
Δ Funções;
Δ Exercícios;
3. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Laços de Repetição – for
Δ As expressões inicial e incremento ou decremento são, em geral, atribuições
à variável de controle e condição é uma expressão relacional que envolve a
mesma variável de controle.
Δ A semântica do comando “for” é:
• A expressão inicial é avaliada, consistindo geralmente na inicialização de uma
variável de controle;
• Em seguida, é avaliada a condição:
ose a condição for verdadeira, o <bloco de comandos> é executado e, ao chegar
ao delimitador } ou final do comando “for”, automaticamente se incrementa ou
se decrementa a variável de controle e se retorna à avaliação da condição;
• Quando a condição ficar falsa, ou seja, o incremento/decremento fizer a
variável de controle chegar no limite da condição, o comando de repetição é
finalizado;
4. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Laços de Repetição – for
Δ Exemplo: Façamos um programa que imprima os caracteres da tabela ASCII
padrão (entre o número 32 e o 127) e sua representação decimal;
#include <stdio.h>
int main(void)
{
int i;
for (i = 32; i <= 126; i++)
{
printf("%c [%d]n", i, i);
}
return 0;
}
5. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Laços de Repetição – While
Δ O comando while permite que um certo trecho de programa seja executado
ENQUANTO uma certa condição for verdadeira. A forma do comando while
é a seguinte:
while (condição){
// comandos a serem repetidos
// comandos a serem repetidos
}
// comandos após o 'while'
6. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Laços de Repetição – While
Δ O funcionamento é o seguinte:
• Testa a condição;
o Se a condição for falsa então pula todos os comandos do bloco
subordinado ao while e passa a executar os comandos após o bloco do
while.
o Se condição for verdadeira então executa cada um dos comandos do
bloco subordinado ao while.
o Após executar o último comando do bloco do while volta ao passo 1.
7. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Laços de Repetição – While
Δ O comando while deve ser usado sempre que:
• Não soubermos exatamente quantas vezes o laço deve ser repetido
oO usuário vai determinar quantas vezes o laço será repetido, através da
condição;
• O teste deva ser feito antes de iniciar a execução de um bloco de comandos;
• Houver casos em que o laço não deva ser repetido nenhuma vez.
8. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Laços de Repetição – While
Δ Exemplo 01: um programa que imprima a expressão “repetindo...”,
enquanto o usuário não digitar um número diferente de 0;
#include <stdio.h>
int main (){
int contador;
int continua;
continua = 10;
contador = 0;
while (continua != 0) // enquanto for
igual a '0'
{
// comandos a serem repetidos
printf("Repetindo....n");
contador = contador + 1;
printf("Tecle '0' se deseja sairn");
scanf("%d",&continua);
}
if (contador == 0)
printf("O bloco NAO foi repetido.");
else printf("O bloco foi repetido %d
vezes", contador);
return(0);
}
9. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Laços de Repetição – While
Δ Exemplo 02: Um programa que calcula a idade média de um grupo de
pessoas. A finalização da entrada de números é dada por um -1:
#include <stdio.h>
int main (){
float soma, quantidade;
int idade;
float media;
soma = 0.0;
quantidade = 0.0;
idade = 0;
while (idade != -1) {
// comandos a serem repetidos
printf("Idade da pessoa %.0f. (tecle -1 se quiser
encerrar).n",quantidade+1);
scanf("%d", &idade);
if (idade >=0) {
soma = soma + idade;
quantidade = quantidade + 1;
}
}
// Faz o calculo da media de idade
if (quantidade >0) {
media = soma / quantidade;
printf("A media de idade das %.0f
pessoas eh: %5.2f", quantidade,media);
}else{
printf("Nenhum dado foi informado.");
}
return(0);
}
10. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Faça você mesmo
1. Elabore, um programa que efetue o cálculo da fatorial de um número
inserido pelo usuário. Em seguida, imprima na tela o valor calculado. No
final, pergunte ao usuário se ele deseja inserir um novo valor. Caso o
usuário insira um número negativo, termine a repetição. Se o usuário
inserir o número 0, indique que o fatorial é 1.
Relembrando: Fatorial de 5: 5! = 5*4*3*2*1; Fatorial de 0: 0! = 1; Fatorial de
-2: -2! = Não existe;
2. Faça um programa em C que leia um conjunto de números (X) e imprima
sua soma (Soma) e sua média (Media). Admita que o valor 9999 é
utilizado como condição para fim de leitura.
Ex.: 1, 2, 3 => Soma=6 Media=2
11. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Vetores
Δ Introdução:
• Um vetor é uma coleção de variáveis de mesmo tipo, acessíveis com um único
nome e armazenados contiguamente na memória;
• A individualização de cada variável de um vetor é feita através do uso de índices;
• Os Vetores são matrizes de 1 só dimensão;
• Os índices começam em zero;
• A quantidade de elementos que o vetor pode armazenar deve ser um valor inteiro
fixo
Δ Declaração de matrizes:
• int Vetor[5];
// declara um vetor de inteiros de 5 posições, começando
na posição 0 até a posição 4
• char palavra[10];
// declara um vetor de char (string) de 10
posições, começando na posição 0 até a posição 9;
12. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Vetores
Δ Exemplo:
int tam=5;
char z[tam];
//Começa na posição zero e termina na posição 4
Δ ATRIBUIÇÃO
vet[0]=1; //atribui o valor 1 à primeira posição
do vetor
X[3] = ‘b’; //atribui a letra b à quarta posição
do vetor
13. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Vetores
Δ PREENCHENDO
for(i=0; i<10; i++)
scanf(“%d”, &vetor[i]);
Δ MOSTRANDO OS VALORES
for(i=0; i<10; i++)
printf(“%d”, vetor[i]);
14. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Vetores
Δ Exemplo: leia 10 números inteiros positivos e armazene em um vetor. Em seguida, determine e imprima o maior valor
do vetor;
#include <stdio.h>
int main (){
int v[10], i, maior = 0,menor;
for (i=0; i<10; i++){
scanf("%d", &v[i]);
}
for (i=0; i<10; i++){
if(i=0){
menor=v[i];
}else{
if (v[i] < menor){
maior = v[i];
}
}
printf("maior = %dn", menor);
return (0);
}
15. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Matrizes
Δ Introdução
• Variáveis homogêneas bidimensionais ou multidimensionais
• Pode ter até 12 dimensões de acordo com o padrão ANSI
• Para cada dimensão, um índice deve ser usado
Δ DECLARAÇÃO
float x[2][6]; //uma matriz com duas linhas e seis
colunas
char mat[4][3]; //uma matriz com quatro linhas e tres
colunas
float y[2][4][3]; //uma matriz com duas linhas,
quatro colunas e três profundidades
16. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Matrizes
int mat[4][3];
//uma matriz com quatro linhas e três colunas
0,0
1,0
2,0
3,0
0,1
1,1
2,1
3,1
0,2
1,2
2,2
3,2
Mat[4][3]
Linhas
Colunas
17. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Matrizes
Δ ATRIBUIÇÃO
X[1][4] = 5; //atribui o valor 5 ao espaço
identificado pelo índice 1 (linha 2) e índice 4
(coluna 5)
Mat[3][2] = ‘d’; //atribui o valor d à quarta linha
e à terceira coluna
Y[0][3][1] = 12; //atribui o valor 12 à primeira
linha, quarta coluna e segunda profundidade.
18. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Matrizes
Δ PREENCHENDO
int mat[4][3];
for(i=0; i<4; i++){ //linha
for(j=0; j<3; j++){ //coluna
scanf(“%d”, &mat[i][j] );
}
}
Preenche primeiro todas as colunas da linha 0
Depois todas as colunas da linha 1
E assim por diante
1
4
7
10
2
5
8
11
3
6
9
12
Mat[4][3]
Linhas
Colunas
19. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Matrizes
Δ IMPRIMINDO
int mat[4][3];
for(i=0; i<4; i++){//linha
for(j=0; j<3; j++){//coluna
printf( “%d ”, mat[i][j] );
}
}
8
1
7
90
6
1
0
12
5
7
11
12
Mat[4][3]
Linhas
Colunas
Itens impressos:
8 6 5 1 1 7 7 0 11 90 12 12
20. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Matrizes
Δ Exemplo : algoritmo que imprima todos os itens de uma matriz e imprima a
linha da matriz que está sendo impressa:
for(i=0; i<4; i++){
printf( “ Elementos da linha %d ”, i);
for(j=0; j<3; j++){
printf( “ %d ”, x[ i , j ] );
}
}
21. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Matrizes
Δ Exemplo: algoritmo que imprima todos os itens de uma matriz e imprima a
coluna da matriz que está sendo impressa:
for(j=0; j<4; j++){
printf(“Elementos da coluna %d”, j);
for(i=0; i<3; i++){
printf( “ %d ”, x[ i][j ] );
}
}
MEMÓRIA TELA
j i
0 Elementos da coluna 0
0 0 4
0 1 5
0 2 1
1 Elementos da coluna 1
1 0 6
22. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Matrizes
Δ Exemplo: leia os elementos
de uma matriz 3x4 de
números float. Em seguida,
imprima os elementos no
formato abaixo:
X X X X
X X X X
X X X X
#include <stdio.h>
int main()
{
float m[3][4];
int i, j;
for (i=0; i<3; i++){
for (j=0; j<4; j++)
scanf("%f", &m[i][j]);
}
for (i=0; i<3; i++){
for (j=0; j<4; j++){
printf(“%f", m[i][j]);
}
printf("n");
}
return (0);
}
23. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Faça você mesmo
Δ Faça um algoritmo que copie o conteúdo de um vetor em um segundo vetor;
Δ Faça um algoritmo que some o conteúdo de dois vetores e armazene o resultado
em um terceiro vetor.
Δ Crie um programa em C que peça 10 números, armazene eles em um vetor e diga
qual elemento é o maior, qual é a média;
Δ Crie um programa em C que peça 10 números, armazene eles em um vetor e diga
quantos elementos são maiores que a média;
Δ Faça um algoritmo que leia uma matriz mat 2 x 3 e imprima na tela a soma de
todos os elementos da matriz mat;
Δ Escreva um algoritmo que lê uma matriz M(5,5) e calcule e imprima na tela as
somas:
a) da linha 4 de M;
b) da coluna 2 de M;
c) De todos os elementos de M;
24. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Funções (sub rotinas)
Δ Funções são chamadas de sub rotinas ou subprogramas;
• São blocos de instruções que realizam tarefas específicas;
Δ Como o problema pode ser subdividido em pequenas tarefas, os programas
tendem a ficar menores e mais organizados;
Δ Programas são executados linha após linha, mas quando se usa sub rotina,
um desvio é realizado na execução do programa;
Δ Uma sub rotina pode ou não receber um parâmetro;
Δ Uma sub rotina pode ou não retornar um valor;
Δ Uma sub rotina pode ter variáveis locais, variáveis que são criadas apenas
para uso interno da sub rotina;
Δ Modularização do programa por meio de funções;
Δ Variáveis globais: são aquelas variáveis conhecidas por todo o programa e
são declaradas fora das funções;
25. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Escopo de Variáveis
Δ Chamamos de escopo de variável ao conjunto de regras que determinam a
utilização de uma variável em um programa;
Δ Podemos dividir as variáveis quanto ao escopo em três tipos:
variáveis locais, parâmetros formais e variáveis globais.
Δ Variáveis locais
• São aquelas declaradas dentro do bloco de uma função.
• Não podem ser usadas ou modificadas por outras funções.
• Somente existem enquanto a função onde foi declarada estiver sendo executada.
Δ Parâmetros formais
• Os parâmetros formais de uma função também são variáveis locais da função.
Δ Variáveis Globais
• São declaradas fora de todos os blocos de funções.
• São acessíveis em qualquer parte do programa, ou seja, podem ser usadas e
modificadas por todas as- outras funções.
• Existem durante toda a execução do programa.
26. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Escopo de Variáveis
#include <stdio.h>
//declaração de variáveis globais
//uma variável declarada aqui pode ser usada por todos
// -------------------------------------------------
void funcao1(variáveis locais de parâmetros)
{
// declaração das variáveis locais da função1
//uma variável declarada aqui SÓ pode ser usada pela funcao1
}
// ---------------- Funçao main()-------------------
int main(void)
{
//declaração das variáveis locais da main()
//uma variável declarada aqui SÓ pode ser usada pela main
return(0);
}
27. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Tipos de Funções
Δ FUNÇÕES SEM PASSAGEM DE PARAMETROS E SEM RETORNO
• Não recebe nenhuma informação no momento de sua chamada
• Não repassa nenhum valor para quem a chamou (void)
#include <stdio.h>
void soma(){
int a, b, s; //variáveis locais
printf(“Digite dois números”);
scanf(“%d %d”, &a, &b);
s = a + b;
printf(“ a soma é %d”, s);
}
int main(){
soma();
return 0;
}
28. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Tipos de Funções
Δ FUNÇÕES COM PASSAGEM DE PARÂMETROS E SEM RETORNO
• Recebem valores no momento em que são chamadas
• Não devolvem nenhum valor para quem as chamou
#include <stdio.h>
void soma(int a, int b){
int s;//variável local
s = a + b;
printf(“ a soma é %d”, s);
}
int main(){
int a, b; //variáveis da main
printf(“Digite dois números”);
scanf(“%d %d”, &a, &b);
soma(a,b);
return 0;
}
29. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Tipos de Funções
Δ FUNÇÕES SEM PASSAGEM DE PARAMETROS E COM RETORNO
• Não recebem nenhum valor no momento em que são chamadas;
• Devolvem um valor para quem as chamou;
#include <stdio.h>
int soma(){
int s,a,b;//variáveis locais
printf(“Digite dois números”);
scanf(“%d %d”, &a, &b);
s = a + b;
return (s);
}
int main(){
int saida; //variável da main
saida=soma();
printf(“ a soma é %d”, saida);
return 0;
}
30. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Tipos de Funções
Δ FUNÇÕES COM PASSAGEM DE PARAMETROS E COM RETORNO
• Recebem valores no momento em que são chamadas;
• Devolvem um valor para quem as chamou;
#include <stdio.h>
int soma(int a, int b){
return (a+b);
}
int main(){
int a, b, saida; //variável local da main
printf('Digite dois números');
scanf(' %d %d ', &a, &b);
saida = soma(a, b); //chamada da função
printf(' a soma é: %d', s);
return (0);
}
31. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Tipos de Funções
Δ As funções devem ser escritas antes do MAIN;
Δ Se quiser escrevê-las após MAIN, deverá utilizar os protótipos de funções;
#include <stdio.h>
int soma();//protótipo da função
int main(){
int saida; //variável da main
saida=soma(a,b);
printf(“ a soma é %d”, saida);
return 0;
}
int soma(){
int s,a,b;//variáveis locais
printf(“Digite dois números”);
scanf(“%d %d”, &a, &b);
s = a + b;
return (s);
}
32. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Parâmetros
Δ PASSAGEM DE PARAMETROS POR VALOR
• Significa que a função trabalhará com cópias dos valores passados no
momento de sua chamada;
#include <stdio.h>
int soma_dobro(int a, int b);
int main(){
int x, y, res; //variável local do programa principal
printf('Digite dois números');
scanf(' %d %d ', &x, &y);
res = soma_dobro(x, y); //chamada da sub rotina
printf(' a soma do dobro dos números %d e %d =
%d', x, y, res);
return 0;
}
int soma_dobro(int a, int b){
int soma;
a = a * 2;
b = b * 2;
soma = a + b;
return soma;
}
Quando a função chega ao fim, as
variaveis criadas são completamente
destruídas e as alterações realizadas são
perdidas. X continuara valendo 5 e y
continuara valendo 3.
33. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Parâmetros
Δ PASSAGEM DE PARAMETROS POR REFERENCIA
• Significa que os parâmetros passados para a função correspondem a
endereços de memória ocupados por variáveis;
• Toda vez que for necessário acessar determinado valor, isso será feito por
meio de referência, apontamento ao seu endereço de memória;
#include <stdio.h>
int soma_dobro(int a, int b);
int main(){
int x, y, res; //variável local do programa principal
printf('Digite dois números');
scanf(' %d %d ', &x, &y);
res = soma_dobro(x, y); //chamada da sub rotina
printf(' a soma do dobro dos números %d e %d =
%d', x, y, res);
return 0;
}
int soma_dobro(int *a, int *b){
int soma;
a = a * 2;
b = b * 2;
soma = a + b;
return soma;
}
34. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Faça você mesmo:
Δ Crie uma função em linguagem C que receba 2 números e retorne o maior
valor;
Δ Crie uma função em linguagem C que receba 2 números e retorne o menor
valor;
Δ Crie uma função em linguagem C que receba 3 números e retorne o maior
valor, use a função da questão 1;
35. L
I
N
G
U
A
G
E
M
C
ALGORITMOS - 02/2015 – ÊNIO FILHO
Faça você mesmo
Δ Escrever um programa em C que lê um vetor RC(10) que é o gabarito de
uma avaliação, contendo os valores 1 (letra a), 2 (letra b), 3 (letra c), 4
(letra d) e 5 (letra e). Leia, em seguida, para cada aluno – são 10 alunos –,
o número de sua matrícula e um vetor Resposta R (10). Verifique, então
para cada aluno o número de acertos e escreva a nota do aluno, sabendo
que cada questão certa vale 1,0 ponto. Se o aluno tiver 10 acertos,
acrescentar a mensagem: "PARABENS".
36. DÚVIDAS?
Contatos:
E-mail: enio.filho@alfa.br
Skype: eniopvf
Twitter: eniopvf
Bibliografia:
• MANZANO, José Augusto N. G.; OLIVEIRA, Jayr Figueiredo de. Algoritmos: lógica para
desenvolvimento de programação de computadores. 18ª. ed. São Paulo: Érica, 2006. 236 p. ISBN
857194718;
• FORBELLONE, André Luiz Villar; EBERSPACHER, Henri Frederico. Lógica de programação: a construção
de algoritmos e estruturas de dados. 3ª. ed. São Paulo (SP): Pearson Prentice Hall, 2005. 195 p. ISBN
9788576050247;
• http://www.cprogressivo.net/
• http://www.inf.pucrs.br/~pinho/LaproI/
• http://linguagemc.com.br/