Você está na página 1de 44

UniRitter

Algoritmos e Programação
Conceitos de Funções em C
Prof. Me. Ricardo Becker

1
Funções

• Uma unidade de código de programa autônoma projetada para


cumprir uma tarefa em particular.

• Geralmente programas em C consistem em várias pequenas funções.

2
Funções: Sintaxe em C
tipo_da_função nome_da_função (lista_de_parâmetros)
{
corpo da função;
}

3
Funções: Sintaxe em C
tipo_da_função nome_da_função (lista_de_parâmetros)
{
corpo da função;
}

• tipo_da_função: especifica o tipo de valor que a função devolve,


podendo ser qualquer tipo válido.

4
Funções: Sintaxe em C
tipo_da_função nome_da_função (lista_de_parâmetros)
{
corpo da função;
}

• nome_da_função: basta declarar!!

5
Funções: Sintaxe em C
tipo_da_função nome_da_função (lista_de_parâmetros)
{
corpo da função;
}

• lista_de_parâmetros: é uma lista de nomes de variáveis separados


por vírgulas e seus tipos associados que recebem os valores quando a
função é chamada.

6
Funções: Sintaxe em C
tipo_da_função nome_da_função (lista_de_parâmetros)
{
corpo da função;
}

• corpo_da_função: definição dos comandos, ações, etc.

7
Exemplo: o quadrado de um número

#include <stdio.h>

main(){
float a,b;
printf("Entre com um numero: ");
scanf("%f",&a);
b = a*a;
printf("O quadrado do numero %f eh %f \n",a,b);
}

8
Exemplo: o quadrado de um número
#include <stdio.h>

float Square(float x){


return (x*x);
}

main(){
float a,b;
printf("Entre com um numero: ");
scanf("%f",&a);
b = Square(a);
printf("O quadrado do numero %f eh %f \n",a,b);
}
9
Protótipos de Funções
#include <stdio.h>

float Square(float x){ Nesse exemplo, note


return (x*x); que a função Square
foi escrita antes da
}
função main().

main(){
float a,b;
printf("Entre com um numero: ");
scanf("%f",&a);
b = Square(a);
printf("O quadrado do numero %f eh %f \n",a,b);
}
10
Protótipos de Funções
#include <stdio.h>

float Square(float x){ Quando o compilador


return (x*x); chega à função main()
ele compila as funções e
}
já sabe seus formatos.

main(){
float a,b;
printf("Entre com um numero: ");
scanf("%f",&a);
b = Square(a);
printf("O quadrado do numero %f eh %f \n",a,b);
}
11
Protótipos de Funções
#include <stdio.h>

float Square(float x){ Porém podemos alterar


return (x*x); esta ordem utilizando os
protótipos de funções
}
(declarações de funções).

main(){
float a,b;
printf("Entre com um numero: ");
scanf("%f",&a);
b = Square(a);
printf("O quadrado do numero %f eh %f \n",a,b);
}
12
Protótipos de Funções
#include <stdio.h>

float Square(float x); Perceba que os protótipos têm


uma semelhança com as
declarações de variáveis.
main(){
float a,b;
printf("Entre com um numero: ");
scanf("%f",&a);
b = Square(a);
printf("O quadrado do numero %f eh %f \n",a,b);
}

float Square(float x){


return (x*x);
13
}
Comando return
float Square(float x){
return (x*x);
}

• Digamos que uma função está sendo executada.


• Quando se chega a uma declaração return a função é encerrada
imediatamente e, se o valor de retorno é informado, a função retorna este
valor.
• A forma geral do comando return é:
return valor_de_retorno; ou return;

14
O tipo void

• O tipo void permite fazer funções que não retornem nada e funções
que não têm parâmetros.

• Ex.: Função que não retorna nada


• void nome_da_função (lista_de_parâmetros);

15
O tipo void

• O tipo void permite fazer funções que não retornem nada e funções
que não têm parâmetros.

• Ex.: Função que não tem parâmetros


• tipo_da_função nome_da_função (void);
• ou
• tipo_da_função nome_da_função ( );

16
O tipo void

• O tipo void permite fazer funções que não retornem nada e funções
que não têm parâmetros.

• Ex.: Função que não retorna nada e não tem parâmetros


• void nome_da_função (void);
• ou
• void nome_da_função ( );

17
Exemplo: void

#include <stdio.h>

void Mensagem (void){


printf ("Ola! Eu estou vivo.\n");
}

int main (){


Mensagem();
printf ("Diga de novo:\n"); Respota na tela:
Mensagem(); Ola!Eu estou vivo.
return 0;
Diga de novo:
Ola!Eu estou vivo.
}

18
Observações

• Convenção: se o programa retornar zero, significa que ele terminou


normalmente, e, se o programa retornar um valor diferente de zero,
significa que o programa teve um término anormal.
• Quando não há preocupações como estas, basta declarar a função
main retornando void.

19
Escopo de Variáveis

• Escopo = local onde a variável é válida e reconhecida.

20
Tipos de Variáveis

• Vamos estudar três tipos de variáveis:

• Variáveis locais: só têm validade dentro do bloco no qual são declaradas.

• Parâmetros formais: são declarados como sendo as entradas de uma


função.

• Variáveis globais: são declaradas fora de todas as funções do programa.

21
Variáveis Locais
int func1(){
int X;
X = 10;
return X;
}

• Podemos declarar variáveis dentro de qualquer bloco.


• Um bloco começa quando abrimos uma chave e termina quando
fechamos a chave.

22
Variáveis Locais
int func1(){ Variável local
int X;
X = 10;
return X;
}

• A declaração de variáveis locais é a primeira coisa que devemos colocar


num bloco.
• A característica que torna as variáveis locais tão importantes é
justamente a de serem exclusivas do bloco.

23
Variáveis Locais
int func1(){
int X;
X = 10;
return X;
}

• Existem apenas enquanto o bloco de código em que foram declaradas


está sendo executado.
• É criada na entrada de seu bloco e destruída na saída.

24
Variáveis Locais
int func1(){ int func2(){
int X; int X;
X = 10; X = -100;
return X; return X;
} }

• Podemos ter quantos blocos quisermos com uma variável local chamada
X, por exemplo, e elas não apresentarão conflito entre elas.
• O bloco de código mais comum em que as variáveis locais foram
declaradas é a função.

25
Parâmetros Formais

• Os parâmetros da função na sua declaração são chamados


parâmetros formais.
int func (int a, int b, int c){
return (a + 2*b + 3*c);
}
• Os parâmetros são passados para uma função de acordo com a sua
posição.

func(1,2,3) ≠ func(3,2,1)

26
Variáveis Globais
/* Programa principal*/
void func1(){
#include <stdio.h>
X *= -1;
}
int X; /* variável global */
void func1();
void func2(){
void func2();
int X = 1;
}
main(){
X = 11;
func1(); São declaradas fora de
func2(); todas as funções do
programa.
}
27
Variáveis Globais
/* Programa principal*/
void func1(){
#include <stdio.h>
X *= -1;
}
int X; /* variável global */
void func1();
void func2(){
void func2();
int X = 1;
}
main(){
X = 11;
func1(); Podem ser alteradas por
func2(); todas as funções do
programa.
}
28
Variáveis Globais
/* Programa principal*/
void func1(){
#include <stdio.h>
X *= -1;
}
int X; /* variável global */
void func1();
void func2(){
void func2();
int X = 1;
}
main(){
X = 11;
func1(); Note que nem main e nem
func1 declaram X, mas
func2();
ambas podem usá-la.
}
29
Variáveis Globais
/* Programa principal*/
void func1(){
#include <stdio.h>
X *= -1;
}
int X; /* variável global */
void func1();
void func2(){
void func2();
int X = 1;
}
main(){
X = 11;
func1(); A func2 declarou uma
variável local com o mesmo
func2();
nome.
}
30
Variáveis Globais
/* Programa principal*/
void func1(){
#include <stdio.h>
X *= -1;
}
int X; /* variável global */
void func1();
void func2(){
void func2();
int X = 1;
}
main(){
X = 11;
func1(); Quando uma função tem uma variável local
com o mesmo nome de uma variável global
func2();
a função dará preferência à variável local.
}
31
Variáveis Globais
• O armazenamento de variáveis globais encontrase em uma região fixa
da memória;

• Variáveis globais são uteis quando o mesmo dado é usado em muitas


funções;

• Evite ao máximo o uso de variáveis globais. Elas ocupam memória o


tempo todo (as locais só ocupam memória enquanto estão sendo
usadas) e tornam o programa mais difícil de ser entendido e menos
geral.

32
Separação de Códigos ou Dados
• Funções que retornam o produto das variáveis x e y.

• Geral: retorna o produto de quaisquer dois inteiros;


• Específica: só pode ser usada para encontrar o produto das
variáveis globais x e y.

33
Exercício: aponte o valor de cada
variável
#include <stdio.h>
int num; /* variável global */
int func(int a, int b){
a = (a+b)/2;
num -= a;
return a;
}

main(){
int A,X =0,Y = 50;
num = 10;
A = func(X,Y);
num += 2*A; /* Qual e o valor de num, A, X e Y */
printf("num=%d A=%d X=%d Y=%d\n",num,A,X,Y);
} 34
Exercício: aponte o valor de cada
variável
#include <stdio.h>
int num; /* variável global */
int func(int a, int b){
a = (a+b)/2; 1º momento:
num -= a; X=0, Y=50, num=10
return a;
}

main(){
int A,X =0,Y = 50;
num = 10;
A = func(X,Y);
num += 2*A; /* Qual e o valor de num, A, X e Y */
printf("num=%d A=%d X=%d Y=%d\n",num,A,X,Y);
} 35
Exercício: aponte o valor de cada
variável
#include <stdio.h>
int num; /* variável global */
int func(int a, int b){
a = (a+b)/2; 2º momento:
num -= a; A=25, X=0, Y=50, num=-15
return a;
}

main(){
int A,X =0,Y = 50;
num = 10;
A = func(X,Y);
num += 2*A; /* Qual e o valor de num, A, X e Y */
printf("num=%d A=%d X=%d Y=%d\n",num,A,X,Y);
} 36
Exercício: aponte o valor de cada
variável
#include <stdio.h>
int num; /* variável global */
int func(int a, int b){
a = (a+b)/2; 3º momento:
num -= a; A=25, X=0, Y=50, num=35
return a;
}

main(){
int A,X =0,Y = 50;
num = 10;
A = func(X,Y);
num += 2*A; /* Qual e o valor de num, A, X e Y */
printf("num=%d A=%d X=%d Y=%d\n",num,A,X,Y);
} 37
Exercício: Fatorial em C

• Escreva uma função que recebe um número natural m e retorna m!.

• Escreva o programa principal que faz a chamada a esta função e


imprima o resultado na tela.

38
Exercício: Fatorial em C
#include <stdio.h>
int fatorial (int m)
{
int i, fat = 1;
for (i = m; i>0; i-- )
fat *= i;
return fat;
}

main(){
int m;
printf("Entre com um numero natural: ");
scanf("%d",&m);
printf("O fatorial de %d eh %d\n", m, fatorial(m));
} 39
Exemplo: quadrado do valor
#include <stdio.h>
float Square (float num){
num *= num;
return num;
}

main(){
float num, sqr;
printf ("Entre com um numero: ");
scanf ("%f", &num);
sqr = Square(num);
printf ("O numero original eh: %f\n",num);
printf ("O seu quadrado vale: %f\n",sqr);
}
40
Exercício

• Implemente um programa que chame uma função que verifica se o


valor solicitado no main é positivo. Caso seja negativo, dentro da
função, mude o sinal do valor para positivo.

41
Passagem de Parâmetros: por valor
• Na linguagem C, quando chamamos uma função, os parâmetros formais
da função copiam os valores dos parâmetros que são passados para a
função;
• Isto quer dizer que não são alterados os valores que os parâmetros têm
fora da função;
• Este tipo de chamada de função é denominado chamada por valor;
• Isto ocorre porque são passados para a função apenas os valores dos
parâmetros e não os próprios parâmetros.

42
Exemplo
#include <stdio.h>
void troca(int A, int B) {
int temp;
temp = A;
A = B;
B = temp;
printf("Dentro da funcao de troca: A = %d B = %d\n", A, B);
}

main() {
int A = 10, B = 15;
printf("Valores originais: A = %d B = %d\n", A, B);
troca(A,B);
printf("Depois da funcao de troca: A = %d B = %d\n", A, B);
} 43
Passagem de Parâmetros:
por referência
• Ocorre quando alterações nos parâmetros formais, dentro da função,
alteram os valores dos parâmetros que foram passados para a função.
• Este tipo de chamada de função tem o nome de chamada por
referência.
• A passagem por referência será discutida quando falarmos de ponteiros,
• aguardem...

44

Você também pode gostar