Linguagem C
Vetores, Matrizes e Funções
Revisão de Funções
• O que são “Funções”? (ou subprogramas ou subrotinas)
– São trechos de código fonte agrupados sob um
nome, que podem ser chamados sempre que for
necessário executar uma determinada ação
programada neste trecho;
• Como usar funções?
– Atribui-se um nome à uma seqüência de comandos,
e faz-se referência a este nome nos vários lugares do
programa onde a seqüência em questão deveria ser
repetida.
Revisão de Funções
• Por que usar funções?
– Evita escrita repetida de código (uma certa seqüência de comandos deve
ser repetida em vários lugares de um programa).
• Economiza o tempo gasto com o trabalho de copiar estas seqüências;
• Evitar a necessidade de mudar em múltiplos lugares caso deseje alterar o seu
funcionamento;
– Dividir grandes tarefas de computação em tarefas menores:
• Facilita o gerenciamento de grandes sistemas e
• Aumenta a confiabilidade dos mesmos.
• Resumo: Principais motivações para uso das funções!
– Evitar repetição de código
– Modularização
Revisão de Funções
• Função simples:
void sai_do_programa()
{
printf(“Digite qualquer tecla para sair do programa.\n”);
system(“pause”);
exit(0);
}
Chamada: sai_do_programa();
Revisão de Funções
• Função com parâmetro:
void imprime_quadrado(int n)
{
printf(“O quadrado de %d eh %d.\n”,n, n*n);
}
Chamada: imprime_quadrado(5);
Saída: O quadrado de 5 eh 25
Revisão de Funções
• Função com parâmetro e retorno:
int quadrado(int n)
{
int q;
q = n * n;
return(q);
}
Chamada: printf(“O quadrado de %d eh %d.\n”, 5, quadrado(5) );
Saída: O quadrado de 5 eh 25
Revisão de Funções
• Função com parâmetro e retorno:
int quadrado(int n)
{
int q;
q = n * n;
return(q);
}
Chamada:
int i;
for(i=1;i<5;i++)
printf(“O quadrado de %d eh %d.\n”, 5, quadrado(5) );
Saída:
O quadrado de 1 eh 1
O quadrado de 2 eh 4
O quadrado de 3 eh 9
O quadrado de 4 eh 16
Revisão de Funções
• Função com diversos parâmetros e retorno:
int potencia(int n, int p)
{
int i,resultado=1;
for(i=1;i<=p;i++)
resultado = resultado * n;
return(resultado);
}
Chamada: printf(“%d elevado a %d vale %d.\n”,2,4,potencia(2,4));
Saída: 2 elevado a 4 vale 16
Revisão de Funções
• Função com diversos parâmetros e retorno:
int potencia(int n, int p)
{
int i,resultado=1;
for(i=1;i<=p;i++)
resultado = resultado * n;
return(resultado);
}
Chamada:
int i;
for(i=1;i<5;i++)
printf(“%d elevado a %d vale %d.\n”,2,i,potencia(2,i));
Saída:
2 elevado a 1 vale 1
2 elevado a 2 vale 4
2 elevado a 3 vale 8
2 elevado a 4 vale 16
Revisão de Funções
• Posicionamento das funções no programa C:
– Sempre antes da função main()
– Caso queira colocar as funções após a função main(), é preciso
colocar um “protótipo” da função antes da função main()!!!!
– (Mas o que é um protótipo de função?.....)
– …é a descrição da função!
– Ex: função “sai_do_programa”
void sai_do_programa()
{
printf(“Digite qualquer tecla para sair do
programa.\n”);
system(“pause”);
exit(0);
}
– Protótipo da função “sai_do_programa”: void sai_do_programa();
Revisão de Funções
• Posicionamento das funções no programa C:
Ex2: função “quadrado”
int quadrado(int n)
{
int q;
q = n * n;
return(q);
}
– Protótipo da função “quadrado”:
int quadrado(int n);
Revisão de Vetores
• Vetores são Estruturas de Dados Homegêneas, isto é, capazes
de armazenar uma quantidade pré-definida de valores do mesmo
tipo
• Necessitam de apenas um índice de acesso.
• Declaração:
tipo nomedovetor[DimMax];
Onde:
– tipo:um dos tipos primitivos de dados em C (char, int, float, double)
– nomedovetor: segue as mesmas regras das variáveis básicas
– DimMax: define o número máximo de elementos do vetor
pode ser uma expressão constante inteira
Revisão de Vetores
#include <stdio.h>
#include <stdlib.h>
#define NUM_ALUNOS 3
int main( )
{
float notas [NUM_ALUNOS];
float media_turma = 0.0;
int i;
for ( i = 0; i < NUM_ALUNOS; i++ )
{
printf ("Digite a nota do %d o. aluno: ", i+1);
scanf ("%f", &notas[i]);
}
for ( i = 0; i < NUM_ALUNOS; i++ )
{
media_turma += notas[i];
}
media_turma = media_turma / NUM_ALUNOS ;
printf ("A media da turma eh %.2f \n", media_turma);
system ("Pause");
return 0;
}
Vetores e Funções
#include <stdio.h>
#include <stdlib.h>
#define NUM_ALUNOS 3
int main( )
{
float notas [NUM_ALUNOS];
float media_turma;
int i;
float media ( float notas[], int n )
{
int i = 0;
float m = 0.0;
for ( i = 0; i < NUM_ALUNOS; i++ )
{
printf ("Digite a nota do %d o. aluno: ", i+1);
scanf ("%f", &notas[i]);
}
media_turma = media ( notas, NUM_ALUNOS );
for ( i = 0; i < n; i++ )
{
m = m + notas[i] ;
}
m = m / n;
return m;
}
printf ("A media da turma eh %.2f \n", media_turma);
system ("Pause");
return 0;
}
Vetores e Funções
• E para calcular o número de
alunos com notas acima da
média?
• A função de cálculo de
média pode ser a mesma já
utilizada.....
• E agora criamos a função de
cálculo da quantidade de
alunos acima da média!
#include <stdio.h>
#include <stdlib.h>
#define NUM_ALUNOS 3
float media ( float notas[], int n )
{
int i = 0;
float m = 0.0;
for ( i = 0; i < n; i++ )
{
m = m + notas[i] ;
}
m = m / n;
return m;
}
Vetores e Funções
int conta_alunos_acima_da_media ( float notas[], int n, float media)
{
int i, conta = 0;
for ( i = 0; i < n; i++ )
{
if (notas[i] > media)
{
conta += 1;
}
}
return conta;
}
Vetores e Funções
int main( )
{
float notas [NUM_ALUNOS];
float media_turma;
int i, melhores_alunos;
for ( i = 0; i < NUM_ALUNOS; i++ )
{
printf ("Digite a nota do %d o. aluno: ", i+1);
scanf ("%f", &notas[i]);
}
media_turma = media ( notas, NUM_ALUNOS );
printf ("A media da turma eh %.2f \n", media_turma);
melhores_alunos=conta_alunos_acima_da_ media(notas, NUM_ALUNOS, media_turma);
printf (“E o numero de alunos com nota acima da media foi: %d .\n”, melhores_alunos);
system ("Pause");
return 0;
}
Vetores e Funções
• Desafio 1: Alterar o programa anterior para:
– Receber duas notas bimestrais de cada aluno;
– Verificar se cada nota está entre 0.0 e 10.0;
– Calcular a média de cada aluno (e armazenar o valor
em um vetor);
– Modificar o programa para apresentar os seguintes
resultados:
• média geral da turma;
• número de alunos com média individual acima da média da
turma.
Matrizes e Funções
• Será que é possível “passar matrizes” por
parâmetro?
• Se sim, como?
Matrizes e Funções
#include <stdio.h>
#include <stdlib.h>
#define NUM_ALUNOS 3
int main()
{
float notas [NUM_ALUNOS][2], media_turma;
int i;
for ( i = 0; i < NUM_ALUNOS; i++ )
{
printf ("Digite a 1a. nota do %d o. aluno \n: ", i+1);
scanf ("%f", &notas[i][0]);
printf ("Digite a 2a. nota do %d o. aluno \n: ", i+1);
scanf ("%f", &notas[i][1]);
}
media_turma = media_geral ( notas, NUM_ALUNOS );
printf ( "A media da turma eh %.2f \n", media_turma);
system ("Pause");
return 0;
}
Matrizes e Funções
float media_geral ( float notas[][2], int n )
{
int i = 0;
float m = 0.0;
float notaaluno = 0.0;
for ( i = 0; i < n; i++ )
{
notaaluno = ( notas[i][0] + notas[i][1] )/2;
m = m + notaaluno;
}
m = m / n;
return m;
}
Exercício Complementar:
•
•
Elabore um programa que manipule os dados para uma sala de 40 alunos.
O programa deve receber como entrada (via leitura de teclado):
-
Os nomes dos alunos (máximo 50 caracteres).
-
As duas notas parciais.
– O programa deve calcular e imprimir, numa mesma linha, para cada aluno:
-
O nome e a média final.
– E também deve apresentar:
-
A maior média da turma, e a menor média da turma.
-
A quantidade de alunos aprovados, reprovados e em exame.
-
Uma listagem com o nome dos alunos que irão para a final.
Download

Slides_Funções e Parâmetros