Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Italo Valcy Programação em C, 2013.1
Programação C
Italo Valcy <italo@dcc.ufba.br>
Aula 04 – Funções
Italo Valcy Programação em C, 2013.1 2 / 35
Todo o material aqui disponível pode, posteriormente, ser utilizado sobre os termos da:
Creative Commons License:
Atribuição - Uso não comercial - Permanência da Licença
http://creativecommons.org/licenses/by-nc-sa/3.0/
Licença de uso e distribuição
Este curso foi baseado no curso “Algoritmos e Programação de
Computadores” do prof. Centoducatte, da UNICAMP, disponível
em <http://www.ic.unicamp.br/~ducatte/mc102/mc102.html>, e
nas aulas de prof. Luciano Oliveira.
Italo Valcy Programação em C, 2013.1 3 / 35
Funções
Italo Valcy Programação em C, 2013.1 4 / 35
Funções
Funções são blocos de código que agrupam
sequências de operações que, atrelados a um
“nome”, podem ser invocados em todo o
programa, de forma que tal sequência possa ser
executada
Italo Valcy Programação em C, 2013.1 5 / 35
Funções
Reaproveitamento de código
Evitar repetição de código ao longo do
programa
Facilitar alterações de um trecho de código
Evitar que blocos de código fiquem muito
grandes e difíceis de entender
Facilitar a leitura do fonte
Separar o programa em blocos, que possam ser
compreendidos separadamente
Motivação
Italo Valcy Programação em C, 2013.1 6 / 35
Funções
Procedimento: agrupa um conjunto de instruções
Função: mesmo que procedimento, porém retorna
um valor!
Exemplo:
Em C, consideraremos tudo como Função
Procedimentos serão funções que retornam “vazio”
Funções vs Procedimentos
void cumprimenta() {
char nome[30];
scanf(“%29[^\n]”,&nome);
printf(“Ola %d!\n”, nome);
}
int quadrado(int x) {
int x2 = x*x;
return(x2);
}
Italo Valcy Programação em C, 2013.1 7 / 35
Funções
Funções da biblioteca padrão do C:
printf()
scanf()
getchar()
gets()
putchar()
strcmp()
strlen()
...
Funções em C
Italo Valcy Programação em C, 2013.1 8 / 35
Funções
Forma geral:
Funções que não retornam nenhum valor,
devem ser do tipo void.
Não é possível definir uma função dentro de
outra
tipo_retorno nome_da_funcao(tipo_param nome_param, ...) {
// comandos
return (valor);
}
Funções em C
Italo Valcy Programação em C, 2013.1 9 / 35
Funções
Após fazer seu processamento, as funções
podem necessitar retornar um valor ou
resultado.
Exemplo:
quadrado(4) => 16
Tipos de retorno:
int, float, double, char, void
O tipo void é usado quando a função não deve
retornar nada. Ex: printf()
Valor de retorno
Italo Valcy Programação em C, 2013.1 10 / 35
Funções
O retorno de uma função é definido pelo
comando return. Ex.:
Provoca uma saída imediata da função
chamadora
Valor de retorno: comando return
...
int quadrado(int x) {
return x*x;
}
...
Italo Valcy Programação em C, 2013.1 11 / 35
Funções
Exemplo de função para calcular o quadrado
de um inteiro:
#include <stdio.h>
int quadrado(int x) {
return x*x;
}
int main() {
int numero;
printf(“Digite um numero: ”);
scanf(“%d”, &numero);
printf(“O quadrado de %d e' %d”, numero, quadrado(numero));
}
Funções em C
Italo Valcy Programação em C, 2013.1 12 / 35
Funções
Em C, todas as funções devem ser definidas
antes da função main().
O nome da função DEVE ser ÚNICO (dentre as
outras funções e variáveis)
A mesma regra de nomenclatura de variáveis é
aplicada à nomenclatura de funções.
Funções em C
Italo Valcy Programação em C, 2013.1 13 / 35
Funções
Na chamada de uma função, o tipo e
quantidade de parâmetros devem acordar com
sua definição
A comunicação com a função é feita através
dos argumentos e parâmetros
Na função, os parâmetros são como variáveis
locais
Parâmetros de funções
Italo Valcy Programação em C, 2013.1 14 / 35
Funções
Parâmetros de funções:
Vetor como parâmetro:
int myfunction(char *vetor_de_char);
Parâmetros de funções
Italo Valcy Programação em C, 2013.1 15 / 35
Funções
Exercício: fazer uma função, pot(x,y), para
calculo da potência de um número x por y (xy )
Não é permitido usar a biblioteca math.h
Exercícios
Italo Valcy Programação em C, 2013.1 16 / 35
Funções
Todo programa em C, deve SEMPRE possuir a
função main() em seu código, independente
das outras funções.
Diversas formas possíveis:
int main () { ... }
main () { ... }
int main(int argc, char **argv) { ... }
A função main
#include <stdio.h>
int main() {
// comandos...
return 0;
}
Italo Valcy Programação em C, 2013.1 17 / 35
Funções
A função main: argc e argv
Programa
Argumentos
Italo Valcy Programação em C, 2013.1 18 / 35
Funções
É possível passar parâmetros para seu programa, via
linha de comando (ou prompt/cmd do Windows):
prompt$ ./soma 10 15
=> 25
Parâmetros são separados por espaço
Use aspas para fazer o escape
Todos os parâmetros são considerados como string
Use as funções de conversão (atoi(), atof(), etc.)
Internamente no seu programa:
argc e argv
A função main: argc e argv
Italo Valcy Programação em C, 2013.1 19 / 35
Funções
argc quantidade de argumentos (> 1)
argv vetor de argumentos (strings)
Todo programa possui no mínimo um argumento: o
nome do programa!
#include <stdio.h>
int main(int argc, char **argv){
if (argc < 2) {
printf("Usage: %s <NOME>\n", argv[0]);
return 1;
}
printf("Ola, %s\n", argv[1]);
return 0;
}
A função main: argc e argv
Italo Valcy Programação em C, 2013.1 20 / 35
Funções
Exemplo: imprimir todos os argumentos:
#include <stdio.h>
int main(int argc, char **argv) {
int i;
for (i=0; i<argc; i++) {
printf("parametro #%d: %s\n",i, argv[i]);
}
return 0;
}
A função main: argc e argv
~> /tmp/egargs argumento1 453 arg sep1 "arg sep2"
parametro #0: /tmp/egargs
parametro #1: argumento1
parametro #2: 453
parametro #3: arg
parametro #4: sep1
parametro #5: arg sep2
Saída:
Italo Valcy Programação em C, 2013.1 21 / 35
Funções
Exercício: fazer um programa para somar dois
números fornecidos vinha linha de comando:
Dica: consulte a referência da função atoi() em
<http://www.cplusplus.com/reference/clibrary/>
A função main: argc e argv
Italo Valcy Programação em C, 2013.1 22 / 35
Funções
Funções recursivas
Recursão é o processo repetitivo
no qual a função chama ela
própria
Sequência de Fibonacci (mat.):
F(n) = F(n-1) + F(n-2)
F(0) = 0 ; F(1) = 1
Solução recursiva:
Problema decomposto: top/down
Problema resolvido: bottom/up
Italo Valcy Programação em C, 2013.1 23 / 35
Funções
Funções recursivas (fatorial)
Exemplo clássico:
Decomposição fatorial
Italo Valcy Programação em C, 2013.1 24 / 35
Funções
Funções recursivas (fatorial)
Exemplo clássic (fatorial.c):
#include <stdio.h>
int fatorial(int num) {
if (num<=1)
return 1;
else
return num*fatorial(num1);
}
int main() {
int x;
scanf("%d", &x);
printf("%d\n", fatorial(x));
return 0;
}
Italo Valcy Programação em C, 2013.1 25 / 35
Funções
Toda função em C precisa ser declarada antes
de ser usada
É possível separar funções em arquivos
diferentes (bibliotecas)
Declaração vs Definição
A declaração pode ser feita através do
protótipo da função
Localização das funções no fonte
Italo Valcy Programação em C, 2013.1 26 / 35
Funções
Protótipo de função
Protótipo: trecho de código que especifica:
Tipo de retorno da função
Nome da função
Tipo dos argumentos
Exemplo:
void funcao1(int a, floar b, char *mystr);
int printf ( const char * format, ... );
Italo Valcy Programação em C, 2013.1 27 / 35
Funções
Protótipo de função
(exemplo)
#include <stdio.h>
int soma(int a, int b);
int mult(int a, int b);
int main() {
int x, y;
printf("Digite x y: ");
scanf("%d %d",&x, &y);
printf("%d + %d = %d\n",x,y,soma(x,y));
printf("%d * %d = %d\n",x,y,mult(x,y));
}
int soma(int a, int b) {
return a + b;
}
int mult(int a, int b) {
return a * b;
}
Italo Valcy Programação em C, 2013.1 28 / 35
Funções
Arquivos de header (.h)
Já que podemos declarar a função (protótipo) e
só defini-la depois...
Podemos separar as declarações/definições
das funções em arquivos diferentes!
Criação de bibliotecas
Uso da diretiva #include
Os códigos objetos devem ser ligados ao
executável em tempo de compilação
Italo Valcy Programação em C, 2013.1 29 / 35
Funções
Arquivos de header (.h)
Exemplo: soma-mult separado em arquivos
matematica.h
#ifndef _MATEMATICA_H_
#define _MATEMATICA_H_
// declaracao de tipos
int soma(int a, int b);
int mult(int a, int b);
#endif
Italo Valcy Programação em C, 2013.1 30 / 35
Funções
Arquivos de header (.h)
Exemplo: soma-mult separado em arquivos
matematica.c
int soma(int a, int b) {
return a + b;
}
int mult(int a, int b) {
return a * b;
}
Italo Valcy Programação em C, 2013.1 31 / 35
Funções
Arquivos de header (.h)
Exemplo: soma-mult separado em arquivos
somamult.c
#include <stdio.h>
#include "matematica.h"
int main() {
int x, y;
printf("Digite x y: ");
scanf("%d %d",&x, &y);
printf("%d + %d = %d\n",x,y,soma(x,y));
printf("%d * %d = %d\n",x,y,mult(x,y));
return 0;
}
Italo Valcy Programação em C, 2013.1 32 / 35
Funções
Arquivos de header (.h)
O processo de compilação:
Italo Valcy Programação em C, 2013.1 33 / 35
Funções
Arquivos de header (.h)
O processo de compilação:
Na linha de comando:
gcc -c matematica.c
gcc -c soma-mult.c
gcc matematica.o soma-mult.o -o soma-mult
matematica.c
somamult.c
matematica.o
somamult.o
somamult
Italo Valcy Programação em C, 2013.1 34 / 35
Exercício
Exer04 (main.c, busca-binaria.h e busca-binaria.c):
Escrever um programa que faz busca binária de um
número X, informado pelo usuário, em um vetor de valores
de uma P.A., cujos parâmetros serão fornecidos pelo
usuário (A1, R e N, com 1<=N<=200). A busca deve ser
implementada como uma função, definida em um arquivo
separado da função main(). O programa imprimir na saída
padrão a quantidade de passos (comparações com uma
posição do vetor) necessários para encontrar (ou não) o
número X.
DICA: para navegar nos sub-vetores, use indices esq e dir
Italo Valcy Programação em C, 2013.1 35 / 35
Exercício
Exer04: Exemplos
Entrada1:
10 3 8
15
Saida1:
3
Entrada2:
0 2 9
14
Saida2:
3
Slide 1
Slide 2
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 10
Slide 11
Slide 12
Slide 13
Slide 14
Slide 15
Slide 16
Slide 17
Slide 18
Slide 19
Slide 20
Slide 21
Slide 22
Slide 23
Slide 24
Slide 25
Slide 26
Slide 27
Slide 28
Slide 29
Slide 30
Slide 31
Slide 32
Slide 33
Slide 34
Slide 35