Buscar

Linguagem C - Funções

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 49 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 49 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 49 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Informática Aplicada - Linguagem C 
Funções 
Profª Náthalee Cavalcanti de Almeida 
Email: nathalee.almeida@ufersa.edu.br 
24/01/2014 
• Cabeçalho e corpo de uma função 
• Parâmetros 
• Passagem de parâmetros de tipos básicos 
• Valor de retorno (return) 
• O “tipo” void 
• Protótipos de funções 
• Variáveis locais 
 
Agenda 
Características de uma Função 
• Cada função tem que ter um nome único, o qual serve para a sua 
invocação em algum lugar no programa a que pertence. 
 
• Um função pode ser invocada a partir de outras funções. 
 
• Uma função ( como o nome indica) deve realizar UMA ÚNICA 
TAREFA bem definida. 
 
• O código de uma função deve ser o mais independente possível do 
resto do programa, e deve ser tão genérico quanto possível, para poder 
ser reutilizado em outros projetos. 
 
• Uma função pode retornar, para a entidade que a invocou, um valor 
como resultado do seu trabalho. 
 
 
 
 
 
 
 
 
 
Nome de uma Função 
 
• Obedece às regras apresentadas para variáveis; 
 
• O nome de uma função deve ser único ( não pode ser igual ao nome 
de outra função ou de uma variável); 
 
• O nome de uma função deve especificar aquilo que a função na 
realidade faz, e deve ser de fácil leitura e interpretação (Ex: putchar 
vs. p23_k45_char). 
 
 
 
 
 
 
Como Funciona uma Função 
 
• O código de uma função só é executado quando esta é 
invocada em alguma parte do programa a que está de algum 
modo ligada. 
 
• Sempre que uma função é invocada, o programa que a 
invoca é “suspenso” temporariamente. Em seguida, serão 
executadas as instruções presentes no corpo da função. Uma 
vez terminada a função, o controle de execução do programa 
volta ao local em que esta foi invocada. 
 
 
 
 
Como Funciona uma Função 
 
• O programa que invoca uma função pode enviar 
Argumentos, que são recebidos pela função. Estes são 
recebidos e armazenados em variáveis locais, que são 
automaticamente iniciadas com os valores enviados. A essas 
variáveis dá-se o nome de Parâmetros. 
• Depois de terminar seu funcionamento, uma função pode 
devolver um valor para o programa que o invocou. 
 
 
 
Funções 
 
Problema: Escreva um programa que, recorrendo a três funções 
distintas, escreva na tela a seguinte saída: 
 
*** 
***** 
******* 
***** 
*** 
 
Funções 
 #include <stdio.h> linha3x ( ) 
{ 
 int i; 
 for (1=1; i < = 3; i++){ 
 putchar („*‟);} 
 putchar („\n‟); 
} 
 
 linha5x ( ) 
{ 
 int i; 
 for (1=1; i < = 5; i++){ 
 putchar („*‟);} 
 putchar („\n‟); 
} 
 
 
 
Funções 
 linha7x ( ) { 
 int i; 
 for (1=1; i < = 7; i++){ 
 putchar („*‟);} 
 putchar („\n‟); 
} 
main ( ) 
{ 
 linha3x ( ); 
 linha5x ( ); 
 linha7x ( ); 
 linha5x ( ); 
 linha3x ( ); 
} 
 
 
Funções 
 
• linha3x ( ): função responsável por escrever três 
asteriscos na tela 
 
• linha5x ( ): função responsável por escrever cinco 
asteriscos na tela 
 
• linha7x ( ): função responsável por escrever sete 
asteriscos na tela 
 
• main: função que invoca as funções. 
 
Funções 
 
• O ideal seria escrever uma única função linha, 
responsável pela escrita de uma linha na tela, com 
um número de asteriscos específico em cada 
chamada. 
• se quisermos 3 asteriscos invocamos a função linha 
(3). 
• se quisermos 5 asteriscos invocamos a função linha 
(5). 
• se quisermos 7 asteriscos invocamos a função linha 
(7). 
 
Funções 
 
• A função é sempre a mesma (função linha), o que 
muda é o número de caracteres para serem 
colocados na tela. 
• No programa anterior o nosso main passaria a ser: 
 
• main (){ 
• linha(3); 
• linha(5); 
• linha(7); 
• linha(5); 
• linha(3); 
} 
 
Funções 
 
• Como seria então escrita a função linha? 
 
• A função linha recebe dentro de parênteses um 
valor do tipo inteiro, o qual terá que ser colocado 
numa variável. 
 
• Depois de armazenado o valor, o laço da função 
linha terá que executar o número de vezes que está 
armazenado nessa variável. 
 
Funções 
 
• Qual o nome da função a ser escrita? 
 linha ( ) 
 
• Quantos parâmetros vai receber? 
 1 
 
• Qual o tipo de parâmetro? 
 inteiro 
 
• Escolha o nome para a variável que vai 
armazenar esse parâmetro 
num 
 
 
 
 
 
 
Funções 
 
• O cabeçalho da função será assim 
 linha (int num) 
 
• E o corpo da função? 
 
Bastará alterar a condição de controle do laço 
para 
 for (i=1; i<=num ; i++) 
 
 
 
 
 
 
Funções 
 
O programa anterior poderia ser escrito da seguinte 
forma: 
 
 
 
 
 
 
#include <stdio.h> 
linha (int num) 
{ 
 int i; 
 for (1=1; i < = num; i++){ 
 putchar („*‟);} 
 putchar („\n‟); 
} 
main ( ) 
{ 
 linha(3); 
 linha (5); 
 linha (7); 
 linha(5 ); 
 linha ( 3); } 
 
Funções - Parâmetros 
 
• A comunicação com uma função se faz através dos 
argumentos que lhe são enviados e dos parâmetros 
presentes na função que os recebe. 
 
• O número de parâmetros de uma função pode ser 0, 
1, 2, etc., dependendo apenas das necessidades do 
programador. 
 
• Cada função necessita, no entanto, saber qual o tipo 
de cada um dos parâmetros. 
 
 
 
 
 
 
Funções - Parâmetros 
 
• Os parâmetros de uma função são separados por vírgula, e 
é absolutamente necessário que para cada um deles seja 
indicado o seu tipo. 
 
funcao (int x, char y, float k, double xpto) 
 
funcao (int x, int y, int k, int xpto)  Exemplo Correto 
 
funcao (int x, y, k, xpto)  Exemplo Incorreto 
 
Um parâmetro é uma variável local à função a que 
pertence. 
 
 
 
 
 
 
Funções - Parâmetros 
 
• A passagem de argumentos para uma função deve ser 
realizada colocando-os dentro de parênteses, separados 
por vírgulas, imediatamente após o nome da função. 
 
 
• Quando se faz a chamada de uma função, o número e o 
tipo dos argumentos enviados devem coincidentes com os 
parâmetros presentes no cabeçalho da função. 
 
 
 
 
 
 
Funções - Parâmetros 
 • Exemplo: 
main( ){ 
 ... 
 funcao („A‟, 123, 23.456); 
 ... 
} 
 
funcao ( char ch, int n, float x) 
{ 
 ... 
} 
O n° de parâmetros enviados para uma função deve ser igual ao 
n° de parâmetros existente no cabeçalho da função. O tipo dos 
parâmetros deve igualmente corresponder, parâmetro a 
parâmetro. 
 
 
 
 
 
 
Funções - Parâmetros 
 
• Se a função receber mais de um parâmetro, os argumentos 
enviados são associados aos parâmetros da função pela 
ordem em que são escritos. 
 
Problema: 
 
Altere o programa anterior de forma que a função linha 
escreva qualquer caractere, e não apenas o caractere 
asterisco. 
 
 
 
 
 
 
Funções 
#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,‟*‟); 
} 
 
 
 
 
 
 
 
Funções 
Saída: 
+++ 
+++++ 
------- 
***** 
*** 
 
 
 
 
 
 
Corpo de uma Função 
• O corpo de uma função é constituído por instruções de C 
de acordo com a sintaxe da linguagem. 
 
• O corpo de uma função tem que seguir imediatamente ao 
cabeçalho dafunção, e é escrito entre chaves. 
 
• O cabeçalho de uma função NUNCA deve ser seguido de 
ponto-e-virgula (;) 
 
 
 
 
 
Corpo de uma Função 
• Sempre que uma função é invocada pelo programa, o 
corpo da função é executado, instrução a instrução, até 
terminar o corpo da função ou até encontrar a instrução 
return, voltando imediatamente ao programa em que foi 
invocada. 
 
• Dentro do corpo de uma função pode-se escrever 
qualquer instrução ou conjuntos de instruções da 
linguagem C. 
• Em C não se pode definir funções dentro de funções. 
 
 
 
 
Corpo de uma Função 
• Qualquer instrução é admissível dentro de uma função 
(ex.: atribuições, if, for, switch, ..., invocar outras funções, 
etc.). 
 
• O número de instruções que pode estar presente dentro de 
uma função não tem qualquer limite, deve, no entanto, ser 
relativamente pequeno e responsável por realizar uma 
única tarefa. 
 
 
 
 
return 
• A instrução return permite terminar a execução de uma 
função e voltar ao programa que a invocou. 
• A execução da instrução return na função main faz com 
que o programa termine. 
Exemplo: 
#include <stdio.h> 
main ( ) 
{ 
 printf(“Hello”); 
 return; 
 printf(“World\n”); 
} 
 
 
 
 
Funções que retornam um valor 
• É possível que uma função seja responsável por realizar 
uma determinada tarefa e que, uma vez terminada essa 
tarefa, devolva UM ÚNICO resultado. 
 
• Esse resultado poderá ser armazenado numa variável ou 
aproveitado por qualquer instrução. 
 
• A devolução de um resultado é feita através da instrução 
return, seguida do valor a ser devolvido. 
 
• Após a instrução return pode ser colocada qualquer 
expressão válida em C. 
 
 
 
Funções que retornam um valor 
• Suponha que quiséssemos calcular a soma de dois 
números inteiros. 
 
• A função responsável por essa tarefa deverá ter a 
capacidade de realizar a soma e de retornar o resultado 
desta. 
 
 n = soma(3,4); 
 printf (“%d\n”, n); 
 
 
Funções que retornam um valor 
• Note que a função soma terá que receber dois inteiros e 
terá que devolver um resultado do tipo inteiro, que 
corresponderá à soma dos dois parâmetros recebidos pela 
função. 
 
 int soma (int x, int y) 
 { 
 int res; 
 res = x+y; 
 return res; 
 } 
 
 Repare que a soma de x com y é colocada numa variável do tipo inteiro 
 que em seguida é devolvida como resultado da função. 
Parâmetros 
Valor a Retornar 
Tipo de Retorno 
Exercícios 
 
 
Escreva um programa que solicite dois números ao usuário e 
apresente na tela o resultado da sua soma e o dobro de cada 
um deles. ( Utilize funções!!) 
Exercícios 
#include <stdio.h> 
/*Devolve a soma de dois inteiros*/ 
int soma (int a, int b) 
{ 
 return a+b; 
} 
 
/*Devolve o dobro de qualquer inteiro*/ 
int dobro (int x) 
{ 
 return 2*x; 
} 
 
Exercícios 
main ( ) 
{ 
 int n, i, total; 
 printf (“Digite dois numeros:”); 
 scanf (“%d%d”, &n, &i); 
 total = soma ( n, i); 
 printf(“%d+%d=%d\n”, n, i, total); 
 printf(“2*%d = %d e 2*%d = %d\n”, n, dobro(n), i, 
 dobro(i)); 
} 
 
Exercícios 
Saída: 
Digite dois numeros: 4 7 
4+7 = 11 
2* 4 = 8 e 2 *7 = 14 
 
 
• Uma vez que a função dobro devolve um inteiro, o seu 
resultado pode ser usado dentro de um printf, sendo 
escrito com o formato de inteiro (%d). 
 
• Um função pode ser invocada dentro de outra função. 
O resultado é o mesmo que se obteria se, em vez da 
chamada à função, aí estivesse o resultado devolvido 
por esta. 
 
 
 
Exercícios 
Qual a saída da seguinte linha? 
 
printf(“%d”, dobro (soma(dobro(2), 3))); 
 
 
 
Exercícios 
Qual a saída da seguinte linha? 
 
printf(“%d”, dobro (soma(dobro(2), 3))); 
 
 
 
dobro(2) 4 
soma(dobro(2), 3) soma (4,3)  7 
dobro (soma(dobro(2), 3)) dobro (soma(4,3))  dobro(7) 
 14 
 
O valor colocado na tela seria 14. 
 
 
Exercícios 
A execução anterior seria semelhante a: 
 
a= dobro (2); 
b = soma(a, 3); 
c= dobro(b); 
printf(“%d”, c); 
 
 
Função 
 
• Um função pode conter várias instruções return. No 
entanto, apenas uma instrução return é executada na 
função. 
• Exemplo: Escreva uma função que calcule qual o maior de 
dois inteiros. 
 
int max(int n1, int n2){ 
if (n1>n2) 
 return n1; 
else 
 return n2;} 
 
• Por que a função retorna um inteiro??? 
 
O “tipo” void 
• Em C existe uma palavra reservada – void – que permite 
indicar que uma função não devolve qualquer tipo. 
• Dessa forma, a função linha anteriormente apresentada 
deveria ter sido escrita da seguinte forma: 
#include <stdio.h> 
 void 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,‟*‟);} 
O “tipo” void 
• É comum, encontrar a palavra reservada void para indicar 
que uma função não recebe qualquer parâmetro. 
 
• Os dois trechos são equivalentes 
void linha () 
{ int i; 
 for (i=1; i<=20; i++) 
 putchar(„*‟); 
 putchar („\n‟); 
} 
 
void linha (void) 
{ int i; 
 for (i=1; i<=20; i++) 
 putchar(„*‟); 
 putchar („\n‟); 
} 
 
• Uma função que “retorna void”, normalmente é chamada de 
Procedimento. 
Onde Colocar as Funções 
#include <stdio.h> 
main ( ) 
{ 
 linha ( ); 
 printf(“Hello World\n”); 
 linha( ); 
} 
 
void linha ( ) 
{ 
 int i; 
 for (i=1; i<=20; i++) 
 putchar(„*‟); 
 putchar(„\n‟); 
} 
Onde Colocar as Funções 
#include <stdio.h> 
main ( ) 
{ 
 linha ( ); 
 printf(“Hello World\n”); 
 linha( ); 
} 
 
void linha ( ) 
{ 
 int i; 
 for (i=1; i<=20; i++) 
 putchar(„*‟); 
 putchar(„\n‟); 
} 
Erro de Compilação!!! 
“function linha: redefinition” 
 
Onde Colocar as Funções 
• Como na altura em que a função main é compilada o 
compilador ainda não a conhece, este cria um protótipo 
(cabeçalho) para a função linha semelhante a 
 
 int linha ( ); 
 
• Quando encontra a função linha (com o cabeçalho void 
linha ( ) ), o compilador pensa que são duas funções 
distintas (pois devolvem tipos diferentes) mas com 
mesmo nome. 
• Como em C não podem existir duas funções com o 
mesmo nome, o compilador apresenta o correspondente 
erro e termina o processo de compilação. 
• Note que se a função linha devolvesse um inteiro não 
haveria qualquer problema. 
Onde Colocar as Funções 
• Como resolver esse problema? 
 
• Indicar ao compilador qual o cabeçalho da função, 
fazendo a declaração da função da mesma forma 
que se declaram as variáveis. 
 
• A declaração de uma função consiste na escrita do 
seu cabeçalho seguida de um ponto-e-vírgula (;), e 
deve ser realizada antes da utilização da função 
que se quer declarar. 
 
• Tradicionalmente, a declaração é realizada 
imediatamente após os #includes 
Onde Colocar as Funções 
#include <stdio.h> 
void linha ( ); /* Declaração da Função linha */ 
main ( ) 
{ 
 linha ( ); 
 printf(“Hello World\n”); 
 linha( ); 
} 
 
void linha ( ) 
{ 
 int i; 
 for (i=1; i<=20; i++) 
 putchar(„*‟); 
 putchar(„\n‟); 
} 
Protótipos de funções 
• Corresponde ao seu cabeçalho seguido de um ponto-e-
vírgula (;). 
 
• Este identifica toda a estrutura da função (nome, 
parâmetros e tipo de retorno). 
 
• O protótipo de umadeterminada função deve ser 
colocado apenas antes de sua invocação. No entanto, é 
uma boa prática de programação colocar os cabeçalhos de 
todas as funções definidas pelo programador 
imediatamente antes do código da primeira função. 
 
Protótipos de funções 
#include <...> 
void f1 (int n, char ch); /* Protótipos das funções */ 
int max (int n1, int n2); 
main ( ) 
{ 
 ..... 
} 
void f1 (int n, char ch) 
{ 
 ...... 
} 
int max(int n1, int n2) 
{ 
 ..... 
} 
 
Variáveis Locais 
• Vimos que variáveis podem ser declaradas dentro do 
corpo de uma função. 
• Essa variáveis são visíveis (conhecidas) apenas dentro da 
própria função. 
• A declaração de variáveis dentro de uma função deve ser 
realizada antes de qualquer instrução. 
 
função (..................) 
{ 
 declaração de variáveis 
 instruções 
} 
 
Considerações Finais 
• Como a linguagem C não possui um tipo de dados 
específico para representar os valores lógicos Verdade e 
Falso, é necessário que funções que tenham que devolver 
como resultado um valor lógico sejam declaradas como 
devolvendo um valor do tipo int. 
 
Problema: Escreva a função isequal, que verifica se dois 
inteiros são ou não iguais e devolve o correspondente 
resultado. 
 
int isequal (int x, int y) 
{ 
 if (x == y) 
 return 1; 
 else 
 return 0;}

Outros materiais