Você está na página 1de 4

Funes

Roteiro:
 Definio
 Retornando valores;
 Prottipos de Funes;
 Parmetros por valor;
 Parmetros por referncia;
 Vetores como parmetros;

1) Definio
Funes so as estruturas que permitem ao usurio separar seus programas em blocos.
Uma funo no C tem a seguinte forma geral:
tipo_de_retorno nome_da_funo (declarao_de_parmetros)
{
corpo_da_funo
}
O tipo-de-retorno o tipo de varivel que a funo vai retornar.
A declarao de parmetros uma lista com a seguinte forma geral:
tipo nome1, tipo nome2, ... , tipo nomeN
2) O comando return
O comando return tem a seguinte forma geral:
return valor_de_retorno; ou return;
Durante a execuo de uma funo, quando se chega a um comando return a funo
encerrada imediatamente e, se o valor de retorno informado, a funo retorna este
valor. importante lembrar que o valor de retorno fornecido deve ser compatvel com o
tipo de retorno declarado para a funo.
Uma funo pode possuir mais de uma chamada ao comando return. Isto se torna claro
quando pensamos que a funo terminada quando o programa chega primeira
declarao return.
#include <stdio.h>
int Square (int a)
{
return (a*a);
}
main ()
{
int num;
printf ("Entre com um numero: ");
scanf ("%d",&num);
num=Square(num);
printf ("\n\nO seu quadrado vale: %d\n",num);
}

#include <stdio.h>
int EPar (int a)
{
if (a%2) /* Verifica se a e divisivel por dois */
return 0; /* Retorna 0 se nao for divisivel */
else
return 1; /* Retorna 1 se for divisivel */
}
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");
}


importante notar que o retorno das funes pode ser aproveitado em


atribuies ou em comparaes

Mesmo que a funo retorne um valor, voc no obrigado a aproveitar este


valor.

3) Prottipo de funes
As funes devem ser declaradas antes de serem utilizadas. Nos exemplos acima
definimos as funes antes do bloco main. Porm se tivssemos definido as funes
abaixo do bloco main teramos que informar o prottipo da funo antes do ser efetivo
uso.
Em geral, adicionamos o prottipo das funes abaixo das diretivas de include. O
prottipo de uma funo nada mais do que seu tipo de retorno, nome, e lista de
parmetros. Um prottipo tem o seguinte formato:
tipo_de_retorno nome_da_funo (declarao_de_parmetros);
4) Passagem de Parmetros por Valor
Na linguagem C, quando chamamos uma funo os parmetros copiam os valores que
so passados para ela. Isso significa que os valores que os parmetros tm fora da
funo no so alterados. Esse tipo de chamada de funo denominado chamada por
valor.
No exemplo abaixo, o parmetro num da funo sqr() sofre alteraes dentro da
funo, mas a varivel num da funo main() permanece inalterada.
#include <stdio.h>
float sqr (float num);
void main (void)
{
float num,sq;
printf ("Entre com um numero: ");
scanf ("%f",&num);
sq=sqr(num);
printf ("\n\nO numero original e: %f\n",num);
printf ("O seu quadrado vale: %f\n",sq);
}
float sqr (float num)
{
num=num*num;
return num;
}

5) Passagem de Parmetros por Referncia no C


Outro tipo de passagem de parmetros para uma funo ocorre quando as alteraes
realizadas dentro da funo alteram os valores dos parmetros que foram passados para
a funo. Este tipo de chamada de funo tem o nome de chamada por referncia. Este
nome vem do fato de que, neste tipo de chamada, no se passa para a funo os valores
das variveis, mas sim suas referncias (a funo usa as referncias para alterar os
valores das variveis fora da funo).
O C s faz chamadas por valor. O C++ tem um recurso que permite ao programador
fazer chamadas por referncia. H entretanto, no C, um recurso de programao que
podemos usar para simular uma chamada por referncia. Quando queremos alterar as
variveis que so passadas para uma funo, ns podemos declarar seus parmetros
como sendo ponteiros. Os ponteiros so a "referncia" que precisamos para poder alterar
a varivel fora da funo. Alm disto, na chamada desse tipo de funo, temos que
colocar um & na frente das variveis que estamos passando para a funo.
#include <stdio.h>
void Swap (int *a,int *b);
void main (void)
{
int num1,num2;
num1=100;
num2=200;
Swap (&num1,&num2);
printf ("\n\nEles agora valem %d %d\n",num1,num2);
}
void Swap (int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
O que est acontecendo no exemplo acima que passamos para a funo Swap o
endereo das variveis num1 e num2. Estes endereos so copiados nos ponteiros a e b.
Atravs do operador * estamos acessando o contedo apontado pelos ponteiros e
modificando-o. O contedo apontado pelos ponteiros nada mais que os valores
armazenados em num1 e num2, que, portanto, esto sendo modificados.
O mesmo acontece com a funo scanf(). A funo scanf() usa chamada por referncia
porque ela precisa alterar as variveis que passamos para ela. Por isto passamos para a
funo o endereo da varivel a ser modificada.
6) Vetores como Argumentos de Funes
Quando vamos passar um vetor como argumento de uma funo, podemos declarar a
funo de trs maneiras equivalentes. Digamos que temos o seguinte vetor:
int v[50];
e que queiramos pass-la como argumento de uma funo func(). Podemos declarar
func() das trs maneiras seguintes:
void func (int v[50]);
void func (int v[]);
void func (int *v);
Nos trs casos, teremos dentro de func() um int* chamado v. Ao passarmos um vetor
para uma funo, na realidade estamos passando um ponteiro. Neste ponteiro
armazenado o endereo do primeiro elemento do vetor. Isto significa que no feita uma
cpia, elemento a elemento do vetor. Isto faz com que possamos alterar o valor deste
vetor dentro da funo (Passagem por Referncia!).
PARA VETORES S EXISTE PASSAGEM POR REFERNCIA!

Exerccios
1. Faa os exerccios 50, 54 e 55
2.Escreva uma funo que receba por referncia duas variveis inteiras (x e y) e troque o
valor de ambas (x recebe y e y recebe x). Antes e aps a chamada da funo,
imprimir x e y na tela.
3.Escreva um programa que solicite e armazene at 30 nomes completos de alunos com
40 caracteres cada (dever parar de pedir se o usurio digitar PARAR). O programa
dever fazer uso de 2 funes:

uma para solicitar o preenchimento da matriz de caracteres;

uma para exibir os nomes armazenados na tela.

Você também pode gostar