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⁄
)