Buscar

Linguagem C_ funções

Prévia do material em texto

Objetivos
Módulo 1
Linguagem C:
funções
Profª. Paulo Vidal
Descrição
A definição das funções em linguagem C, sua
aplicação e os principais conceitos em sua
utilização, incluindo passagem de
parâmetros, retorno de valores e recursão.
Acesso às bibliotecas padrão, além de
vantagens do emprego delas.
Propósito
A linguagem C é muito utilizada no
desenvolvimento de softwares básicos e de
aplicativos que demandam um desempenho
avançado. Recurso avançado dessa
linguagem, as funções utilizadas no
desenvolvimento de programas com
linguagem C permitem ao programador fazer
com que eles sejam mais confiáveis e
manuteníveis.
Preparação
Para editar, compilar e executar os
programas deste conteúdo, é necessário
utilizar uma ferramenta de desenvolvimento
de programas na linguagem C. Existem três
compiladores de utilização grátis em
sistemas operacionais Windows:
CodeBlocks, DevC++ e Genny. Escolha uma
das ferramentas para desenvolver os
programas descritos em exemplos e
exercícios. Caso você possua outro
compilador para a linguagem C diferente dos
citados acima, também pode utilizá-lo.
Buscar Baixar conteúdo em PDF Vídeos Menu
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 1/62
Funções: forma geral, valor de retorno, passagem de
parâmetros e escopo
Identificar na função o nome, os parâmetros, o valor de retorno
e o escopo de variáveis.
Acessar módulo
Módulo 2
Matrizes e estruturas como argumentos de função
Empregar como parâmetros de uma função vetores, matrizes e
estruturas.
Acessar módulo
Módulo 3
Recursividade
Aplicar o conceito de recursividade na programação.
Acessar módulo
Módulo 4
Utilização de biblioteca padrão
Selecionar as funções na biblioteca padrão adequadas à
solução de um programa.
Acessar módulo
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 2/62
1
Funções: forma geral, valor de retorno, passagem de parâmetros e escopo
Ao final deste módulo, você será capaz de identificar na função o nome, os parâmetros, o valor de retorno e o escopo de variáveis.
De forma paralela ao desenvolvimento dos computadores digitais,
ocorreu o das linguagens de programação. Podemos classificar
essas linguagens em gerações.
As de primeira geração são as linguagens de máquina, isto é,
linguagens executadas diretamente pelo hardware. A principal
característica delas é não abstrair as operações executadas pela
plataforma de hardware que as implementa. Um pouco mais à
frente no desenvolvimento, temos as linguagens de segunda
geração. Sua principal característica é a sintaxe humanizada, isto é,
o emprego de comandos parecidos com a linguagem humana, e o
surgimento de sub-rotinas.
As linguagens de terceira geração aprimoram o conceito de sub-
rotina, permitindo que sejam passados dados como parâmetros
para a sub-rotina e recebendo como retorno um resultado do
cálculo executado. A sub-rotina com tais aprimoramentos é
chamada de função. Veremos como a linguagem C, que é uma
linguagem de terceira geração, permite o emprego de funções.
Inicialmente, apresentaremos os componentes da estrutura de uma
função em C, mostrando, em seguida, como elaborar programas
com funções. Veremos também as aplicações avançadas por meio
de recursividade, isto é, uma função que chama a si mesma. Por
fim, identificaremos um conjunto de funções predefinidas da
biblioteca padrão da linguagem C que está disponível para o
desenvolvedor.
Introdução
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 3/62
O que são funções?
Funções são blocos de instruções que executam uma tarefa específica.
Uma de suas aplicações é ajudar a lidar com a complexidade de um
programa. Assim, à medida que aumenta a complexidade de
programação na resolução de um problema, pode-se dividir o programa
em partes menores, ou seja, as funções (também chamadas de
módulos), para facilitar o entendimento e o desenvolvimento dele. Desse
modo, veremos a seguir como:

Escrever funções.
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 4/62

Criar e passar parâmetros.

Devolver um valor como resultado de uma função e
de�nir variáveis locais.
Objetivo na utilização de funções
Digamos que você esteja escrevendo um programa C e precise executar
a mesma tarefa nesse programa mais de uma vez. Nesse caso, você
tem duas opções:
Opção 1
Usar o mesmo conjunto de instruções sempre que quiser
realizar a tarefa.
Opção 2
Criar uma função e chamá-la sempre 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 
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 5/62
Nesse trecho em linguagem C, a função main() é chamada
automaticamente no início do programa. A segunda função usada é o
printf(), que é chamada duas vezes. Observe que a definição da função
printf() está na biblioteca stdio.
Outra forma na utilização de funções é o programador criar as próprias
funções. As que criamos em um programa são conhecidas como
funções definidas pelo usuário.
No desenvolvimento de aplicações, as funções são criadas com os
seguintes objetivos:
Melhorar a legibilidade do código.
Melhorar a capacidade de reutilização do código (a mesma função
pode ser usada em qualquer programa em vez de se escrever o
mesmo código do zero).
Reduzir o tamanho do código (conjuntos duplicados de instruções
são substituídos por chamadas de função).
Separar o programa em partes (blocos) que possam ser
logicamente compreendidos de forma isolada e que facilitem a
depuração de erros.
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
Atenção!
Todo programa em C sempre terá de possuir
a função main() escrita no seu código
independentemente do número e da
variedade de funções que o programa
contenha.

02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 6/62
dois passos:

Passo 1
Declaração do protótipo
da função.

Passo 2
Declaração da função
propriamente dita.
O protótipo da função é composto basicamente pelo seu cabeçalho, isto
é, o tipo de retorno, o nome da função e seus parâmetros. O protótipo
serve para avisar ao compilador que aquela função existe.
O local correto de declarar o protótipo da função é no header file , ou
seja, no arquivo .h. Por isso é que, para usar a função da biblioteca stdio,
foi necessário incluir o header file dessa biblioteca no código do
exemplo acima. A sintaxe da declaração do protótipo de uma função é:
Pseudocódigo 
A sintaxe da declaração do corpo de uma função é bastante semelhante
à declaração do protótipo. A principal diferença é o bloco de comandos
da função após a lista de parâmetros em vez do caractere “;”:
Pseudocódigo 

Dica

02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 7/62
Os seguintes componentes fazem parte da declaração de uma função:
Vejamos um exemplo de declaração de função. Nesse exemplo, a
função declarada soma dois números inteiros:
Linguagem C 
Agora, vamos identificar cada um dos elementos do código:
Nome da função
calcula_soma.
Parâmetros
A declaração do protótipo é opcional. Caso
ela não seja feita, a declaração do corpo da
função valerá como protótipo.
Nome da função 
Tipo da função 
Parâmetros 
Corpo da função 
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio#8/62
int nr1, int nr2.
Tipo da função
int, indicando que essa função retorna um inteiro após seu
término.
Corpo da função
Composto pelos comandos: int soma = nr1 + nr2; e return
soma;
Melhorando o código com o uso de
funções
A utilização de funções permite reduzir o tamanho do código no qual
conjuntos duplicados de instruções são substituídos por chamadas de
função e melhoram a legibilidade do código. Apresentaremos dois
exemplos que mostram esses conceitos.
Em nosso primeiro exemplo, o programa imprime no monitor quatro
linhas de asteriscos utilizando o comando for com o formato a seguir.
Clique em executar e veja o resultado:
Exemplo 1 dTUTORIAL COPIAR
C
Input Console

02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 9/62
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 
Essa função exibe um único caractere na tela. O argumento passado
será convertido para caractere e mostrado na tela. As linhas 7, 11 e 15
mostram a função putchar('\n'), que, após imprimir a linha de asteriscos,
salta para próxima linha.
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.
Utilizando o conceito de função, podemos fatorar o
código do programa e torná-lo mais legível. O ideal
seria escrever uma única função linha a ser
responsável pela escrita de uma linha na tela, que
recebe como parâmetro o número de asteriscos a
serem impressos em cada chamada.
Dica
Utilizamos emuladores de ambientes de
desenvolvimento em nossos exemplos
práticos. Dessa forma, você pode apagar o
código apresentado e fazer seus próprios
testes.

02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 10/62
Se quisermos escrever quatro asteriscos, invocaremos a função linha(4);
se preferirmos sete asteriscos, a função linha(7); 30 asteriscos, a função
linha(30). Perceba que a função é sempre a mesma (função linha). O
que muda é o número de caracteres a ser colocado na tela.
No programa anterior, o nosso main() passaria a ser:
Linguagem C 
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.
Podemos planejar a função da seguinte forma:
O programa do exemplo 1 pode ser substituído usando a função do
Exemplo 2 a seguir. Leia o código e identifique as diferenças.
Nome da função
A função a ser escrita será
linha();
Tipo da função
Não tem tipo, isto é, a função
não retorna nenhum valor após
sua execução; então, coloca-se
como void.
Exemplo 2 dTUTORIAL COPIAR
C
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 11/62
Vemos que o número de instruções do programa foi reduzido. Se
precisarmos colocar mais uma linha com sete asteriscos a ser
impressa, a redução será mantida, pois basta acrescentar a chamada de
função linha(7). Então, vamos analisar a diferença primordial entre os
dois exemplos:
Exemplo 1
Ao fazer uma leitura
inicial do Exemplo 1, o
programador tem de
compreender os
detalhes dos quatro
laços for. Os quatro
laços tornam o código
mais extenso e
prejudicam a
legibilidade do
programa.
Exemplo 2
O código da função
linha() é apresentado no
início, não sendo
preciso procurar em
outros lugares para
entender como funciona
a função. Em seguida,
na função main(), a
leitura das quatro
chamadas da função
mostra claramente a
lógica de como as
linhas serão
apresentadas.
Como vimos, o Exemplo 2, além de reduzir o código, também permitiu a
melhora da legibilidade, ou seja, melhor leitura e entendimento do
código.
Passagem de parâmetros e corpo de
uma função
A comunicação com uma função se faz graças aos argumentos que lhe
são enviados e aos parâmetros presentes na função que os recebe. Mas
Input Console


02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 12/62
qual é a diferença de argumento e parâmetro?
Argumento é o valor passado para o parâmetro.
Assim, no exemplo a seguir, vemos que 5 é o argumento passado para o
parâmetro num da função soma, isto é, implicitamente ocorre a
atribuição num=5;.
Para entender a comunicação entre funções de um programa em C, é
necessário rever o conceito de variável e de escopo de uma variável.
Uma variável é uma entidade capaz de armazenar um objeto de dados.
Para isso, toda variável possui:
Um tipo
Que define como objeto de dados e que será armazenado (sua
codificação em memória), além das operações permitidas
para tal objeto.
Um identi�cador
Que nada mais é que o nome da variável.
Uma alocação
Que é o espaço em memória RAM destinado a armazenar o
objeto de dados.
O escopo de uma variável é o trecho de código no qual a variável é
visível, isto é, o trecho no qual seu conteúdo pode ser manipulado. Em C,
as variáveis podem ter dois tipos de escopo:
Global
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 13/62
Válidas e visíveis em todo programa.
Local
Válidas e visíveis somente na função em que foram
declaradas.
Revistos esses conceitos, podemos estudar como se comportam os
parâmetros de uma função, que pode ter 0, 1, 2 ou mais parâmetros,
dependendo apenas das necessidades do programador. Cada função
necessita, no entanto, saber qual é o tipo de cada um dos parâmetros.
Objetos de dados pertencentes a qualquer tipo de dados da linguagem
podem ser enviados como argumentos para uma função, mesmo que o
tipo de dados seja definido pelo programador. Os parâmetros de uma
função são separados por vírgula, sendo absolutamente necessário que,
para cada um deles, seja indicado o seu tipo.
Linguagem C 
O que foi referido anteriormente continua a ser verdade para os
parâmetros de uma função que sejam do mesmo tipo.
Linguagem C 
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.
Argumentos são valores (objetos de dados ou referências a eles)
passados como parâmetros para uma função. Essa passagem deve ser
realizada colocando-os dentro de parênteses e separados por vírgulas
imediatamente após o nome da função. Existem diversas mecânicas de
passagem de parâmetros para funções. Duas são mais comuns:
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 14/62
Quando se faz a chamada de uma função, o número e o tipo dos
argumentos enviados devem ser coincidentes com os parâmetros
presentes no cabeçalho da função.
No exemplo seguinte, a funcao1 recebe três parâmetros que ela
armazena em três variáveis denominadas letra (do tipo char), n (do tipo
int) e z (do tipo float). As variáveis letra, n e z são automaticamente
iniciadas com os valores ‘B’, 125 e 20.456, respectivamente, que lhe são
enviadas a partir do main().
Linguagem C 
O número de argumentos enviados para uma função deve ser igual ao
de parâmetros existentes no cabeçalho da função. O tipo dos objetos de
Passagem de parâmetros por valor 
Passagem de parâmetros por referência 
Atenção!
A linguagem C só implementa a passagem
de parâmetrospor valor; entretanto, a
passagem de parâmetros por referência
pode ser simulada.

02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 15/62
dados correspondentes aos argumentos precisa corresponder
igualmente aos tipos dos parâmetros na mesma ordem em que foram
declarados. 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. Após o conceito de passagem de parâmetros, podemos
resumir como funciona uma função:
Nosso próximo exemplo é uma versão alterada do programa do
Exemplo 2 de forma que a função linha escreva qualquer caractere – e
não apenas o caractere asterisco.
 O código de uma função só é executado quando ela
é invocada em alguma parte do programa ao qual
está, de algum modo, ligado.
 Sempre que uma função é invocada, a função que a
invoca é “suspensa” temporariamente. Em seguida,
sã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 ela
foi invocada.
 O programa que invoca uma função pode enviar
argumentos, que são recebidos pela função. Eles
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 o seu funcionamento, uma
função pode devolver um valor para o programa que
a invocou.
Exemplo 3 dTUTORIAL COPIAR
C
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 16/62
Foi adicionado um segundo parâmetro à função, permitindo a escrita de
uma linha com qualquer caractere que se deve passar a adicionar na
chamada da função.
Observe o cabeçalho da função na linha 3 contendo dois parâmetros
(num e ch), bem como as chamadas da função nas linhas 13 até 16.
Cada chamada passa o número e o tipo de caracteres a ser impresso.
O corpo da função
O corpo de uma função possui três características:
É constituído por instruções de C de acordo com a sintaxe da
linguagem.
Tem de se seguir imediatamente ao cabeçalho da função.
É escrito entre chaves.
Sempre que uma função é invocada pelo programa, o corpo da função é
executado, instrução a instrução, até terminar esse corpo ou encontrar a
instrução return, voltando imediatamente à função em que foi invocada.
Dentro do corpo de uma função, pode-se:
Input Console

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.

02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 17/62

Empregar qualquer instrução ou conjuntos de
instruções da linguagem C.

Invocar qualquer função, seja ela escrita pelo usuário
ou pertencente a uma biblioteca.
No entanto, não é possível definir funções dentro delas. O número de
instruções que pode estar presente dentro de uma função não tem
qualquer limite, mas ele deve ser relativamente pequeno e responsável
por realizar uma única tarefa.
Funções que retornam um valor
É possível que uma função seja responsável por realizar determinada
tarefa e que, uma vez terminada, devolva um único valor (objeto de
dados) como resultado. A devolução de um resultado é feita por meio
da instrução return, seguida do valor a ser devolvido.
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 e 4) e de devolver um resultado (objeto de dados de valor 7)
do tipo inteiro para a variável n, que corresponderá à soma dos dois
parâmetros recebidos pela função. A função printf() imprime o valor 7
armazenado na variável n. Observemos agora o código da função:
Linguagem C 
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 18/62
Tipo de retorno é int (inteiro). A palavra reservada int é colocada do lado
esquerdo do nome da função.
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.
A declaração de variáveis dentro de uma função precisa ser realizada
antes de qualquer instrução, como mostra a estrutura da função a
seguir:
Pseudocódigo 
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.

02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 19/62
Essas variáveis só podem ser utilizadas dentro da própria função. Se
uma mesma variável for declarada em duas funções distintas, não
haverá qualquer tipo de problema, pois o compilador sabe qual utilizar
em cada uma delas. Apesar de terem o mesmo nome, elas são variáveis
distintas sem qualquer relação, do mesmo modo que pode haver dois
indivíduos chamados Paulo em salas de aula distintas.
Depois de terminada a execução de determinada função, todas as suas
variáveis locais são destruídas. As variáveis, portanto, são desalocadas
(ou desalojadas) da memória. Eis um programa que mostra o uso de
escopo de variáveis:
Para mostrar o escopo de variáveis, criamos a variável A em vários
locais. Embora sejam do mesmo tipo e nome, elas são diferentes, pois
foram definidas nas funções main(), escopo1() e escopo2().
Criaremos a tabela adiante para acompanhar os valores de cada variável
A ao longo da execução do programa:
Execução
Valor de A na
função main()
Valor de A na
função escopo
Linha 17 10 ----
Linha 18 10 ----
Linha 19 20 ----
Linha 20 20 ----
Exemplo 4 dTUTORIAL COPIAR
C
Input Console

02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 20/62
Execução
Valor de A na
função main()
Valor de A na
função escopo
Linha 5 20 -100
Linha 6 20 -100
Linha 21 20 ----
Linha 22 30 ----
Linha 23 30 ----
Linha 11 30 ----
Linha 12 30 ----
Linha 24 30 ----
Tabela: Valores das variáveis A no programa do Exemplo 4.
Elaborada por: Paulo Vidal.
A coluna que mostra a variável A na função main() sempre tem um valor
enquanto o programa está em execução. De forma diferente, a variável A
na função escopo1() e a presente na função escopo2() só possuem um
valor enquanto a respectiva função está em execução. Depois que ela é
executada, a variável A é destruída.
A variável local definida no escopo da função só fica
alocada na memória enquanto a função é executada.
Argumentos, parâmetros e escopo:
como utilizar corretamente esses
conceitos
No vídeo a seguir, demonstraremos, por meio de um exemplo, como
esses conceitos se aplicam na construção de funções em linguagem C.

02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 21/62
Vem que eu te explico!
Os vídeos a seguir abordam os assuntos mais relevantes do conteúdo
que você acabou de estudar.
Módulo 1 - Vem que eu te explico!
Objetivos na utilização de funções
Módulo 1 - Vem que eu te explico!
Escopo de variáveis

02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 22/62
Questão 1
Analise o código a seguir e assinale a opção que mostra o resultado
correto após a execução do programa.
Assinale a opção correta:
Vamos praticar alguns conceitos?
Falta pouco para
atingir seus
objetivos.
A Resultado = 60
B Resultado = 16
C Resultado = 32
D Resultado = 10
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 23/62
Questão 2
Analise o código adiante em relação ao escopo das variáveis e o
resultado do programa após a execução.
Assinale a resposta correta da saída do programa acima.
2
Matrizes e estruturas como argumentos de função
Ao final deste módulo, você será capaz de empregar como parâmetros de uma função vetores, matrizes e estruturas.
E Resultado = 8
Responder
A
Valor de X = 21, Y = 49
Valor de X = 21, Y = 49
B
Valor de X = 21, Y = 50
Valor de X = 21, Y = 50
C
Valor de X = 20, Y = 50
Valor de X = 20, Y = 50
D
Valor de X = 21, Y = 49
Valor de X = 20, Y = 50
E
Valor de X = 20, Y = 50
Valor de X = 21, Y = 49
Responder
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 24/62
Passagem de vetores para funções
Um vetor é uma abstração comum na maioria das linguagens de
programação. Ele nada mais é que uma variável capaz de armazenar um
agregado homogêneo de objetos de dados, isto é, objetos de dados
pertencentes a um mesmo tipo. Para identificá-los unicamente, o vetor
emprega um índice, ou seja, um número inteiro que distingue qual objeto
de dados será acessado. No trecho de código a seguir, veremos um
exemplo de como isso é feito:
Linguagem C 
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 25/62
Na linha com comentário “declaração”, é feita a declaração de uma
variável vet1 associada ao tipo inteiro. Observe que, se vet1 fosse uma
variável inteira comum, a declaração terminaria após seu nome com um
ponto e vírgula “;”.
Entretanto, a declaração continua com o numeral 20 entre colchetes. A
semântica disso é que a variável vet1 não armazena somente um inteiro,
mas também agrega 20 objetos de dados do tipo inteiro.
Sendo assim, como é possível acessar cada objeto de
dados individualmente?
Isso é feito com a identificação da posição do objeto que se deseja
acessar dentro do agregado. O primeiro objeto sempre é identificado
pela posição “0” e o último, no nosso exemplo, pela “19”. Note que a
variável vet1 é única, ou seja, para identificar um dos objetos de dados, é
fundamental dizer qual deles, o que é feito pelo mecanismo já descrito.
Assim, no exemplo anterior, a linha com comentário “atribuição 1”
armazena o valor “10” na primeira posição do vetor; a com “atribuição 2”,
o valor “5” na segunda posição – e assim por diante.
Recordado o conceito de vetor, demonstraremos como é feita a
passagem de vetores como parâmetros para funções. Para isso,
definiremos duas variáveis tipo vetor descritas a seguir:
Linguagem C 
Imaginemos que seja nossa intenção iniciar os vetores vet1 e vet2 com
o valor 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 
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 26/62
Temos, assim, o código das funções inic1 e inic2. Cada uma tem como
parâmetro um vetor de inteiros. A invocação dessas funções na função
main() precisa ser realizada da seguinte forma:
Linguagem C 
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.
Será possível escrever uma única função que seja
capaz de inicializar um vetor de qualquer tamanho?
A resposta é sim. Vejamos como isso acontece. Em C, existe a
dualidade vetor/ponteiro, isto é, uma variável declarada como vetor pode
ser vista como um ponteiro. Para facilitar, vamos relembrar agora o
conceito dele. Um ponteiro é uma variável que armazena um endereço
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 27/62
de memória. Os ponteiros são declarados com a estrutura sintática a
seguir:
Linguagem C 
A semântica dessa declaração é que a variável “a” armazena um objeto
de dados que é um endereço de memória.
Mas para que serve o tipo inteiro associado na
declaração?
A resposta é: para interpretar o conteúdo do endereço armazenado em
“a” como um inteiro. Vamos ver isso por meio de um exemplo:
Vamos analisar as três primeiras linhas:
 Linha 1
É declarada uma variável inteira tradicional. Como
sabemos, toda variável é armazenada em um
endereço de memória. Chamamos esse endereço
de alocação da variável.
Vamos supor que a variável “a” tenha alocação no
endereço 0x0300 (o hexadecimal foi usado por ser
usual para expressar endereços). Assim, o valor 10
é armazenado nesse endereço após a inicialização
da variável.
 Linha 2
É declarado um ponteiro. Desse modo, “b”
armazena um endereço de memória, sendo
inicializado com o endereço da alocação de “a”
(isso é feito por meio do operador &, que retorna o
d d l ã d iá l) O j
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 28/62
Na linguagem C, existe a dualidade vetor/ponteiro. Dessa forma, ao
declararmos int vet1[20];, vet1 poderá ser visto como um vetor caso seja
sucedido por colchetes ou como ponteiro caso seja grafado sozinho.
Dessa maneira, vet1 é um ponteiro para o endereço de memória onde
está armazenado o primeiro elemento do vetor. Mas como podemos
utilizar isso?
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 
endereço da alocação de uma variável). Ou seja, a
variável “b” armazena o endereço 0x0300.
 Linha 3
É invocada a função printf; conforme foi escrita, a
função printf imprime um inteiro, que, por sua vez,
corresponde à avaliação da expressão “*b”. O
operador asterisco “*” aplica-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
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 29/62
Observe que a função inic tem dois parâmetros:
“s”
É um ponteiro. O parâmetro “s” foi declarado como ponteiro,
embora, no corpo da função, tenha sido utilizado como vetor.
“tam”
É um inteiro. O parâmetro “tam” foi utilizado para definir até
onde inicializar o vetor.
Passagem de matrizes para funções
A passagem de matrizes para funções é semelhante à de vetores para
funções. Uma matriz nada mais é que um vetor de vetores, isto é, um
agregado de vetores. Sendo assim, cada objeto de dados é identificado
unicamente por dois índices que chamamos de linha e coluna.
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 possui 9 valores, enquanto a diagonal
principal é formada por 3 elementos ( ). Nosso próximo
programacalcula a soma da diagonal principal de uma matriz quadrada
, utilizando uma função para executar essa tarefa.
M3x3
M1,1, M2,2, M3,3
M3x3
Exemplo 1 dTUTORIAL COPIAR
C
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 30/62
Vamos à explicação do programa:
Input Console

 Linha 2
Definição da função soma_diagonal, recebendo a
matriz de inteiros como parâmetro.
 Linha 3
Definição da variável tipo int com zero, usada para
armazenar a soma dos elementos da diagonal
principal.
 Linha 4
Laço for para a iteração de cada linha (variável i
representa o número da linha).
 Linha 5
Laço for para a iteração de cada coluna (variável j
representa o número da coluna). A varredura da
matriz é por coluna.
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 31/62
 Linha 6
Comando if (i == j) para identificar os elementos da
diagonal principal.
 Linha 7
Expressão matemática para somar os elementos da
diagonal principal.
 Linha 8
Comando return, devolvendo o valor da variável
soma para o main().
 Linhas 13 a 15
Definição e inicialização da matriz. Observe os
elementos das linhas 0, 1 e 2.
 Linha 16
Imprime a saída do programa “Soma da diagonal
principal = 15”. A chamada da função
soma_diagonal(matriz) pode ser feita dentro do
comando printf() como segundo argumento da
função printf(). A função soma_diagonal retorna o
resultado de um valor inteiro que é impresso na
tela.
Recomendação
Retorne ao emulador, altere os valores e faça
novos testes. Aproveite a oportunidade para

02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 32/62
Passagem de registros para funções
Um registro é uma abstração comum nas linguagens de programação.
Ele constitui basicamente um agregado heterogêneo de objetos de
dados, isto é, objetos de dados de tipos distintos acessados pela
mesma declaração de variável.
O trecho de código adiante exemplifica a declaração de um registro. Em
linguagem C, essa abstração é chamada de struct.
Linguagem C 
A semântica dessa declaração é que o registro (struct) pessoa agrega
três objetos de dados distintos:

Um vetor de caracteres, identi�cado por nome.

O inteiro idade.
fixar os conceitos abordados e estimular o
raciocínio lógico.
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 33/62

O número de ponto �utuante salário.
A declaração da struct como está é equivalente à de um novo tipo. Esse
tipo é identificado por struct pessoa. Observe então que, como está, a
declaração não instancia uma variável. Para instanciá-la, é necessária a
linha adicional descrita a seguir.
Linguagem C 
O aceso a cada elemento do agregado heterogêneo é feito pelo
operador ponto “.”. Assim, para acessar o campo idade, por exemplo,
basta grafar este código:
Linguagem C 
Cuja semântica é: atribua o valor 50 ao campo idade do registro
identificado por funcionario.
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 dTUTORIAL COPIAR
C
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 34/62
Vamos à explicação do programa:
Input Console

 Linhas 3 a 8
Definição da struct pessoa com os campos nome,
idade e salário.
 Linha 10
Definição da função exibir(struct pessoa f). Note
que a variável f é o parâmetro recebido do tipo
pessoa.
 Linhas 11 a 15
É o corpo da função no qual são impressos os
dados do funcionário. Veja que não existe o
comando return, pois a função não precisa retornar
valor (o tipo da função é void).
 Linha 19
Inicializa a variável p.
 Linha 20
Chamada da função exibir(p) com o parâmetro p.
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 35/62
Como se pode observar, o tipo a ser colocado no parâmetro da função
corresponde ao do argumento que lhe é enviado.
Simulando passagem de parâmetros
por referência em C
No vídeo a seguir, demonstraremos, por meio de um exemplo, como
utilizar ponteiros para simular a passagem de parâmetros por referência
em C.
Vem que eu te explico!
Os vídeos a seguir abordam os assuntos mais relevantes do conteúdo
que você acabou de estudar.
Módulo 2 - Vem que eu te explico!
Passagem de vetores para funções
Módulo 2 - Vem que eu te explico!
Dualidade vetor/ponteiro


02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 36/62
Questão 1

Vamos praticar alguns conceitos?
Falta pouco para
atingir seus
objetivos.
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 37/62
Interprete o programa a seguir, verifique o que a funcao2() faz e
assinale qual das opções será impressa na saída.
Marque a opção correta.
Questão 2
Interprete o programa adiante, verifique o que a função func3() faz e
assinale qual das opções será impressa na saída após a execução.
Aponte a opção correta.
A -225
B -23
C 20
D 19
E 225
Responder
A Paulo Cesar 50 10000,00
B Mauro Cesar 60 12500,00
C Paulo Victor 51 12000,00
D Paulo Cesar 60 12500,00
E Paulo Cesar 51 12500,00
Responder
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 38/62
3
Recursividade
Ao final deste módulo, você será capaz de aplicar o conceito de recursividade na programação.
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 39/62
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,
seguindo essa linha até o último passo: colocar o bolo para assar no
forno. Esse é o típico pensamento linear ou não recursivo.
Seguir a receita de um bolo é um processo linear ou não recursivo.
Analisemos um exemplo no domínio dos algoritmos.
Desejo determinar o maior elemento em uma sequência de n elementos.
Para isso, a maioria das pessoas criaria o seguinte algoritmo:
1. Passo inicial: máximo = 1º elemento da sequência.
2. Passo geral: repito para o 2º elemento até o último elemento a
seguinte comparação:
3. Se máximo < elemento analisado, então máximo = elemento
analisado.
4. Ao final, a variável máximo armazenará o maior elemento da
sequência.
Esse raciocínio é intuitivo e bastante humano. No entanto, há uma
segunda abordagem para a solução do problema. A abordagem
recursiva divide o problema em subproblemas da mesma natureza do
original. Vejamos como seria essa abordagem para a determinação do
máximo da sequência.
Podemos raciocinar que a determinação do máximo é feita de seguinte
forma: o máximo da sequência s1, s2, s3, ... sn, com n elementos, é o
máximo entre s1 e o máximo de s2, s3, s4, ..., sn. Quando fazemos tal
divisão, transformamos o problema original, que tinha tamanho n, em
dois subproblemas:
Subproblema 1
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 40/62
De tamanho 1 (que chamamos de problema trivial ou infantil).
Subproblema 2
Determinação do máximo na sequência de tamanho n -1, isto
é, a sequência: s2, s3, ..., sn.
Nesse ponto surge a recursividade: o máximo da sequências2, 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.
Analisando um exemplo de tamanho 4, qual seria o
máximo da sequência 10, 8, 20, 16?
Vejamos a resposta recursiva:
Voltemos ao:
Passo 2: Agora sabemos o máximo da sequência 20,16: 20. Dessa
forma, o máximo entre 8, 20, 16 é o máximo entre 8 e 20, que é 20.
Passo 1: O máximo da sequência 10, 8, 20, 16 é o máximo entre 10
e 20: 20.
Tal é a abordagem recursiva para encontrar o máximo de uma
sequência.
Passo 1 
Passo 2 
Passo 3 
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 41/62
Resolvendo o quebra-cabeça Torres
de Hannoi
No vídeo a seguir, mostraremos como o raciocínio recursivo é a
abordagem mais simples para solução do quebra-cabeça.
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
Uma função invoca a si
mesma no seu corpo de
função.
Indireta
Uma função f invoca
outra função g, a qual,
por sua vez, volta a
invocar a função f.
Em nosso próximo programa, vamos implementar a função fatorial que
calcula o valor de n! utilizando o comando for, sendo que: n! = n * (n-1) *
(n-2) * ... * 2 * 1 e sabendo que 0!=1. Exemplo: 4! = 4*3*2*1 = 24.


Exemplo 1 dTUTORIAL COPIAR
C
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 42/62
No entanto, poderemos olhar para a definição da função fatorial e
verificar que n! = n * (n-1) * (n-2) * ... * 2 * 1 é equivalente a n! = n * (n-
1)!, pois (n-1)! = (n-1) * (n-2) * ... * 2 * 1. Dessa forma, a definição do
fatorial é realizada pelo próprio conceito de fatorial:
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.
Verificamos que o código da função com recursividade (linhas 3 a 8)
ficou mais simples que o presente no exemplo anterior.
Input Console

Exemplo 2 dTUTORIAL COPIAR
C
Input Console

02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 43/62
Lógica de funcionamento de uma
chamada recursiva
Veremos agora o resultado de se invocar a função fatorial com o valor 4.
Observe que, se a função fatorial não tivesse a condição de parada do
comando if(n==0) return 1, ela seria reduzida ao código a seguir:
Linguagem C 
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.
Boas práticas na programação de
funções recursivas
Elencaremos três delas a seguir:
Passo 1 
Passo 2 
Passo 3 
Passo 4 
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 44/62
A primeira instrução de uma função recursiva deve ser sempre a
implementação do critério de término das chamadas, isto é, a
condição ou as condições que se deve verificar para que a
função pare de invocar a si própria.
Vem que eu te explico!
Os vídeos a seguir abordam os assuntos mais relevantes do conteúdo
que você acabou de estudar.
Módulo 3 - Vem que eu te explico!
Primeiras palavras
Módulo 3 - Vem que eu te explico!
Recursividade em C
Critério de término Chamada recursiva Menos código

02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 45/62
Questão 1
Em um programa na linguagem C, duas funções fazem chamadas
recíprocas: uma função f1 faz uma chamada a uma função f2, que,
por sua vez, faz outra a f1. Isso é uma técnica de programação
chamada de

Vamos praticar alguns conceitos?
Falta pouco para
atingir seus
objetivos.
A programação orientada a funções.
B recursividade direta.
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 46/62
Questão 2
Interprete o código a seguir e assinale a opção correta quanto ao
valor retornado pela função recursividade com o parâmetro de valor
5.
Javascript 
C lista circular.
D recursividade indireta.
E lista indireta.
Responder
A 4
B 128
C 16
D 64
E 32
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 47/62
4
Utilização de biblioteca padrão
Ao final deste módulo, você será capaz de selecionar as funções na biblioteca padrão adequadas à solução de um programa.
Responder
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 48/62
História da biblioteca padrão do ANSI
C
Antes de ser padronizada, a linguagem C não fornecia funcionalidades
nativas como operações de entrada e saída. Com o tempo, a
comunidade de usuários compartilhou ideias e implementações, o que é
atualmente chamado de biblioteca padrão. Vejamos um pouco da
história:
Parte do padrão C89 é o conjunto de bibliotecas denominado biblioteca
padrão do ANSI C. Por isso, abordaremos neste módulo as funções da
biblioteca ANSI C. De maneira mais específica, veremos o que elas são e
como usá-las em seu programa.
Bibliotecas
1970
A linguagem C tornou-se cada
vez mais popular. Diferentes
universidades e organizações
estavam criando as próprias
variações dessa linguagem para
seus projetos.
1980
Aumentaram os problemas de
compatibilidade por conta
dessas diferentes versões.
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 49/62
Anteriormente, entendemos como codificar funções em linguagem C.
No entanto, suponha que, cada vez que pretenda programar, você tenha
de reescrever aquelas funções básicas que todo programa utiliza. Um
exemplo simples é a função de impressão na tela. Imagine que, toda vez
que for escrever um programa, você precise reprogramar uma função
para escrever na tela. Não tem muito sentido, certo?
Como podemos resolver esse problema?
Uma solução é agrupar funções de uso corriqueiro em bibliotecas de
funções. Com isso, quando a função for necessária, bastará usar a
biblioteca para ter a funcionalidade desejada disponível. Conforme já
frisamos, a padronização das bibliotecas já foi feita na década de 1990.
Ainda assim, entenderemos como isso é implementado.
Para entender a forma de disponibilizar bibliotecas, é necessário
lembrar como as linguagens de segunda e terceira geração são
executadas por computadores. Como se sabe, eles somente executam
linguagem de máquina. Desse modo, qualquer outra linguagem de
programação deve ser traduzida para a de máquina. Há duas formas de
implementar essa tradução:
Interpretação
Comando a comando.
Compilação
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.

02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 50/62
A linguagem C é uma linguagem compilada. Assim, como já vimos, todo
o código é analisado e traduzido para linguagem de máquina de uma
vez. Para um programa simples, o processo não parece muito complexo;
entretanto, para um complexo, composto por diversas funcionalidades
distintas, ele não é nada obvio.
Suponha que um programa seja composto por vários arquivos
diferentes, cada um agrupando funções relacionadas a alguma
funcionalidade, como, por exemplo, um sistema escrito em linguagem C
composto por três arquivos:

gui.c
Agrupa as funções da interface gráfica.

bd.c
Agrupa as funções de comunicação com o banco de dados.

principal.cCom o programa principal e suas funções acessórias.
O passo de tradução do programa em linguagem C para a de máquina é
chamado de compilação. Cada arquivo é compilado individualmente,
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 51/62
gerando um arquivo em linguagem de máquina (usualmente com
extensão bin). Assim, para o nosso exemplo, a compilação dos arquivos
gui.c, bd.c e principal.c geraria três arquivos distintos: gui.bin, bd.bin,
principal.bin, que contêm a tradução das funções contidas em cada
arquivo “.c” para a linguagem de máquina.
Como juntar esses três arquivos em um único
programa executável?
Isso é feito por outro aplicativo: o link editor. Sendo assim, para gerar um
programa executável, são necessários dois passos:
Compilação
Passo em que é feita a
tradução da linguagem
de alto nível para a de
máquina.
Link edição
Onde os diversos
arquivos bin (em
linguagem de máquina)
são ligados em um
único executável.
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.
A função (draw_window) foi escrita e compilada sem erros – só que em
outro arquivo. Dessa maneira, ao ser invocada dentro de uma função
contida no arquivo principal.c, essa função é desconhecida; assim, o
compilador reporta um erro. Como resolver isso? Por meio do uso de
protótipos de funções.

Recomendação
É considerada uma boa prática de
programação associar a cada arquivo com
extensão “.c” outro com extensão “.h”, que,
como já vimos, é chamada de header file ou
arquivo cabeçalho. Nesse arquivo,
inserirmos todos os protótipos de funções
contidas no arquivo “.c” associado a ele.

02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 52/62
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:
Adicionando arquivo de protótipos das funções na biblioteca.
Por essa razão, é fundamental realizar o “#include” do arquivo “.h” no
início do código que usa determinada biblioteca. Esse comando
“#include” – que, na verdade, constitui uma diretiva de compilação –
insere no ponto que é declarado o conteúdo do arquivo “.h” (algo muito
parecido com um “control-v/control-c”).
Vamos ao exemplo. Suponha que nosso desejo seja compilar o código a
seguir:
Linguagem C 
Logo, quando fazemos o include do arquivo
“.h” no início do nosso código, estamos
incluindo todos os protótipos de funções
daquele arquivo “.c” associado. Por isso, não
ocorrem erros de compilação.
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 53/62
Observe que a função query_db, assim como a draw_window, não está
codificada no arquivo. Isso vai resultar em um erro? Em princípio, sim, a
menos que o protótipo dessas funções esteja declarado nos arquivos
“.h” incluídos pela diretiva “#include”. Imagine então que o conteúdo do
arquivo db.h seja este:
Linguagem C 
E que o conteúdo de gui.h seja:
Linguagem C 
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 
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 54/62
Como os protótipos das funções utilizadas estão declarados, não
ocorrerão erros de compilação. Mas esse código já pode ser
executado?
A resposta é não. O protótipo da função não carrega o corpo da função.
Esse corpo foi compilado em outro arquivo ou pertence a uma
biblioteca. Por isso, o código só pode ser executado após link edição.
Vantagens de usar funções da
biblioteca C
A seguir temos as principais vantagens de usar funções da biblioteca C:
Arquivos de cabeçalho da biblioteca
padrão na linguagem C
Veja a descrição dos arquivos de cabeçalho da biblioteca padrão na
linguagem C:
As funções funcionam 
As funções são otimizadas para desempenho 
Economiza um tempo considerável de desenvolvimento 
As funções permitem a portabilidade dos programas 
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 55/62
Em nosso próximo exemplo, para calcular a raiz quadrada de um
número, você pode usar a função de biblioteca sqrt(). Essa função é
definida no arquivo de cabeçalho < math.h >.
< math.h >
Funções matemáticas.
< time.h >
Funções de data e hora.
Exemplo 1 dTUTORIAL COPIAR
C
Input Console

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

02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 56/62
Pesquisando funções nas bibliotecas
ANSI C
No vídeo a seguir, demonstraremos como pesquisar e aplicar as
funções das bibliotecas ANSI C.
Vem que eu te explico!
Os vídeos a seguir abordam os assuntos mais relevantes do conteúdo
que você acabou de estudar.
Módulo 4 - Vem que eu te explico!
Bibliotecas
Módulo 4 - Vem que eu te explico!
Bibliotecas
constante. Não desista, você está no
caminho certo!


02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 57/62
Questão 1

Vamos praticar alguns conceitos?
Falta pouco para
atingir seus
objetivos.
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 58/62
Em relação às boas práticas de programação, é recomendável que
o desenvolvedor empregue as funções da biblioteca padrão em C.
Assinale a opção correta quanto à vantagem na utilização de
funções da biblioteca padrão na programação em C.
Questão 2
Você está codificando um programa e precisa verificar se
determinado caractere digitado é maiúsculo ou minúsculo, tomar
uma decisão e invocar determinada função em relação ao tipo de
caractere escolhido. Você sabe que, na biblioteca padrão, existem
funções de manipulação de caracteres. Marque a opção com o
arquivo cabeçalho que você precisa incluir no programa para
resolver tal problema.
A
As funções disponíveis dificultam a portabilidade dos
programas.
B
Não sabemos se as funções foram criadas com um
código eficiente para desempenho máximo, pois não
foram realizados testes durante a programação.
C
A elaboração das especificações das funções da
biblioteca não envolve organizações de padronização,
apenas universidades e empresas.
D
O programador economiza um tempo considerável de
desenvolvimento, pois as funções estão prontas para
uso.
E
As funções têm apresentado diversos erros de
implementação que dificultam a programação.
Responder
A < math.h >
B < ctype.h >
C < stdio.h >
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 59/62
Considerações �nais
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ódigode uma função só é
executado quando ela é invocada em alguma parte do programa.
Sempre que uma função é invocada, o programa que a invoca é
“suspenso” temporariamente. Em seguida, são executadas as instruções
presentes no corpo dela. Uma vez terminada a função, o controle de
execução do programa volta ao local em que ela foi invocada.
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.
Também demonstramos que C é uma linguagem com capacidade
recursiva, isto é, uma função que, direta ou indiretamente, pode invocar
a si própria por meio de outra função. A recursividade é uma técnica de
desenvolvimento particularmente útil na implementação de alguns
algoritmos de pesquisa, poupando muito tempo aos programadores.
Finalizamos nosso texto incentivando o uso das funções da biblioteca
padrão, uma vez que elas permitem uma diminuição considerável do
tempo a ser utilizado no desenvolvimento. Esse processo facilita a
portabilidade dos programas.
Podcast
Ouça o podcast. Nele falaremos sobre a aplicação de
conceitos de modularidade em programas complexos.
D < stdlib.h >
E < string.h >
Responder

02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 60/62
00:00 04:55
1x

Explore +
Consulte na internet:
Documentação de referência da Microsoft
• MICROSOFT. Funções (C). Microsoft Ignite. Publicado em: 15 ago.
2021.
b) Manual do GNU C (implementação livre da linguagem C)
• GNU. The GNU C reference manual. Consultado na internet em: 3 nov.
2021.
Referências
DAMAS, L. Linguagem C. 10. ed. Rio de Janeiro: LTC, 2007.
SCHILDT, H. C completo e total. São Paulo: Makron Books, 1997.
Material para download
Clique no botão abaixo para fazer o download do
conteúdo completo em formato PDF.
Download material
O que você achou do conteúdo?
Relatar problema
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 61/62
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio
javascript:CriaPDF()
02/05/24, 14:36 Linguagem C: funções
https://stecine.azureedge.net/repositorio/00212ti/02575/index.html?brand=estacio# 62/62

Continue navegando

Outros materiais