Escolar Documentos
Profissional Documentos
Cultura Documentos
Linguagem C: funções
Profª. Paulo Vidal
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 1/96
14/11/22, 09:42 Linguagem C: funções
Objetivos
Módulo 1 Módulo 2
Módulo 3 Módulo 4
Introdução
De forma paralela ao desenvolvimento dos computadores digitais, ocorreu o
das linguagens de programação. Podemos classificar essas linguagens em
gerações.
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 3/96
14/11/22, 09:42 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 4/96
14/11/22, 09:42 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 5/96
14/11/22, 09:42 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 6/96
14/11/22, 09:42 Linguagem C: funções
Opção 1 Opção 2
Usar o mesmo conjunto de instruções Criar uma função e chamá-la sempre
sempre que quiser realizar a tarefa. que tiver de realizar essa tarefa.
Usar a opção 2 é uma boa prática. Um bom programador, afinal, sempre usa
funções ao escrever código em C. Na linguagem C, todas as ações ocorrem
dentro de funções. O programa principal, aliás, é uma função. Vejamos um
exemplo com um código que imprime duas frases:
Linguagem C
content_copy
1 #include <stdio.h>
2 main()
3 {
4 printf('Seja bem-vindo(a).\n');
5 printf('Ao módulo 1.\n');
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 7/96
14/11/22, 09:42 Linguagem C: funções
6 }
7
Atenção!
Sintaxe da função
Agora aprenderemos como criar funções definidas pelo usuário e como usá-las
na programação C. A declaração de uma função é dividida em dois passos:
code code
Passo 1 Passo 2
arrow_forward
Declaração do protótipo da Declaração da função
função. propriamente dita.
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 9/96
14/11/22, 09:42 Linguagem C: funções
Pseudocódigo
content_copy
Pseudocódigo
content_copy
Dica
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 10/96
14/11/22, 09:42 Linguagem C: funções
Parâmetros expand_more
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 11/96
14/11/22, 09:42 Linguagem C: funções
Linguagem C
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 12/96
14/11/22, 09:42 Linguagem C: funções
3 return soma;
4 }
5
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 13/96
14/11/22, 09:42 Linguagem C: funções
Exemplo 1
info_outlineTUTORIAL
d content_copyCOPIAR
C Input
1 #include <stdio.h>
2 main() {
3 int i;
4
5 for (i=1 ; i<=4 ; i++)
6 putchar('*');
7 putchar('\n');
8 Console
play_arrow Executar
9 for (i=1 ; i<=6 ; i++)
10 putchar('*');
11 putchar('\n');
12
13 for (i=1 ; i<=8 ; i++)
14 putchar('*');
Dica
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 14/96
14/11/22, 09:42 Linguagem C: funções
Para imprimir cada linha, utiliza-se o comando for nas linhas 5, 9, 13 e 17. Dentro
do for, existe a função putchar(), tendo como argumento o caractere '*' a ser
impresso (linhas 6, 10, 14 e 18). A função tem a seguinte sintaxe:
Pseudocódigo
content_copy
Se olharmos com atenção o código, veremos que o comando for aparece quatro
vezes, diferindo somente no número de iterações, o qual, por sua vez, representa
o tamanho da linha. Se quisermos modificar o programa para imprimir mais
linhas com asteriscos, precisaremos incluir mais linhas com outros laços de
repetição for, ou seja, teremos de colocar mais código.
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 15/96
14/11/22, 09:42 Linguagem C: funções
Linguagem C
content_copy
1 main() {
2 linha(4);
3 linha(6);
4 linha(8);
5 linha(10);
6 }
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 16/96
14/11/22, 09:42 Linguagem C: funções
Como seria então escrita a função linha? Essa função recebe, dentro de
parênteses, um valor do tipo inteiro a ser atribuído a uma variável: o parâmetro.
Uma vez atribuído o argumento ao parâmetro, o laço for, na função linha, terá de
executar o número de vezes que está armazenado nessa variável.
Exemplo 2
info_outlineTUTORIAL
d content_copyCOPIAR
C Input
1 #include <stdio.h>
2
3 void linha(int num) {
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 17/96
14/11/22, 09:42 Linguagem C: funções
4 int i;
5 for (i=1 ; i<=num ; i++)
6 putchar('*');
7 putchar('\n');
8 } Console
play_arrow Executar
9
10 main() {
11 linha(4);
12 linha(6);
13 linha(8);
14 linha(10);
Exemplo 1 Exemplo 2
Uma variável é uma entidade capaz de armazenar um objeto de dados. Para isso,
toda variável possui:
Global Local
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 20/96
14/11/22, 09:42 Linguagem C: funções
Linguagem C
content_copy
Linguagem C
content_copy
Um parâmetro não é nada mais do que uma variável local à função a que
pertence. Ele é automaticamente inicializado com o valor do argumento enviado
pela função invocadora.
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 22/96
14/11/22, 09:42 Linguagem C: funções
Atenção!
Linguagem C
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 23/96
14/11/22, 09:42 Linguagem C: funções
7 {
8 …
9 funcao1( ‘B’, 125, 20.456); /* chamada da função */
10 …
11 {
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 24/96
14/11/22, 09:42 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 25/96
14/11/22, 09:42 Linguagem C: funções
Exemplo 3
info_outlineTUTORIAL
d content_copyCOPIAR
C Input
1 #include <stdio.h>
2
3 linha(int num,char ch)
4 {
5 int i;
6 for (i=1 ; i<=num ; i++)
7 putchar(ch);
8 putchar('\n'); Console
play_arrow Executar
9 }
10
11 main()
12 {
13 linha(3,'+');
14 linha(5,'+');
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 26/96
14/11/22, 09:42 Linguagem C: funções
O corpo da função
O corpo de uma função possui três características:
Atenção!
O cabeçalho de uma função nunca deve ser seguido de ponto e vírgula (;), caso
contrário, estaríamos declarando um protótipo da função.
code code
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 27/96
14/11/22, 09:42 Linguagem C: funções
Para calcular a soma de dois números inteiros, a função responsável por essa
tarefa precisa ter a capacidade de realizar a soma e de retornar o resultado dela,
como no código a seguir:
Repare as duas instruções acima. A função soma terá de receber dois inteiros (3
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 28/96
14/11/22, 09:42 Linguagem C: funções
Linguagem C
content_copy
Dica
Na linguagem C, o tipo default de retorno é int, isto é, caso o tipo da função seja
omitido, o tipo de retorno será int.
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 29/96
14/11/22, 09:42 Linguagem C: funções
Repare que a soma de nr1 e nr2 é colocada numa variável do tipo inteiro
(resultado) cujo objeto de dados armazenado por ela é, em seguida, devolvido
como resultado da função. Os parâmetros da função são nr1 e nr2. O valor a
retornar é armazenado na variável resultado.
Escopo de variáveis
Como vimos, as variáveis podem ser declaradas dentro do corpo de uma função.
Elas são visíveis, ou seja, conhecidas apenas dentro da própria função. Por isso,
são denominadas variáveis locais.
Pseudocódigo
content_copy
1 função( ..........)
2 {
3 declaração de variáveis
4 instruções
5 }
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 30/96
14/11/22, 09:42 Linguagem C: funções
Exemplo 4
info_outlineTUTORIAL
d content_copyCOPIAR
C Input
1 #include <stdio.h>
2
3 void escopo1() {
4 int A;
5 A = -100;
6 printf("Valor de A dentro
7 }
8 Console
play_arrow Executar
9 void escopo2() {
10 int A;
11 A = -200;
12 printf("Valor de A dentro
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 31/96
14/11/22, 09:42 Linguagem C: funções
13 }
14
Valor de A na Valo
Execução
função main() função
Linha 17 10
Linha 18 10
Linha 19 20
Linha 20 20
Linha 5 20
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 32/96
14/11/22, 09:42 Linguagem C: funções
Valor de A na Valo
Execução
função main() função
Linha 6 20
Linha 21 20
Linha 22 30
Linha 23 30
Linha 11 30
Linha 12 30
Linha 24 30
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 34/96
14/11/22, 09:42 Linguagem C: funções
Questão 1
A Resultado = 60
B Resultado = 16
C Resultado = 32
D Resultado = 10
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 35/96
14/11/22, 09:42 Linguagem C: funções
E Resultado = 8
Questão 2
Valor de X = 21, Y = 49
A
Valor de X = 21, Y = 49
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 36/96
14/11/22, 09:42 Linguagem C: funções
Valor de X = 21, Y = 50
B
Valor de X = 21, Y = 50
Valor de X = 20, Y = 50
C
Valor de X = 20, Y = 50
Valor de X = 21, Y = 49
D
Valor de X = 20, Y = 50
Valor de X = 20, Y = 50
E
Valor de X = 21, Y = 49
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 37/96
14/11/22, 09:42 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 38/96
14/11/22, 09:42 Linguagem C: funções
Linguagem C
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 39/96
14/11/22, 09:42 Linguagem C: funções
Linguagem C
content_copy
1 int vet1[20];
2 int vet2[30];
Imaginemos que seja nossa intenção iniciar os vetores vet1 e vet2 com o valor
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 40/96
14/11/22, 09:42 Linguagem C: funções
zero em todas as posições e que pretendamos utilizar uma função para realizar
tal carga inicial. Como os vetores possuem dimensões diferentes, teremos
eventualmente de definir duas funções distintas (uma para vetores com 20
inteiros e outra para aqueles com 30 inteiros). Escrevamos o código de cada
uma delas:
Linguagem C
content_copy
Temos, assim, o código das funções inic1 e inic2. Cada uma tem como
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 41/96
14/11/22, 09:42 Linguagem C: funções
Linguagem C
content_copy
1 main()
2 {
3 int vet1[20];
4 int vet2[30];
5 inic1(vet1); /* Iniciar o vetor vet1 usando a função
6 inic2(vet2); /* Iniciar o vetor vet2 usando a função
7 }
8
Repare que é enviado um vetor com 20 inteiros à função inic1, que deve ter um
parâmetro do mesmo tipo da variável. Observe ainda que as funções inic1 e inic2
têm semânticas muito parecidas.
Linguagem C
content_copy
1 int *a;
code Linha 1
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html#
Ch d d l ã d iá l 43/96
14/11/22, 09:42 Linguagem C: funções
Chamamos esse endereço de alocação da variável.
code Linha 2
code Linha 3
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html#
t i i t t bj t d d d tid 44/96
14/11/22, 09:42 Linguagem C: funções
se a ponteiros e interpreta o objeto de dados contido no
endereço armazenado em seu argumento como um inteiro.
Lembre-se de que “b” foi declarada como int *b; por isso, o
operador “*” interpreta o conteúdo do endereço armazenado
por b como inteiro. Dessa forma, como o endereço
armazenado em “b” é o endereço da alocação de “a”, o
conteúdo interpretado é o da variável “a”: 10. Sendo assim, o
resultado da execução seria:
10
0x0300
Imagine que desejemos criar uma única função para inicializar vetores de
inteiros de qualquer tamanho. Como procederíamos? Simples: em vez de passar
o vetor com seu tamanho como parâmetro, passaremos um ponteiro. O código a
seguir exemplifica o uso:
Linguagem C
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 45/96
14/11/22, 09:42 Linguagem C: funções
content_copy
“s” “tam”
É um ponteiro. O parâmetro “s” foi É um inteiro. O parâmetro “tam” foi
declarado como ponteiro, embora, no utilizado para definir até onde
corpo da função, tenha sido utilizado inicializar o vetor.
como vetor.
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 46/96
14/11/22, 09:42 Linguagem C: funções
Como exemplo, construiremos uma função que receba uma matriz quadrada e
retorne a soma dos elementos da diagonal principal. Uma matriz quadrada é
definida como uma matriz com o número de linhas igual ao de colunas, tendo a
diagonal principal composta pelos elementos que têm o índice da linha igual ao
da coluna de uma matriz quadrada. Uma matriz M3x3 possui 9 valores, enquanto
a diagonal principal é formada por 3 elementos (M1,1, M2,2, M3,3). Nosso
próximo programa calcula a soma da diagonal principal de uma matriz quadrada
M3x3 , utilizando uma função para executar essa tarefa.
Exemplo 1
info_outlineTUTORIAL
d content_copyCOPIAR
C Input
1 #include <stdio.h>
2 int soma_diagonal(int mat[3][3
3 int soma = 0;
4 for (int i=0; i < 3 ; i++
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 47/96
14/11/22, 09:42 Linguagem C: funções
5 {
6 for (int j=0; j < 3
7 if(i == j)
8 Console
play_arrow Executar
9 soma = som
10 }
11 return soma;
12 }
13 main()
14 {
code Linha 2
code Linha 3
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html#
D fi i ã d iá l ti i t d 48/96
14/11/22, 09:42 Linguagem C: funções
Definição da variável tipo int com zero, usada para
armazenar a soma dos elementos da diagonal principal.
code Linha 4
code Linha 5
code Linha 6
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html#
C d if (i j) id tifi l t d di l 49/96
14/11/22, 09:42 Linguagem C: funções
Comando if (i == j) para identificar os elementos da diagonal
principal.
code Linha 7
code Linha 8
code Linhas 13 a 15
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html#
D fi i ã i i i li ã d ti Ob l t 50/96
14/11/22, 09:42 Linguagem C: funções
Definição e inicialização da matriz. Observe os elementos
das linhas 0, 1 e 2.
code Linha 16
Recomendação
Retorne ao emulador, altere os valores e faça novos testes. Aproveite a
oportunidade para fixar os conceitos abordados e estimular o raciocínio lógico.
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 51/96
14/11/22, 09:42 Linguagem C: funções
Linguagem C
content_copy
1 struct pessoa
2 {
3 char nome[50];
4 int idade;
5 float salario;
6 };
Linguagem C
content_copy
Linguagem C
content_copy
1 funcionario.idade = 50;
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 53/96
14/11/22, 09:42 Linguagem C: funções
Entendamos, por meio de um exemplo, como é possível passar uma struct como
parâmetro para uma função. Nosso próximo programa apresenta uma função
que permita escrever na tela os valores existentes em uma estrutura recebida
como argumento. Essa estrutura possui informações de um funcionário, como
nome completo, idade e salário.
Exemplo 2
info_outlineTUTORIAL
d content_copyCOPIAR
C Input
1 #include <stdio.h>
2
3 struct pessoa
4 {
5 char nome[50];
6 int idade;
7 float salario;
8 }; Console
play_arrow Executar
9
10 void exibir(struct pessoa f)
11 {
12 printf("Nome : %s\n",f.no
13 printf("Idade : %d\n",f.i
14 printf("Salário : %.2f\n"
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 54/96
14/11/22, 09:42 Linguagem C: funções
code Linhas 3 a 8
code Linha 10
code Linhas 11 a 15
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 55/96
14/11/22, 09:42 Linguagem C: funções
code Linha 19
Inicializa a variável p.
code Linha 20
Questão 1
A -225
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 57/96
14/11/22, 09:42 Linguagem C: funções
B -23
C 20
D 19
E 225
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 58/96
14/11/22, 09:42 Linguagem C: funções
Questão 2
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 59/96
14/11/22, 09:42 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 60/96
14/11/22, 09:42 Linguagem C: funções
3 - Recursividade
Ao final deste módulo, você será capaz de aplicar o conceito de recursividade na programação.
Conceito de recursividade
Nós, seres humanos, temos como
característica o pensamento linear.
Por exemplo, se desejo fazer um bolo,
procuro a receita do bolo e sigo a
receita linearmente, passo a passo.
Inicialmente, executo o primeiro
passo, como colocar a farinha no
pote. Após isso, faço o segundo,
Seguir a receita de um bolo é um processo linear ou
seguindo essa linha até o último não recursivo.
passo: colocar o bolo para assar no
forno. Esse é o típico pensamento
linear ou não recursivo.
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 61/96
14/11/22, 09:42 Linguagem C: funções
Subproblema 1 Subproblema 2
De tamanho 1 (que chamamos de Determinação do máximo na
problema trivial ou infantil). sequência de tamanho n -1, isto é, a
sequência: s2, s3, ..., sn.
Nesse ponto surge a recursividade: o máximo da sequência s2, s3, ..., sn pode
ser resolvido da mesma forma, ou seja, é o máximo entre s2 e o máximo da
sequência s3, s4, ... sn. Tal é a essência do pensamento recursivo.
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 62/96
14/11/22, 09:42 Linguagem C: funções
Passo 1 expand_more
Observe que, sem usar outro algoritmo, não conseguimos dizer quem é o
máximo de 8, 20, 16. Sendo assim, o passo 2 é necessário.
Passo 2 expand_more
Mais uma vez, não é possível apontar quem é o máximo da sequência 20,
16 sem executar um algoritmo, o que induz ao passo 3.
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 63/96
14/11/22, 09:42 Linguagem C: funções
Passo 3 expand_more
Voltemos ao:
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 64/96
14/11/22, 09:42 Linguagem C: funções
Recursividade em C
Para as linguagens de programação, a recursividade é entendida como a
capacidade que uma linguagem tem de permitir que uma função possa invocar a
si mesma. A recursividade pode ser:
Direta Indireta
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 65/96
14/11/22, 09:42 Linguagem C: funções
Exemplo 1
info_outlineTUTORIAL
d content_copyCOPIAR
C Input
1 #include <stdio.h>
2 int fatorial(int n) {
3 int fat = 1;
4 for(int i = 1; i <= n; i+
5 fat = fat * i;
6 return fat;
7 }
8 main() Console
play_arrow Executar
9 {
10 int n;
11 printf("Entre com um núme
12 scanf("%d", &n);
13 printf("%d! = %u\n",n,fat
14 }
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 66/96
14/11/22, 09:42 Linguagem C: funções
0! = 1
n! = n * (n-1)!
Agora, vamos construir uma função que calcule o valor do fatorial de n utilizando
o conceito de recursividade. A recursividade é uma forma de implementar um
laço por meio de chamadas sucessivas à mesma função.
Exemplo 2
info_outlineTUTORIAL
d content_copyCOPIAR
C Input
1 #include <stdio.h>
2
3 int fatorial(int n) {
4 if (n==0) /* Condição pa
5 return 1;
6 else
7 return n*fatorial(n-
8 } Console
play_arrow Executar
9
10 main() {
11 int n;
12 printf("Entre com um núme
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 67/96
14/11/22, 09:42 Linguagem C: funções
13 scanf("%d", &n);
14 i tf("%d! % \ " f t
Passo 1 expand_more
fatorial(4) = 4 * fatorial(3)
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 68/96
14/11/22, 09:42 Linguagem C: funções
Passo 2 expand_more
Passo 3 expand_more
Passo 4 expand_more
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 69/96
14/11/22, 09:42 Linguagem C: funções
fatorial(1) = 1 * fatorial(0) = 1 * 1 = 1.
Linguagem C
content_copy
1 int fatorial(int n) {
2 return n*fatorial(n-1); /* chamada recursiva */
3 }
O programa entraria em laço infinito (loop), pois a função não pararia de chamar
a si própria até esgotar toda a memória disponível.
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 70/96
14/11/22, 09:42 Linguagem C: funções
Critério de término
Chamada recursiva
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 71/96
14/11/22, 09:42 Linguagem C: funções
Menos código
Questão 1
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# i id d di 72/96
14/11/22, 09:42 Linguagem C: funções
B recursividade direta.
C lista circular.
D recursividade indireta.
E lista indireta.
A recursividade indireta ocorre quando uma função, que vamos nominar f1,
faz chamada a outra função (nominada f2). Caso a função f2 chame f1 em
seu interior, temos um exemplo de recursividade indireta.
Questão 2
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 73/96
14/11/22, 09:42 Linguagem C: funções
Javascript
content_copy
A 4
B 128
C 16
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 74/96
14/11/22, 09:42 Linguagem C: funções
C 16
D 64
E 32
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 75/96
14/11/22, 09:42 Linguagem C: funções
Bibliotecas
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 77/96
14/11/22, 09:42 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 78/96
14/11/22, 09:42 Linguagem C: funções
Interpretação Compilação
Comando a comando. Todos os comandos do programa de
uma única vez.
Comentário
Existem vantagens e desvantagens em ambas, mas não nos aprofundaremos
nessas questões.
Suponha que um programa seja composto por vários arquivos diferentes, cada
um agrupando funções relacionadas a alguma funcionalidade, como, por
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 79/96
14/11/22, 09:42 Linguagem C: funções
Isso é feito por outro aplicativo: o link editor. Sendo assim, para gerar um
programa executável, são necessários dois passos:
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 80/96
14/11/22, 09:42 Linguagem C: funções
Aqui surge um problema. Suponha que, dentro de uma função contida no arquivo
principal.c, haja a necessidade de invocar outra declarada em gui.c. Vamos supor
ainda, por exemplo, que precisemos chamar a função draw_window(), a qual, por
questões de simplificação, não tem parâmetros.
Recomendação
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 81/96
14/11/22, 09:42 Linguagem C: funções
protótipos de funções daquele arquivo “.c” associado. Por isso, não ocorrem
erros de compilação.
Qual é a relação disso tudo com o uso de bibliotecas padrão? Uma biblioteca
nada mais é do que um código em linguagem C já compilado pelo fornecedor da
biblioteca, que será o link editado com o seu código em linguagem C. Entretanto,
para que o compilador seja capaz de não reportar erros no passo de compilação,
será necessário adicionar o arquivo “.h”, que contém os protótipos das funções
implementadas na biblioteca. A imagem a seguir ilustra tal processo:
Vamos ao exemplo. Suponha que nosso desejo seja compilar o código a seguir:
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 82/96
14/11/22, 09:42 Linguagem C: funções
Linguagem C
content_copy
1 #include ”gui.h”
2 #include “db.h”
3
4 void desenha_resposta_consulta ()
5 {
6 char saida[80];
7 query_db (saída,”select * from aluno where matricula=
8 draw_window (saida);
9 }
Linguagem C
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 83/96
14/11/22, 09:42 Linguagem C: funções
Linguagem C
content_copy
Podemos perceber que os protótipos das funções utilizadas estão nos arquivos
“.h”; assim, o compilador substituirá a diretiva “#include” pelo conteúdo do
arquivo. Ou seja, para fins de análise, o compilador “verá” o código a seguir:
Linguagem C
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 84/96
14/11/22, 09:42 Linguagem C: funções
6 void desenha_resposta_consulta ()
7 {
8 char saida[80];
9 query_db (saída,”select * from aluno where matricula
10 draw_window (saida);
11 }
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 85/96
14/11/22, 09:42 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 86/96
14/11/22, 09:42 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 87/96
14/11/22, 09:42 Linguagem C: funções
Exemplo 1
info_outlineTUTORIAL
d content_copyCOPIAR
C Input
1 #include <stdio.h>
2 #include <math.h>
3 main()
4 {
5 float num, raiz;
6 printf("Digite um número:
7 scanf("%f", &num);
8 raiz = sqrt(num); /* FUNÇÃ Console
play_arrow Executar
9 printf("Raiz quadrada de %
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 88/96
14/11/22, 09:42 Linguagem C: funções
10 }
11
Recomendação
Aproveite para estudar mais e fazer novos testes. Desafie-se a implementar
outros programas. É muito importante que você pratique os conceitos estudados
e procure descobrir novos caminhos para as soluções desejadas. A evolução é
resultado da prática constante. Não desista, você está no caminho certo!
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 89/96
14/11/22, 09:42 Linguagem C: funções
Questão 1
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 90/96
14/11/22, 09:42 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 91/96
14/11/22, 09:42 Linguagem C: funções
Questão 2
E
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 92/96
14/11/22, 09:42 Linguagem C: funções
E < string.h >
O arquivo < ctype.h > define o conjunto de funções usado para classificar
caracteres por seus tipos ou para converter entre maiúsculas e minúsculas
de uma forma que seja independente do conjunto de caracteres usado
(normalmente ASCII ou uma de suas extensões), além de, entre outras
funções, verificar se determinado caractere é minúsculo ou maiúsculo.
Considerações finais
Iniciamos este conteúdo com a apresentação da estrutura de uma função: o tipo,
o nome, os parâmetros, o corpo da função e o valor de retorno. Pontuamos, em
seguida, que o código de uma função só é executado quando ela é invocada em
alguma parte do programa.
Vimos ainda que qualquer tipo de dados da linguagem pode ser enviado como
parâmetro para uma função, mesmo o tipo de dado que venha a ser definido pelo
programador. Esses tipos podem ser de dados básicos, bem como tipos
definidos pelos usuário, como vetores, matrizes e estruturas.
headset Podcast
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 94/96
14/11/22, 09:42 Linguagem C: funções
Referências
DAMAS, L. Linguagem C. 10. ed. Rio de Janeiro: LTC, 2007.
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 95/96
14/11/22, 09:42 Linguagem C: funções
Explore +
Consulte na internet:
• GNU. The GNU C reference manual. Consultado na internet em: 3 nov. 2021.
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html# 96/96