Вы находитесь на странице: 1из 17

Mdulo 3

Programao Estruturada

Funes - Parmetros
A comunicao com uma funo faz-se atravs dos argumentos que
lhe so enviados e dos parmetros presentes na funo que os
recebem.
O nmero de parmetros de uma funo pode ser 0, 1, 2,
dependendo apenas das necessidades do programador.
Qualquer tipo de dados pode ser enviado como parmetro para uma
funo, mesmo tipo de dados que venham a ser definidos pelo
programador.
Os parmetros de uma funo so separados por vrgula e
absolutamente necessrio que, para cada um deles, seja indicado o
seu tipo.
Exemplo:
nome_funo (int x, char y, float xpto)
nome_funo (int x, int y, int z)

Funes - Argumentos
O nmero de argumentos enviados para uma funo deve ser igual ao
nmero de parmetros existente no cabealho da funo. O tipo dos
argumentos deve igualmente corresponder, parmetro a parmetro.
Exemplo:
nome_funo (char ch, int n, float x) // Parmetros
{

}
main()
{

nome_funo (A, 123, 23.8);


// Argumentos

}
Qualquer expresso vlida pode ser enviada como argumento para uma funo.

Exemplo
#include <stdio.h>
linha (int num, char ch)
{
int i;
for (i=1 ; i<=num ; i++)
putchar(ch);
putchar('\n');
}
main()
{
linha(3,+);
linha(5,*);
linha(7,#);
linha(5,*);
linha(3,+);
}

Corpo de uma funo

Dentro do corpo de uma funo pode ser escrita qualquer instruo ou


conjuntos de instrues da linguagem C.

Em C no se podem definir funes dentro de funes.


Sempre que uma funo invocada pelo programa, o corpo da funo
executado, instruo a instruo, at terminar o corpo da funo ou
at encontrar a instruo return, voltando imediatamente ao programa
em que foi invocada.
O nmero de instrues que pode estar presente dentro de uma
funo no tem qualquer limite. Deve no entanto ser relativamente
pequeno e ser responsvel por realizar uma nica tarefa.

Instruo return

A instruo return permite terminar a execuo de uma funo e


voltar ao programa que a invocou.

A execuo da instruo return na funo main, faz com que o


programa termine.
Exemplo:
//Funo que calcula a soma de dois nmeros inteiros.
int soma (int x, int y)
{
int res;
res = x + y;
return res; // res contm o valor a retornar
}

Funes que devolvem um valor

possvel que uma funo seja responsvel por realizar uma


determinada tarefa e que, uma vez terminada essa tarefa, devolva um
nico resultado.
Esse resultado poder ser armazenado numa varivel ou aproveitado
por qualquer instruo.
A devoluo de um resultado feita atravs da instruo return
seguida do valor a devolver.
A seguir instruo return pode ser colocada qualquer expresso
vlida em C.

Funes que devolvem um valor

Uma funo pode conter vrias instrues return. No entanto, apenas


uma instruo return executada na funo.
Exemplo:
// Funo que devolve o maior nmero de dois nmeros inteiros
introduzidos pelo utilizador.
#include <stdio.h>
int max (int x, int y)
{
if (x > y)
return x;
else
if (y>x)
return y;
}

Variveis Locais

As variveis declaradas dentro de uma funo, s so conhecidas


dentro dessa funo. So por isso denominadas variveis locais.
A declarao de variveis dentro de uma funo deve ser realizada
antes de qualquer instruo.

nome_funo ()
{
declarao de variveis
instrues
}

Essas variveis s podem ser utilizadas dentro da prpria funo.

Variveis Locais

Se uma mesma varivel for declarada em duas funes distintas, no


h qualquer tipo de problema, pois o compilador sabe qual utilizar em
cada uma delas.
Depois de terminada a execuo de uma determinada funo, todas as
suas variveis locais so destrudas.
Sempre que possvel recorra a variveis locais, evitando assim os
efeitos colaterais que ocorrem quando se utilizam variveis globais.

Variveis Locais
#include <stdio.h>
int i; //VARIVEL GLOBAL

int linha (int x)


{
int i; //VARIVEL LOCAL
for(i=1;i<=x;i++)
printf("#");
printf("\n");
}
main()
{
int num; //VARIVEL LOCAL
printf("Introduza um numero inteiro\n");
scanf("%d",&num);
linha(num);
system("pause");
}

Funes e Procedimentos

Em C, apenas existem funes, enquanto noutras linguagens existem


dois

tipos

distintos

de

subprogramas

as

funes

os

procedimentos.

Qual ento a diferena entre uma funo e um procedimento?


Uma funo tem sempre um tipo e um valor de retorno associados
enquanto um procedimento no devolve qualquer valor.

Funes e Procedimentos

Exemplos:
Funo
int max (int x, int y)
// verifica qual o maior dos inteiros e devolve um deles.

Procedimento
linha()
// coloca no ecr uma linha de asteriscos e termina em seguida sem
devolver qualquer valor.

Funes e Procedimentos
A forma de invocar funes e procedimentos tambm diferente.

No tendo um valor de retorno, um procedimento invocado como se


tratasse de uma instruo simples.
Exemplo: linha()
Quanto s funes, estas podem ser invocadas de trs formas:
1. Dentro de uma atribuio, para armazenar o valor dentro de uma
varivel.
Exemplo: x = soma(23,num);
2. Dentro de uma funo, em que o valor de retorno aproveitado
como parmetro para outra funo.
Exemplo: printf(%d,dobro(3));
3. Tal como se invoca um procedimento, perdendo-se neste caso, o
valor de retorno.
Exemplo: dobro(6);

O tipo de dados void


Sempre que uma funo no devolve qualquer valor, deve ser
declarada como se devolvesse o tipo void.

A palavra reservada void indica ausncia de tipo e normalmente


traduzida por nada ou vazio.
A uma funo que retorna void chama-se normalmente um
procedimento.
Exemplo:
void linha (int num)
{
int i;
for (i=1 ; i<=num ; i++)
putchar('*');
}

Onde colocar as funes

As funes podem ser colocadas em qualquer local de um ficheiro,


antes ou depois do main, antes ou depois de serem invocadas.

no entanto aconselhvel colocar os prottipos de todas as funes


(cabealhos das funes seguidos de ponto e vrgula) imediatamente
antes do cdigo da primeira funo presente no ficheiro, a fim de evitar

eventuais erros de compilao.

Onde colocar as funes


#include <stdio.h>

#include <stdio.h>

void linha (int num)


{
int i;
for (i=1 ; i<=num ; i++)
putchar('*');
putchar('\n');
}

void linha (int num);

main()
{
linha(3);
linha(5);
linha(7);
linha(5);
linha(3);
}

main()
{
linha(3);
linha(5);
linha(7);
linha(5);
linha(3);
system("pause");
}
void linha (int num)
{
int i;
for (i=1 ; i<=num ; i++)
putchar('*');
putchar('\n');
}

Вам также может понравиться