Logo Passei Direto
Buscar

Linguagem C funções

Ferramentas de estudo

Questões resolvidas

Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Questões resolvidas

Prévia do material em texto

Linguagem C: funções
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.
Profª. Paulo Vidal
1. Itens iniciais
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.
Objetivos
Identificar na função o nome, os parâmetros, o valor de retorno e o escopo de variáveis.
Empregar como parâmetros de uma função vetores, matrizes e estruturas.
Aplicar o conceito de recursividade na programação.
Selecionar as funções na biblioteca padrão adequadas à solução de um programa.
Introdução
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. 
• 
• 
• 
• 
1. Funções: forma geral, valor de retorno, passagem de parâmetros e escopo 
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
Criar e passar parâmetros
Devolver um valor como resultado de uma função e definir 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:
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:
plain-text
#include 
 main()
 {
 printf('Seja bem-vindo(a).\n');
 printf('Ao módulo 1.\n');
 }
 
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. 
• 
• 
• 
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.
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. 
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 dois passos: 
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 é:
plain-text
tipo nome_da_função (tipo var1, ..., tipo varN); 
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 “;”:
• 
• 
• 
• 
Passo 1 
Declaração do protótipo da função.
Passo 2 
Declaração da função propriamente
dita.
plain-text
tipo nome_da_função (tipo var1, ..., tipo varN) {
 corpo da função
 } 
Dica
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. 
Os seguintes componentes fazem parte da declaração de uma função:
Nome da função
A escolha do nome de uma função obedece às regras apresentadas na designação de variáveis. Tal
nome precisa ser único (não pode ser igual ao de outra função ou de uma variável) e especificar
aquilo que a função, na realidade, faz. Além disso, ele precisa ser de fácil leitura e interpretação.
Tipo da função
Representa o tipo do dado retornado pela função ao seu término. Caso ela não retorne nenhum valor,
utiliza-se o tipo void, que não possui objeto de dados associado. 
Parâmetros
Eles ficam localizados entre parênteses após o nome da função, sendo constituídos pelos nomes das
variáveis que recebem os argumentos na chamada função, separados por vírgulas e acompanhados
de seus respectivos tipos. Caso a função não contenha parâmetros, a lista de parâmetros será vazia,
embora, ainda assim, seja necessário grafar os parênteses.
Corpo da função
Trata-se dos comandos que realizam a computação desejada. Esse código é privativo da função, ou
seja, outra função só pode acessá-lo por meio de uma chamada à função. 
Vejamos um exemplo de declaração de função. Nesse exemplo, a função declarada soma dois números
inteiros:
plain-text
int calcula_soma (int nr1, int nr2) {
 int soma = nr1 + nr2;
 return soma;
 }
 
Agora, vamos identificar cada um dos elementos do código:
Nome da função
calcula_soma.
Parâmetros
int nr1, int nr2.
Tipo da função
int, indicando que essa função retorna um
inteiro após seu término.de Janeiro: LTC, 2007. 
SCHILDT, H. C completo e total. São Paulo: Makron Books, 1997. 
 
 
	Linguagem C: funções
	1. Itens iniciais
	Propósito
	Preparação
	Objetivos
	Introdução
	1. Funções: forma geral, valor de retorno, passagem de parâmetros e escopo
	O que são funções?
	Objetivo na utilização de funções
	Atenção
	Sintaxe da função
	Dica
	Nome da função
	Tipo da função
	Parâmetros
	Corpo da função
	Nome da função
	Parâmetros
	Tipo da função
	Corpo da função
	Melhorando o código com o uso de funções
	Conteúdo interativo
	Dica
	Recomendação
	Nome da função
	Tipo da função
	Número de parâmetros
	Tipo do parâmetro
	Nome para a variável
	Cabeçalho da função
	Corpo da função
	Conteúdo interativo
	Passagem de parâmetros e corpo de uma função
	Um tipo
	Um identificador
	Uma alocação
	Passagem de parâmetros por valor
	Passagem de parâmetros por referência
	Atenção
	Código da função
	Função invocada
	Argumentos
	Terminar
	Conteúdo interativo
	O corpo da função
	Atenção
	Funções que retornam um valor
	Dica
	Escopo de variáveis
	Conteúdo interativo
	Argumentos, parâmetros e escopo: como utilizar corretamente esses conceitos
	Conteúdo interativo
	Vem que eu te explico!
	Objetivos na utilização de funções
	Conteúdo interativo
	Escopo de variáveis
	Conteúdo interativo
	Verificando o aprendizado
	2. Matrizes e estruturas como argumentos de função
	Passagem de vetores para funções
	Linha 1
	Linha 2
	Linha 3
	“s”
	“tam”
	Passagem de matrizes para funções
	Conteúdo interativo
	Linha 2
	Linha 3
	Linha 4
	Linha 5
	Linha 6
	Linha 7
	Linha 8
	Linhas 13 a 15
	Linha 16
	Recomendação
	Passagem de registros para funções
	Conteúdo interativo
	Linhas 3 a 8
	Linha 10
	Linhas 11 a 15
	Linha 19
	Linha 20
	Simulando passagem de parâmetros por referência em C
	Conteúdo interativo
	Vem que eu te explico!
	Passagem de vetores para funções
	Conteúdo interativo
	Dualidade vetor/ponteiro
	Conteúdo interativo
	Verificando o aprendizado
	3. Recursividade
	Conceito de recursividade
	Subproblema 1
	Subproblema 2
	Passo 1
	Passo 2
	Passo 3
	Resolvendo o quebra-cabeça Torres de Hannoi
	Conteúdo interativo
	Recursividade em C
	Conteúdo interativo
	Conteúdo interativo
	Lógica de funcionamento de uma chamada recursiva
	Passo 1
	Passo 2
	Passo 3
	Passo 4
	Boas práticas na programação de funções recursivas
	Critério de término
	Chamada recursiva
	Menos código
	Vem que eu te explico!
	Primeiras palavras
	Conteúdo interativo
	Recursividade em C
	Conteúdo interativo
	Verificando o aprendizado
	Questão 2
	4. Utilização de biblioteca padrão
	História da biblioteca padrão do ANSI C
	Popular
	Problemas
	ANSI
	Padrão
	Bibliotecas
	Comentário
	gui.c
	bd.c
	principal.c
	Recomendação
	Vantagens de usar funções da biblioteca 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
	Arquivos de cabeçalho da biblioteca padrão na linguagem C
	
	
	
	
	
	
	
	
	
	
	
	
	Conteúdo interativo
	Recomendação
	Pesquisando funções nas bibliotecas ANSI C
	Conteúdo interativo
	Vem que eu te explico!
	Bibliotecas
	Conteúdo interativo
	Bibliotecas
	Conteúdo interativo
	Verificando o aprendizado
	5. Conclusão
	Considerações finais
	Podcast
	Conteúdo interativo
	Explore +
	ReferênciasCorpo 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: 
Conteúdo interativo
esse a versão digital para executar o código.
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. 
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:
plain-text
int putchar( int caractere ); 
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.
Recomendação
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. 
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:
plain-text
main() {
 linha(4);
 linha(6);
 linha(8);
 linha(10);
 } 
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:
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.
Número de parâmetros
A função irá receber 1(um) parâmetro.
Tipo do parâmetro
O tipo do parâmetro será inteiro.
Nome para a variável
O nome da variável que vai armazenar esse parâmetro será num.
Cabeçalho da função
O cabeçalho da função será void linha(int num) /* A função recebe um inteiro que armazena em num
*/.
Corpo da função
Basta alterar a condição de controle do laço para for (i=1 ; idenominadas 
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().
plain-text
funcao1(char letra, int n, float z)
 {
 …
 }
 main()
 {
 …
 funcao1( ‘B’, 125, 20.456); /* chamada da função */
 …
 { 
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 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:
1
Código da função
O código de uma função só é executado quando ela é invocada em alguma parte do programa ao
qual está, de algum modo, ligado.
2
Função invocada
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.
3
Argumentos
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.
4
Terminar
Depois de terminar o seu funcionamento, uma função pode devolver um valor para o programa que
a invocou.
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.
Conteúdo interativo
esse a versão digital para executar o código.
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.
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. 
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:
 
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: 
plain-text
n = soma(3,4);
 printf('%d\n',n); 
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:
• 
• 
• 
• 
• 
plain-text
int soma(int nr1, int nr2)
 {
 int resultado;
 resultado = nr1 + nr2;
 return resultado;
 } 
Tipo de retorno é int (inteiro). A palavra reservada int é colocada do lado esquerdo do nome da função.
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. 
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: 
plain-text
função( ..........)
 {
 declaração de variáveis
 instruções
 } 
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:
Conteúdo interativo
esse a versão digital para executar o código.
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
escopo1()
Valor de A na
função
escopo2()
Saída do programa
Linha 17 10 ---- ---- ----
Linha 18 10 ---- ---- Valor de A: 10
Linha 19 20 ---- ---- ----
Linha 20 20 ---- ---- ----
Linha 5 20 -100 ---- ----
Linha 6 20 -100 ----
Valor de A dentro da
função escopo1: -100
Linha 21 20 ---- ---- Valor de A: 20
Linha 22 30 ---- ---- ----
Linha 23 30 ---- ---- ----
Linha 11 30 ---- -200 ----
Linha 12 30 ---- -200
Valor de A dentro da
função escopo2: -200
Linha 24 30 ---- ---- Valor de A: 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.
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
Vem que eu te explico!
Os vídeos a seguir abordam os assuntos mais relevantes do conteúdo que você acabou de estudar. 
Objetivos na utilização de funções
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
Escopo de variáveis
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
Verificando o aprendizado
Questão 1
Analise o código a seguir e assinale a opção que mostra o resultadocorreto após a execução do programa.
 
Assinale a opção correta:
A
Resultado = 60
B
Resultado = 16
C
Resultado = 32
D
Resultado = 10
E
Resultado = 8
A alternativa C está correta.
No comando "printf ("Resultado = %d\n\n", funcao(5));", a função funcao1(5) é chamada e tem o valor 5
como parâmetro. A funcao1() calcula 2n (codificado no comando for), sendo n o valor recebido. Desse
modo, 25 = 32. Tal resultado é armazenado na variável result, que é retornado para a função main() por
intermédio do comando "return result;".
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.
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
A alternativa D está correta.
Verifica-se que, na linha 14, a função imprimir(X,Y) é chamada e recebe como parâmetros X=20 e Y=50.
Após a execução dos comandos nas linhas 5 e 6, X = 21 e Y = 49 (variáveis locais na função imprimir). O
comando "printf ("Valor de X = %d, Y = %d\n", X, Y);", localizado na linha 7, imprime o resultado "Valor de X =
21, Y = 49". A função imprimir() termina sua execução, e a próxima instrução a ser executada é o comando
printf ("Valor de X = %d, Y = %d\n", X, Y);", na linha 15, resultando nesta saída: Valor de X = 20, Y = 50.
2. Matrizes e estruturas como argumentos de função
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:
plain-text
int vet1[20]; // declaração
 vet1[0]=10; //atribuição 1
 vet1[1]=5; //atribuição 2
 vet1[2]=6; //atribuição 3 
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:
plain-text
int vet1[20];
 int vet2[30]; 
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:
plain-text
void inic1(int s[20])
 {
 int i;
 for(i=0;iPassagem 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 
01 D
440uma matriz quadrada. Uma matriz 01 D
46 53 3 possui 9 valores, enquanto a diagonal principal é formada por 3 
01 D
440elementos ( 1,1
01 D
440, 2,2
01 D
440, 3,3). Nosso próximo programa calcula a soma da diagonal principal de uma matriz 
01 D
440quadrada 01 D
46 53 3, utilizando uma função para executar essa tarefa.
 
 
 
 
 
 
 
Conteúdo interativo
 
esse a versão digital para executar o código.
 
 
 
 
Vamos à explicação do programa:
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.
 
 
 
 
 
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 fixar os 
conceitos abordados e estimular o raciocínio lógico.
 
 
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. 
plain-text
struct pessoa
 {
 char nome[50];
 int idade;
 float salario;
 }; 
A semântica dessa declaração é que o registro (struct) pessoa agrega três objetos de dados distintos:
 
Um vetor de caracteres, identificado por nome.
O inteiro idade
O número de ponto flutuante 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.
• 
• 
• 
plain-text
struct pessoa funcionario; 
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: 
plain-text
funcionario.idade = 50; 
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.
 
 
 
 
 
 
 
Conteúdo interativo
 
esse a versão digital para executar o código.
 
 
 
 
Vamos à explicação do programa:
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.
 
 
 
 
 
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.
 
 
 
 
 
 
 
Conteúdo interativo
 
Acesse a versão digital para assistir ao vídeo.
 
 
 
 
Vem que eu te explico!
Os vídeos a seguir abordam os assuntos mais relevantes do conteúdo que você acabou de estudar.
Passagem de vetores para funções
 
 
 
 
 
 
 
Conteúdo interativo
 
Acesse a versão digital para assistir ao vídeo.
 
 
 
 
Dualidade vetor/ponteiro
 
 
 
 
 
 
 
Conteúdo interativo
 
Acesse a versão digital para assistir ao vídeo.
 
 
 
 
Verificando o aprendizado
Questão 1
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.
 
A
 
-225
 
 
B
 
-23
 
 
C
 
20
 
 
D
 
19
 
 
E
 
225
 
A alternativa B está correta.
A funcao2() realiza a subtração dos elementos do vetor. A expressão aritmética x = x - v[i] é executada a 
cada iteraçãodo comando for. Quando i = 1 e x = 101, há a expressão x = x - v[1] = 101 – 30 = 71. Quando i 
= 2, x = 71 – 22 = 49. Quando i = 3, x = 49 – 31 = 18. Quando i = 4 (última rodada), x = 18 – 41 = -23. Desse 
modo, a função funcao2() retorna x = -23.
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
 
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
 
A alternativa E está correta.
São passadas três estruturas como parâmetros para a func3. A função func3() recebe os parâmetros e 
imprime o nome da variável f1, a idade da variável de f2 e o salário da variável. Com isso, a saída é "Paulo 
Cesar 51 12500,00".
 
Seguir a receita de um bolo é um processo 
linear ou não recursivo.
 
 
3. Recursividade
 
 
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.
 
 
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:
 
Passo inicial: máximo = 1º elemento da sequência.
Passo geral: repito para o 2º elemento até o último elemento a seguinte comparação:
Se máximoPasso 4
 
Tendo a necessidade de calcular fatorial(1), fica o fatorial(2) também 
dependente do cálculo de fatorial(1) = 1 * fatorial(0). 
O cálculo de fatorial(0) finaliza as chamadas recursivas à função e retorna 1, 
pois 
fatorial(0) = 1. Dessa forma, já podemos obter o valor de fatorial(1), pois: 
 fatorial(1) = 1 * fatorial(0) = 1 * 1 = 1. 
O mesmo se pode dizer para fatorial(2): fatorial(2) = 2 * fatorial(1) = 2 * 1 = 2 
Continuando, eis o cálculo de fatorial(3) = 3 * fatorial(2) = 3 * 2 = 6. 
E, finalmente, temos a capacidade de calcular o valor de fatorial(4): fatorial(4) = 
4 * fatorial(3) = 4 * 6 = 24. 
 
 
 
 
 
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:
plain-text
int fatorial(int n) {
 return n*fatorial(n-1); /* chamada recursiva */
 } 
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:
 
 
 
 
1
Critério de término
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.
 
 
 
 
 
 
 
 
2
Chamada recursiva
Após codificar o critério de término, será preciso escrever a chamada 
recursiva da função, que sempre é relativa a um subconjunto. Repare, 
por exemplo, que, ao invocar a função fatorial com o valor n, a sua 
chamada recursiva é sempre realizada com n-1.
 
 
 
 
 
 
 
 
3
Menos código
Com a recursividade, ganha-se, devido à menor quantidade de 
código escrito, mais legibilidade. Entretanto, perde-se em 
termos de desempenho.
 
 
 
 
Vem que eu te explico!
Os vídeos a seguir abordam os assuntos mais relevantes do conteúdo que você acabou de estudar.
Primeiras palavras
 
 
 
 
 
 
 
Conteúdo interativo
 
Acesse a versão digital para assistir ao vídeo.
 
 
 
 
Recursividade em C
 
 
 
 
 
 
 
Conteúdo interativo
 
Acesse a versão digital para assistir ao vídeo.
 
 
 
 
Verificando o aprendizado
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
 
A
 
programação orientada a funções.
 
 
B
 
recursividade direta.
 
 
C
 
lista circular.
 
 
D
 
recursividade indireta.
 
 
E
 
lista indireta.
 
A alternativa D está correta.
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
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
#include 
int recursividade(int n)
{
 if (n>0) {
 n = 2*recursividade(n-1);
 return n;
 }
 else return 1;
}
int main()
{
 recursividade(5);
} 
 
A
 
4
 
 
B
 
128
 
 
C
 
16
 
 
D
 
64
 
 
E
 
32
 
A alternativa E está correta.
A função recursividade calcula o valor de 2n, sendo n o expoente. Assim, como o parâmetro recebido de 
função é 5, o valor retornado é 25 = 32.
 
 
4. Utilização de biblioteca padrão
 
 
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:
 
 
 
1970
 
 
Popular
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
 
 
Problemas
Aumentaram os problemas de compatibilidade por conta dessas diferentes 
versões.
 
 
 
 
 
1983
 
 
ANSI
A American National Standards Institute (ANSI) formou um comitê para 
estabelecer uma especificação formal da linguagem conhecida como ANSI C.
 
 
 
 
 
1989
 
 
Padrão
O trabalho do comitê culminou na criação do padrão C89.
 
 
 
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
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á d
uas 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.
 
 
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.cAgrupa as funções de comunicação com o 
banco de dados.
 
principal.c
 
Com 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, 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. 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.
 
 
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. Autor: 
Paulo Vidal
 
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:
c
#include ”gui.h”
 #include “db.h”
 void desenha_resposta_consulta ()
 {
 char saida[80];
 query_db (saída,”select * from aluno where matricula=123;”);
 draw_window (saida);
 } 
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:
c
int open_db (char *database);
 int close_db (char *database);
 void query_db (char *saída, char *query); 
E que o conteúdo de gui.h seja:
c
void draw_window (char *str); 
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:
c
void draw_window (char *str);
 int open_db (char *database);
 int close_db (char *database);
 void query_db (char *saída, char *query);
 void desenha_resposta_consulta ()
 {
 char saida[80];
 query_db (saída,”select * from aluno where matricula=123;”);
 draw_window (saida);
 } 
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:
As funções funcionam
 
Uma das razões mais importantes para você usar as funções de biblioteca é 
simplesmente porque elas funcionam. Além de terem passado por vários testes 
rigorosos, essas funções são fáceis de usar.
 
 
 
 
 
As funções são otimizadas para desempenho
 
A manutenção contínua da "biblioteca padrão" por um grupo dedicado de 
desenvolvedores as torna constantemente melhores. No processo, eles são 
capazes de criar o código mais eficiente para desempenho máximo.
 
 
 
 
 
Economiza um tempo considerável de desenvolvimento
 
Como as funções gerais, como imprimir em uma tela ou calcular a raiz 
quadrada, entre outras, já estão prontas para uso, você não deve se preocupar 
em criá-las novamente.
 
 
 
 
 
As funções permitem a portabilidade dos programas
 
Com as necessidades do mundo real em constante mudança, o esperado é que 
seu aplicativo funcione sempre e em qualquer plataforma computacional 
(conjunto do sistema operacional e hardware). As funções da biblioteca o 
ajudarão, já que elas fazem a mesma coisa em todos os computadores.
 
 
 
 
 
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:
 
 
 
 
 
Funções matemáticas.
 
 
 
 
 
 
 
 
 
Funções de data e hora.
 
 
 
 
 
 
 
 
 
Funções de localização.
 
 
 
 
 
 
 
 
 
Um conjunto de funções para manipular números complexos.
 
 
 
 
 
 
 
 
 
Funções de entrada/saída padrão, como printf() e scanf().
 
 
 
 
 
 
 
 
 
Funções de saltos que não seguem a forma usual de chamadas para sub-
rotinas.
 
 
 
 
 
 
 
 
 
Funções de manipulação de argumentos variáveis passados para funções.
 
 
Contém a macro assert, que é usada para auxiliar na detecção de erros lógicos 
e outros tipos de erros na depuração de versões de um programa.
 
 
 
 
 
 
 
 
 
Funções de propósito geral, como conversão de tipos, alocação e liberação de 
memória, ordenamento e busca e controle de processos.
 
 
 
 
 
 
 
 
 
Funções de manipulação de strings. Podemos citar como exemplos funções 
para comparação entre strings, cópia de strings entre variáveis, verificar o 
tamanho de uma string e a concatenação de strings.
 
 
 
 
 
 
 
 
 
Funções de tratamento de sinais. Um sinal pode relatar algum comportamento 
excepcional dentro do programa (como divisão por zero), assim como algum 
evento assíncrono fora dele (como alguém apertar uma tecla de atenção 
interativa em um teclado).
 
 
 
 
 
 
 
 
 
Define o conjunto de funções usadas para classificar caracteres por seus tipos 
ou para converter entre maiúsculas e minúsculas de forma independente do 
conjunto de caracteres usado.
 
 
 
 
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 .
 
 
 
 
 
 
 
Conteúdo interativo
 
esse a versão digital para executar o código.
 
 
 
 
 
 
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!
 
 
Pesquisando funções nas bibliotecas ANSI C
No vídeo a seguir, demonstraremos como pesquisar e aplicar as funções das bibliotecas ANSI C.
 
 
 
 
 
 
 
Conteúdo interativo
 
Acesse a versão digital para assistir ao vídeo.
 
 
 
 
Vem que eu te explico!
Os vídeos a seguir abordam os assuntos mais relevantes do conteúdo que você acabou de estudar.
Bibliotecas
 
 
 
 
 
 
 
Conteúdo interativo
 
Acesse a versão digital para assistir ao vídeo.
 
 
 
 
Bibliotecas
 
 
 
 
 
 
 
Conteúdo interativo
 
Acesse a versão digital para assistir ao vídeo.
 
 
 
 
Verificando o aprendizado
Questão 1
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.
 
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.
 
A alternativa D está correta.
Como as funções gerais, como imprimir em uma tela e calcular a raiz quadrada, entre outras, já estão 
prontas para uso, não será preciso se preocupar em criá-las novamente, pois elas já estão disponíveis e 
economizam tempo de programação.
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
 
 
 
B
 
 
 
C
 
 
 
D
 
 
 
E
 
 
A alternativa B está correta.
O arquivo 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.
 
 
5. Conclusão
 
 
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. 
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.
 
 
 
 
 
 
 
 
Conteúdo interativo
 
Acesse a versão digital para ouvir o áudio.
 
 
 
 
 
 
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

Mais conteúdos dessa disciplina