Sie sind auf Seite 1von 9

9.Funesdefinidaspelousurio.

topo
Sintaxe:tiponome_da_funcao(lista_de_parmetros){
corpodafuno
}

tipodefineotipodevalorqueafunovairetornarfunoquerealizaachamada.

Pararetornarumvalor(aolocalondeafunofoichamada)utilizaseo
comandoreturn.Estecomandotambmindicaoencerramentodaexecuoda
funo.Ovalorretornadodevesercompatvelcomotipodafuno.Seotipo
nodefinidoconsideradootipointcomoretornodafuno.

Seumafunonoretornarnenhumvaloreladeveserdefinidacomotipovoide
nestecasoocomandoreturnnonecessrio.

nome_da_funcaodefineonome(ortulo)dafuno.atravsdestenomequea
funochamada.

lista_de_parmetrosumalista,separadaporvrgula,contendoadeclaraodas
variveis(parmetrosouparmetrosformais)querecebemosargumentos(parmetros
reaisvaloresusadosparachamarafuno)quandoafunochamada.
Sintaxe:tipo1identificador1,tipo2identificador2,...,tipoNidentificadorN)

Umafunopodenopossuirparmetros,ouseja,noreceberargumentos.Neste
casoutilizaseadeclaraodotipovoid(void).

Definiodefuno
Podemosdefinirumafunonnoinciodeumprograma,antesdafunoprincipalouapsa
funoprincipal.
Seadefiniodeumafunonofeitanoinciodoprograma,entonecessriofazera
declaraodafunoparaqueocompiladorareconheaquandoestaforchamadadentroda
funoprincipaloudentrooutrafuno.Adeclaraodafunoouprottipodafuno,consiste
docabealhodafunoseguidodopontoevrgula.
ATENO:
Todafunodeveserdeclaradaantesdeserusada.
Quandoumafunoestdefinidanoinciodoprogramaadeclaraoestimplcitana
definio.
Exemplosdefunes:

1)Funosoma
intsoma(inta,intb){
ints
s=a+b
returns
}
Funodotipoint,comoidentificadorsoma,recebecomparmetrodoisnumeros
inteiros,declaraumterceirointeiroquereceberaasomadosvalorespassadoscomo
argumento,emseguidautilizaapalavrareservadareturnretornandoumvalorinteiro.
2)Funomensagem
voidmensagem(void){
printf("Entrecomdoisvaloresinteiros\n")
return//naoenecessrio
}
Funodotipovoidesemargumento,apenasimprimeamensagemdefinidaemseu
corpo.Observequeousodereturnpuramenteesttico,umavezqueafunofoi
declaradavoidnosefaznecessrioousoderetorno.
3)Funolendo_parcela
intlendo_parcela(void){
inta
scanf("%d",&a)
returna
}
Funoqueretornauminteiro,masnorecebeparmetroalgum,solicitaviadecladoa
digitaodeuminteiroeemseguidaretornaparaoprogramaestevalordigitado.
4)Funoquad_soma
voidquad_soma(inta)
{
printf("quadradodasoma=%f\n\n",pow(a,2))
}
Funosemretorno,recebeumnumerointeiroeinternamenteimprimeseuquadrado.
Observequeposaexecuodafunoovalorpassadocomoargumentonoser
alteradonoprogramaprincipal.

NOTA.:Todasasvariveiscriadasdentroumafunosolocaisfunoqueasutiliza,uma
vezterminadasuaexecuoestasvariveisnosoreconhecidaspeloprogramaprincipal.
Mesmoemfunocomretorno,poisoretornorefernciaaumcontudo,sendonecessrioa
declaraodeoutravarivelnoprogramaprincipaldomesmotipodoretornodafunopara
receberestevalor.
FormageraldeumprogramaemCEscopodefunes
comandosdoprprocessador
declaraodevariveisglobais
declaraodefunes(prottiposdefunes)
main()
{
declaraeslocais
comandos
return0
}//Definiodefunes
tipofuno1(listadeparmetros)
{
declaraeslocais
comandos
[returnexpresso]
}...
tipofunoN(listadeparmetros)
{
declaraeslocais
comandos
[returnexpresso]
}
Oprogramaabaixoimplementaas4funesestudadasacima
Programa22.Funesdefinidaspelousario
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
/*declaracaodefuncoes*/
voidmensagem(void)
intlendo_parcela(void)
intsoma(inta,intb)
voidquad_soma(intx)

/*funcaoprincipalmain*/
intmain(){
/*declaracaodevariaveislocais*/
inta,b,total
/*chamadasdefuno*/
mensagem()
a=lendo_parcela()
b=lendo_parcela()
/*chamadaporvalor*/
total=soma(a,b)
printf("soma=%d\n",total)
/*chamadaporvalor*/
quad_soma(total)
return0
system("pause")
}//fimdamain
/*definicaodefuncoes*/
voidmensagem(void){
printf("Entrecomdoisvaloresinteiros\n")
}
intlendo_parcela(void){
intp
scanf("%d",&p)
returnp
}
intsoma(inta,intb){
ints
s=a+b
returns
}
voidquad_soma(intx){
printf("quadradodasoma=%.1f\n\n",pow(x,2))
}//fimdoprograma

10.ArranjosefunesPassagemdearranjospara
funes.
10.1.Funescomarranjounidimensional:
topo
Parapassarumvetorcomoargumentodeumafuno,podesedeclararafunodetrs
modosequivalentes:
voidfun(intvetor[10])
voidfun(intvetor[])
voidfun(int*vetor)
Noterceirocasotemosumponteirodotipointeirochamadovetor.Nesseponteiro
armazenadooendereodoprimeiroelementodoarranjounidimensionalquepassadopor
referncia.
Cliqueaquiparasabermaissobreponteiros.
Exemplo1:Funoqueimprimeumvetor
voidimprime_Vetor(intvetor[N]){
inti
for(i=0i<Ni++)
printf("%d\t",vetor[i])
}
Exemplo2:Funoqueretorna1sexpertenceaumvetore0casocontrrio
intverifica_x(intvetor[N],intx){
inti,teste=0
for(i=0i<Ni++){

if(vetor[i]==x){

teste=1
}
}
returnteste
}
Exemplo3:Funoqueretornaomaiorelementodeumvetor
intMax(intvetor[],intn){

inti,temp
temp=vetor[0]
for(i=1i<ni++){

if(temp<vetor[i])

temp=vetor[i]
}
returntemp
}
Oprogramaabaixoimplementaasfunesdemostradasacima
Programa23.Funesdefinidaspelousurio
#include<stdio.h>
#include<stdlib.h>
#defineN4//declaraodeconstante
//declaraodasfunes
voidimprime_Vetor(intvetor[N])//ou(intvetor[])ou(int*vet)
intMax(intvetor[],intn)
intverifica_x(intvetor[N],intx)
intmain(){//funoprincipalmain

intvet[N]={10,20,30,40},maior,valor,resultado
maior=Max(vet,N)//chamadadefuno
printf("Entrecomuminteiromenorque%d:",maior+1)
scanf("%d",&valor)
resultado=verifica_x(vet,valor)//chamadadefuno
if(resultado)
printf("Onumerodigitadopertenceaovetor!\n")
elseprintf("Onumerodigitadonopertenceaovetor!\n")
printf("Oselementosdovetorso:\n")
imprime_Vetor(vet)//chamadadefuno
printf("\n")
system("pause")
return(0)
}
/*Exemplo1:Funoqueimprimeumvetor*/
voidimprime_Vetor(intvetor[N]){
inti

for(i=0i<Ni++)
printf("%d\t",vetor[i])
}
/*Exemplo2:Funoqueretorna1sexpertenceaovetore0casocontrrio*/
intverifica_x(intvetor[N],intx){
inti,teste=0
for(i=0i<Ni++){
if(vetor[i]==x)
teste=1
}
returnteste
}
/*Exemplo3:Funoqueretornaomaiorelementodeumvetor*/
intMax(intvetor[],intn){
inti,temp
temp=vetor[0]
for(i=1i<ni++){
if(temp<vetor[i])
temp=vetor[i]
}
returntemp
}

10.2.Funescomarranjobidimensional
topo
Parapassarumamatrizbidimensionalcomoargumentodeumafuno,podesedeclarara
funodedoismodosequivalentes:
voidfun(intmatriz[2][10])
voidfun(intmatriz[][10])
Nestescasosobservequepelomenosocomprimentodecadalinha(segundadimenso)
precisaserdeclaradoparaqueamatrizpossaserindexadacorretamente.
Exemplo1:Funoqueimprimeumamatriz
voidimprime_matriz(inta[][N]){
inti,j
for(i=0i<Ni++){

for(j=0j<Nj++){

printf("%d\t",a[i][j])

}
printf("\n")
}
}
Exemplo2:Funoquecarregaumamatrizcomasomadeduasoutrasmatrizes
voidcarrega_c(inta[][N],intb[][N],intc[][N]){
inti,j
for(i=0i<Ni++){

for(j=0j<Nj++){

c[i][j]=a[i][j]+b[i][j]
}
}

Oprogramaabaixoimplementaasfunesdemostradasacima
Programa24.Funesdefinidaspelousurio
#include<stdio.h>
#include<stdlib.h>
#defineN3//declaraodeconstante
//declaraodasfunes
voidimprime_matriz(inta[][N])
voidcarrega_c(inta[][N],intb[][N],intc[][N])
intmain(){//funoprincipalmain
inti,j
intmatriz_a[N][N],matriz_b[N][N],matriz_c[N][N]
//Carregaasmatrizes
for(i=0i<Ni++){
for(j=0j<Nj++){
matriz_a[i][j]=i+1
matriz_b[i][j]=j+1
}
}
//Mostraasmatrizes"matriz_a"e"matriz_b"
printf("\nmatriz_a\n\n")
imprime_matriz(matriz_a)//chamadadefuno

printf("\nmatriz_b\n\n")
imprime_matriz(matriz_b)//chamadadefuno
//carregamatriz"matriz_c"
carrega_c(matriz_a,matriz_b,matriz_c)//chamadadefuno
//Mostraa"matriz_c"
printf("\nmatriz_c\n\n")
imprime_matriz(matriz_c)//chamadadefuno
printf("\n")
system("pause")
return(0)
}
/*Exemplo1:Funoqueimprimeumamatriz*/
voidimprime_matriz(inta[][N]){
inti,j
for(i=0i<Ni++){
for(j=0j<Nj++){
printf("%d\t",a[i][j])
}
printf("\n")
}
}
/*Exemplo2:Funoquecarregaumamatrizcomoresultadodasomadeduas
outrasmatrizes*/
voidcarrega_c(inta[][N],intb[][N],intc[][N]){
inti,j
for(i=0i<Ni++){
for(j=0j<Nj++){
c[i][j]=a[i][j]+b[i][j]
}
}
}