Programação de Computadores I
Engenharia de Computação
2018/2
CEFET-MG
Introdução às funções
Exemplo de programa:
Escrever um programa que imprima o seguinte:
*************************
Números entre 1 e 5
*************************
1
2
3
4
5
*************************
Introdução às funções
//demonstra a necessidade de definição de funções #include<stdio.h>
int main() {
int i;
for (i=1; i<=20; i++) putchar('*');
putchar('\n');
puts("Números entre 1 e 5");
for (i=1; i<=20; i++) putchar('*');
putchar('\n');
for (i=1; i<=5; i++) printf("%d\n",i);
for (i=1; i<=20; i++) putchar('*');
putchar('\n');
Introdução às funções
//demonstra a necessidade de definição de funções #include<stdio.h>
int main() {
int i;
for (i=1; i<=20; i++) putchar('*');
putchar('\n');
puts("Números entre 1 e 5");
for (i=1; i<=20; i++) putchar('*');
putchar('\n');
for (i=1; i<=5; i++) printf("%d\n",i);
for (i=1; i<=20; i++) putchar('*'); putchar('\n'); return 0; }
código
repetido
O ideal seria não precisar repetir o código
e ainda assim obter o mesmo
Solução: funções
Funções
pequeno trecho de código que faz uma única tarefa
recebe um nome específico (identificador)
maneira conveniente de
encapsular
uma computação
funções bem projetadas podem ser usadas sem
preocuparmos com sua implementação
precisamos saber O QUE a função faz, não COMO ela faz
muitas linguagens oferecem o conceito de função
Tipos de funções
funções pré-definidas pela linguagem
funções da biblioteca
definidas nos arquivos da biblioteca da linguagem
funções definidas pelo programador
escritas pelo programador nos programas...
Funções
Objetivos da definição de funções
reduzir a complexidade de um programa
elaborar a solução em partes pequenas e bem definidas
uma tarefa complexa é dividida em funções
evitar a repetição de código ao longo do programa
diminui o tamanho do código
menos erros, menor custo, menor tempo de programação
reutilizar código
código já testado, sem erros => custo menor de programação e maior
confiabilidade
Características de uma função - parte I
uma função deve realizar uma única tarefa bem definida
toda função tem um nome único
serve para que a função seja invocada (chamada)
uma função pode ser chamada a partir de outras funções
por exemplo, a partir de main ( )
uma função deve ser programada de forma a fazer exatamente
●
Características de uma função – parte II
o código da função deve ser independente do programa e deve
ser tão genérico quanto possível
para que possa ser utilizado em outros programas
uma função pode receber parâmetros de execução para se
adaptar a situações distintas e ser genérica
uma função pode retornar um valor como resultado de seu
trabalho
Sintaxe das funções em C
Especificador_de_tipo nome_da_função ( lista de parâmetros ) {
corpo da função
}
Especificador_de_tipo - especifica o tipo de valor que o comando return
da função devolve, podendo ser qualquer tipo válido
nome_da_função - é um identificador escolhido pelo programador que não
se deve repetir; segue as mesmas regras para definição de identificadores
lista de parâmetros - é uma lista de nomes e tipos de variáveis separadas
Corpo da função
Corpo da função: segue o cabeçalho da função e é escrito entre
chaves { }
é constituído por instruções em C de acordo com a sintaxe da
linguagem
em
C não se pode definir funções dentro de funções
portanto, todas as funções estão no mesmo nível
Como é a execução de uma função:
sempre que uma função é invocada pelo programa, os comandos do corpo da função são executados, um a um, sequencialmente, até terminar o corpo da função ou até ser encontrada uma instrução return
Funções: voltando ao exemplo inicial
Resolução do programa anterior recorrendo às funções
#include<stdio.h>
void linha() {
int i;
for (i=1; i<=20; i++) putchar('*'); putchar('\n'); } int main(){ int i; linha();
puts("Números entre 1 e 5"); linha();
Execução de uma função: como funciona
o código de uma função só é executado quando a função é
chamada no programa
quando a função é chamada, a execução do programa "salta" para o
início da função
as instruções da função são executadas uma a uma, sequencialmente
quando a execução da função termina, a execução do programa
continua no comando seguinte à chamada da função
ao chamar a função, o programa pode enviar argumentos
Funções – tipo de retorno e parâmetros
tipo de retorno:
boa prática de programação: especificar SEMPRE o tipo de retorno
uma função pode não ter parâmetros
neste caso a lista de parâmetros é vazia
todos os parâmetros da função devem incluir o tipo e o nome da
Passagem de parâmetros à função
//programa que define função abs #include <stdio.h>
int abs (int x) { //x é o número a ser analisado return ( (x < 0 ) ? -x : x );
}
int main ( ) { int num;
printf ("Digite um valor:\n"); scanf ("%d", &num );
printf ("Valor absoluto de %d é %d\n",num,abs(num)); return 0;
}
Programa para imprimir o valor absoluto de um número
Chamada da função
Parâmetros e argumentos
comunicação de uma função com o programa ou com outra função:
feita através de argumentos e parâmetros
a função define os parâmetros que pode receber
número e tipo
quem chama a função passa os argumentos
um argumento para cada parâmetro definido e do mesmo tipo!
passagem de parâmetros é por valor:
Parâmetros e argumentos
Exemplo
float
exemplo
(
int i, char ch, float valor, double pi
);
int main( ) {
int a;
char continua;
float valor;
double pi;
...
exemplo
(a, continua, valor, pi);
...
}
variáveis locais
à função main ()
parâmetros:
variáveis locais
à função
exemplo ()
argumentos passados deComando return
permite a atribuição de uma expressão a uma função
força o retorno imediato ao ponto de chamada da função
Ex:
float potencia (float base, int expoente) { int i;
float resultado = 1; if (expoente == 0) return 1;
for (i = 1; i <= expoente; i++) resultado *= base;
Funções que não retornam valores
o tipo de retorno é
void
também conhecidas como procedimentos
#include <stdio.h>
void desenha();
int main() { desenha();
printf ("1a. funcao\n"); desenha();
return 0; }
void desenha() { int i;
for (i = 0; i <= 10; i++) printf ("*");
printf("\n"); }
***********
1a. funcao
***********
Variáveis globais e locais
variáveis locais
são definidas dentro de uma função
são conhecidas apenas dentro do bloco da função
portanto, só podem ser usadas dentro do próprio bloco são criadas quando são declaradas
são destruídas no final da execução da função: variáveis automáticas
variáveis globais
são variáveis criadas (definidas) fora de qualquer função
são conhecidas em todo o arquivo, a partir do ponto de definição evite ao máximo o uso de variáveis globais!!
são complexas de administrar pois podem ser acessadas por qualquer
Escopo de variáveis
ESCOPO: região do programa onde a variável é válida
void desenha ( ){
int i, j; // variáveis locais a desenha . . .
}
void calcula ( ) {
int i, j; //variáveis locais a calcula
. . .
}
int main ( ) {
int a; //variável local a main
desenha();
a = i; // erro de compilação . . .
}
i,j em
desenha()
são variáveis diferentes de
i,j em
Exercício: calcular a série
S(x, n) = x/1! + x
2/2! + x
3/3! + ... + x
n/ n!
#include <stdio.h>
float serie (float x, int n);
float potencia (float base, int expoente); int fat (int n);
int main(){ float x; int termos;
printf("Numero de termos: "); scanf("%d", &termos);
printf("valor de X: "); scanf("%f", &x);
printf("O valor da série = %f\n ", serie(x, termos)); return 0;
Continuação ...
float serie (float x, int n){
int i;
float resultado = 0;
for (i = 1; i <= n; i++)
resultado += (potencia(x,i)/fat(i)); return resultado;
}
float potencia (float base, int expoente){ int i;
float resultado = 1; if (expoente == 0) return 1;
for (i = 1; i <= expoente; i++) resultado *= base;
return resultado; }
int fat (int n){
int i, resultado = 1;
for ( i = 1; i <= n; i ++) resultado *= i;
return resultado; }
Importante:
observem que a impressão
dos resultados está apenas
em
main ()
!
Não há
NENHUM
printf()
nem
scanf()
nas
funções, apenas
Protótipos de função e organização do programa
protótipo de uma função
corresponde a seu cabeçalho seguido de
;
declara a função ao compilador, seus parâmetros e tipo de
retorno
organização do programa
boa prática de programação