Universidade Federal do Espírito Santo
Programação II
Funções
Professora: Norminda Luiza
Funções
O programa abaixo utiliza três funções: A função main( ), a função produto( )
e a função printf( ) que já está definida na biblioteca padrão de entrada e
saída.
#include <stdio.h>
float produto(float fator1, float fator2){
return (fator1*fator2);
}
main ( ){
float saida;
float coeficiente = 14.2;
saida = produto(coeficiente, 67.23);
printf ("Produto = %f\n", saida);
}
“warning” (cuidado)
Funções
Uma função é um bloco de código que funciona como uma unidade
autônoma para cumprir uma tarefa particular no código do programa.
Funções são as estruturas que permitem ao programador separar seus
programas em blocos.
• Podem ser utilizadas diversas vezes no código do programa
• Geralmente consistem de chamadas a outras pequenas funções.
• São concisas, permitindo que o programa fique mais legível, mais bem
estruturado.
Modelagem de função :
tipo_de_retorno nome_da_função (lista_de_argumentos) {
código_da_função
}
O nome_da_função é qualquer nome que tenha significado.
A lista_de_argumentos contém um número finito qualquer de argumentos
separados por vírgulas. Cada argumento é dado indicando o tipo do argumento e o
nome dele.
Tipo de retorno, que é o tipo do valor retornado: void, char, int, long, double.
Funções
O comando return
Para retornar um valor de uma função utiliza-se o comando return.
Sintaxe:
return valor_de_retorno; ou simplesmente,
return;
• O valor de retorno fornecido tem que ser, pelo menos, compatível com o tipo
de retorno declarado para a função.
• Uma função pode ter mais de uma declaração return, mas a função é
terminada quando o programa chega à primeira declaração return.
Exemplo:
Faça um programa que leia um número inteiro e verifique se é par ou ímpar
(para isso, use uma função).
Funções
#include <stdio.h>
int EPar (int a) {
if (a%2)
// Verifica se a e divisivel por dois
return 0;
else
return 1;
}
main ( ){
int num;
printf ("Entre com numero: ");
scanf ("%d",&num);
if (EPar(num))
printf ("\n\nO numero e par.\n");
else
printf ("\n\nO numero e impar.\n");
system("pause");
}
int num;
if (num!=0) ....
if (num==0) ....
equivale a
int num;
if (num) ....
if (!num) ....
Funções
Protótipos de funções
Protótipos são apenas declarações de funções.
Sintaxe:
tipo_de_retorno nome_da_função (declaração_de_argumentos);
• Muitas vezes o programa está espalhado por vários arquivos. Ou seja, são usadas
funções em um arquivo que serão compiladas em outro arquivo.
#include <stdio.h>
int EPar (int a); // protótipo da função
main ( ){
int num;
printf ("Entre com numero: ");
scanf ("%d",&num);
if (EPar(num))
printf ("\n\nO numero e par.\n");
else
printf ("\n\nO numero e impar.\n");
system("pause");
}
int EPar (int a) {
if (a%2)
// Verifica se a e
divisivel por dois
return 0;
else
return 1;
}
Funções
Tipo Void
Void quer dizer vazio. O tipo void permite fazer funções que não
retornam nada e funções que não têm parâmetros! O protótipo de uma função
que não retorna nada será:
void nome_da_função (declaração_de_parâmetros);
Neste caso, não existe valor de retorno na declaração return, portanto ele não é
necessário na função.
Para funções que não têm parâmetros:
tipo_de_retorno nome_da_função (void);
Se a função não tem parâmetros e não retornam nada:
void nome_da_função (void);
Funções
#include <stdio.h>
void Mensagem (void);
main (){
Mensagem();
printf ("\tDiga de novo:\n");
Mensagem();
}
void Mensagem (void) {
printf ("Ola! Eu estou vivo.\n");
}
O compilador acha que a função main() deve retornar um inteiro quando nada é
especificado. Isto pode ser interessante quando se precisa que o sistema operacional
receba um valor de retorno da função main( ).
Convenção: se o programa retornar zero, significa que ele terminou normalmente, e, se
o programa retornar um valor diferente de zero, significa que o programa teve um
término anormal.
Funções
Funções em arquivo cabeçalho.
Não possuem os códigos completos das funções. Eles só contêm protótipos de
funções, o que é suficiente.
O compilador lê estes protótipos e gera o código correto. O corpo das funções
cujos protótipos estão no arquivo-cabeçalho, no caso das funções do próprio C,
já estão compiladas e normalmente são incluídas no programa no instante da
"linkagem".
Linkagem: é o instante em que todas as referências a funções cujos códigos não
estão nos atuais arquivos fontes são resolvidas, buscando este código nos
arquivos de bibliotecas. É possível criar e incluir arquivos cabeçalho definidos
pelo usuário.
Funções
Parâmetros Formais
Quando uma função utiliza argumentos, então ela deve declarar as variáveis
que aceitaram os valores dos argumentos, sendo essas variáveis os parâmetros
formais.
#include <stdio.h>
int elevado(int base, int expoente)
int elevado();
main(){
int b,e;
printf("Digite a base e expoente x,y : ");
scanf("%d,%d",&b,&e);
printf("valor=%d\n",elevado(b,e));
system("pause");
return 0;
}
int elevado(base,expoente)
int base,expoente;
{
int i;
if (expoente<0) return;
i=1;
for (;expoente;expoente--){
i=base*i;
}
return i;
}
Funções
1. Chamada por Valor
O valor de um argumento é copiado para o parâmetro formal da função,
portanto as alterações no processamento não alteram as variáveis.
Todos os exemplos vistos até agora.
2. Chamada por Referência
Permite a alteração do valor de uma variável. Para isso é necessário a
passagem do endereço do argumento para a função.
Ex:
void troca();
main() {
int x=10,y=20;
troca(&x,&y);
printf("x=%d y=%d\n",x,y);
}
void troca(a,b)
int *a,*b;
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
Funções
Classe de Variáveis
Uma função pode chamar outras funções, mas o código que compreende o
corpo de uma função (bloco entre {}) está escondido do resto do programa, ele
não pode afetar nem ser afetado por outras partes do programa, a não ser que
o código use variáveis globais. Como já vimos anteriormente, existem três
classes básicas de variáveis: locais, estáticas e globais.
1. Variáveis locais
As variáveis que são declaradas dentro de uma função são chamadas de locais.
Na realidade toda variável declarada entre um bloco { } podem ser referenciadas
apenas dentro deste bloco. Elas existem apenas durante a execução do bloco de
código no qual estão declaradas.
Todos os exemplos usados até aqui.
2. Variáveis Globais
São conhecidas por todo programa e podem ser usadas em qualquer parte do
código. Permanecem com seu valor durante toda execução do programa. Deve ser
declarada fora de qualquer função e até mesmo antes da declaração da função main.
Fica numa região fixa da memória própria para esse fim.
Funções
#include <stdio.h>
Exemplo de variáveis globais e locais
void func1(),func2();
int cont;
main() {
cont=100;
func1();
}
void func1(){
int temp;
temp=cont;
func2();
printf("cont é = %d",cont);
}
void func2(){
int cont;
for(cont=1;cont<10;cont++) printf(".");
}
3. Variáveis Estáticas
Funcionam de forma parecida com as variáveis globais, conservando o valor
durante a execução de diferentes funções do programa. No entanto só são
reconhecidas na função onde estão declaradas.
Download

Aula 14_C_Funções