Buscar

Revisão de Funções em C

Prévia do material em texto

CC
Para Para 
Bruno Jurkovski
Fábio da Fontoura Beltrão
Felipe Augusto Chies
Kauê Soares da Silveira
Lucas Fialho Zawacki
Marcos Vinicius Cavinato
Para Para 
EngenhariasEngenharias
� Na última aula vimos... ‘laços’...
� ...e outras coisas...
Revisão da Aula 2
� ...e outras coisas...
Revisão da Aula 2
Revisão da Aula 2
Revisão da Aula 2
Revisão da Aula 2
Funções - Introdução
� A linguagem C é totalmente baseada em 
funções;
� Você já deve ter notado que o corpo principal do � Você já deve ter notado que o corpo principal do 
programa (a main) nada mais é que a função 
por onde o programa começa;
� Geralmente, os programas em C são várias 
‘mini-funções’, ao contrário de um único bloco 
monolítico de código.
� Conclusão:
� As funções devem ser reaproveitáveis e generalistas;
Funções - Introdução
� Funções não devem alterar variáveis globais;
� Funções devem ser atômicas, ou seja, devem, se 
possível, executar apenas uma operação.
Funções - Declaração
� Uma funções possui as seguintes partes:
� Corpo, parâmetros e valor de retorno.
tipo_de_retorno nome_da_funcao (parametros)
{
corpo_da_funcao;
return (valor_de_retorno);
}
Tipos de Dados e Retorno
� Como variáveis, as funções possuem um tipo de 
dado;
� As funções podem ser dos cinco tipos de dados 
do C:do C:
� int;
� char;
� float;
� double;
� void (vazio, sem valor de retorno).
Tipos de Dados e Retorno
� Toda função não void deve retornar um dado do 
tipo declarado;
� Usa-se para isso o comando return;
� return finaliza a função, todo código seguinte a 
esse comando não será executado.
int sete ()
{
printf(“Essa funcao retorna o numero 7”);
return 7;
}
� Observe esta função:
Exemplo de Função
int soma2 (int x, int y)
{
int temp;
temp = x + y;temp = x + y;
return temp;
}
int main()
{
int soma, valor1 = 2, valor2 = 5;
soma = soma2(valor1, valor2);
printf(“A soma e %d”, soma);
}
Exemplo de Função
int soma2 (int x, int y)
{
int temp;
temp = x + y;
soma recebe o valor do 
retorno de soma2 = 7temp = x + y;
return temp;
}
int main()
{
int soma, valor1 = 2, valor2 = 5;
soma = soma2(valor1, valor2);
printf(“A soma e %d”, soma);
}
retorno de soma2 = 7
O main passa os valores para 
soma2:
x = valor1 = 2 
y = valor2 = 5
temp = 2 + 5
Exemplo de Função
int soma2 (int x, int y)
{
int temp;
temp = x + y;
return temp;
O main passa os valores para 
soma2:return temp;
}
int main()
{
int soma, valor1 = 2, valor2 = 5;
soma = soma2(valor1, valor2);
printf(“A soma e %d”, soma);
}
soma2:
x = valor1 = 2 
y = valor2 = 5
temp = 2 + 5
soma recebe o valor do 
retorno de soma2 = 15
� Especificação do limite dentro do qual os 
recursos de sistema podem ser utilizados:
Em C, cada função tem o seu escopo;
O Escopo
� Em C, cada função tem o seu escopo;
� Logo, “escondemos” os códigos e variáveis 
de uma função das outras;
� Por isso que variáveis locais de cada função 
são acessíveis apenas por ela própria.
� Observe as seguintes chamadas de funções:
� variavel = funcao(par1,par2,par3);
� funcao2(par4,par5);
� printf(“%d%d”, sqrt(t), t);
if (abs(n) == n);
Chamadas de Funções
� if (abs(n) == n);
� Você pode chamar uma função em qualquer 
lugar onde você usaria um dado do tipo de 
retorno da função;
� Quando você chama uma função ela irá 
executar independente de você usar o valor de 
retorno.
1. Faça uma função que receba uma string e 
retorne o número de caracteres que constituem 
essa string (não conte o ‘\0’);
Exercícios
� Protótipos são declarações de funções antes 
delas serem codificadas;
Protótipos
� Isso indica ao compilador que essas funções 
serão utilizados, tornando possível o uso de tais 
funções antes da codificação das mesmas.
Exemplo:
int soma2 (int x, int y);
int main()
{
int soma, valor1 = 2, valor2 = 5;
soma = soma2(valor1, valor2);
printf(“A soma e %d”, soma);
}
int soma2 (int x, int y)
{
int temp;
temp = x + y;
return temp;
}
Protótipo da função ‘soma2’, se 
não houvesse o protótipo iria 
dar erro de compilação, pois a 
main tentaria chamar uma 
função que não foi declarada, 
ou seja, o compilador não sabe 
que ela existe.
2. Faça uma função que receba dois números , 
faça sua soma e chame outra função que faz o 
quadrado desse número. Retorne o resultado 
final.
Exercícios
final.
� Use protótipos.
� Parâmetros podem ser passados para uma 
função de duas maneiras:
� Por Valor:
� É passado o nome da variável para função, que faz uma 
cópia da mesma para uso dentro de seu escopo(variável 
Parâmetros
cópia da mesma para uso dentro de seu escopo(variável 
local);
� NÃO ALTERA O VALOR DO PARÂMETRO.
� Por Referência:
� É passado um ponteiro para a variável, tornando possível o 
acesso direto ao endereço da mesma;
� Logo, é possível alterar o valor da variável dentro do esopo 
da função.
� Observe as seguintes funções:
� elevaQuadrado – retorna o quadrado de X. Note que a função 
NÃO altera o valor da variável original:
int elevaQuadrado (int x)
{
Parâmetros
� elevaQuadrado2 – retorna o quadrado de X, mas dessa vez muda 
o valor original de X:
x = x*x;
return x;
} VALOR
void elevaQuadrado2 (int *x){
*x *= *x;
} REFERÊNCIA
Como seriam as chamadas?
int main()
{
int x = 7, y;
y = elevaQuadrado(x);
‘y’ recebe 49 e ‘x’ 
continua com o valor 7
y = elevaQuadrado(x);
printf(“%d %d\n”, x, y);
elevaQuadrado2(&x);
printf(“%d %d”, x, y);
} O valor de ‘x’ é alterado 
para 49
Como seriam as chamadas?
int main()
{
int x = 7, y;
y = elevaQuadrado(x);
‘y’ recebe 49 e ‘x’ 
continua com o valor 7
y = elevaQuadrado(x);
printf(“%d %d\n”, x, y);
elevaQuadrado2(&x);
printf(“%d %d”, x, y);
} O valor de ‘x’ é alterado 
para 49
3. Faça uma função swap que troca os valores de 
‘x’ e ‘y’, inteiros, recebidos como argumentos.
Exercício
4. Faça uma função que receba o endereço de 
uma variável(int ou float) e um número(int) e 
retorne a variável^número.
� Uma função recursiva é uma função que chama 
a si mesma;
Recursão
� Recursão é uma ferramenta poderosa.
� Fazer uma função que calcula o fatorial de um 
número.
Exemplo
double fatorial(double n)double fatorial(double n)
{
if (n == 1)
return 1;
return (n * fatorial(n-1));
}
� Algumas das vantagens do uso de 
recursão são: 
� A clareza na interpretação do código;
Recursão
� Simplicidade e elegância na implementação. 
� Algumas das desvantagens são: 
� Dificuldade para encontrar erros;
� Podem ser ineficientes. 
* A principal preocupação na implementação de algoritmos recursivos é a questão de 
eficiência tanto de espaço quanto de tempo. 
Mesma função com for
double fatorial(double n)
{
double res=1;double res=1;
for(double i=n; i>1; i--)
res *= i;
return res;
}
5. Fazer uma função que “descubra” o numero de 
Euler (Somatório de 1/n! com n tendendo ao 
infinto, nesse caso n tendendo ao numero que 
se desejar para melhorar a precisão do “e”).
Exercício
se desejar para melhorar a precisão do “e”).
� A declaração normal da função main:
� int main(int argc, char *argv[])
� Esses dois argumentos são passados como padrão 
pelo sistema operacional indicando os argumentos 
Curiosidade
pelo sistema operacional indicando os argumentos 
passados para o programa em linha de código, como:
Curiosidade
� A main, normalmente declarada como int, 
devolve um de dois inteiros para o sistema 
operacional, 0 ou 1, indicando, 
Curiosidade II
operacional, 0 ou 1, indicando, 
respectivamente, sucesso ou erro na 
execução do programa.

Continue navegando