Escolar Documentos
Profissional Documentos
Cultura Documentos
5 - Funções
Fold
Table of Contents
5.1 Funções Sem Passagem de Parâmetros e Sem Retorno
Exemplo 1
Chamada de função
Exemplo 2
Protótipo da Função
Exemplo 3
5.2 Funções Com Passagem de Parâmetros e Sem Retorno
Exemplo 1
Exemplo 2
5.3 Funções Sem Passagem de Parâmetros e Com Retorno
Exemplo
5.4 Funções Com Passagem de Parâmetros e Com Retorno
Exemplo
5.5 Passagem de Parâmetros Por Valor e Por Referência
Passagem de Parâmetro Por Valor
Passagem de Parâmetro Por Referência
Exemplo 1
Exemplo 2
5.6 Funções Predefinidas
Exemplo 1
Exemplo 2
5.7 Exercícios
A ativação (ou chamada) de um módulo é o meio pelo qual é solicitado ao programa que
desvie o fluxo de controle de execução para o módulo, execute suas instruções e depois
volte à instrução seguinte à da chamada do módulo.
Em C/C++ a modularização é feita através das funções. As funções são módulos que
podem receber valores externos, chamados parâmetros ou argumentos, e também podem
retornar um valor produzido por ela chamado retorno.
Como descrito no capítulo 1.3, um programa C/C++ consiste na definição de uma ou mais
funções, e que todo programa C/C++ deve possuir uma função chamada main. Abaixo
temos a sintaxe de como definir uma função.
http://bac004.wikidot.com/printer--friendly//funcoes 4/5/2011
BAC004: 5 - Funções Page 2 of 14
2 {
3 // instruções;
4 }
5
Neste capítulo será demonstrado como definir outras funções, além da função principal
main, e como utilizar algumas funções predefinidas na biblioteca cmath do C/C++.
Esta função é simples pois não recebe nenhuma informação no momento de sua chamada
(parâmetros) e também não retorna nenhum valor para quem a chamou. A forma de
identificar que a função não retorna nenhuma informação é utilizando o tipo de retorno como
void.
Exemplo 1
1 void imprime( ) ?
2 {
3 cout<<”Teste de funcao”;
4 }
5
Chamada de função
A chamada de uma função é o meio pelo qual o programa é solicitado que desvie o controle
e passe para a definição da função, execute suas instruções e depois volte à instrução
seguinte a da chamada.
Chama-se uma função pelo seu nome seguido de abertura de parênteses, nenhum ou mais
parâmetros sem os tipos, e o fechamento de parêntese. No exemplo abaixo, na linha 17,
chama-se a função escrevendo-se soma().
Exemplo 2
Considere o seguinte programa que chama uma função soma que lê dois números digitados
pelo usuário e imprime a sua soma.
http://bac004.wikidot.com/printer--friendly//funcoes 4/5/2011
BAC004: 5 - Funções Page 3 of 14
1 #include<iostream> ?
No exemplo, o programa começa sua execução na função main linha 15. Posteriormente,
executa a linha 17 que possui uma chamada à função soma. Neste ponto, o fluxo de
execução é desviado para a linha 4. Depois são executadas as linhas 4 até 12. Quando a
execução chega na linha 13 é identificado o final da função e o fluxo de execução retorna
para a linha 16, exatamente abaixo de onde ocorreu o desvio para a função soma. Em
seguida é executada a linha 18 que retorna 0 para o sistema operacional.
http://bac004.wikidot.com/printer--friendly//funcoes 4/5/2011
BAC004: 5 - Funções Page 4 of 14
No teste de mesa acima, cada função possui sua própria tabela, representando exatamente o
escopo das variáveis, ou seja, o local onde cada variável existe durante o processo de
execução.
Para simplificar a construção da tabela, utiliza-se " (aspas duplas) ou .. (dois pontos) nas
linhas subsequentes quando não houver alteração dos valores das variáveis, desta forma é
possível saber o ponto exato onde elas foram modificadas.
Protótipo da Função
Note que no exemplo acima o código da função foi definido antes da função main. Em
C/C++ também é possível escrever funções depois da função main, desde que se defina o
protótipo da função antes da função main.
O protótipo da função tem a mesma forma de definição da função, exceto por terminar com
ponto-e-vírgula após o fechamento do parêntese. No exemplo abaixo, na linha 4, é
demonstrado o uso do protótipo.
Exemplo 3
1 #include<iostream> ?
2 using namespace std;
3
4 void soma(); //protótipo da função
5
6 int main()
7 {
8 soma();
9 return 0;
10 }
11
12 void soma()
13 {
14 int n1,n2, s;
15 cout<<"Digite o primeiro numero: "<<endl;
16 cin>>n1;
17 cout<<"Digite o segundo numero: "<<endl;
18 cin>>n2;
19 s = n1 + n2;
20 cout<<"\n Soma = "<<s;
21 }
22
http://bac004.wikidot.com/printer--friendly//funcoes 4/5/2011
BAC004: 5 - Funções Page 5 of 14
Exemplo 1
No exemplo abaixo é definida uma função que receberá dois parâmetros (string e int) no
momento de sua chamada.
Os parâmetros da função são variáveis locais, portanto, podem ser usados dentro da
função. Eles são usados como um meio para comunicação entre as funções pois recebem (ou
retornam) valores de outras funções.
Exemplo 2
Considere o seguinte programa que chama uma função soma com dois parâmetros do tipo
int e imprime a sua soma.
1 #include<iostream> ?
2 using namespace std;
3
4 void soma(int n1, int n2)
5 {
6 int s;
7 s = n1 + n2;
8 cout<<"\n Soma = "<<s;
9 }
10
11 int main()
12 {
13 int numero1, numero2;
14 cout<<"Digite o primeiro numero: "<<endl;
15 cin>>numero1;
16 cout<<"Digite o segundo numero: "<<endl;
17 cin>>numero2;
18 soma(numero1,numero2); //chamada da função
19 return 0;
20 }
21
No exemplo, o programa começa sua execução na função main linha 11. Posteriormente,
executa as linhas 12 a 17 onde recebe do usuário dois números. Depois executa a linha 18
http://bac004.wikidot.com/printer--friendly//funcoes 4/5/2011
BAC004: 5 - Funções Page 6 of 14
que possui uma chamada à função soma onde é passado como parâmetro o valor das
variáveis numero1 e numero2. Neste ponto, o fluxo de execução é desviado para a linha 4,
neste momento os valores de numero1 e numero2 são copiados para as variáveis locais
n1 e n2, respectivamente. Depois são executadas as linhas 5 até 8. Quando a execução
chega na linha 9 é identificado o final da função e o fluxo de execução retorna para a linha
18, exatamente abaixo de onde ocorreu o desvio para a função soma. Em seguida é
executada a linha 19 que retorna 0 para o sistema operacional.
Considere nas Tabelas seguintes o Teste de Mesa para uma entrada: numero1 = 10 e
numero2 = 6.
Função main
Variáveis Função Saída
linha numero1 numero2 void soma(int, int)
13 lixo lixo
Digite o primeiro
14 .. ..
numero:
15 10 ..
Digite o segundo
16 .. ..
numero:
17 .. 6
soma(10,6) — desvio
18 .. ..
linha 4
19 retorna 0 para o sistema operacional
Função soma
Variáveis Saída
Linha n1 n2 s
4 10 6
5 .. ..
6 .. .. lixo
7 .. .. 16
8 .. .. .. Soma = 16
volta para linha 18
Observações:
■ Caso a função fosse definida após a função main o protótipo seria void soma(int n1,
int n2);.
■ Na chamada da função, pode-se invocar a função passando valores do tipo dos
parâmetros. Exemplo soma(7,8);.
■ A ordem e o tipo dos parâmetros devem ser respeitados na chamada da função.
http://bac004.wikidot.com/printer--friendly//funcoes 4/5/2011
BAC004: 5 - Funções Page 7 of 14
O tipo de retorno pode ser qualquer tipo de dado apresentado no Capítulo 2.2 (int, float,
char, string , …). Exemplo: a função main possui o tipo de retorno int que é devolvido para
o sistema operacional.
O retorno da função é feito através do comando return. Este comando ao ser processado
termina a execução da função e retorna o controle para a instrução seguinte do código da
chamada. Nas funções onde o tipo de retorno é void pode-se utilizar o comando return; e
nas demais funções o comando return tipodeRetorno;. No exemplo abaixo na linha 12 é
demonstrado o uso do return.
Exemplo
Considere o seguinte programa que chama uma função soma sem parâmetros e retorna um
valor inteiro (int) para a função que a chamou.
1 #include<iostream> ?
2 using namespace std;
3
4 int soma()
5 {
6 int n1,n2,s;
7 cout<<"Digite o primeiro numero: "<<endl;
8 cin>>n1;
9 cout<<"Digite o segundo numero: "<<endl;
10 cin>>n2;
11 s = n1 + n2;
12 return s;
13 }
14
15 int main()
16 {
17 int resultado;
18 resultado=soma();
19 cout<<"\n Soma = "<<resultado;
20 return 0;
21 }
22
http://bac004.wikidot.com/printer--friendly//funcoes 4/5/2011
BAC004: 5 - Funções Page 8 of 14
No exemplo, o programa começa sua execução na função main linha 15 e executa as linhas
16 e 17. Depois executa a linha 18 que possui uma chamada à função soma sem
parâmetro que após a sua execução atribuir o seu retorno para a variável resultado.
Neste ponto, o fluxo de execução é desviado para a linha 4 onde são executados as linhas de
4 até 11. Quando a execução chega na linha 12 é acionado o comando return que retorna o
valor de s para quem chamou a função terminando a sua execução. O fluxo de execução
retorna para a linha 19 após a variável resultado (linha 18) ter recebido o resultado da
função. A linha 19 é executada e imprime a soma na tela e em seguida a linha 20 que
retorna 0 para o sistema operacional.
Observações:
■ Podemos utilizar mais de um comando return na mesma função.
■ O informação retornada pelo comando return deve ser do mesmo tipo definido na
função.
http://bac004.wikidot.com/printer--friendly//funcoes 4/5/2011
BAC004: 5 - Funções Page 9 of 14
Exemplo
Considere o seguinte programa que chama uma função soma com dois parâmetros do tipo
int e retorna um valor inteiro (int) contendo a soma para a função que a chamou.
1 #include<iostream> ?
2 using namespace std;
3
4 int soma(int n1, int n2)
5 {
6 int s;
7 s = n1 + n2;
8 return s;
9 }
10
11 int main()
12 {
13 int numero1, numero2, resultado;
14 cout<<"Digite o primeiro numero: "<<endl;
15 cin>>numero1;
16 cout<<"Digite o segundo numero: "<<endl;
17 cin>>numero2;
18 resultado=soma(numero1,numero2);
19 cout<<"\n Soma = "<<resultado;
20 return 0;
21 }
22
No exemplo, o programa começa sua execução na função main linha 11. Posteriormente,
executa as linhas 12 a 17 onde recebe do usuário dois números. Depois executa a linha 18
que possui uma chamada à função soma onde é passado como parâmetro o valor das
variáveis numero1 e numero2. Neste ponto, o fluxo de execução é desviado para a linha 4,
neste momento os valores de numero1 e numero2 são copiados para as variáveis locais
n1 e n2, respectivamente. Depois são executados as linhas 5 até 7. Quando a execução
chega na linha 8 é acionado o comando return que retorna o valor de s para quem chamou
a função terminando a sua execução. O fluxo de execução retorna para a linha 19 após a
variável resultado (linha 18) ter recebido o resultado da função soma. A linha 19 é
executada e imprime a soma na tela e em seguida a linha 20 que retorna 0 para o sistema
operacional.
Considere nas Tabelas seguintes o Teste de Mesa para a entrada: numero1 = 3 e numero2 =
4.
Função main
http://bac004.wikidot.com/printer--friendly//funcoes 4/5/2011
BAC004: 5 - Funções Page 10 of 14
Função soma
Variáveis Saída
Linha n1 n2 s
4 3 4
5 .. ..
6 .. .. lixo
7 .. .. 7
8 Retorna o valor 7 e volta para linha 18
Este mecanismo permite que a função retorne mais de um valor para a função que chama.
Para definir que um parâmetro será passado como referência para uma função, utilizamos o
símbolo & antes do nome da variável no cabeçalho da função, indicando que ela é um alias
http://bac004.wikidot.com/printer--friendly//funcoes 4/5/2011
BAC004: 5 - Funções Page 11 of 14
(apelido, referência, outro nome) para a variável passada como parâmetro. Veja os
exemplos abaixo.
Exemplo 1
Neste exemplo, o parâmetro a será a própria variável (passagem de parâmetro por
referência) e o parâmetro b receberá uma cópia da variável (passagem de parâmetro
por valor).
2 {
3 //instruções
4 }
5
Exemplo 2
Considere o programa abaixo que chama uma função nao_muda e a função muda.
1 #include ?
2 using namespace std;
3
4 void nao_muda(int a, double b) //passagem por valor
5 {
6 a+=2; // significa a=a+2;
7 b+=5; // significa b=b+5;
8 }
9
10 void muda(int &a, double &b) //passagem por referência
11 {
12 a+=2;
13 b+=5;
14 }
15
16 int main()
17 {
18 int n1=5;
19 double n2=6.0;
20 cout<<"n1 = "<<n1<<" n2 = "<<n2<<endl;
21 nao_muda(n1,n2);
22 cout<<"Valores apos a funcao nao_muda n1 = "<<n1<<" n2 = "<<n2<<endl;
23 muda(n1,n2);
24 cout<<"Valores apos a funcao muda n1 = "<<n1<<" n2 = "<<n2<<endl;
25 return 0;
26 }
27
3 4
No exemplo, o programa começa sua execução na função main linha 16. Posteriormente,
executa as linhas 17 a 19 onde as variáveis n1 e n2 recebem dois valores e a linha 20 que
apresenta na tela os valores de n1 e n2. Em seguida, executa a linha 21 que possui uma
chamada à função nao_muda onde são passados como parâmetros os valores das
variáveis n1 e n2. Neste ponto, o fluxo de execução é desviado para a linha 4, neste
momento os valores de n1 e n2 são copiados para as variáveis locais a e b,
respectivamente. Depois são executadas as linhas 5 a 7 que modificam os valores das
variáveis locais a e b. Quando a execução chega na linha 8 é alcançado o fim da função e o
http://bac004.wikidot.com/printer--friendly//funcoes 4/5/2011
BAC004: 5 - Funções Page 12 of 14
fluxo de execução retorna para a linha 22. Na linha 22 são apresentados na tela os valores
de n1 e n2 com os mesmos valores apresentados na linha 20. Depois é executada a linha 23
que possui uma chamada à função muda onde são passados como parâmetros as variáveis
n1 e n2. Um desvio do fluxo de execução é feito para a linha 10, neste momento é criada a
referência das variáveis n1 e n2 para as variáveis a e b, respectivamente. Depois são
executadas as linhas 11 a 13 que modificam os valores das variáveis locais a e b que são as
variáveis n1 e n2 com nomes diferentes. Quando a execução chega na linha 14 é alcançado
o fim da função e o fluxo de execução retorna para a linha 24. Na linha 24 são apresentados
na tela os valores de n1 e n2 agora com novos valores. E por fim, é executada a linha 25
que retorna 0 para o sistema operacional.
Função main
Variáveis Função Saída
void nao_muda void muda
linha n1 n2
(int, int) (&int, &int)
18 5
19 .. 6.0
20 .. .. n1=5 n2=6.0
nao_muda(5,
21 .. .. 6.0) —
desvio linha 4
Valores após a funcao
22 .. ..
nao_muda n1 = 5 n2 = 6.0
muda(n1,
n2) —
23 7 11.0
desvio linha
10
Valores apos a funcao
24 .. ..
muda n1=7 n2=11.0
25 retorna 0 para o sistema operacional
http://bac004.wikidot.com/printer--friendly//funcoes 4/5/2011
BAC004: 5 - Funções Page 13 of 14
Exemplo 1
1 #include<iostream> ?
2 #include<cmath>
3 using namespace std;
4
5 int main()
6 {
7 double base, expoente, resultado;
8 cout<<"Digite a base de um numero exponencial";
9 cin>>base;
10 cout<<"Digite o expoente de um numero exponencial";
11 cout<<expoente;
12 resultado = pow(base,expoente);
13 cout<<"O valor do numero exponencial e = "<<resultado;
14 return 0;
15 }
16
http://bac004.wikidot.com/printer--friendly//funcoes 4/5/2011
BAC004: 5 - Funções Page 14 of 14
Exemplo 2
1 #include<iostream> ?
2 #include<cmath>
3 using namespace std;
4
5 int main()
6 {
7 double numero, raiz;
8 cout<<"Digite um numero";
9 cin>>numero;
10 raiz = sqrt(numero);
11 cout<<"A raiz quadrada de "<<numero<<" e " <<raiz;
12 return 0;
13 }
14
5.7 Exercícios
1. Escreva uma função que receba como argumento o ano e retorne true se for um ano
bissexto e false se não for. Um ano é bissexto se for divisível por 4, mas não por 100.
Um ano também é bissexto se for divisível por 400.
2. Escreva uma função que receba um número float como argumento e retorne, em
outros dois argumentos passados por referência, a parte inteira e a parte decimal
desse número.
3. Escreva uma função que ordene o valor de três argumentos do tipo char. Por
exemplo, se ch1, ch2, ch3 são variáveis do tipo char com valores, respectivamente
'B', 'A' e 'C', após a chamada à função, as variáveis conterão, respectivamente, 'A', 'B'
e 'C'.
4. Escreva uma função chamada maior que receba 2 números inteiros e retornará o
maior deles.
5. Escreva uma função chamada maior3 que receba 3 números inteiros e utilizando a
função maior do exercício 4, retorne o maior deles.
page revision: 137, last edited: 4 Apr 2011, 22:47 GMT-03 (17 hours ago)
Unless stated otherwise Content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0
License
http://bac004.wikidot.com/printer--friendly//funcoes 4/5/2011