Buscar

Livro-Texto - Unidade III

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

118
Unidade III
Unidade III
5 FUNÇÕES
A função é um grupo de instruções que juntas executam uma tarefa. Todo programa em C 
possui pelo menos uma função, que é a função main(), e todos os programas mais triviais podem 
definir algumas funções específicas.
É possível dividir o código em funções separadas, logicamente a divisão geralmente depende de 
cada função para executar uma tarefa específica. Para declarar uma função, devemos informar ao 
compilador o nome de uma função, o tipo de retorno e os parâmetros.
 
A linguagem C é por natureza uma linguagem de programação estruturada. 
A maior parte de seus recursos é conseguida com a utilização de funções, 
como main(), printf(), scanf(), fgets(), puts(), strcmp(), strcpy(). A linguagem 
possui uma coleção de bibliotecas, tais como stdio.h e string.h, as quais 
possuem um grande conjunto de várias funções que podem ser usadas 
a qualquer momento. Uma função também pode ser desenvolvida pelo 
programador, a função é um trecho independente de código de programa 
com atribuições bem definidas. Uma função (também pode ser denominada 
como sub-rotina) pode ser interna ou externa:
• É considerada função interna quando faz parte do compilador. 
O conjunto das funções internas forma a chamada biblioteca de 
funções, como, por exemplo, as bibliotecas-padrão stdio.h e string.h 
(demonstradas em exemplos de programas nos capítulos anteriores).
• É considerada função externa quando é desenvolvida e implementada 
por um programador com a finalidade de atender a uma necessidade 
em particular (MANZANO, 2013, p. 144).
A biblioteca padrão C fornece inúmeras funções internas que seu programa pode instanciar. Por 
exemplo, função strcat() para concatenar duas cadeias, a função memcpy() para copiar um local da 
memória para outro local e muitas outras funções.
119
ALGORITMOS
 Saiba mais
Para conhecer um pouco mais sobre a funções, leia o capítulo 6 da obra 
indicada a seguir.
SOFFNER, R. Algoritmos e programação em linguagem C. São Paulo: 
Saraiva, 2013.
A seguir, temos o quadro com as bibliotecas-padrão da linguagem C (compilador GCC).
Quadro 8 – Bibliotecas-padrão da linguagem C
Biblioteca Descrição
stdio.h
Essa biblioteca é a mais utilizada na programação em 
línguagem C, pois é a padrão, na qual estão embutidas as 
funções printf(), puts(), gets(), scanf(), entre outras
math.h
Possui as funções matemáticas usadas pela linguagem. 
Encontram-se funções trigonométricas, hiperbólicas, 
exponenciais, logarítmicas, entre outras
string.h
Esta possui as rotinas de tratamento de strings e 
caracteres, na qual se encontram as funções strcmp() e 
strcpy(), entre outras
time.h Essa biblioteca possui as funções de manipulação de data e hora do sistema
stdlib.h
Possui um conjunto de funções que não se enquadra 
em outras categorias. As funções dessa biblioteca são 
conhecidas como “funções miscelâneas
Fonte: Manzano (2013, p. 144-145).
Segundo Damas (2016):
 
Cada função tem que ter um nome único, que serve para a sua invocação 
em algum lugar no programa a que pertence.
Uma função pode ser invocada a partir de outras funções.
Uma função (como o seu nome indica) deve realizar uma única tarefa 
bem definida.
Uma função deve comportar-se como uma caixa preta. Não interessa 
como funciona, o que interessa é que o resultado final seja o esperado, sem 
efeitos colaterais.
120
Unidade III
O código de uma função deve ser o mais independente possível do resto do 
programa, e deve ser tão genérico quanto possível, para poder ser reutilizado 
em outros projetos.
Uma função pode receber parâmetros que alterem o seu comportamento de 
forma a adaptar-se facilmente a situações distintas.
Uma função pode retornar, para a entidade que a invocou, um valor como 
resultado do seu trabalho (DAMAS, 2016, p. 104).
Uma função é conhecida com vários nomes, como método, sub-rotina, procedimento etc. A forma 
geral de uma definição de função na linguagem de programação C é dada a seguir.
return_type nome_da_funcao (lista de parâmetros){
// corpo da função
}
Uma definição de função na linguagem de programação C consiste em um cabeçalho de função 
e possui um corpo funcional. A seguir estão todas as partes de uma função
• Tipo de retorno: uma função pode retornar um valor. O return_type é o tipo de dados que a 
função retorna (valor). Algumas funções executam as operações desejadas sem a necessidade de 
retornar um valor. Nesse caso, o return_type será a palavra-chave void (vazio).
• Nome da função: o nome real da função; o nome da função e a lista de parâmetros, juntos, 
constituem a assinatura da função.
• Parâmetros: um parâmetro é como um espaço reservado. Quando uma função é chamada, você 
passa um valor para o parâmetro e este valor é referido como parâmetro ou argumento real. 
A lista de parâmetros refere-se ao tipo, ordem e número dos parâmetros de uma função. Os 
parâmetros são opcionais, isto é, uma função pode não conter parâmetros.
• Corpo da função: o corpo da função contém uma coleção de instruções que define a sua 
funcionalidade.
121
ALGORITMOS
Veja um exemplo a seguir.
A) 
B) 
Figura 56 – Exemplo da utilização da implementação da Função em C (imagem do programa Dev C++)
 Saiba mais
Para conhecer um pouco mais sobre a funções na linguagem C, você 
pode ler o capítulo sobre funções da obra indicada a seguir.
MIZRAHI, V. V. Treinamento em linguagem C. São Paulo: Pearson, 2008.
122
Unidade III
Exemplo de aplicação
Pesquise exemplos de programas que utilizam as funções para auxiliar na organização do código fonte.
 Lembrete
Todo programa em C possui pelo menos uma função, que é a função 
main(), e todos os programas mais triviais podem definir algumas 
funções específicas.
5.1 Objetos e classes
5.1.1 Introdução à programação orientada a objetos
Na programação orientada a objetos (POO), o programa é feito de objetos, com certas 
propriedades e operações que eles, os objetos, podem executar; nesse sentido, você deve se 
preocupar com o que os objetos expõem. Então, assim como certos fabricantes de computadores 
não se importam com as partes internas de uma fonte de alimentação desde que ela faça o que 
eles querem, a maioria dos programadores de linguagens que utilizam a POO não se importam 
com a maneira como um objeto é implementado desde que ele realize a tarefa desejada.
 Observação
A POO é a programação dominante nos paradigmas atuais, tendo 
substituído a programação estruturada, que é baseada em técnicas de 
programação desenvolvidas no início dos anos 1970.
A programação estruturada tradicional consiste em projetar um conjunto de funções (ou algoritmos) 
para resolver um problema. Depois que as funções foram determinadas, o próximo passo é encontrar 
maneiras apropriadas de armazenar os dados. A principal preocupação, nesse contexto, é o 
desenvolvimento dos algoritmos, com as estruturas de dados ficando em segundo plano.
A POO inverte essa ordem e coloca os dados do primeiro plano, para, em seguida, analisar 
os algoritmos que operam os dados. A chave para ser mais produtivo na POO é tornar cada 
objeto responsável por executar um conjunto de tarefas relacionadas. Se um objeto depende 
de uma tarefa que não é de sua responsabilidade, ele precisa ter acesso a outro objeto cujas 
responsabilidades incluam essa tarefa. Dessa forma, o primeiro objeto pede ao segundo objeto 
para executar a tarefa.
123
ALGORITMOS
Em particular, um objeto nunca deve manipular diretamente os dados internos de outro 
objeto nem deve expor dados para outros objetos acessarem diretamente suas informações. A 
comunicação deve ser realizada através das chamadas de método: ao encapsular os dados do objeto, 
você conseguirá maximizar a sua reutilização, poderá reduzir a dependência de dados e minimizar 
o tempo de depuração. Obviamente, assim como os módulos em uma linguagem orientada a 
procedimentos, não se deseja que um objeto individual tenha uma sobrecarga de ações. Assim, o 
design e a depuração são simplificados quandovocê cria objetos pequenos, que executam algumas 
tarefas, em vez de utilizar objetos gigantescos, com dados internos extremamente complexos e 
com centenas de funções para manipular os dados.
Exemplo de aplicação
Pesquise sobre as diferenças entre as linguagens estruturadas e as linguagens orientadas a objetos.
5.1.2 Objetos
Para trabalhar com POO, você deve identificar três características principais dos objetos, 
listadas a seguir.
• Comportamento do objeto: o que você pode fazer com esse objeto ou quais métodos é 
possível acessar?
• Estado do objeto: como o objeto reage quando você aplica esses métodos?
• Identidade do objeto: como o objeto se distingue dos outros que podem ter o mesmo 
comportamento e estado?
Os objetos são criados a partir de uma classe usando o novo operador, que chama um construtor 
com tipos de parâmetros correspondentes. Esses objetos podem ser atribuídos a variáveis declaradas 
do tipo dado pelo nome da classe; cada objeto tem uma cópia de cada variável de instância em sua 
classe e em todas as superclasses dessa classe.
Os métodos de instância em uma classe podem ser chamados apenas com um objeto do tipo de 
classe (ou uma subclasse). Esse objeto é chamado de receptor do método e pode ser referido dentro 
do método. Todos os objetos que são instâncias da mesma classe compartilham uma semelhança, 
suportando o mesmo comportamento. O comportamento de um objeto é definido pelos métodos 
que você pode instanciar.
Em seguida, cada objeto armazena informações sobre o estado do objeto. O estado de um objeto 
pode mudar com o tempo, mas não espontaneamente. Uma mudança no estado de um objeto deve 
ser uma consequência das chamadas de método. No entanto, o estado de um objeto não o descreve 
completamente, pois cada objeto tem uma identidade distinta. Por exemplo, em um sistema de 
processamento de pedidos, os pedidos são distintos, mesmo que solicitem itens idênticos.
124
Unidade III
Observe que os objetos individuais que são instâncias de uma classe sempre diferem em 
sua identidade e geralmente diferem em seu estado. Por exemplo, o estado de um objeto pode 
influenciar seu comportamento.
5.1.3 Classes
Uma classe consiste em um tipo de instância e um objeto de classe.
Um tipo de instância é uma estrutura que contém membros variáveis chamados de variáveis da 
instância e membros da função chamados de métodos da instância.
Um objeto de classe é uma variável global, contendo variáveis e métodos de classe. Esses 
membros pertencem a toda a classe sem nenhuma referência a nenhuma instância.
Construtores
As instâncias devem ser inicializadas pelos construtores quando declaradas, e os construtores 
devem ser métodos da classe. O construtor deve preferencialmente retornar um tipo de instância, 
mas também pode retornar um ponteiro para um tipo de instância.
5.1.4 Storage classes
A classe storage define o escopo (visibilidade) e o tempo de vida das variáveis e/ou funções 
dentro de um programa C. Esses especificadores precedem o tipo que eles modificam. Existem as 
seguintes classes de armazenamento que podem ser usadas em um programa C:
• auto;
• register;
• static;
• extern.
125
ALGORITMOS
Classe auto storage
A classe de armazenamento automático é a classe de armazenamento padrão para todas as 
variáveis locais.
{
int numero1;
auto int numero2;
}
 Observação
É importante ressaltar que auto só pode ser usado em funções, ou seja, 
variáveis locais.
Classe register storage
A classe de armazenamento de registro é usada para definir variáveis locais que devem ser 
armazenadas e registradas na memória RAM. Isso significa que a variável tem um tamanho máximo 
e não pode apresentar o operador ‘&’ unário aplicado a ela.
{
register int numero1;
}
O registro deve ser usado apenas para variáveis que requerem acesso rápido, como contadores. 
Vale esclarecer que definir como register não significa que a variável será armazenada em um 
registro: isso significa que pode ser armazenado em um registro, dependendo do hardware e das 
restrições de implementação.
Classe static storage
Tornar as variáveis locais estáticas permite que elas mantenham os seus valores entre as 
chamadas de função. O modificador estático também pode ser aplicado a variáveis globais. A partir 
dessa definição, é possível implementar o programa na linguagem de programação C.
126
Unidade III
Veja o código a seguir.
A) 
B) 
Figura 57 – Implementação do problema apresentado (imagem do programa Dev C++)
 Observação
A classe de armazenamento estático instrui o compilador a manter uma 
variável local ativa durante a vida útil do programa, em vez de criá-la e 
destruí-la a cada vez que entra e sai do escopo.
5.2 Atributos e associações
5.2.1 Atributos
Os atributos são um mecanismo por meio do qual o desenvolvedor pode anexar informações 
extras às entidades da linguagem com uma sintaxe generalizada em vez de introduzir novas 
construções sintáticas ou palavras-chave para cada recurso. Essa informação destina-se a ser 
usada por uma implementação de maneira que tenha um mínimo de semântica, como melhorar a 
qualidade dos diagnósticos produzidos por uma implementação ou especificar o comportamento 
específico da plataforma.
127
ALGORITMOS
Os atributos destinam-se a situações leves em que as palavras-chave podem ser inadequadas, 
mas não pretendem descartar a necessidade ou capacidade de adicionar essas palavras-chave 
quando apropriado.
5.2.2 Associações
Associação é um relacionamento (* a *) entre duas classes, permitindo que uma instância de 
objeto utilize outro elemento para executar uma ação em seu nome. Pode-se dizer que associação 
é o termo mais geral que define o relacionamento entre duas classes, trata-se da forma mais 
simples de relação entre classes.
A associação constitui-se em um relacionamento ponto a ponto, um relacionamento estrutural 
que descreve um conjunto de links (ou seja, as conexões entre os objetos). É um relacionamento 
entre dois ou mais classificadores que envolve a conexão entre as instâncias. De acordo com Ojo e 
Estevez (2005), as associações entre as classes A e B podem ser:
• A é uma parte física ou lógica de B;
• A é um tipo de B;
• A está contido em B;
• A é uma descrição de B;
• A é um membro de B;
• A é uma subunidade da organização de B;
• A usa ou gerencia B;
• A se comunica com B;
• A segue B;
• A é propriedade de B.
5.3 Métodos
A programação orientada a objetos (POO) foi usada para melhorar a qualidade, a produtividade 
e a reutilização de componentes de software. Nesse paradigma de programação, os principais 
agentes ou objetos do aplicativo devem ser identificados. Os objetos possuem dados e métodos 
que descrevem seus recursos e comportamento. Um programa orientado a objetos é implementado 
como um conjunto de classes e os objetos são criados a partir das instâncias de sua classe. Portanto, 
as classes são a unidade básica de modularização em um ambiente orientado a objetos.
128
Unidade III
Os objetos se comunicam pelo mecanismo da mensagem. Com base em seus métodos, o 
objeto de recebimento deve interpretar a mensagem, executar o respectivo conjunto de 
operações e retornar o resultado à instância de envio. Uma classe encapsula informações que 
são acessadas apenas por mensagens, cabendo ressaltar que uma mensagem com o mesmo 
nome pode representar operações diferentes através do conceito de polimorfismo. Por exemplo, 
a mensagem + pode ser uma adição para uma classe de matriz e também uma concatenação 
para uma classe de sequência.
 Observação
Os métodos representam comportamentos. Eles podem retornar 
as informações sobre um objeto ou atualizar os dados de um objeto. O 
código do método é definido na definição de classe. Quando os objetos 
individuais são instanciados, esses objetos podem chamar os métodos 
definidos na classe.
É possível reutilizar os métodos e manter a funcionalidade encapsulada dentro de um objeto. 
Essa reutilização é um grande benefíciona depuração: se houver um erro, há apenas um lugar para 
encontrá-lo e corrigi-lo em vez de muitos locais em seu código.
O mecanismo de herança permite implementar hierarquias de classe nas quais as classes de 
nível inferior herdam dados e métodos das classes de nível superior. Dessa maneira, é possível 
estender e reutilizar classes em muitos aplicativos adicionando novas variáveis e métodos para 
descrever conceitos mais específicos na hierarquia de classes.
 Lembrete
Nas linguagens procedurais, o programa é decomposto em funções 
e procedimentos. Na programação orientada a objetos, os objetos 
representam algum comportamento usando dados e métodos. Por exemplo, 
os vetores e as matrizes são classes comuns para aplicativos de álgebra 
linear. Procedimentos para multiplicação de matrizes e produtos vetoriais 
são implementados como métodos dessas classes.
129
ALGORITMOS
6 UTILIZAÇÃO DE ARQUIVOS, DIRETÓRIOS E DISCOS
6.1 Formatação de impressão
6.1.1 Entrada e saída de dados
Segundo Manzano:
 
Toda ação de entrada e saída efetivada com a linguagem C, 
independentemente de essas ações se darem de forma direta ou indireta, 
sempre realiza a ação do tratamento de cadeias ou caracteres e sua 
conversão para o tipo adequado usado pela linguagem.
Em diversos momentos da apresentação desta obra foram usadas para 
as operações de entrada e saída de dados diversas funções, tais como as 
funções de entrada scanf() / scanf_s(), getchar(), fgetc(), fgets(), fscanf() 
/ fscanf_s() e sscanf() / sscanf_s(), além das funções de saída printf() / 
printf_s(), putchar(), fputc(), fputs(), fprintf() / fprintf_s(), puts() e sprintf() / 
sprintf_s(), snprintf() / snprintf_s().
As ações foram efetivadas de diversas maneiras, desde por meio dos 
periféricos-padrão de entrada (teclado) e saída (monitor de vídeo) até operações 
com arquivos em disco e buffers de memória, mas sempre contextualizadas 
à medida que eram necessárias (MANZANO, 2015, p. 390-391).
Quadro 9 – Relação entre as funções de entrada e saída de dados
Entrada Saída
-
fgetc()
fgets()
fscanf() / fsacanf_s()
getchar()
gets() / gets_s()
scanf() / scanf_s()
sscanf() / sscanf_s()
snprintf() / snprintf_s()
fputc()
fputs()
fprintf() / fprintf_s()
putchar()
puts()
printf() / printf_s()
sprintf() / sprint_s()
Fonte: Manzano (2015, p. 391).
130
Unidade III
Para Soffner:
 
A linguagem C não determina um tipo específico para a manipulação de 
strings (que são vetores ou cadeias de caracteres, terminados pelo caractere 
NULL). Para isso, fornece uma completa biblioteca de funções específicas 
(string.h). Funções que manipulam strings a percorrem até encontrar o 
caractere NULL, quando saberão que ela terminou. Utilizamos, portanto, 
o caractere zero da tabela ASCII (‘\0’) para encerrar a string, e este ocupa um 
espaço que deve ser previsto pelo programador, como visto anteriormente. 
A relação entre strings e vetores é, dessa forma, direta. Uma string é 
um vetor de caracteres, mas nem todo vetor de caracteres é uma string 
(SOFFNER, 2013, p. 92).
A partir dessa definição, é possível implementar o programa na linguagem de programação C. 
Veja o código a seguir.
A) 
B) 
Figura 58 – Implementação do problema apresentado (imagem do programa Dev C++)
Neste próximo exemplo, é possível verificar o comprimento de uma string.
131
ALGORITMOS
A) 
B) 
Figura 59 – Implementação do problema apresentado (imagem do programa Dev C++)
Retomando Soffner:
Outras importantes funções de manipulação de strings são:
• strcpy( ): copia uma string em outra;
• strcat( ): adiciona o conteúdo de uma string em outra;
• strlwr( ): converte conteúdo para minúsculas;
• strupr( ): converte conteúdo para maiúsculas;
• strcmp( ): compara duas strings (SOFFNER, 2013, p. 94).
132
Unidade III
No exemplo a seguir, é possível verificar a aplicação da função strcmp( ), que realiza a comparação 
de duas string que serão digitadas pelo usuário.
A) 
B) 
Figura 60 – Implementação do problema apresentado (imagem do programa Dev C++)
 Saiba mais
Para conhecer um pouco mais sobre a entrada de dados, leia o capítulo 
abordando teclado e cursor na obra indicada a seguir.
MIZRAHI, V. V. Treinamento em linguagem C. São Paulo: Pearson, 2008.
Exemplo de aplicação
Pesquise sobre as funções de manipulação de strings disponíveis na linguagem C.
133
ALGORITMOS
6.1.2 Arquivos
Sobre o assunto, diz Manzano:
 
A principal vantagem de um arquivo é que as informações armazenadas 
podem ser consultadas a qualquer momento. Outra vantagem é o fato de 
armazenar um número maior de registros do que uma tabela em memória. 
Está limitado apenas ao tamanho do meio físico para gravação.
É um conjunto de registros (que pode ser apenas um registro) que, por sua 
vez, é um conjunto de campos (que pode ser apenas um campo), sendo cada 
campo o conjunto de informações (MANZANO, 2013, p. 192).
Ainda de acordo com Manzano (2013), o tipo de abertura de um arquivo é especificado por três 
códigos do tipo string, a saber:
• letra r para leitura (read);
• letra w para gravação (write);
• letra a para adicionar dados (append).
A seguir, temos um quadro com essa representação.
Quadro 10 – Opções de acesso a arquivos
Tipo de abertura Descrição
R Esse código permite apenas abrir um arquivo de texto para a leitura de seus dados. É necessário que o arquivo esteja presente no disco
W
Esse código permite apenas abrir um arquivo texto para escrita (gravação). Também cria o 
arquivo para ser trabalhado. Caso o arquivo exista, esse código recria o arquivo, ou seja, você 
perde o arquivo criado anteriormente (por isso, deve ser usado com muito cuidado)
A Esse código permite apenas abrir um arquivo de texto para escrita (gravação), possibilitando acrescentar novos dados ao final dele. Caso o arquivo não exista, ele será, então, criado
Fonte: Manzano (2013, p. 391).
Na quadro 11, são apresentadas as funções específicas para se trabalhar com arquivos.
Quadro 11 – Opções de acesso a arquivos
Funções de manipulação de arquivos
fopen( ) Abre um arquivo para trabalho
fclose( ) Fecha o arquivo
134
Unidade III
Funções de manipulação de arquivos
putc( ) Escreve um caractere no arquivo aberto
fputc( ) Mesma função de putc( )
getc( ) Lê um caractere do arquivo de trabalho
fgetc( ) Mesma função de getc( )
fseek( ) Posiciona o ponteiro de arquivo em um byte específico
rewind( ) Posiciona o ponteiro de arquivo no início deste
fprintf( ) Idem ao printf na saída-padrão
fscanf( ) Idem ao scanf na entrada-padrão
 Adaptado de: Soffner (2013, p. 159).
Para iniciar as operações com um arquivo, o primeiro passo é criá-lo. No exemplo a seguir, é 
apresentado o código para a criação do arquivo e o print da criação após a sua execução.
A) 
B) 
C) 
Figura 61 – Criação de arquivo (imagem do programa Dev C++ e do diretório do Windows)
135
ALGORITMOS
 Lembrete
Após a criação do arquivo, é possível utilizá-lo para a gravação dos 
dados e/ou informações.
Veja o código a seguir, por meio do qual é possível criar um arquivo, utilizando-o após 
sua gravação.
A) 
B) 
C) 
Figura 62 – Manipulação do arquivo (imagem do programa Dev C++ e do Bloco de Notas que foi criado)
136
Unidade III
O próximo exemplo mostra que é possível acessar as informações que foram escritas no arquivo 
texto, exibindo o seu conteúdo. Observe o código com essa ação.
A) 
B) 
Figura 63 – Manipulação do Arquivo (imagem do programa Dev C++)
Na sequência, temos um exemplo mostrando que é possível salvar o texto de uma frase no 
arquivo que será gerado.
137
ALGORITMOS
A) 
B) 
Figura 64 – Salvando o texto de uma frase completa (imagem do programa Dev C++)
O próximo exemplo ilustra como abrir o arquivo de modo que seja possível acrescentar um 
novo texto ao conteúdo, gravando-se, depois, a alteração.
138
Unidade III
A) 
B) 
C) 
Figura 65 – Acrescentando texto ao arquivo (imagem do programa Dev C++ e do Bloco de Notas que foi gerado)
139
ALGORITMOSSaiba mais
Para conhecer um pouco mais sobre o assunto, você pode ler o capítulo 
sobre arquivos da obra indicada a seguir.
SOFFNER, R. Algoritmos e programação em linguagem C. São Paulo: 
Saraiva, 2013.
 Resumo
Vimos que a função é um grupo de instruções que, juntas, executam 
uma tarefa. Todo programa em C possui pelo menos uma função, que 
é a função main(), e todos os programas mais triviais podem definir 
algumas funções específicas.
Foi discutido que na POO o programa é feito de objetos, com certas 
propriedades e operações que os objetos podem executar. Nesse sentido, 
você deve se preocupar com o que os objetos expõem. Então, assim como 
os fabricantes de computadores não se importam com as partes internas de 
uma fonte de alimentação que corresponde a suas expectativas, a maioria 
dos programadores de linguagens que utilizam a POO não se importam 
com a maneira como um objeto é implementado desde que tais objetos 
cumpram suas funções.
Os métodos de instância em uma classe podem ser chamados apenas 
com um objeto do tipo de classe (ou uma subclasse). Esse objeto é chamado 
de receptor do método e pode ser referido dentro do método. Todos os 
objetos que são instâncias da mesma classe compartilham uma semelhança, 
suportando o mesmo comportamento. O comportamento de um objeto é 
definido pelos métodos que você pode instanciar.
Viu-se também que linguagem C não determina um tipo específico 
para a manipulação de strings (que são vetores ou cadeias de caracteres, 
terminados pelo caractere NULL). Para isso, fornece uma completa biblioteca 
de funções específicas (string.h).
Na sequência, abordamos a utilização dos arquivos na linguagem 
de programação C. A principal vantagem de um arquivo é o fato de as 
informações armazenadas poderem ser consultadas a qualquer momento. 
Outra vantagem é a possibilidade de se armazenar um número maior de 
registros do que uma tabela em memória. O arquivo está limitado apenas 
ao tamanho do meio físico para gravação.
140
Unidade III
 Exercícios
Questão 1. A sequência de Fibonacci é uma sequência numérica em que o número atual é obtido 
a partir da soma dos dois números anteriores. Os primeiros números dessa sequência são 0 e 1.
Com base no exposto, analise o trecho de programa em linguagem C dado a seguir.
int fibonacci(int num)
{ 
 if(num==1 || num==2)
 return 1;
 else
 return fibonacci(num-1) + fibonacci(num-2);
}
Sobre a função anterior, analise as afirmativas.
I – A função trabalha com dois argumentos, int e num.
II – A função retorna a série de Fibonacci.
III – A função é um exemplo de função recursiva, ou seja, que faz uso dela mesma.
IV – No condicional, temos o operador lógico E.
É correto o que se afirma apenas em:
A) I e IV.
B) II.
C) III.
D) I e II.
E) II, III e IV.
Resposta correta: alternativa C.
141
ALGORITMOS
Análise das afirmativas
I – Afirmativa incorreta.
Justificativa: quando trabalhamos com funções em linguagem C, devemos passar como 
argumento o tipo da variável seguido do nome da variável. Logo, nesse caso, o argumento da 
função Fibonacci é apenas a variável num, que é do tipo inteiro.
II – Afirmativa incorreta.
Justificativa: vemos que a função retorna o número 1 ou o resultado da soma da função com 
argumentos num-1 e num-2. Logo, ela retorna apenas um termo da série de Fibonacci, não a 
série completa.
III – Afirmativa correta.
Justificativa: vemos, na última linha do código da função, o que segue.
return fibonacci(num-1) + fibonacci(num-2);
Logo, a função faz uma chamada de si mesma, o que caracteriza uma função recursiva.
IV – Afirmativa incorreta.
Justificativa: em linguagem C, o operador lógico E é representado pelo símbolo &&, enquanto 
o operador lógico OU é representado pelo símbolo ||.
Questão 2. Considere o código em linguagem C e analise as afirmativas a seguir.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
 FILE *pont;
 int num;
 pont=fopen(“arquivo.txt”,”a”);
 fprintf(pont, “%i”, num);
 fclose(pont);
}
142
Unidade III
I – A saída de dados do programa é feita na tela.
II – A saída de dados é feita no arquivo arquivo.txt.
III – As funções fopen() e fclose() fazem, respectivamente, o acesso e o fechamento de arquivos.
IV – A saída do programa é a palavra num.
É correto o que se afirma apenas em:
A) I e IV.
B) II.
C) III e IV.
D) I e II.
E) II e III.
Resposta correta: alternativa E.
Análise das afirmativas
I – Afirmativa incorreta.
Justificativa: a saída de dados na tela é feita pela função printf(). No código, temos a função 
fprintf(), que faz a saída de dados em um arquivo.
II – Afirmativa correta.
Justificativa: vemos, na linha de código a seguir, que é acessado o arquivo arquivo.txt. Logo, 
a saída de dados é feita como uma inclusão (note o parâmetro “a”, de append, “acrescentar”) 
nesse arquivo.
PRTARQ=fopen(“arquivo.txt”,”a”);
III – Afirmativa correta.
Justificativa: as funções fopen() e fclose() são as funções em linguagem C que fazem o acesso 
e o fechamento de arquivos.
143
ALGORITMOS
IV – Afirmativa incorreta.
Justificativa: a saída do programa é o conteúdo da variável num, que armazena números 
inteiros, e não a palavra num, como pode ser visto na linha a seguir.
fprintf(PRTARQ, “%i”, num);
Para que a saída fosse a palavra “num”, a linha de código deveria ser:
fprintf(PRTARQ, “%s”,” num”);
Ou seja, a saída deveria ser do tipo string (%s) e teríamos a palavra “num” entre parênteses 
como argumento da função. Se usamos num sem parênteses, fazemos referência ao conteúdo dessa 
variável. Se usamos “num” entre parênteses, fazemos referência à sequência de caracteres num.

Continue navegando