Buscar

PROGRAMAÇÃO ESTRUTURADA I

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 44 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 44 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 44 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

(
P
gg4gama¿ãg
 
3gsggsggaga
 
/
Autoria: Renato Cristiano Torres
Tema 01
Conceitos Básicos de
 
Programação
)
 (
© 2014 Anhanguera Educacional. Proibida a reprodução final ou parcial por qualquer meio de impressão, em forma idêntica, resumida ou modificada em língua portuguesa ou qualquer outro idioma.
Pág. 17
Pág. 16
Pág. 16
Pág. 16
Pág. 11
ACOMPANHE
NA
WEB
Pág. 10
POR
DENTRO
DO
TEMA
Pág. 3
CONVITE
À
LEITURA
Pág. 3
 
Índice
3ema OS
Conceitos Básicos de 
Programação
Autoria: Renato Cristiano Torres
Como citar esse documento:
TORRES, Renato Cristiano. 
Programação Estruturada I: 
Conceitos Básicos de Programação
. 
Caderno de Atividades. Anhanguera Publicações: Valinhos, 2014.
)
 (
FLUXOGRAMA
PSEUDOCÓDIGO
Notas dos Alunos Programação Estruturada I
Se
 
((B1+B2)/2)
 
>
 
7
 
então
 
//
 
Condição
 
de
 
Aprovação
 
sem
 
exame
Mostra “Aprovado” // Passou Direto
Senão
//
 
Exame
Média
 
>
 
7
SIM
Aprovado
Se EX >
 
5
 
então
//
 
Condição
 
de
 
Aprovação
 
no
 
Exame
Mostra “Aprovado”
Senão
Mostra “Reprovado”
NÃO
Exame
Nota Exame
 
>
 
5
SIM
Aprovado
Reprovado
4
Figura
 
1.1
 
Exemplo
 
de
 
algoritmos
 
em
 
fluxograma
 
e
 
pseudocódigo.
POR
DENTRO
DO
TEMA
Agora, imagine que você tenha de fazer o mesmo com um computador, ou seja, ensiná-lo a fazer algo, seja calcular a média aritmética das notas de todos os alunos de uma universidade para apresentar os aprovados ou reprovados na disciplina
 
de
 
Programação
 
Estruturada
 
I,
 
seja
 
calcular
 
a
 
disponibilidade
 
de
 
professores
 
para
 
lecionar
 
as
 
disciplinas
 
para diversas
 
turmas.
 Veja
 
que
 
os
 
dois
 
casos
 
envolvem
 
um
 
problema
 
a
 
ser
 
solucionado
 
(Figura
 
1.1).
O termo algoritmo é utilizado pela ciência da computação para descrever essa solução, que pode ser convertida para uma linguagem de programação e executada por um computador.
) (
POR
DENTRO
DO
TEMA
Conceitos Básicos de Programação
Definição de Algoritmo
Segundo Sedgewick (2003), um algoritmo é a descrição para a solução de um problema, que pode ser escrita utilizando um modelo matemático, um 
pseudocódigo 
ou, até mesmo, um fluxograma. Imagine que você tenha de explicar
 
para
 
uma
 
pessoa
 
como
 
se
 
frita
 
um
 
ovo,
 
considerando
 
que
 
ela
 
nunca
 
fez
 
isso.
 
Você
 
terá
 
de
 
descrever
 
o
 
passo
 
a passo
 
de
 
como
 
realizar
 
essa
 
ação
 
em
 
uma
 
linguagem
 
e
 
estrutura
 
que
 
a
 
pessoa
 
entenda.
5
CONVITE
À
LEITURA
Este Caderno de Atividades foi elaborado com base no livro 
Treinamento em Linguagem C
, do autor Victorine Viviane Mizrahi, Editora Pearson, 2008. (Livro-Texto)
Conteúdo
Nesta aula, você estudará:
Definição de
 
algoritmo.
Comandos básicos da linguagem de Programação
 
C.
Como construir seu primeiro programa em
 
C.
Habilidades
Ao final, você deverá ser capaz de responder as seguintes questões:
Quais são os principais elementos para a construção de um
 
algoritmo?
Como é a conversão de um algoritmo em um programa de
 
computador?
Como escrever e executar o primeiro programa em
 
C?
)
 (
5
POR
DENTRO
DO
TEMA
Transformando um Algoritmo em Programa
Um algoritmo normalmente não deve depender de uma linguagem de programação específica nem do tipo de computador; ele deve ser genérico do ponto de vista de implementação (SEDGEWICK, 2003).
Retomando
 
nossa
 
analogia
 
de
 
ensinar
 
alguém
 
a
 
fritar
 
um
 
ovo,
 
a
 
descrição
 
dessa
 
ação
 
deve
 
ser
 
genérica,
 
de
 
uma
 
forma que qualquer pessoa consiga 
ler, 
compreender e
 
executar.
Porém, sabemos que não existe uma única língua no mundo, assim como na computação não existe apenas uma linguagem
 
de
 
computador.
 
Portanto,
 
para
 
transformar
 
o
 
algoritmo,
 
que
 
é
 
genérico,
 
em
 
um
 
programa
 
que
 
utiliza
 
comandos específicos,
 
você
 
deve
 
observar
 
quais
 
comandos
 
precisam
 
ser
 
utilizados
 
durante
 
a
 
execução
 
de
 
cada
 
passo
 
do
 
algoritmo. 
Você 
verá ao longo dos temas deste caderno de atividades que esses comandos poderão ser de decisão, iteração, declaração e
 
outros.
Estrutura Básica de um Programa em C
Um
 
programa
 
na
 
linguagem
 
C
 
é
 
composto
 
por
 
uma,
 
no
 
mínimo,
 
ou
 
mais
 
funções
 
e
 
estruturas
 
de
 
dados
 
utilizadas
 
para a manipulação de dados. A forma geral é a
 
seguinte:
[Tipo do dado] [Nome da Função](parâmetros)
{
Instrução_1; Instrução_2; return variável;
}
Toda função em C deve ter um tipo de retorno, especificado em [Tipo do Dado]. Se não tiver um tipo definido, utiliza-se “void”.
Em C, o símbolo “{ }” delimita blocos de códigos. Sempre que abrir com “{“ você deve fechar com “}”, como em expressões numéricas.
O
 
ponto
 
e
 
vírgula
 
é
 
importante
 
para
 
você
 
informar
 
que
 
o
 
comando
 
encerra
 
naquela
linha.
)
 (
6
A diretiva #include indica para o compilador que deve ser incluso outro arquivo no programa-fonte, e a substituição é executada
 
antes
 
de
 
o
 
programa
 
ser
 
compilado.
 
Quando
 
utilizamos
 
#include
 
<nomedoarquivo>,
 
o
 
arquivo
 
é
 
procurado
 
na pasta
 
INCLUDE
 
do
 
seu
 
compilador.
 
Quando
 
utilizamos
 
“”
 
aspas
 
duplas,
 
o
 
arquivo
 
é
 
procurado
 
na
 
pasta
 
atual
 
e,
 
se
 
não for encontrado, na pasta INCLUDE do
 
compilador.
POR
DENTRO
DO
TEMA
Vamos
 
escrever
 
nosso
 
primeiro
 
programa.
 
Escreva
 
no
 
seu
 
compilador
 
o
 
seguinte
 
código:
#include <stdio.h> int main()
{
printf(“Primeiro Programa em
 
C”); system(“PAUSE”);
return 0;
}
Dica para erros comuns: se seu programa não funcionar na primeira execução, não fique desapontado, pois isso pode acontecer. É necessário que você fique atento aos seguintes pontos:
A linguagem C diferencia letras maiúsculas e minúsculas para comandos. Verifique se ao copiar o programa houve esta
 
troca.
Em cada término de linha é obrigatório ter “;” para indicar o encerramento
 
da
linha de comando.
Verifique
 
também
 
que
 
todo
 
bloco
 
de
 
código
 
inicia
 
com
 
“{”
 
e
 
tem
 
de
 
terminar
 
com
 
“}”.
Esse programa deve ter como saída após sua execução: Primeiro Programa em C
Pressione qualquer tecla para continuar ...
)
 (
⁄
Fonte:
 
Adaptada
 
de
 
Mizrahi
 
(2008)
POR
DENTRO
DO
TEMA
Todo programa em C deve possuir minimamente uma função denominada obrigatoriamente “main”, pois, quando o computador ler seu programa, essa será a primeira função que ele executará. Ela deve ser única, e, por padrão, toda função deve ser descrita pelo tipo de retorno, nome e parênteses, que indica para o computador que aquele bloco de código é uma função.
Declaração de Variáveis
Uma
 
variável
 
em
 
C
 
representa
 
um
 
local
 
da
 
memória
 
reservado
 
para
 
alocar
 
determinado
 
dado.
 
Quando
 
você
 
nomeia uma
 
variável
 
em
 
seu
 
programa,
 
você
 
está
 
utilizando
 
um
 
rótulo
 
para
 
um
 
endereço
 
de
 
memória,
 
o
 
que
 
torna
 
mais
 
fácil
 
a nossa
 
leitura
 
do
 
programa,
 
em
 
vez
 
de
 
utilizar
 
endereços
 
de
 
memória
 
que
 
são
 
numéricos
 
em
 
formato
 
hexadecimal
.
A
 
Tabela
 
1.1
 
apresenta
 
os
 
tipos
 
de
 
dados
 
primitivos
 
que
 
C
 
aceita.
 
Na
 
segunda
 
coluna
 
da
 
tabela
 
é
 
apresentado
 
o
 
tamanho ocupado
 
na
 
memória
 
por
 
cada
 
tipo,
 
e
 
a
 
escala
 
é
 
a
 
faixa
 
de
 
valor
 
que
 
pode
 
ser
 
armazenado.
Tabela 1.1 
Treinamento em Linguagem C.
)
	Tipo
	Bytes
	Escala
	char
	1
	-128 a 127
	int
	4
	-2.147.483.648 a 2.147.483.647
	short
	2
	-32.765 a 32.767
	long
	4
	-2.147.483.648 a 2.147.483.647
	unsigned char
	1
	0 a 255
	unsigned
	4
	0 a 4.294.967.295
	unsigned long
	4
	0 a 4.294.967.295
	unsigned short
	2
	0 a 65.535
	float
	4
	3,4 x 10-38 a 3,4 x 1038
	double
	8
	1,7 x 10-308 a 3,4 x 10308
	long double
	10
	3,4 x 10-4932 a 3,4 x 104932
	void
	0
	nenhum valor
 (
8
Agora
 
que
 
você
 
já
 
viu
 
a
 
declaração
 
de
 
variáveis
 
do
 
tipo
 
inteiro,
 
você
 
verá
 
a
 
declaração
 
de
 
variável
 
do
 
tipo
 
float
 
e
 
char.
}
numero_2
 
=
 
numero_1
 
+
 
20;
 
//
 
atribuímos
 
o
 
valor
 
soma
 
a
 
numero_2
printf(“\no primeiro número é : %d, numero_1);
printf(“\no segundo número é numero_1 + 20 : %d”, numero_2);
system(“PAUSE”); 
return 0;
// declaramos numero_2
int numero_2;
POR
DENTRO
DO
TEMA
Agora que você já conheceu os tipos de variáveis, você verá como declarar em C alguns desses tipos.
Toda variável em C deve ser declarada antes de ser usada. Veja a declaração de 2 variáveis do tipo inteira, em um programa:
#include <stdio.h> int main()
{
int
 
numero_1;
// declaramos
 
numero_1
numero_1
 
=
 
44;
// atribuímos o valor 44 a
 
numero_1
Esse programa deve ter como saída após sua execução: O primeiro número é 44
O segundo número “numero_1 + 20” = 64 Pressione qualquer tecla para continuar ...
)
 (
SO
ACOMPANHE
NA
WEB
Laboratório de computação gráfica
Acesse
 
o
 
site
 
do
 
Laboratório
 
de
 
computação
 
gráfica.
 
Neste
 
link
,
 
você
 
encontrará
 
um
 
curso
 
de
nivelamento em Linguagem C.
Disponível em: 
<http://www.lcg.ufrj.br/Cursos/curso-nivelamento/linguagem-C.ppt/view>
. 
Acesso em: 5 mai. 2014.
História da programação
Leia
 
o
 
artigo
 
“História
 
da
 
programação”.
 
Trata
 
da
 
história
 
das
 
linguagens
 
de
 
programação.
Disponível em: 
<http://www.infoescola.com/informatica/historia-da-programacao/
>
. Acesso em: 5 mai. 2014.
Arquivos de Tag: C
Você 
encontrará diversos códigos exemplos, desde simples algoritmos até aplicações
 
mais
complexas.
Disponível em: 
<http://codigofonte.uol.com.br/codigos/outras-linguagens/c-cpp>
. Acesso em: 5 mai. 2014.
Na Tabela 1.2, você nota que na última linha a variável com nome “while” não é aceita, pois “while” é o nome de um comando de C, ou seja, é uma palavra reservada.
POR
DENTRO
DO
TEMA
Tabela
 
1.2
 
Exemplo
 
de
 
nomes
 
de
 
variáveis.
) (
9
A
 
facilidade
 
de
 
nomear
 
as
 
variáveis
 
pode
 
ajudar
 
a
 
entender
 
melhor
 
o
 
que
 
o
 
programa
 
faz
 
e
 
evitar
 
erros
 
ou,
 
ainda,
 
facilitar uma
 
manutenção
 
no
 
código.
 
Porém,
 
você
 
deve
 
atentar-se
 
para
 
o
 
fato
 
de
 
que
 
há
 
regras
 
para
 
nome
 
de
 
variáveis
 
(Tabela 
2.1), visto que elas só podem conter letras, números e o caractere sublinhado
 
“_”.
POR
DENTRO
DO
TEMA
#include <stdio.h> int main()
{
int evento = 5; char corrida =
 
‘C’; float
 
tempo
 
=
 
27.25;
printf(“\n O tempo vitorioso na eliminatória ”); printf(“corrida \n da competição : %d”, evento);
printf(“ foi %f”, tempo) // veja que a linha de comando termina
 
aqui
}
Veja
 
que
 
a
 
variável
 
do
 
tipo
 
char
 
foi
 
inicializada
 
com
 
a
 
letra
 
C,
 
utilizando
 
apóstrofes,
 
pois
 
se
 
trata
 
de
 
um
 
caracter.
 
Inicializar uma variável significa atribuir um valor a ela na mesma instrução de
 
declaração.
Você
 
verá
 
que
 
é
 
possível
 
inicializar
 
uma
 
variável
 
do
 
tipo
 
char
 
com
 
uma
 
cadeia
 
de
 
letras,
 
ou
 
seja,
 
uma
 
palavra
 
ou
 
texto.
Esse programa deve ter como saída após sua execução:
O tempo vitorioso na eliminatória C da competição 5 foi 27.25
Pressione qualquer tecla para continuar ...
)
	Correto
	Errado
	Média_1
	Cosseno#
	Valor_de_PI
	Valor&
	Nota_10
	While
 (
ACOMPANHE
) (
NA
) (
WEB
) (
SS
AGORA
É
A
SUA
VEZ
Instruções:
Agora,
 
chegou
 
a
 
sua
 
vez
 
de
 
exercitar
 
seu
 
aprendizado.
 
A
 
seguir,
 
você
 
encontrará
 
algumas
 
questões
 
de
 
múltipla escolha
 
e
 
dissertativas.
 
Leia
 
cuidadosamente
 
os
 
enunciados
 
e
 
atente-se
 
para
 
o
 
que
 
está
 
sendo
 
pedido.
Questão 1
O que entende por linguagem de programação?
ACOMPANHE
NA
WEB
Lista de palavras reservadas em C
Conheça todas as palavras reservadas de
 
C.
Disponível
 
em:
 
<http://linguagemc.com.br/lista-de-palavras-reservadas-em-c/>
.
 
Acesso
 
em:
 
5
 
mai.
 
2014.
Iniciando linguagem C 1 parte 1
Assista ao vídeo: Iniciando linguagem C 1 parte
 
1.
Disponível em: 
<www.youtube.com/watch?v=w-brjonvZuY>
. Acesso em: 5 mai. 2014.
)
 (
Sł
AGORA
É
A
SUA
VEZ
Questão 2
Um tipo de variável em C define:
Uma variáveh armazenada em
 
hexadecimah.
O
 
tamanho
 
de
 
memória
 
(em
 
bytes)
 
que
 
a
 
variáveh
 
ocupará.
Uma variáveh em
 
binário.
A
 
base
 
a
 
ser
 
usada
 
no
 
armazenamento
 
da
 
variáveh.
A
 
forma
 
de
 
armazenamento
 
e
 
de
 
recuperação
 
de
 
um
 
vahor
 
na
 
variáveh.
Questão
 
3
Qual nome não é válido para a variável em C ?
3ab
_sim
n_a_o
\meu
98Fim
)
 (
S5
AGORA
É
A
SUA
VEZ
Questão 4
Em qual tipo de dado podemos armazenar um número real?
int.
char
fhoat
hong
short
 
int
Questão 5
Todo programa em C deve minimamente possuir:
função
 
main()
função
 
printf()
função
 
system()
#inchude
#define
)
	
	AGORAÉASUAVEZ
	
	Questão 6
	
	Um aluno preparou o programa apresentado a seguir para ser avaliado. Aponte os erros no programa.
	
	#include <stdio.h>
	
	#include <stdlib.h>
	
	int main{}
	
	(
	
	printf(Existem % d semanas no ano., 52);
	
	cout << endl;
	
	system(“PAUSE”);
	
	return 0;
	
	)
	
	Questão 7
	
	O programa a seguir está correto?
	
	#include <stdio.h>
	
	#include <stdlib.h>
	
	int main()
	
	{
	
	printf(“Linguagem C”);
	
	system(“pause”);
	
	}
	
	
	
S4
 (
S6
GLOSSÁRIO
Compilador:
 
compilador
 
é
 
um
 
programa
 
que
 
traduz
 
um
 
programa
 
escrito
 
em
 
uma
 
linguagem
 
como
 
C
 
em
 
linguagem
 
de máquina.
Hexadecimal:
 
sistema
 
numérico
 
que
 
representa
 
os
 
números
 
na
 
base
 
16.
 
O
 
número
 
decimal
 
79
 
convertido
 
em
 
hexadecimal fica
 
4F.
Pseudocódigo: 
é uma forma de representar um algoritmo utilizando uma linguagem intermediária entre a nossa linguagem e a linguagem do computador.
REFERÊNCIAS
MIZRAHI,
 
Viviane
 
V.
 
Treinamento
 
Linguagem
 
C
.
 
São
 
Paulo:
 
Pearson,
 
2008. SCHILDT, H. C. 
Completo e 
Total
. 
3. ed. São Paulo: Makron Books, 1996. SEDGEWICK,
 
R.
 
Algorithms
 
in
 
C
 
-
 
Parts
 
1
 
–
 
4.
 
Addison
 Wesley, 
2003.
FINALIZANDO
Neste tema, você aprendeu a converter algoritmos em programas, executar o primeiro programa em C, declarar variáveis, obedecer às regras formais da linguagem, para que o computar seja capaz de entender e executar os códigos gerados.
) (
S5
AGORA
É
A
SUA
VEZ
Questão 8
Analise o programa, a seguir, e aponte qual(is) erro(s) ele possui:
#include <stdio.h> #include <stdlib.h>
int main()
{
int a; int b;int c;
printf(“Os números são : %d%d%d\n”,a,b,c,d); system(“pause”);
}
Questão 9
A declaração de variáveis precisa ocorrer em uma área específica do código. Apresente um programa simples que demonstre
essa área.
Questão 10
Escreva um programa que tenha a seguinte saída: Treinamento em programação.
Linguagem C
Com uma única instrução de
 
impressão.
Com duas instruções de
 
impressão.
)
 (
GABARITO
Questão 1
Resposta: 
A forma de se comunicar com um computador chama-se programa, que é escrito em uma linguagem de programação que só o computador entende. Essa linguagem possui regras bem-estabelecidas para que seja possível ser executada pelo computador.
Questão 2
Resposta: 
Alternativa B.
Questão 3
Resposta: 
Alternativa D.
Questão 4
Resposta: 
Alternativa C.
Questão 5
Resposta: 
Alternativa A.
Questão 6 
Resposta:
int main{} <- 
Aqui é parênteses, e não chaves
( 
<- aqui é chave, e não parênteses
printf(Existem
 
%
 
d
 
semanas
 
no
 
ano.,
 
52);
 
<-
 
estão
 
faltando
 
aspas
 
em
 
Existem
 
%
 
d
 
semanas no
 
ano.
cout << endl; 
<- o comando cout é da linguagem c++, e não de c
system(“PAUSE”); 
return 0;
)
S⁄
)
	
	
Questão 7
	
	Resposta: Sim, o programa está correto.
	
	Questão 8
	
	Resposta: A variável d não foi declarada.
	
	Questão 9
	
	Resposta: Uma variável deve ser declarada sempre antes de ser utilizada, normalmente, no começo da função.
	
	#include <stdio.h>
	
	#include <stdlib.h>
	
	int main()
	
	{
	
	int a; int b;int c;int d; <- Veja que declaramos antes de utilizar
	
	printf(“Os números são : %d%d%d\n”,a,b,c,d);
	
	system(“pause”);
	
	}
	
	Questão 10
	
	Resposta:
	
	a)
	
	int main()
	
	{
	
	printf(“Treinamento em programação\n Linguagem C”);
	
	system(“pause”);
	
	}
	
	b)
	
	int main()
	
	{
	
	printf(“Treinamento em programação”);
	
	printf(“\nLinguagem C”);
	
	system(“pause”);
	
	}
	
	
	S8
 (
P
gg4gama¿ãg3gsggsggaga
 
/
Autoria: Renato Cristiano Torres
Tema 02
Operadores,
 
Laços,
 
Comandos
 
de
 
Decisão
 
e
 
Funções
)
 (
© 2014 Anhanguera Educacional. Proibida a reprodução final ou parcial por qualquer meio de impressão, em forma idêntica, resumida ou modificada em língua portuguesa ou qualquer outro idioma.
Pág. 22
Pág. 21
Pág. 21
Pág. 20
Pág. 18
ACOMPANHE
NA
WEB
Pág. 17
POR
DENTRO
DO
TEMA
Pág. 4
CONVITE
À
LEITURA
Pág. 3
 
Índice
3ema 
Oł
Operadores,
 
Laços,
 
Comandos
 
de
 
Decisão
 
e
 
Funções
Autoria: Renato Cristiano Torres
Como citar esse documento:
TORRES,
 
Renato
 
Cristiano.
 
Programação
 
Estruturada
 
I:
 
Operadores,
 
Laços,
 
Comandos
 
de
 
Decisão
 
e
 
Funções
.
 
Caderno
 
de
 
Atividades.
 
Anhanguera Publicações: Valinhos,
 
2014.
)
 (
4
POR
DENTRO
DO
TEMA
Operadores, Laços, Comandos de Decisão e Funções
Operadores
A
 
linguagem
 
C
 
possui
 
mais
 
de
 
50
 
operadores.
 
Trataremos
 
dos
 
principais
 
e
 
de
 
sua
 
precedência,
 
ou
 
seja,
 
qual
 
deve
ser executado primeiro.
Operadores de Atribuição
Em C o símbolo = tem interpretação diferente da que recebe na matemática, pois representa a atribuição da expressão à sua direita à variável à sua esquerda.
Exemplo:
x = 1000;
A execução é realizada da direita para esquerda. Isso quer dizer que primeiro o valor é guardado em uma posição de
memória temporária e depois movido para a área de memória nomeada pela variável X.
Operadores Aritméticos
C dispõe de cinco operadores aritméticos. São eles:
+ Soma
- Subtração
* Multiplicação
/ Divisão
% Módulo
) (
5
CONVITE
À
LEITURA
Este Caderno de Atividades foi elaborado com base no livro 
Treinamento em Linguagem C
, do autor Victorine Viviane Mizrahi, Editora Pearson, 2008. (Livro-Texto)
Conteúdo
Nesta aula, você estudará:
Regras de
 
Precedência.
Conversão de Tipos e Operadores de Incremento e
 
Decremento.
Operadores Aritméticos, Lógicos e de
 
Atribuição.
Laços, Comandos de Decisão, Funções e
 
Matrizes.
Habilidades
Ao final, você deverá ser capaz de responder as seguintes questões:
Qual operador deverá ser executado primeiro em uma
 
cadeia?
Como utilizar
 
operadores?
Como criar
 
laços?
Como utilizar comandos de
 
decisão?
)
PORDENTRODOTEMA
Os operadores (+,-,*,/) operam com os tipos de dados inteiros ou pontos flutuantes (decimais) e executam a operação da mesma forma que na aritmética.
O operador Módulo realiza o cálculo do resto de uma divisão de 2 inteiros, inteiro à sua esquerda pelo inteiro à sua
direita, como no exemplo: 17 % 5 // resulta 2
Quando dividimos 17 por 5, temos como máximo divisor 3, isso se verifica em 3 * 5 = 15, e sobra 2, como o comando
nos mostrou.
Precedência
Conforme você provavelmente aprendeu no ensino fundamental, os operadores de multiplicação e divisão têm prioridade sobre os de adição e subtração. Tal como na aritmética, adição e subtração têm a mesma precedência. A expressão é resolvida sempre da esquerda para a direita. O uso dos parênteses altera a precedência, pois a expressão interna dos parênteses é resolvida primeiro, para depois a parte externa ser avaliada e resolvida.
Exemplo 1:
N = (z + y) * x
Primeiramente, é realizada a soma z+y dentro dos parênteses para depois ser efetuada a multiplicação por x.
Exemplo 2:
N = x – y + 5
Neste caso, como a precedência da soma e subtração são iguais, a operação é executada da esquerda para direita, ou
seja, primeiramente é executada a subtração “x-y” para depois o resultado dessa subtração ser somado ao valor 5.
Operadores de Incremento (++) e Decremento (--)
Em alguns programas, é muito comum a necessidade de criarmos contadores incrementais ou decrementais, como um cronômetro progressivo ou regressivo. O operador de incremento adiciona o valor 1 à variável indicada como operando e pode ser utilizado de duas maneiras: prefixada, quando aparecer antes do nome da variável, ou pós-fixada, quando aparecer depois do nome da variável.
5
 (
6
POR
DENTRO
DO
TEMA
Exemplo:
x = x +1; //adiciona 1 a x
++x;
 
//
 
adicionando
 
1
 
a
 
x
 
utilizando
 
o
 
operador
 
++
 
(prefixado) x++;
 
//
 
adicionando
 
1
 
a
 
x
 
utilizando
 
o
 
operador
 
++(posfixado) 
Exemplo
 
1:
n=5;
x = ++n;
printf(“\nN=” << n <<” X=” << x; A saída será:
n=6 x=6
Neste
 
exemplo,
 
você
 
pode
 
notar
 
que
 
o
 
operador
 
de
 
incremento
 
prefixado
 
soma
 
1
 
na
 
variável
 
antes
 
da
 
atribuição
 
em
 
x;
com isso, n passa a valer 6 e x também 6.
Exemplo 2:
n=5;
x = n++;
printf(“\nN=%d”,n, “X=%d”,x); A saída será:
n=6 x=5
Neste
 
outro
 
exemplo
 
você
 
nota
 
que
 
o
 
operador
 
pós-fixado
 
soma
 
1
 
na
 
variável
 
após
 
a
 
execução
 
da
 
atribuição.
 
Isso
 
quer dizer que primeiro x recebe o valor 5 e depois n é incrementado em
 
1.
)
 (
8
POR
DENTRO
DO
TEMA
Os
 
operadores
 
são
 
muito
 
utilizados
 
na
 
programação
 
como
 
mecanismo
 
auxiliar
 
nos
 
comandos
 
de
 
decisão,
 
pois
 
realizam comparações de dados e
 
expressões.
Laços
Os
 
laços
 
são
 
comandos
 
para
 
repetir
 
um
 
comando
 
ou
 
um
 
bloco
 
de
 
comando
 
várias
 
vezes
 
de
 
forma
 
determinada
 
ou
até que uma condição seja satisfeita.
Estudaremos três tipos de comandos laços presentes no C. São eles:
for, while, do-while.
Laço for
O laço for é utilizado na maioria das vezes quando desejamos criar uma repetição com um número fixo de vezes.
Exemplo:
#include <stdio.h>
int
 
main()
{
int
 
i;
for (i=0; i<20;i++) // imprime 20
 
* printf(‘*’);
system(“PAUSE”); 
return 0;
}
Como você pode 
notar, 
nosso programa imprime 20 vezes o símbolo * (asterisco); na primeira parte do for “i=0”, informamos em que número nossa variável de incremento deve começar; na segunda parte, informamos a expressão condicional para o “for” repetir, neste caso, informamos que a repetição deve acontecer até i ser menor que 20, como ele
 
inicia
 
em
 
0,
 
fará
 
20
 
vezes;
 
e,
 
na
 
última
 
parte,
 
o
 
tipo
 
de
 
incremento,
 
neste
 
caso,
 
um
 
incremento
 
crescente
 
de
 
valor
 
1 à
 
variável
 
i.
 
O
 
incremento
 
pode
 
variar
 
para
 
somar
 
2,
 
3
 
ou
 
4
 
e
 
assim
 
por
 
diante
 
ou
 
até
 
mesmo
 
decrementar.
) (
⁄
POR
DENTRO
DO
TEMA
O operador de decremento (--) é idêntico ao de incremento. Exemplo:
--x; // subtrai 1 de x
ou
x-- // subtrai 1 de x
O funcionamento da forma pós-fixada e prefixada é idêntico ao operador de incremento.
Operadores Lógicos e Relacionais
Os
 
operadores
 
lógicos
 
realizam
 
comparações
 
com
 
base
 
em
 
avaliações
 
binárias,
 
ou
 
seja,
 
0
 
ou
 
1. 
Vamos 
estudar três operadores importantes (E, OU e
 
NÃO).
&& – Operador Lógico E
x && y – Resultado verdadeiro somente se x e y forem verdadeiros
|| – Operador Lógico OU
x || y – Resultado verdadeiro se x ou y for verdadeiro, caso contrário, resulta falso.
! – Operador Lógico NÃO
!x – Resulta verdadeiro se x for falso e falso de x for verdadeiro, ou seja, ele inverte o valor.
Os
 
operadores
 
relacionais
 
(>,>=,<,<=)
 
operam
 
da
 
mesma
 
forma
 
que
 
na
 
aritmética. x > y – resulta verdadeiro se x for maior que
 
y.
x >= y – resulta verdadeiro se x for maior ou igual a y.
x < y – resulta verdadeiro se x for menor que y.
x <= y – resulta verdadeiro se x for menor ou igual a y.
x == y – resulta verdadeiro se x for exatamente igual a y. x != y – resulta verdadeiro se x for diferente de y.
)
 (
9
Veja
 
que,
 
para
 
imprimir,
 
o
 
comando
 
está
 
sendo
 
executado
 
pelo
 
“for”
 
até
 
que
 
i
 
tenha
 
um
 
valor
 
maior
 
que
 
100;
 
quando
 
não colocamos “{}” significa que o comando que será executado várias vezes é o que estiver diretamente na linha abaixo do
 
comando
 
de
 
laço.
 
Se
 
tivéssemos
 
mais
 
comandos
 
para
 
executar,
 
precisaríamos
 
colocá-los
 
dentro
 
de
 
um
 
bloco
 
com chaves “{}”, assim, o bloco todo seria executado várias
 
vezes.
POR
DENTRO
DO
TEMA
A
 
execução
 
do
 
laço
 
“for”
 
inicia-se
 
pela
 
atribuição
 
do
 
valor
 
inicial
 
da
 
variável
 
responsável
 
pela
 
contagem,
 
no
 
nosso
 
caso, a variável i, que inicia com o valor de 3. O próximo passo é comparar se o valorde i é menor ou igual a 3, caso seja verdadeiro, passa-se para o próximo passo incrementando em 3, caso contrário, o laço é interrompido e o próximo comando após o for é
 
executado.
Vamos a outro exemplo em que vamos imprimir múltiplos de 3 entre os números 3 e 100.
#include <stdio.h>
int main()
{
for (int i=3; i <= 100; i = i + 3)
printf(“\t%d”,i); // comando executado dentro do laço for
)
	system(“PAUSE”)
	;
	return 0;
}
	
	A saída será:
	
	3	6	9	12	15
	18	21	24	27	30	33
	36	39	42	45	48
	51	54	57	60	63	66
	69	72	75	78	81
	84	87	90	93	96	99
 (
SO
POR
DENTRO
DO
TEMA
Laço while
O laço while é semelhante ao laço for em operação, porém, a estrutura de utilização é diferente. Exemplo:
#include <stdio.h>
int main()
{
int i=0; //inicialização
while (i < 20) // condição para acontecer as repetições
{
printf(“*”); // imprime 20 vezes
 
* i++; // incremento
}
system(“PAUSE”); 
return 0;
}
Veja 
que a saída será igual à saída do programa com o laço 
for, 
mas o while é utilizado com mais frequência quando o número de iterações (repetições) não for conhecido e dependerá de uma expressão lógica, que será colocada na condição após o comando
 
while(<expressão>).
Laço do-while
O
 
laço
 
do-while
 
é
 
similar
 
ao
 
while,
 
porém,
 
com
 
apenas
 
uma
 
diferença:
 
primeiro
 
executa
 
um
 
bloco
 
de
 
código
 
para
 
depois comparar
 
se
 
haverá
 
repetição
 
e
 
quantas
 
vezes
 
será
 
realizada.
 
É
 
bem
 
útil
 
em
 
casos
 
como
 
conferência
 
de
 
senha.
 
Imagine você
 
que,
 
ao
 
digitar
 
um
 
usuário
 
e
 
senha
 
em
 
um
 
sistema,
 
ele
 
permita
 
que
 
você
 
erre
 
apenas
 
3
 
vezes.
 
Isso
 
quer
 
dizer
 
que o
 
laço
 
deve
 
permitir
 
que
 
você
 
execute
 
a
 
inserção
 
de
 
sua
 
senha
 
primeiro
 
para
 
depois
 
comparar
 
se
 
você
 
a
 
errou
 
e
 
permitir, se necessário, que você insira a senha mais 2
 
vezes.
)
 (
Sł
POR
DENTRO
DO
TEMA
Comando if
O comando if informa ao computador para avaliar e tomar uma decisão simples. Vamos a um exemplo:
#include <stdio.h>
int main()
{
printf(“Quantos anos você
 
tem?”); int anos;
scanf(“%d”,anos);
if (anos < 30) // Avalia se a idade informada é menor que 30 anos
printf(“Você
 
é
 
muito
 
jovem”);
 
//
 
Apresenta
 
essa
 
mensagem
 
se
 
a
 
idade
 
for
 
<
 
30
 
anos. system(“PAUSE”);
return 0;
}
Neste caso, apenas será apresentada a mensagem se a expressão da condição for verdadeira.
Comando if-else
O comando if-else permite executar um bloco de código caso a expressão da condição não seja satisfeita.
) (
SS
POR
DENTRO
DO
TEMA
Exemplo:
#include <stdio.h>
int main()
{
int i=0; //inicialização
do
{
printf(“*”); // imprime 20 vezes
 
* i++; // incremento
} while (i < 20) // condição para acontecer as repetições
system(“PAUSE”); 
return 0;
}
Comandos de Decisão
Qualquer
 
programa
 
deve
 
ter
 
um
 
mecanismo
 
de
 
decisão
 
para
 
executar
 
ou
 
não
 
um
 
bloco
 
de
 
comandos
 
com
 
base
 
no resultado
 
de
 
uma
 
expressão
 
condicional.
 
Portanto,
 
durante
 
a
 
execução
 
de
 
um
 
programa,
 
várias
 
decisões
 
são
 
tomadas pelo computador com base em resultados calculados durante este
 
período.
)
 (
S5
POR
DENTRO
DO
TEMA
Exemplo:
#include <stdio.h>
int main()
{
printf(“Quantos anos você tem?” <<
 
endl; int anos;
scanf(“%d”,anos);
if (anos < 30) // Avalia se a idade informa é menor que 30 anos printf(“Você é muito jovem”);
else
printf(“Você está com trinta anos ou já passou”);
system(“PAUSE”); 
return 0;
}
Veja que, neste caso, a mensagem “Você está com trinta anos ou já passou” é executada quando a idade for superior
ou igual a 30 anos.
Comando switch
O comando switch tem como finalidade proporcionar uma maneira estruturada de selecionar uma opção entre várias
alternativas. Vamos compreender como é a sintaxe.
)
	
	PORDENTRODOTEMA
	
	switch (variável)
	
	{
	
	case constante 1:
	
	instrução;
	
	instrução;
	
	break;
	
	case constante 2:
	
	instrução;
	
	instrução;
	
	break;
	
	case constante 3:
	
	instrução;
	
	instrução;
	
	break;
	
	default:
	
	instrução;
	
	instrução;
	
	}
	
	Vamos ver um exemplo que imprime o dia da semana com base em uma data. O ano deve ser maior que 1600.
	
	Exemplo:
	
	#include <stdio.h>
	
	#include <conio.h>
	
	int main()
	
	{
	
	int dia, mês, ano;
	
	const char ESC = 27;
	
	do
	
	{
	
	printf(“Digite a data na forma dd mm aaaa: “;
	
	scanf(“%d%d%d”,dia ,mês ,ano);
	
	int dSemana = ano + dia + 3 * (mês - 1) – 1;
	
	if (mês < 3)
	
	ano --;
	
	
	S4
	
	
	PORDENTRODOTEMA
	
	
	else
	
	
	dSemana = dSemana - (int (0.4*mês+2.3));
	
	
	dSemana=dSemana+( int(ano/4) – int((ano/100 + 1)* 0.75));
	
	
	dSemana %= 7;
	
	
	switch(dSemana) // variável que determinará em qual case entra.
	
	
	{
	
	
	case 0: // Se dSemana = 0
	
	
	printf(“domingo”;
	
	
	break;
	
	
	case 1: //Se dSemana = 1 ....
	
	
	printf(“segunda-feira”;
	
	
	break;
	
	
	case 3:
	
	
	cout <<”terça-feira”;
	
	
	break;
	
	
	case 4:
	
	
	cout <<”quarta-feira;
	
	
	break;
	
	
	case 5:
	
	
	cout <<”quinta-feira”;
	
	
	break;
	
	
	case 6:
	
	
	cout <<”sexta-feira”;
	
	
	break;
	
	
	case 7:
	
	
	cout <<”sábado”;
	
	
	break;
	
	
	}
	
	
	printf(“\nESC para terminar ou ENTER para recomeçar”);
	
	
	} while (getch() != ESC);
	
	
	system(“PAUSE”);
	
	
	return 0;
	
	}
	
	
	
	
	S5
PORDENTRODOTEMA
Se você executar o programa e digitar 30 7 1978, notará que o resultado será domingo.
Funções
Segundo Mizrahi (2010), uma função é um conjunto de instruções implementadas para cumprir determinada tarefa e agrupadas em uma unidade ou bloco de código com um nome para referenciá-la.
Dividir um grande programa em blocos de códigos organizados e bem estruturados ajuda na leitura e manutenção. Portanto, a utilização de funções para cumprir este papel é o princípio fundamental das linguagens estruturadas.
A maioria das funções possui parâmetros, que são as variáveis que recebem as informações enviadas à função. Depois, são processadas e devolvidas como valor de retorno. O tipo de uma função é determinado pelo valor que ela retorna, e não pelo tipo de parâmetros que ela recebe.
Exemplo de utilização de função para conversão de temperatura em graus Fahrenheit para temperatura em Celsius:
#include <stdio.h>
int celsius(int fahr) // Protótipo ou assinatura
int main()
{
int c, f;
printf(“Digite a temperatura em graus Fahrenheit:”); scanf(“%f”,f); // obtém a temperatura e coloca na variável g
c = celsius(f)	// chama a função passando o valor de f como parâmetro printf(“Celsius = %d”,c);
system(“PAUSE”); return 0;
}
int celsius(int fahr)
{
int c;
c = (faht - 32) * 5/9; // faz a conversão
return c; // retorna o valor em grau Celsius contido na variável c
}
S6
 (
AGORA
É
A
SUA
VEZ
Instruções:
Agora,
 
chegou
 
a
 
sua
 
vez
 
de
 
exercitar
 
seu
 
aprendizado.
 
A
 
seguir,
 
você
 
encontrará
 
algumas
 
questões
 
de
 
múltipla escolha
 
e
 
dissertativas.
 
Leia
 
cuidadosamente
 
os
 
enunciados
 
e
 
atente-se
 
para
 
o
 
que
 
está
 
sendo
 
pedido.
Questão 1
Qual a vantagem de se utilizar funções na construção de programas?
Questão 2
Qual dos seguintes operadores não é aritmético?
a) 
+
&&
–
*
/
Questão 3
Os operadores relacionais são usados para:
Combinar
 
vahores.
Comparar
 
vahores.
Distinguir diferentes tipos de
 
variáveis.
Trocar variáveis por vahores
 
hógicos.
Concatenar vahores.
S8
) (
S⁄
ACOMPANHE
NA
WEB
Laboratório de computação gráfica
Acesse
 
o
 
site
 
do
 
Laboratório
 
de
 
computação
 
gráfica.
 
Neste
 
link
,
 
você
 
encontrará
 
um
 
curso
 
de nivelamento em Linguagem
 
C.
Disponível em: 
<http://www.lcg.ufrj.br/Cursos/curso-nivelamento/linguagem-C.ppt/view>
. 
Acesso em: 5 mai. 2014.
C para iniciantes - Aula 04 - Laço WHILE
Assista ao vídeo: 
C para iniciantes - Aula 04 - Laço WHILE
. Uma aula que traz um
 
exemplo
simples do comando while.
Disponível em: 
<http://www.youtube.com/watch?v=clxnWBY6wT4>
. Acesso em: 5 mai. 2014.
POR
DENTRO
DO
TEMA
Toda
 
função
 
deve
 
retornar
 
um
 
valor.
 
As
 
funções
 
que
 
não
 
possuemvalor
 
de
 
retorno
 
devem
 
ser
 
declaradas
 
no
 
protótipo como retorno “void”. Se você definir sua função antes da função principal main, você não precisa criar um rótulo no topo do código-fonte. O comando return, responsável por retornar o valor da função, retorna apenas um único valor para a função. Esse valor pode ser um valor numérico, endereço de memória, valor boleano ou qualquer outro tipo previsto na
 
linguagem.
)
 (
AGORA
É
A
SUA
VEZ
Questão 4
Em uma instrução if sem else, o que acontece se a condição de teste for falsa?
O controhe procura peho úhtimo ehse do
 
programa.
Nada.
O controhe passa para a instrução seguinte ao
 
if.
O corpo do comando if é
 
executado.
Nenhuma das
 
anteriores.
Questão 5
Qual sentença do comando for, a seguir, está correta?
a) 
for(i=0; < 10; i++)
b) 
for(i=0; i < 10, i++)
c) 
for(i=0; < 10; i++)
d) 
for(i=0; 10;
 
i++)
e) 
for(0; < 10; i++)
Questão 6
Crie um contador de números pares utilizando o laço while e apresente a contagem na tela.
Questão 7
Uma empresa contrata um encanador a R$ 20,00 por dia. Crie um programa que solicite o número de dias trabalhados pelo encanador e imprima o valor líquido a ser pago, sabendo que são descontados 8% de imposto de renda.
S9
)
 (
łO
FINALIZANDO
Neste
 
tema,
 
você
 
aprendeu
 
qual
 
operador
 
deverá
 
ser
 
executado
 
primeiro
 
em
 
uma
 
cadeia.
 
Além
 
disso,
 
você
 
também verificou
 
como
 
utilizar
 
operadores,
 
como
 
criar
 
laços
 
e
 
como
 
utilizar
 
comandos
 
de
 
decisão.
AGORA
É
A
SUA
VEZ
Questão 8
Uma
 
moça
 
entrou
 
em
 
uma
 
loja
 
para
 
comprar
 
roupa
 
e
 
gastou
 
R$
 
1.250,00.
 
Como
 
ela
 
pagou
 
à
 
vista,
 
ganhou
 
um
 
desconto
 
de
 
5%.
Escreva um programa que calcule o desconto.
Questão 9
Sabendo
 
que
 
o
 
latão
 
é
 
obtido
 
fundindo-se
 
sete
 
partes
 
de
 
cobre
 
com
 
três
 
partes
 
de
 
zinco,
 
faça
 
um
 
programa
 
que
 
solicite
 
quantos quilos
 
de
 
latão
 
se
 
quer
 
produzir
 
e
 
imprima
 
quantos
 
quilos
 
de
 
cobre
 
e
 
zinco
 
são
 
necessários.
Questão 10
Escreva uma função recursiva chamada potencia() que aceite dois argumentos inteiros positivos i e j e retorne a soma dos n
números inteiros do intervalo
. Por exemplo, se a função receber 
1 e 5
, deverá retornar 15, pois: 1+2+3+4+5 = 15.
)
 (
GABARITO
Questão 1
Resposta: 
As funções organizam o código em blocos que facilitam a leitura do programa e também sua manutenção.
Questão 2
Resposta: 
Alternativa B.
Questão 3
Resposta: 
Alternativa B.
Questão 4
Resposta: 
Alternativa C.
Questão 5
Resposta: 
Alternativa B.
Questão 6 
Resposta:
#include <stdio.h> #include <stdlib.h>
int
 
main()
{
int
 
i;
while i < 10
{
printf(“Contando %d”,i); i++;
}
system(“pause”);
}
łł
) (
łS
GLOSSÁRIO
Fahrenheit: 
o grau fahrenheit (símbolo: °F) é uma escala de temperatura proposta por Daniel Gabriel Fahrenheit em 1724. Nessa escala, o ponto de fusão da água é de 32°F e o ponto de ebulição de 212°F. Uma diferença de 1,8 grau fahrenheit equivale à de 1°C.
REFERÊNCIAS
MIZRAHI,
 
Viviane
 
V.
 
Treinamento
 
Linguagem
 
C
.
 
São
 
Paulo:
 
Pearson,
 
2008. SCHILDT, H. C. 
Completo e 
Total
. 
3. ed. São Paulo: Makron Books, 1996. SEDGEWICK,
 
R.
 
Algorithms
 
in
 
C
 
-
 
Parts
 
1
 
–
 
4.
 
Addison
 Wesley, 
2003.
)
 (
ł5
Questão
 
7
Resposta:
#include <stdio.h> #include <stdlib.h>
int main()
{
int dias;
printf(“Digite o número de dias
 
:”); scanf(%d,dias);
printf(“Valor %f”,(dias*20)*0.92); system(“pause”);
}
Questão 8 
Resposta:
#include <stdio.h> #include <stdlib.h>
int main()
{
printf(“Valor %f”,1250*0.95); system(“pause”);
}
)
	
	
Questão 9
	
	Resposta:
	
	#include <stdio.h>
	
	#include <stdlib.h>
	
	int main()
	
	{
	
	int latao;
	
	printf(“Digite quantidade de latao :”);
	
	scanf(%d,latao);
	
	printf(“Quantidade Total de Cobre %d”,latão*0.7);
	
	printf(“Quantidade Total de Zinco %d”,latão*0.3);
	
	
system(“pause”);
	
	}
	
	Questão 10
	
	Resposta:
	
	#include <stdio.h>
	
	#include <stdlib.h>
	
	int potencia(int i, int j)
	
	{
	
	int a,res;
	
	for a=i to j
	
	{
	
	res = res + a;
	
	}
	
	}
	
	int main()
	
	{
	
	
	ł4
 (
ł5
}
int i,j;
printf(“Digite o primeiro numero
 
:”); scanf(%d,i);
printf(“Digite o segundo numero
 
:”); scanf(%d,i);
printf (“Resultado :
 
%”,potencia(i,j)); system(“pause”);
)
 (
P
gg4gama¿ãg
 
3gsggsggaga
 
/
Autoria: Renato Cristiano Torres
Tema 03
Matrizes,
 
Estruturas
 
Definidas
 
pelos
 
Usuários
 
e
 
Ponteiros
)
 (
© 2014 Anhanguera Educacional. Proibida a reprodução final ou parcial por qualquer meio de impressão, em forma idêntica, resumida ou modificada em língua portuguesa ou qualquer outro idioma.
Pág. 17
Pág. 16
Pág. 16
Pág. 16
Pág. 13
ACOMPANHE
NA
WEB
Pág. 12
POR
DENTRO
DO
TEMA
Pág. 4
CONVITE
À
LEITURA
Pág. 3
 
Índice
3ema 05
Matrizes, Estruturas Definidas pelos Usuários e
 
Ponteiros
Autoria: Renato Cristiano Torres
Como citar esse documento:
TORRES, Renato Cristiano. 
Programação Estruturada I: 
Matrizes, Estruturas Definidas pelos Usuários e Ponteiros
. 
Caderno de Atividades. Anhanguera Publicações: Valinhos, 2014.
)
 (
POR
DENTRO
DO
TEMA
Matrizes, Novos Tipos de Dados e Ponteiros
Segundo
 
Mizrahi
 
(2008),
 
uma
 
matriz
 
é
 
um
 
tipo
 
de
 
dado
 
em
 
C
 
utilizado
 
para
 
representar
 
uma
 
coleção
 
de
 
variáveis de mesmo tipo e que compartilham o mesmo
 
nome.
Imagine que precisássemos encontrar a média aritmética das notas de 5 alunos. Para isso, utilizamos um vetor ou uma matriz unidimensional. A matriz é formada por um conjunto de variáveis do mesmo tipo e referenciada por um único nome, e cada variável é identificada por meio de um número denominado índice, em que os colchetes indicam esse tipo de acesso.
Exemplo 1:
Declaração de uma matriz unidimensional ou conhecida como vetor:
int notas[5]; // vetor com 5 posições de inteiros
Exemplo 2:
#include <stdio.h> int main()
{
int notas[5], media=0; for (int i=0; i < 5;
 
i++)
{
printf(“Digite a nota do aluno
 
%d”,i+1); scanf(%d,notas[i]);
media = media + notas[i]; // podemos escrever assim media+=notas[i];
}
media = media/5; // podemos escrever assim media /= 5;
printf(“Média das notas :
 
%d”,media); systema(“PAUSE”);
return 0;
}
4
) (
5
CONVITE
À
LEITURA
Este Caderno de Atividades foi elaborado com base no livro 
Treinamento em Linguagem C
, do autor Victorine Viviane Mizrahi, Editora Pearson, 2008. (Livro-Texto)
Conteúdo
Nesta aula, você estudará:
Como alocar
 
matrizes.
Como fazer referência a seus
 
elementos.
A utilização de
 
Ponteiros.
Habilidades
Ao final, você deverá ser capaz de responder as seguintes questões:
Quando utilizar
 
matrizes?
Como referenciar e operar seus
 
elementos?
Qual a importância de ponteiros e como
 
utilizá-los?
)
 (
6
freqmedia = freqmedia/5;
printf(“Média das notas : %d”, media);
printf(“ “Média de freqüência : %d”,
 
freqmedia);
systema(“PAUSE”); 
return 0;
}
Execução do programa:
Digite a nota do aluno 1: 75 <- valor digitado pelo usuário
Digite
 
a
 
frequência
 
do
 
aluno
 
1:
 
100
 
<-
 
valor
 
%
 
digitado
 
pelo
 
usuário Digite a nota do aluno 2:
 
55
Digite
 
a
 
frequência
 
do
 
aluno
 
2:
 
90 Digite a nota do aluno 3: 60 Digite
 
a
 
frequência
 
do
 
aluno
 
3:
 
75 Digite a nota do aluno 4: 80 Digite
 
a
 
frequência
 
do
 
aluno
 
4:
 
95 Digite a nota do aluno 5:
 
90
Digite a frequência do aluno 5: 95
POR
DENTRO
DO
TEMA
=
 
media/5;
 
//
 
podemos
 
escrever
 
assim
 
media
 
/=
 
5;
media
) (
5
POR
DENTRO
DO
TEMA
Execução do programa:
Digite
 
a
 
nota
 
do
 
aluno
 
1:
 
75
 
<-
 
valor
 
digitado
 
pelo
 
usuário Digite a nota do aluno 2:
 
55
Digite
 
a
 
nota
 
do
 
aluno
 
3:
 
60 Digite
 
a
 
nota
 
do
 
aluno
 
4:
 
80 Digite
 
a
 
nota
 
do
 
aluno
 
5:
 
90
Média das notas: 72 <- média calculada pelo programa
Como você pode notar no exemplo, para acessar cada elemento da matriz, utilizamos o formato notas[i], em que a variável
 
i
 
indica
 
o
 
índice,
 
ou
 
seja,
 
o
 
número
 
da
 
posição
 
que
 
desejamos
 
capturar
 
ou
 
armazenar
 
valor
 
na
 
matriz.
Agora, utilizaremos o mesmo programacom algumas modificações para mostrar como utilizar uma matriz de duas dimensões.
 
Uma
 
matriz
 
de
 
duas
 
dimensões
 
é
 
acessada
 
por
 
meio
 
do
 
uso
 
de
 
duas
 
coordenadas,
 
linha
 
e
 
coluna.
Vamos ao exemplo:
#include <stdio.h>
int main()
{
int notas[5][2], media=0,
 
freqmedia=0; for (int i=0; i < 5; i++)
{
printf(“Digite
 
a
 
nota
 
do
 
aluno
 
%d
 
:”,
 
(i+1)); scanf(%d,notas[i]
 
[1]);
printf(“Digite
 
a
 
frequência
 
do
 
aluno
 
%d
 
:”,(i+1)); scanf(%d,notas[i]
 
[2]);
media = media + notas[i][1]; freqmedia = freqmedia +
 
notas[i][2];
}
)
PORDENTRODOTEMA
A matriz está preenchida da seguinte forma:
	
	Coluna 1
	Coluna 2
	Linha 1
	75
	100
	Linha 2
	55
	90
	Linha 3
	60
	75
	Linha 4
	80
	95
	Linha 5
	90
	95
Média das notas: 72 <- média calculada pelo programa Média de frequência: 91 <- média calculada pelo programa
Note que, se você deseja acessar a nota do aluno 4, você deve informar da seguinte maneira: notas[4][1]. Desta forma, está acessando o endereço da linha 4 e coluna 1.
A matriz é muito importante, pois é uma estrutura que permite alocar grandes quantidades de dados e é rastreável, ou seja, por coordenadas de linha e coluna todos os dados são acessíveis. Alocar uma matriz de forma estática, ou seja, no início do programa, pode desperdiçar memória, visto que dimensionamos a matriz com tamanho definido e podemos ter espaços não utilizados. A alocação ideal é dinamicamente a matriz ser alocada à medida que o programa necessite.
É possível fazer referência a um elemento da matriz utilizando ponteiro. Se uma variável “p” aponta para uma matriz, podemos acessar o primeiro elemento da matriz escrevendo *(p+1); isso informa ao programa para deslocar um elemento a partir do primeiro endereço de p.
Novos Tipos de Dados – Struct
Segundo Mizrahi (2010), estruturas são tipos de variáveis que agrupam dados geralmente desiguais, diferentemente das matrizes que utilizam os mesmos tipos.
Utilizando a palavra reservada struct, definimos um novo tipo de dado, que informa ao compilador seu nome, tamanho e a forma que deve ser acessado. Vamos observar um exemplo: #include <stdio.h>
⁄
 (
8
POR
DENTRO
DO
TEMA
struct
 
Aluno
 
//
 
é
 
dessa
 
forma
 
que
 
definimos
 
a
 
estrutura
 
palavra-chave
 
e
 
o
 
nome
 
da
 
estrutura
{
int
 
nmat;
// Número da
 
matrícula
float
 
nota[3];
//
 
Notas
float
 
media;
//
 
média
//
 
dentro
 
das
 
chaves
 
temos
 
os
 
membros
 
da
 
estrutura
 
nesse
 
caso
 
temos:
 
número
 
da
 
matrícula, notas e
 
média.
};
// definir uma estrutura não criar nenhuma variável, somente informa ao compilador as
características do novo tipo de dado.
int main()
{
Aluno Jose; // é nesse momento que declaramos uma variável do tipo
 
aluno;
Jose.nmat
=
 
456;
 
//
 
Nome
 
que
 
para
 
acessar
 
um
 
elemento
 
do
 
tipo
 
utilizamos
 
o
 
ponto
“.”;
Jose.nota[0] =
 
7.5;
Jose.nota[1] =
 
5.2;
Jose.nota[2] =
 
8.4;
Jose.media = (Jose.nota[O] + Jose.nota[1] + Jose.nota[3])/3.O;
printf( “Matricula : %s”,
 
Jose.nmat); printf( “Média : %s”,Jose.media);
system(“PAUSE”); 
return 0;
}
)
PORDENTRODOTEMA
Conforme você pode ver no exemplo, as estruturas têm o objetivo fundamental de armazenar tipos de dados diferentes e organizá-los de forma que podemos acessá-los facilmente. É muito útil quando precisamos trazer grandes quantidades de dados de um banco de dados para a memória do computador para realizarmos cálculos ou cruzamento de dados. Como a estrutura é um tipo de dado cujo formato é definido pelo programador, há grande flexibilidade de utilização.
Ponteiros
Segundo Mizrahi (2008), ponteiro é um endereço de memória e um mecanismo para acessar uma variável sem fazer referência a ela diretamente, ou seja, não pelo seu nome, mas por seu endereço.
Os ponteiros são utilizados em situações em que a utilização do nome de uma variável não é desejável ou não é permitida.
· Algumas razões para o uso dos ponteiros (MIZRAHI, 2010):
· Manipular elementos de matrizes.
· Receber argumentos de funções que necessitem de modificação.
· Passar strings (cadeia de caracteres) de uma função para outras.
· Criar estruturas de dados complexas.
· Alocar e desalocar memória.
· Passar para uma função o endereço de outra.
Exemplo 1
#include <stdio.h>
int main()
{
int i,j,k;
printf(“Endereço de i = %d”, &i);
// o símbolo & obtém o endereço onde está alocada a variável
printf(“Endereço de j = %d”,&j); printf(“Endereço de k = %d”,&k); system(“PAUSE”);
return 0;
}
9
 (
POR
DENTRO
DO
TEMA
A saída da execução:
Endereço de i = 0012FED4 // o endereço pode variar de um computador para outro Endereço de J = 0012FEC8
Endereço de K = 0012FEBC
A ideia do uso de ponteiros é que utilizemos posição de memória em vez de utilizarmos a passagem de estruturas em funções, visto que por ponteiros é bem mais eficiente.
Vamos a outro exemplo, em que temos uma função que tem por objetivo reajustar um preço em 20%, e a alteração acontecerá diretamente nas variáveis passadas como parâmetros.
Exemplo 2:
#include <stdio.h>
void reajusta2O(float *preco, float *reajuste); // protótipo
int main()
{
float val_preco, val_reaj;
do
{
printf( “Insira o preço atual : ”);
scanf(%f,val_preco);
reajusta2O(&val_preco, &val_reaj); //envio dos endereços printf(“\n O preço novo é &f”,val_preco);
printf(“\n O aumento foi de %f”,val_reaj);
} while (val_preco != O.O);
system(“PAUSE”); 
return 0;
}
S0
)
 (
Sł
ACOMPANHE
NA
WEB
Matriz em C
No 
link 
a seguir, você encontrará um site dedicado à linguagem
 
C.
Disponível em: 
<http://linguagemc.com.br/matriz-em-c/>
. Acesso em: 5 mai. 2014.
A história das matrizes
Descubra a curiosa história das
 
matrizes.
Disponível em: 
<http://www.mat.ufrgs.br/~portosil/passa3b.html>
. Acesso em: 5 mai. 2014.
Linguagem C: endereços e ponteiros
Encontre informações sobre ponteiros, com exercícios e
 
exemplos.
Disponível em: 
<http://www.ime.usp.br/~pf/algoritmos/aulas/pont.html>
. Acesso em: 5 mai. 2014.
Matriz em linguagem C - Conceito e Definição
Assista
 
ao
 
vídeo:
 
Matriz
 
em
 
linguagem
 
C
 
-
 
Conceito
 
e
 
Definição
.
 
Tutorial
 
divertido
 
sobre
 
o
conceito de matrizes e uma boa explicação que ajudará a esclarecer o uso de matrizes em C.
Disponível em: 
<http://www.youtube.com/watch?v=-9Nafr7zdJs>
. Acesso em: 5 mai. 2014.
UFRPE Linguagem C PONTEIROS aula 01
Assista ao vídeo: 
UFRPE Linguagem C PONTEIROS aula 01
. Esta aula completa sobre ponteiros ajudará a apoiar a compreensão do uso de ponteiros em
 
C.
Disponível em: 
<http://www.youtube.com/watch?v=mKDRIH38S4k>
. Acesso em: 5 mai. 2014.
) (
SS
POR
DENTRO
DO
TEMA
// a função receberá os endereços das variáveis preço e reajuste void reajusta2O(float *preco, float *reajuste)
{
// Para acessar o conteúdo do endereço passado, temos que colocar o símbolo * antes do nome da variável;
*reajuste = *preco * O.2;
*preco *= 1.2; //<- igual a *preco = *preco * 1.2;
}
Vamos a outro exemplo, em que utilizaremos ponteiros para atribuir um valor à variável x e, em seguida, utilizaremos novamente o ponteiro para atribuir esse valor a y.
Exemplo 3:
#include <stdio.h>
int main()
{
int x,y;
int *px=&x; // inicializa a variável px com o endereço de x;
*px = 14; // o mesmo que x=14, indica que atribua 14 ao endereço de
 
x
y = *px; // o mesmo que y=x, indica que atribua a y o conteúdo do endereço apontado
por px.
A utilização de ponteiros é vista por muitos programadores iniciantes como algo complexo, mas, na verdade, não o é. Quando bem-utilizado, é muito eficiente para a manipulação de matrizes e estruturas complexas.
)
 (
AGORA
É
A
SUA
VEZ
Instruções:
Agora,
 
chegou
 
a
 
sua
 
vez
 
de
 
exercitar
 
seu
 
aprendizado.
 
A
 
seguir,
 
você
 
encontrará
 
algumas
 
questões
 
de
 
múltipla escolha
 
e
 
dissertativas.
 
Leia
 
cuidadosamente
 
os
 
enunciados
 
e
 
atente-se
 
para
 
o
 
que
 
está
 
sendo
 
pedido.
Questão 1
O que você entende por matriz?
Questão 2
Qual declaração de matriz de inteiros está correta?
int
 
mat(25)
int
 
xmat{1}
int
 
notas[10]
int
 
y|6|
int
 
[10]x
Questão 3
Na instrução mat[3] = 5, o que estáocorrendo?
Atribuição do vahor 3 na posição 5 da
 
matriz.
Comparação de 3 ehementos da matriz com vahor
 
5.
Ahocação de 3 ehementos na
 
matriz.
Atribuição do vahor 5 na posição 3 da
 
matriz.
Comparação do vahor da posição 3 da matriz com vahor
 
5.
S5
)
 (
S4
AGORA
É
A
SUA
VEZ
Questão 4
O que é do tipo int na instrução seguinte? int *p
A variáveh
 
p.
O endereço de
 
p.
A variáveh apontada por
 
p.
O endereço da variáveh apontada por
 
p.
Obrigatoriamente o conteúdo e endereço da variáveh
 
p.
Questão 5
Qual instrução, a seguir, declara um ponteiro para uma variável float?
fhoat
 
*p;
*fhoat
 
p;
Fhoat *
 
p;
*p
fhoat=*p;
Questão 6
Uma
 
string
 
é
 
uma
 
coleção
 
de
 
caracteres.
 
Por
 
que
 
podemos
 
dizer
 
que
 
uma
 
string
 
é
 
uma
 
matriz
 
de
 
caracteres?
)
 (
S6
GLOSSÁRIO
Matriz: 
uma matriz é uma tabela de m linhas e n colunas de símbolos sobre um conjunto. Quando a matriz possui apenas 1 linha e n colunas, é chamada de matriz unidimensional ou vetor.
REFERÊNCIAS
MIZRAHI,
 
Viviane
 
V.
 
Treinamento
 
Linguagem
 
C
.
 
São
 
Paulo:
 
Pearson,
 
2008. SCHILDT, H. C. 
Completo e 
Total
. 
3. ed. São Paulo: Makron Books, 1996. SEDGEWICK,
 
R.
 
Algorithms
 
in
 
C
 
-
 
Parts
 
1
 
–
 
4.
 
Addison
 Wesley, 
2003.
FINALIZANDO
Neste
 
tema,
 
você
 
aprendeu
 
a
 
criar
 
matrizes
 
e
 
a
 
referenciar
 
seus
 
elementos,
 
assim
 
como
 
a
 
utilizar
 
ponteiros
 
e
 
criar estruturas de dados
 
personalizadas.
) (
S5
AGORA
É
A
SUA
VEZ
Questão 7
Se uma matriz é declarada como:
float preço[MAX];
a instrução a seguir é correta para acessar todos os elementos da matriz?
for (int j=O; j <= MAX; j++)
scanf(“%f”, preco[j])
Questão 8
O seguinte programa está correto?
# include <stdio.h> const VAL=987;
int main()
{
int *p = VAL; printf(“%d”,*p); return 0;
}
Questão 9
Qual a diferença entre mat[3] e *(mat+3)?
Questão 10
Qual o erro deste trecho de programa?
float x = 333.33; float *p = & x; printf(“%f\n”,*p);
)
 (
S8
Questão 8
Resposta: 
Não!
# include <stdio.h> const VAL=987;
int main()
{
int
 
*p
 
=
 
VAL;
 
<-
 
está
 
inicializando
 
o
 
endereço
 
da
 
variável
 
p
 
com
 
o
 
valor
 
da
 
variável VAL, veja que VAL teria de ser um endereço para estar correto, ou seja, int * p = &VAL, assim o programa pega o endereço de
 
VAL.
printf(“%d”,*p);
return 0;
}
Questão 9
Resposta: 
Os comandos produzem o mesmo efeito:
mat[3] 
- nesse formato o valor da posição 3 é acessado por índice.
*(mat+3)
 
– nesse formato, o deslocamento é realizado por ponteiro, ou seja, a partir da posição mat será deslocado em 3 endereços e depois retornado o valor contido nesta posição.
Questão 10 
Resposta: 
Não há
 
erro 
float
 
x
 
=
 
333.33;
float *p = & x; 
-> A variável p está sendo inicializado com endereço x
printf(“%f\n”,*p); 
-> aqui mostrará o valor de x, pois p possui o endereço de x.
) (
GABARITO
Questão 1
Resposta:
 
Matriz
 
é
 
uma
 
estrutura
 
de
 
dados
 
que
 
armazena
 
uma
 
coleção
 
de
 
variáveis
 
de
 
mesmo
 
tipo,
 
que
 
compartilha
 
o mesmo
 
nome
 
e
 
permite
 
o
 
acesso
 
a
 
qualquer
 
elemento
 
por
 
meio
 
de
 
coordenadas
 
ou
 
índice.
Questão 2
Resposta: 
Alternativa C.
Questão 3
Resposta: 
Alternativa D.
Questão 4
Resposta: 
Alternativa C.
Questão 5
Resposta: 
Alternativa A.
Questão 6
Resposta:
 
Porque
 
String
 
é
 
uma
 
matriz
 
unidimensional
 
ou
 
vetor
 
do
 
tipo
 
char
 
que
 
armazena
 
um
 
texto
 
formado
 
de
 
caracteres sempre terminado pelo caractere
 
(‘0’).
Questão 7
Resposta: 
Não está correta, pois teremos problemas. Imagine MAX valendo 1o o tamanho efetivo da matriz é 10 elementos,
 
como
 
o
 
1.o
 
elemento
 
da
 
matriz
 
é
 
a
 
posição
 
0,
 
o
 
último
 
será
 
posição
 
9,
 
e
 
o
 
for
 
percorrerá
 
até
 
o
 
elemento
 
MAX ocorrerá um erro, pois tentará acessar o elemento da posição 10, que não
 
existe.
float preço[MAX];
for (int j=O; j <= MAX; j++)
scanf(“%f”, preco[j])
S⁄
)
 (
P
gg4gama¿ãg
 
3gsggsggaga
 
/
Autoria: Renato Cristiano Torres
Tema 04
Operações com Arquivos
)
 (
© 2014 Anhanguera Educacional. Proibida a reprodução final ou parcial por qualquer meio de impressão, em forma idêntica, resumida ou modificada em língua
portuguesa ou qualquer outro idioma.
Pág. 17
Pág. 16
Pág. 16
Pág. 16
Pág. 11
ACOMPANHE
NA
WEB
Pág. 10
POR
DENTRO
DO
TEMA
Pág. 4
CONVITE
À
LEITURA
Pág. 3
 
Índice
3ema 04
Operações com
 
Arquivos
Autoria:
 
Renato
 
Cristiano
 
Torres
Como citar esse
 
documento:
TORRES, Renato Cristiano. 
Programação Estruturada I: 
Operações com Arquivos
. 
Caderno de Atividades. Anhanguera Publicações: Valinhos, 2014.
)
 (
POR
DENTRO
DO
TEMA
Operações com Arquivos
Segundo
 
Mizhari
 
(2008),
 
arquivo
 
é
 
utilizado
 
para
 
indicar
 
um
 
“fluxo
 
de
 
dados”
 
(stream).
 
Todo
 
local
 
que
 
tem
 
capacidade para
 
receber
 
bytes
 
da
 
memória
 
do
 
computador
 
ou
 
transferi-los
 
para
 
ela
 
recebe
 
o
 
nome
 
de
 
arquivo,
 
por
 
exemplo:
 
arquivos de disco, teclado, vídeo, impressora, portas de comunicação etc. Desta forma, o conceito de arquivo é ampliado. A linguagem
 
C
 
dispõe
 
de
 
funções
 
para
 
abertura,
 
fechamento,
 
leitura
 
e
 
escrita
 
em
 
arquivos.
Abertura de Arquivos
A
 
função
 
fopen()
 
cria
 
e
 
preenche
 
uma
 
estrutura
 
com
 
as
 
informações
 
do
 
arquivo
 
e
 
retorna
 
um
 
ponteiro
 
do
 
tipo
 
FILE. Em
 
C
 
podemos
 
realizar
 
gravação
 
e
 
leitura
 
caractere
 
a
 
caractere,
 
utilizando
 
as
 
funções
 
fputc()
 
e
 
fgetc().
 
Vamos
 
a
 
um
exemplo para aprender a utilizá-las.
#include <stdio.h> #include <stdlib.h> #include <conio.h>
int main(void)
{
/* Declaramos um ponteiro do tipo FILE que receberá as propriedades do arquivo
*/
FILE *fptr;
char ch;
/* Abre o arquivo para gravar “w” em modo texto */
fptr=fopen(“arqtext.txt”,”w”);
/*
 
Lê
 
um
 
caractere
 
até
 
receber
 
um
 
enter
 
sem
 
digitar
 
qualquer
 
outro
 
caractere
 
*/ while ((ch=getche()) !=
 
‘\r’)
/* Grava caractere no arquivo */ fputc(ch,fptr);
/* Fecha o arquivo */ fclose(fptr);
return 0;
}
4
) (
5
CONVITE
À
LEITURA
Este Caderno de Atividades foi elaborado com base no livro 
Treinamento em Linguagem C
, do autor Victorine Viviane Mizrahi, Editora Pearson, 2008. (Livro-Texto)
Conteúdo
Nesta aula, você estudará:
Leitura e gravação de
 
arquivos.
Manipulação de dados em
 
arquivos.
Gravação de estruturas em
 
disco.
Habilidades
Ao final, você deverá ser capaz de responder as seguintes questões:
Como abrir e fechar um
 
arquivo?
Como
 
escrever
 
e
 
ler
 
um
 
dado
 
de
 
arquivo?
Como
 
gravar
 
um
 
registro
 
em
 
um
 
arquivo?
)
PORDENTRODOTEMA
Nosso programa cria um arquivo chamado de “arqtext.txt” e pede para digitar um caractere. À medida que o caractere é digitado e confirmado com enter, é gravado no arquivo. Se você não digitar nenhum caractere e teclar enter, o programa fecha o arquivo e se encerra. Se você abrir o arquivo, notará que os dados que digitou estarão gravados.
A ação de fechar o arquivo é muito importante, pois informa ao programa que qualquer informação pendente no buffer precisa ser gravada no arquivo. O buffer é uma memória temporária. Imagine: se você digitar vários caracteres rapidamente, e cada um necessitar de um acesso ao disco, eles poderão ser perdidos. Por isso existe o buffer, que armazena temporariamente o dado antes de ser gravado no disco.
Agora vamos fazer o contrário. Vamos ler um arquivo e apresentar no vídeo caractere a caractere.
#include <stdio.h> #include <stdlib.h>
int main(void)
{
FILE * fptr; /* Ponteiro para arquivo */ short int ch;
fptr=fopen(“arqtext.txt”,”r”); /* Abre arquivo para ler “r” */
while((ch=fgetc(“ArqText.txt”,”r”) != EOF) /* lê um caractere do arquivo até
encontrar o final do arquivo)
print(“%c”,ch); /* mostra o caractere lido */
fclose(fptr); /* fecha o arquiv */ return 0;
}
É importante ressaltar que EOF não é um caractere do arquivo, e sim uma constante do tipo inteira. O fim do arquivo é reconhecido pelo sistema operacional, que envia 0 ao lermos o último caractere do arquivo para indicar que o arquivo chegouao final.
5
 (
6
POR
DENTRO
DO
TEMA
A
 
abertura
 
de
 
um
 
arquivo
 
pode
 
apresentar
 
falha,
 
por
 
exemplo,
 
caso
 
falte
 
espaço
 
em
 
disco.
 
Por
 
este
 
motivo,
 
é
 
importante você
 
colocar
 
um
 
teste
 
para
 
avaliar
 
se
 
o
 
arquivo
 
foi
 
aberto
 
com
 
sucesso.
 
Vamos
 
a
 
um
 
exemplo:
#include <stdio.h> #include <stdlib.h> int main(void)
{
FILE *fptr; short int ch;
if (( fptr == fopen(“ArqText.txt”,”r”)) ==NULL)
{
puts(“Não foi possível o
 
arquivo”); exit(1);
}
while(ch=fgetc(fptr) != EOF) printf(“%c”,ch);
fclose(fptr); 
return 0;
}
Veja 
que o programa apresentado testa, por meio do comando 
IF, 
se o ponteiro do arquivo é NULO. Se 
for, 
emite uma mensagem e o programa encerra. Isso é necessário para não gerar erros nos códigos, pois, se o ponteiro é NULO, é consequência da não abertura do arquivo, logo, se tentarmos ler algum dado utilizando o ponteiro, ocorrerá um erro.
Você
 
pode
 
criar
 
um
 
programa
 
para
 
ler
 
e
 
gravar
 
dados
 
linha
 
a
 
linha,
 
ao
 
invés
 
de
 
ler
 
e
 
gravar
 
caractere
 
a
 
caractere,
 
como visto até aqui. 
Vamos 
a um
 
exemplo:
)
 (
8
POR
DENTRO
DO
TEMA
#include <stdio.h> #include <stdlib.h> int main(void)
{
FILE *fptr; char str[81] ;
if (( fptr == fopen(“Teststr.txt”,”r”)) ==NULL)
{
puts(“Não foi possível o
 
arquivo”); exit(1);
}
while (fgets(str,80,fptr) !=
 
NULL) printf(“%s”,str);
fclose(fptr); 
system(“pause”); 
return 0;
}
Note que no nosso programa colocamos um teste para a abertura do arquivo e utilizamos a função fgets para ler linha a
 
linha
 
o
 
arquivo.
 
Essa
 
função
 
recebe
 
três
 
parâmetros,
 
o
 
vetor
 
onde
 
ficarão
 
armazenados
 
os
 
caracteres
 
da
 
linha
 
lida,
 
a quantidade
 
máxima
 
de
 
caracteres
 
lidos
 
em
 
uma
 
linha
 
e,
 
por
 
último,
 
o
 
ponteiro
 
para
 
o
 
arquivo.
Há mais dois comandos muito úteis para ler e gravar dados formatados. Vamos a um exemplo:
) (
⁄
POR
DENTRO
DO
TEMA
#include <stdio.h> #include <stdlib.h> int main(void)
{
FILE *fptr;
fptr = fopen(“Testestr.txt”,”w”);
fputs(“Um grande antídoto contra o egoísmo\n”,fptr); fputs(“é a generosidade.... Dê, mesmo que\n”,fptr); fputs(“isso requeira de você um esforço\n”,fptr); fputs(“consciente. Pelo fato de partilhar\n”,fptr); fputs(“tudo o que possui. Seu egoísmo se\n”,fptr); fputs(“abrandará.\n”,fptr);
fclose(fptr); 
return 0;
}
No
 
programa
 
apresentado,
 
abrimos
 
o
 
arquivo
 
Testestr
 
para
 
a
 
gravação,
 
como
 
já
 
visto
 
anteriormente.
 
Porém,
 
utilizamos a
 
função
 
fputs
 
para
 
gravar
 
linhas
 
inteiras
 
de
 
texto.
 
Note
 
que
 
essa
 
função
 
recebe
 
a
 
frase
 
e
 
o
 
ponteiro
 
do
 
arquivo
 
aberto.
Para ler um arquivo não é muito diferente. Vamos a um exemplo:
)
 (
S0
ACOMPANHE
NA
WEB
Introdução: Manipulação de Arquivos em C
Acesso
 
o
 
texto
 
“Introdução:
 
Manipulação
 
de
 
Arquivos
 
em
 
C”.
 
Você
 
encontrará
 
um
 
manual
completo para a manipulação de arquivos em C.
Disponível em: 
<http://www.ufjf.br/jairo_souza/files/2009/12/3-Arquivos-Manipula%C3%A7%C3%A3o-de-
 
arquivos-em-C.pdf>
. Acesso em: 5 mai. 2014.
Aula 12: arquivos
No
 
link
 
a
 
seguir
 
você
 
encontrará
 
exemplos
 
e
 
dicas
 
para
 
manipular
 
arquivos
 
e
 
gravar
 
estruturas de dados em
 
arquivos.
Disponível em: 
<http://www.unicamp.br/fea/ortega/info/aula12.htm>
. Acesso em: 5 mai. 2014.
Programar em C - 06 – Arquivos
Assista
 
ao
 
vídeo:
 
Programar
 
em
 
C
 
-
 
06
 
–
 
Arquivos
.
 
Trata-se
 
de
 
um
 
vídeo
 
com
 
dicas
 
e
 
instruções
de manipulação de arquivos em C.
Disponível em: 
<http://www.youtube.com/watch?v=PP-8eFJ4vB0>
. Acesso em: 5 mai. 2014.
Iniciando C++
Assista ao vídeo: 
Iniciando C++
. Para você que deseja um tutorial do Dev C++, acesse
 
este
link
. O vídeo demonstra, passo a passo, como criar o primeiro projeto no Dev C++.
Disponível em: 
<http://www.youtube.com/watch?v=LZ2dkIKc8FE>
. Acesso em: 5 mai. 2014.
) (
9
POR
DENTRO
DO
TEMA
#include <stdio.h> #include <stdlib.h> #include <string.h> #define TRUE 1
int main(void)
{
FILE *fptr;
char titulo[30]; int regnum; double preco;
fptr = fopen(“livros.txt”,”w”);
while (TRUE)
{
printf(“\nDigite título, registro e preço do livro :”); scanf(“%s %d %lf”, titulo, %regnum, &preco);
if (strlen(titulo) <= 1) break;
fprint(fptr, “%s %d %.2lf\n”, titulo, regnum, preco);
}
fclose(fptr); 
return 0;
}
Nosso programa obtém dados do nome do livro, registro e preço, faz uma validação, pois não poderá prosseguir sem informar
 
o
 
nome
 
do
 
livro.
 
Por
 
este
 
motivo,
 
utiliza-se
 
a
 
função
 
strlen,
 
que
 
tem
 
a
 
função
 
de
 
verificar
 
o
 
tamanho
 
da
 
string 
(vetor
 
de
 
caracteres)
 
título.
 
Por
 
último,
 
utiliza
 
a
 
função
 
fprint
 
para
 
gravar
 
no
 
arquivo
 
os
 
dados
 
de
 
maneira
 
formatada.
)
 (
AGORA
É
A
SUA
VEZ
Instruções:
Agora, chegou a sua vez de exercitar seu aprendizado. A seguir, você encontrará algumas questões de múltipla
escolha e dissertativas. Leia cuidadosamente os enunciados e atente-se para o que está sendo pedido.
Questão 1
O que é um arquivo?
Questão 2
Para ler um caractere por vez, qual das seguintes funções é apropriada?
fread()
read()
fgets()
getc()
getd()
Questão 3
Quais dos seguintes parâmetros podem ser especificados pela função fopen()?
O arquivo será aberto para acrescentar
 
dados.
O arquivo será aberto em modo
 
hexadecimah.
Números
 
serão
 
gravados
 
em
 
formato
 
binário.
O arquivo será hido caractere a
 
caractere.
O arquivo será hido hinha a
 
hinha.
SS
)
 (
Sł
AGORA
É
A
SUA
VEZ
Questão 4
Para gravar variáveis de diferentes formatos em um arquivo de maneira formatada, a função apropriada é:
fputs()
fgets()
fprintf()
fwrite()
fread()
Questão 5
Se
 
um
 
programador
 
descuidado
 
abrir
 
um
 
arquivo
 
para
 
inserir
 
dados
 
mas
 
não
 
o
 
fechar,
 
o
 
que
 
pode
 
acontecer?
Nada,
 
o
 
sistema
 
operacionah
 
fecha
 
o
 
arquivo
 
automaticamente
 
durante
 
a
 
execução
 
do
 
programa.
Enquanto
 
o
 
programa
 
estiver
 
sendo
 
executado,
 
nenhum
 
usuário
 
consegue
 
escrever
 
no
 
arquivo.
Enquanto
 
o
 
programa
 
estiver
 
sendo
 
executado,
 
nenhum
 
usuário
 
consegue
 
her
 
o
 
arquivo.
Após
 
encerrar
 
o
 
programa,
 
o
 
sistema
 
operacionah
 
mantém
 
o
 
arquivo
 
como
 
somente
 
heitura.
Após
 
encerrar
 
o
 
programa,
 
o
 
sistema
 
operacionah
 
mantém
 
o
 
arquivo
 
aberto.
)
 (
S5
AGORA
É
A
SUA
VEZ
Questão 6
O
 
programa,
 
a
 
seguir,
 
possui
 
um
 
erro.
 
Encontre-o
 
e
 
apresente
 
a
 
consequência
 
e
 
uma
 
solução.
#include <stdio.h> #include <stdlib.h> #include <conio.h>
int main(void)
{
FILE *fptr; char ch;
fptr=fopen(“arqtext.txt”,”r”); 
while ((ch=getche()) != ‘\r’)
fputc(ch,fptr); 
fclose(fptr); return 0;
}
)
 (
S4
AGORA
É
A
SUA
VEZ
Questão 7
O
 
programa,
 
a
 
seguir,
 
força
 
um
 
erro
 
simulando
 
abertura
 
malsucedida
 
do
 
arquivo
 
por
 
meio
 
da
 
atribuição
 
do
 
valor
 
nulo
 
ao
 
ponteiro de
 
arquivo.
 
Comente
 
o
 
que
 
acontecerá
 
com
 
as
 
linhas,
 
a
 
seguir,
 
do
 
programa
 
durante
 
a
 
execução.
#include <stdio.h> #include <stdlib.h> int main(void)
{
FILE *fptr;
fptr = fopen(“Testestr.txt”,”w”); fptr = NULL;
fputs(“Um grande antidote contra o egoísmo\n”,fptr); fputs(“é a generosidade.... Dê, mesmo que\n”,fptr); fputs(“isso requeira de você um esforço\n”,fptr); fputs(“consciente. Pelo fato de partilhar\n”,fptr); fputs(“tudo o que possui. Seu egosimo se\n”,fptr); fputs(“abrandará.\n”,fptr);
fclose(fptr); 
return 0;
}
)
 (
S6
GLOSSÁRIO
String: 
É uma cadeia de caracteres, ou um vetor de caracteres, e algumas linguagens possuem um tipo de dado para tratar strings como C++. Em C, denota-se como matriz unidimensional ou vetor do tipo char.
REFERÊNCIAS
MIZRAHI,
 
Viviane
 
V.
 
Treinamento
 
Linguagem
 
C
.
 
São
 
Paulo:
 
Pearson,
 
2008. SCHILDT, H. C. 
Completo e 
Total
. 
3. ed. São Paulo: Makron Books, 1996. SEDGEWICK,
 
R.
 
Algorithms
 
in
 
C
 
-
 
Parts
 
1
 
–
 
4.
 
Addison
 Wesley, 
2003.
FINALIZANDO
Neste
 
tema,
 
você
 
aprendeu
 
como
 
abrir
 
e
 
fechar
 
um
 
arquivo,como
 
escrever
 
e
 
ler
 
um
 
dado
 
de
 
arquivo
 
e
 
como
 
gravar um registro em um
 
arquivo.
) (
S5
AGORA
É
A
SUA
VEZ
Questão 8
O programa, a seguir, contém um erro. Comente-o e apresente uma solução.
#include <stdio.h> #include <stdlib.h>
int main(void)
{
FILE * fptr; short int ch; 
fptr=fopen(“arqtext.txt”,”r”);
while((ch=fgetc(“ArqText.txt”,”r”) ==
 
EOF) print(“%c”,ch);
fclose(fptr);
return 0;
}
Questão 9
Atualmente,
 
acessar
 
simultaneamente
 
os
 
arquivos
 
pela
 
rede
 
é
 
algo
 
comum
 
do
 
nosso
 
cotidiano.
 
O
 
que
 
acontece
 
se
 
criarmos
 
um programa
 
para
 
gravar
 
dados
 
em
 
um
 
arquivo
 
e
 
outro
 
usuário
 
tentar
 
abrir
 
e
 
gravar
 
dados
 
nesse
 
arquivo?
Questão 10
Por que a constante EOF é importante para a leitura de arquivos?
)
 (
S8
Questão 9
Resposta: 
O primeiro usuário tem prioridade no arquivo; portanto, se ele abriu o arquivo com direito de escrita, o segundo
 
abrirá
 
apenas
 
com
 
direito
 
de
 
leitura.
 
Se
 
for
 
o
 
contrário,
 
os
 
dados
 
que
 
o
 
usuário
 
1
 
estará
 
enxergando
 
podem
 
ser antigos e precisará reabrir o arquivo para
 
atualizar.
Questão 10
Resposta: 
Para varrer um arquivo, precisamos saber qual é o ponto de parada, seja leitura caractere a caractere ou
linha a linha, o EOF é o ponto de parada, ou seja, final do arquivo.
) (
GABARITO
Questão 1
Resposta: 
Arquivo no contexto da linguagem C é todo lugar que tem capacidade para receber dados da memória do computador ou transferi-los para ela.
Questão 2
Resposta: 
Alternativa D.
Questão 3
Resposta: 
Alternativa A.
Questão 4
Resposta: 
Alternativa C.
Questão 5
Resposta: 
Alternativa B.
Questão 6
Resposta: 
O arquivo “arqtext.txt” foi aberto para leitura e na linha que é executada a função fputc, tentamos escrever,
isso gera um erro.
Questão 7
Resposta: 
O ponteiro de arquivo está nulo. Logo, é como se o arquivo não estivesse aberto, portanto, o programa apresentará um erro.
Questão 8
Resposta: 
A condição do laço While deve ser faça enquanto não for final de arquivo. Portanto, deve-se retirar o “==” e colocar “!=”, pois, da maneira que está o comando print, nunca será executado.
S⁄
)

Outros materiais