Linguagemc Ufrpe C
Linguagemc Ufrpe C
Linguagemc Ufrpe C
Recife, 2009
Universidade Federal Rural de Pernambuco
Plano da Disciplina................................................................................5
Apresentação.........................................................................................9
Ementa da Disciplina
Objetivos
Objetivo Geral
Objetivos Epecíficos
• Desenvolver o auto-aprendizado.
Conteúdo Programático
• Introdução ao C
○ Conceito de programa e linguagem de programação
• Comandos Básicos do C
○ Estrutura de um programa C
○ Diretivas de compilação
○ Uso de comentário
○ Tipos de dados
○ Funções matemáticas
○ Sequência
○ Comando break
• Modularização
○ Comando return
Módulo 3 – Armazenamento de Dados em Vetores, Registros e Arquivos
○ Vetores
○ Registros
○ Vetor de registro
• Arquivos
○ Ponteiros
○ Validação de campos
Avaliação
Bibliografia
Básica:
Complementar:
Caro(a) aluno(a),
Seja bem-vindo (a) ao primeiro módulo da disciplina Programação II. Nesta disciplina,
você irá aprender a programar na linguagem de programação C, uma das mais utilizadas
mundialmente. Desenvolver programas e garantir que estes sejam confiáveis, eficientes
e agradáveis de usar requer conhecimento técnico e muito treinamento.
Este livro foi escrito pensando em você, que está iniciando neste mundo da
programação de computadores e que precisa ser apresentado, com tranquilidade, a um
conjunto de novos conceitos. Os assuntos serão transmitidos gradativamente, de forma
que você os absorva com naturalidade.
De antemão, informamos que programar é muito bom, você vai gostar! Nada melhor
do que ver um programa rodando e saber que foi você quem o criou. Mas, não desanime
se encontrar alguma dificuldade durante esta caminhada. Às vezes o programa dá
um erro e não sabemos onde está o problema. Seja persistente! Ao longo do tempo,
a experiência vai te dar mais segurança e você conseguirá encontrar tais erros com
facilidade.
Bons estudos!
Conhecendo o Volume 01
Capítulo 1: Introdução ao C
• Linguagens de programação;
• Palavras reservadas do C;
• Uso de comentários;
• Fundamentos do ambiente C;
• Conhecendo o Dev-cpp.
10
Programação 2
• Tipos de dados;
• Variáveis e constantes;
• Operador de atribuição;
• Entrada de dados;
• Saída de dados;
• Operadores ++ e --;
11
Programação 2
• Conversão de tipos;
• Funções matemáticas.
12
Programação 2
Capítulo 1 – Introdução ao C
13
Programação 2
14
Programação 2
15
Programação 2
16
Programação 2
17
Programação 2
18
Programação 2
• Programas estruturados;
19
Programação 2
20
Programação 2
Conheça Mais
21
Programação 2
http://oreilly.com/pub/a/oreilly/news/languageposter_0504.html,
foi disponibilizado um pôster, muitíssimo interessante, como uma
“árvore genealógica” das principais linguagens de programação dos
últimos 50 anos. Vale a pena dar uma olhada.
Vamos revisar?
22
Programação 2
23
Programação 2
Capítulo 2 – Conceitos
Preliminares para Programar
em C
24
Programação 2
3. Programa principal;
25
Programação 2
• Seqüência de comandos.
1 #include <stdio.h>
2 main()
3 {
4 int num,c;
5 printf(“Cubo de um numero\n\n”);
7 scanf(“%d”,&num);
8 c = num*num*num;
9 printf(“\nCubo de %d = %d”,num,c);
10 getche();
11 }
26
Programação 2
1 algoritmo “Cubo”
2 var
3 num, c: inteiro
4 inicio
5 escreval(“Cubo de um numero”)
6 escreva(“Digite o numero: “)
7 leia(num)
8 c <- num*num*num
9 escreval(“Cubo de “, num, “ = “, c)
10 fimalgoritmo
Sintaxe
27
Programação 2
7
Do Inglês, O segundo item da estrutura de um programa C é a declaração
main significa
principal. Todo
das constantes, esse item é opcional, só constará no nosso programa,
programa C caso seja necessário. Veremos a declaração de constantes, em
começa a sua
execução a partir detalhes, no próximo capítulo. No exemplo 2.1 não foi necessário o
do programa
principal. Assim,
uso de constantes.
o programa
principal é uma O terceiro item da estrutura do programa C é o programa principal.
parte obrigatória
na estrutura de É no programa principal que colocaremos a sequência de comandos
um programa C. que deve ser executada para a solução do problema que desejamos
resolver. Nós devemos informar onde começa e termina o programa
principal. O programa principal inicia com: main()7, como mostra a linha
2, do exemplo 2.1. A sequência de comandos do programa principal é
delimitada por um par de chaves: { (abre chaves) e } (fecha chaves).
Saiba Mais As chaves que delimitam o corpo do programa principal8 aparecem
nas linhas 3 e 11, do exemplo 2.1. Fazendo uma comparação com
8
Chamamos o algoritmo do exemplo 2.2, as chaves fazem o papel do “inicio” e
de corpo do
programa “fimalgoritmo”, das linhas 4 e 10.
principal toda
a sequência Logo no início do programa principal, devem ser declaradas as
de comandos
que faz parte variáveis (que serão abordadas no próximo capítulo). A declaração
do programa
de variáveis é um item opcional, pode acontecer de não precisarmos
principal. Ou seja,
a seqüência de declarar variáveis no nosso programa. No exemplo 2.1, a declaração
comando que
aparece entre de variáveis é feita na linha 4. Foram declaradas duas variáveis do
as chaves de
tipo inteiro: num e c. No algoritmo, exemplo 2.2, as variáveis são
abertura e término
do programa declaradas fora do programa principal, na seção de declaração de
principal.
variáveis (linhas 2 e 3).
28
Programação 2
semântica que ditam como o programa deve ser escrito. Com isso,
dentro dessas regras, existe um conjunto de palavras que tem um
significado para a linguagem de programação – são as palavras
reservadas. Uma palavra reservada é, essencialmente, um comando
e, na maioria das vezes, as palavras reservadas de uma linguagem
definem o que pode ser feito e como pode ser feito.
29
Programação 2
Sintaxe
// texto do comentário
Sintaxe
/* texto do comentário
texto do comentário
texto do comentário */
30
Programação 2
entre estes dois símbolos. Veja no exemplo 2.3, que nas linhas 2, 3,
e 4 aparece um comentário de bloco. Este tipo de comentário do
exemplo é utilizado para identificar quem é o programador quando
o programa foi feito e o que o programa faz. Devemos Adotar este
tipo de comentário no início dos nossos programas. Assim, ao abrir
um programa, rapidamente, saberemos para que ele serve. Devemos
tomar cuidado para não esquecer o “*/” que fecha o comentário de
bloco.
1 #include <stdio.h>
3 Data: 09/03/2009
5 main()
6 {
8 printf(“Cubo de um numero\n\n”);
10 scanf(“%d”,&Num);
11 C = Num*Num*Num;
12 printf(“\nCubo de %d = %d”,Num,C);
13 getche();
14 }
31
Programação 2
32
Programação 2
Figura 2.3: Diretório contendo código objeto e o programa executável Saiba Mais
12
CPU é a sigla
As fases 5 e 6 consistem na execução do programa executável. para Central
Para dar início a execução de um programa, é necessário que o mesmo Processing
Unit, em Inglês,
esteja na memória principal do computador. Isto é feito na fase 5, pelo ou Unidade
Central de
carregador do programa. O carregador pega o programa executável Processamento.
que está armazenado no disco e o transfere para memória principal. A CPU é a parte
do computador
Assim que o programa está na memória principal do computador, ele que processa
as instruções
está pronto para ser executado. A execução de um programa é feita contidas em um
pela CPU12, que executa as instruções do programa, uma após a programa.
33
Programação 2
34
Programação 2
as seguintes opções:
35
Programação 2
15
O erro de 4. Se der algum erro no programa, vejam as indicações de
compilação pode erro fornecidas pelo compilador15. Conserte os erros, salve o
não estar na linha
que o complilador arquivo e compile novamente. Isto deve ser feito até que seja
está indicando. O
erro poderá estar: apresentada uma mensagem indicando que o programa não
na linha que ele tem erros de compilação.
está indicando,
na linha
imediatamente 5. Se vocês acessarem o diretório que o arquivo do código fonte
acima, ou ainda,
foi armazenado, notarão que foi criado um arquivo com a
em linhas mais
acima (menos extensão .exe (com o mesmo nome do arquivo do código fonte).
comum de
acontecer). Este é programa executável. Para executá-lo, escolha a opção
Executar/Executar no Dev-cpp. Imediatamente, aparecerá a
janela de execução do programa, como mostra a Figura 2.5.
36
Programação 2
37
Programação 2
Conheça Mais
http://www.ibm.com/developerworks/aix/library/au-hook_
duttaC.html
http://www2.eletronica.org/artigos/eletronica-digital/
programando-em-c-boas-praticas
http://www.bloodshed.net/dev/index.html
http://www.uniqueness-template.com/devcpp/
Vamos revisar?
38
Programação 2
39
Programação 2
16
A linguagem Programas são feitos para manipular dados. Armazenar notas,
C não possui
o tipo lógico,
calcular médias, alterar um endereço, etc. Os dados são a essência
que armazena de um programa. Dados precisam ser armazenados e modificados
verdadeiro ou
falso. ao longo da execução do programa. Neste capítulo, iremos conhecer
os tipos de dados suportados pela linguagem C e aprender a definir
constantes e variáveis.
40
Programação 2
-9.223.372.036.854.775.808
Long 64 bits a
+9.223.372.036.854.775.807
Atenção
Qual a diferença entre cada um deles? A diferença entre os tipos
short, int e long é a quantidade de memória18 que é reservada para 18
A memória
é a parte do
armazená-los. Veja como é simples: à medida que se utiliza mais computador que
memória, aumenta o intervalo do valor que pode ser armazenado. Por tem como função
o armazenamento
exemplo, para armazenar um dado do tipo short, são reservados 16 de dados. Quando
um dado vai ser
bits de memória. Com isso, o tipo short pode suportar um número armazenado,
inteiro no intervalo de -32.768 a +32.767, como apresentado na precisamos
reservar uma
tabela. Portanto, dependendo do valor que será armazenado, deve quantidade de
memória para
ser escolhido um tipo (short, int ou long) que comporte tal valor. Por isto.
exemplo, para armazenar a idade de um funcionário, o tipo short
é o mais adequado (já que a idade de uma pessoa é um valor que
raramente ultrapassa 100). No entanto, para armazenar a quantidade
de eleitores de uma cidade, deve-se usar o tipo int (note que em
muitas cidades, a quantidade de eleitores ultrapassará o maior valor
suportado pelo tipo short: 32.767). Para facilitar nosso estudo, neste
material, sempre será usado o tipo int para armazenar os dados
inteiros.
3.1.2. Real
41
Programação 2
3.1.3. Caractere
3.1.4. Void
Em Inglês, void quer dizer vazio e é isto mesmo que o void é. Void
é um tipo que não armazena nada (um tanto esquisito, não é?). Este
tipo serve para indicar que um resultado não tem um tipo definido. Ele
é utilizado quando estamos definindo funções nos nossos programas.
Permiti-nos desenvolver funções que não retornam nada e funções
que não têm parâmetros. Voltaremos a falar do tipo void no Volume 2,
no capítulo que aborda modularização.
42
Programação 2
43
Programação 2
3.2.1. Identificadores
44
Programação 2
45
Programação 2
Sintaxe
46
Programação 2
Atenção
Sintaxe
47
Programação 2
1 #define DIAS 7
2 #define PI 3.1416
48
Programação 2
Sintaxe
Variavel = Valor;
Variavel_1 = Variavel_2;
Variavel = função;
49
Programação 2
1 float Media, X, Y, Z;
2 int J, L, M, K, A, B;
3 char Letra;
4 Media = 7.5;
5 Letra = ’D’;
6 X = Y;
7 K = A + B;
8 Z = sqrt(4);
9 J = L = M = 10;
Saiba Mais Na linha 4, a variável Media recebeu 7.5 (para números reais,
devemos utilizar ponto ao invés de virgula, para separar a parte inteira
19
Onde aparece o da parte fracionária do número)19.
= do comando de
atribuição, nos
lemos: “recebe”. Na linha 5, temos uma atribuição para uma variável char com um
Assim, o
comando da linha
único caractere. Note que, neste caso, o valor que a variável receberá
4 do exemplo 3.3, vem entre apóstrofo. Assim, a variável Letra está recebendo D.
seria lido: “Media
recebe 7.5”.
Atenção
50
Programação 2
51
Programação 2
float MEDIA, K, L;
( ) SOMA = NUM + 2;
( ) MEDIA = SOMA;
( ) NUM = K + L;
( ) X = X + 1
( ) L = SOMA - K;
( ) S = SOMA;
( ) X = SOMA - NUM;
Conheça Mais
52
Programação 2
Vamos revisar?
Vamos fazer uma revisão do assunto que foi visto neste capítulo,
fazendo a leitura do resumo a seguir:
53
Programação 2
Capítulo 4 – Comandos de
Entrada e Saída de Dados
54
Programação 2
Sintaxe
%c leitura de um caractere
Saiba Mais
%s leitura de cadeia de caracteres
Nós acessamos
21
Assim, quando formos ler um dado que vai ser armazenado em uma variável
através do seu
uma variável do tipo inteiro, a string de controle deve ser “%d”. Se nome. No entanto,
o processador
o valor a ser lido, for um número real, a string de controle será “%f”. acessa uma
Quando o dado a ser lido for um único caractere, a string de controle variável utilizando
o endereço de
é “%c” e para ler uma cadeia de caracteres, é utilizado “%s”. Com a memória dela.
Cada variável
resolução de exercícios, vocês não esquecerão o significado de cada criada no nosso
string de controle, certo? programa possui
um endereço de
memória. Nós
Na segunda parte do scanf, colocamos o nome da variável que não precisamos
vai armazenar o valor que será fornecido via teclado, entendido? conhecer o
endereço de
Notem que antes do nome da variável, aparece um & (e-comercial). memória de uma
variável, certo?
O & faz parte da sintaxe do scanf e não pode ser esquecido. NUNCA! Só precisamos
Na linguagem C, o & significa: “Endereço de memória”21. Assim, saber o nome
dela.
o comando scanf indica que o dado será lido via teclado e será
55
Programação 2
1 int idade;
2 float salario;
4 scanf(“%d”, &idade);
5 scanf(“%f”, &salario);
6 scanf(“%c”, &letra);
56
Programação 2
Sintaxe
fflush(stdin);
gets(variável);
57
Programação 2
Atenção
2 fflush(stdin);
3 gets(nome_aluno);
4 fflush(stdin);
5 gets(endereco);
58
Programação 2
Sintaxe
printf(“string de controle”);
59
Programação 2
\t tabulação (tab)
\a Dá um alerta sonoro
1 printf(“Ola Mundo!”);
2 printf(“\nBom Dia...”);
3 printf(“\n\nIsso eh um teste.\a”);
Saiba Mais
22
A tela tem
as seguintes Figura 4.4: Tela de execução de um programa: uso do printf
dimensões: 80
colunas x 25
linha. Assim,
conseguimos
Vamos entender cada printf do exemplo 4.3. Um detalhe essencial
escrever em uma que devemos saber: o printf escreve um texto na tela, no ponto em que
linha de tela, 80
caracteres. E o cursor se encontra no momento. Quando um programa é executado,
conseguimos ter
uma tela com até
o cursor se encontra na primeira coluna, da primeira linha da tela22. No
25 linhas. primeiro printf do exemplo, a string de controle tem apenas o texto que
60
Programação 2
%c Escrever um caractere
61
Programação 2
2 float A;
3 X = 1;
4 Y = 3;
5 A = 7.5;
6 mat = 123;
7 idade = 25;
62
Programação 2
Figura 4.5: Tela de execução de um programa usando printf com textos e valores
Vamos ver agora como fazer para que nossos números reais sejam
apresentados com a quantidade de casa decimais que quisermos. O
que vai mudar é o especificador de formato dos números reais, o “%f”.
Agora ele deve ser assim: entre o “%” e o “f”, colocaremos um ponto,
seguido de um número, que representa quantas casas decimais nós
63
Programação 2
1 float A, B,C;
2 A = 3.4;
3 B = 1.12345;
4 C = 7.56789;
64
Programação 2
Nesta seção, será apresentada uma lista com os erros que são
mais frequentemente cometidos por quem está iniciando a programar,
e que precisa ficar atento a tantos detalhes da sintaxe dos comandos.
Vamos ver, na tabela abaixo, os erros que podemos cometer no uso
do scanf, gets e printf.
65
Programação 2
66
Programação 2
Atenção
67
Programação 2
2 main()
3 {
7 scanf(“%d”, &n1);
9 scanf(“%d”, &n2);
10 soma = n1 + n2;
12 system(“pause”);
13 }
68
Programação 2
69
Programação 2
1 #include <stdio.h>
3 main()
4 {
5 char nome[20];
9 fflush(stdin);
10 gets(nome);
12 scanf(“%d”, &ano);
15 getche();
16 }
70
Programação 2
• Linha 7: printf que indica o que o programa faz, no início da Saiba Mais
tela de execução.
27
Importante:
• Linha 827: printf que solicita que seja digitado o nome do sempre que
temos que fazer
usuário. uma leitura de
dados (com
• Linha 9: temos o comando fflush, que DEVE sempre vir antes scanf ou gets),
devemos colocar
do comando gets. uma mensagem
para que o
• Linha 10: gets que efetuará a leitura do nome do usuário. usuário saiba
o que ele deve
digitar. Assim,
• Linha 11: printf para que o usuário saiba que precisa fornecer o todo scanf (ou
ano de nascimento. gets), deve ter
um printf antes,
informado o
• Linha 12: scanf que lê o ano de nascimento do usuário. que o usuário
tem que fazer. O
• Linha 13: atribuição que descobre quantos anos o usuários programa precisa
se comunicar com
tem. Para isso, subtraímos o ano atual (2009), do ano que o um usuário.
usuário nasceu. O resultado é atribuído para a variável idade.
71
Programação 2
72
Programação 2
Conheça Mais
73
Programação 2
Vamos revisar?
74
Programação 2
Capítulo 5 – Operadores,
Expressões e Funções
Matemáticas
Operador Descrição
+ Adição
- Subtração
* Multiplicação
75
Programação 2
/ Divisão
() Parênteses
real/real real
1 int X, Y, Z, W;
2 float K, L, M;
3 X = 19;
4 Y = 3;
5 Z = X/Y;
6 W = X % Y;
7 K = 19;
8 L = 3;
9 M = K/L;
76
Programação 2
Atenção
77
Programação 2
78
Programação 2
Prioridade Operador
1 int X, Y, Z, W, A, B, C, D;
2 X = 19;
3 Y = 3;
4 Z = 4;
5 W = 2;
6 A = X + Y * Z;
7 B = (X + Y) * Z;
8 C = X – Y * Z / W;
9 D = (X-Y) * (Z/W);
79
Programação 2
80
Programação 2
Operador Descrição
== Igualdade
!= Diferença ( )
< Menor
> Maior
Sintaxe
1 X == 10
2 X > Y
3 X < Y + Z
4 X * Y > Z / W
81
Programação 2
1 X == 10 => 1 == 10 => F
82
Programação 2
E &&
OU ||
NÃO !
V V V
V F F
F V F
F F F
83
Programação 2
V V V
V F V
F V V
F F F
84
Programação 2
2 (A < 3) || (B < 2)
V F
F V
2 !(Y == 10)
85
Programação 2
3 !(A == 1) || (B <= C + B)
Prioridade Operador
4º Operadores Relacionais;
5º Operadores Lógicos.
86
Programação 2
+= X += 4; Equivale a X = X + 4;
-= Y -= X; Equivale a Y = Y – X;
*= Z *= W; Equivale a Z = Z * W;
/= K /= 7; Equivale a K = K / 7;
%= L %= M; Equivale a L = L % M
5.3. Operadores ++ e --
++ X++; Equivale a X = X + 1;
-- Y--; Equivale a Y = Y -- 1;
87
Programação 2
88
Programação 2
1 int A,B,C;
2 float X,Y;
3 A=3;
4 B=5;
5 X=6.5;
6 C = (int)X % B;
7 Y = (float)A/B;
89
Programação 2
90
Programação 2
Atenção
Programas Resolvidos
91
Programação 2
1 #include <stdio.h>
3 main()
4 {
5 char nome[20];
9 fflush(stdin);
10 gets(nome);
11 printf(“Nota 1: “);
12 scanf(“%f”, ¬a1);
13 printf(“Nota 2: “);
14 scanf(“%f”, ¬a2);
17 getche();
18 }
92
Programação 2
• Linha 11: printf para que o usuário saiba que precisa fornecer a
primeira nota.
• Linha 13: printf para que o usuário saiba que precisa fornecer
a segunda nota.
93
Programação 2
1 #include <math.h>
3 main()
4 {
7 printf(“Numero: “);
8 scanf(“%f”, &num);
9 raiz = sqrt(num);
11 getche();
12 }
94
Programação 2
• Linha 11: comando getche que faz com que a tela de execução
do programa fique aberta, e assim podemos ver o resultado do
programa.
95
Programação 2
0 2 10 0 7 4 80 -1 -4
1) X = TOTAL/NOTA; 6) K += 9;
2) X = X+1; 7) Z = J / 5;
3) NOTA = X; 8) K = I % 5;
A B C D E
10 3 2 2 25
a) A == D
96
Programação 2
d) (D*E>100) || (B<5)
97
Programação 2
Notas de R$ 100,00: 3
Notas de R$ 50,00: 1
Notas de R$ 20,00: 1
Notas de R$ 10,00: 1
Conheça Mais
http://visualcplus.blogspot.com/2006/03/mathh.html
Vamos revisar?
98
Programação 2
Considerações Finais
Referências
99
Programação 2
Conhecendo a Autora
100
Programação 2
Recife, 2009
Universidade Federal Rural de Pernambuco
Apresentação.........................................................................................5
1.2.1. If Simples.............................................................................10
1.2.2. If Composto.........................................................................14
1.2.3. If Aninhado..........................................................................19
Capítulo 3 – Modularização.................................................................64
3.5. Parâmetros.................................................................................71
Caro(a) aluno(a),
Seja bem-vindo (a) ao segundo módulo da disciplina Programação II. Nesta disciplina,
você está aprendendo a programar na linguagem de programação C, uma das mais
utilizadas mundialmente.
Este livro segue a mesma ideia do volume I, os assuntos são apresentados de forma
gradativa, com muitos exemplos de programas completos e comentados, visando um
bom entendimento, principalmente para as pessoas que estão iniciando no mundo da
programação. Ao final de cada capítulo, você poderá testar o seu aprendizado e assimilar
melhor o que foi estudado, através da resolução de exercícios. Isto é muito importante!
Não deixe de resolvê-los.
Vale lembrar que, para um bom andamento dos estudos destes novos assuntos, você
terá que ter assimilado o conteúdo do volume I, pois este continuará sendo utilizado em
todos os nossos programas. Mas isto não é um problema para quem vem resolvendo
questões de programação regularmente, não é mesmo?
Bons estudos!
Conhecendo o Volume 2
• Estruturas de controle
• Comando break.
6
Programação 2
• Estrutura de um módulo
• Parâmetros
• Chamada de um módulo
• Comando return.
7
Programação 2
Capítulo 1 – Estruturas de
Seleção
8
Programação 2
bloco_de_comandos1;
else
bloco_de_comandos2;
9
Programação 2
1.2.1. If Simples
Sintaxe
if (condição) if (condição)
comando; { comando1;
comando2;
10
Programação 2
comando 3; comando 3;
if (condicao) if (condicao)
comando 4; { comando 4;
comando 5; comando 5;
comando 6; }
comando 7; comando 6;
} comando 7;
As condições do
Vamos analisar os exemplos da figura 1.3. O programa principal if devem vir entre
da esquerda é formado por sete comandos. O programa vai sendo parênteses. Se
tivermos mais de
executado, passando pelos comando1, comando2 e comando3. Ao uma expressão
relacional, estas
chegar no if, a condição é avaliada. Se a condição for verdade, o são conectadas
comando4 será executado. Se esta condição for falsa, o comando4 por operadores
lógicos.
será desviado (ou seja, não será executado). Na sequência, são O abre chaves
que delimita
executados os comando5, comando6 e comando7. o bloco de
comandos
O programa principal da direita também é composto de sete vinculado ao if é
colocado após a
comandos. Os comando1, comando2 e comando3 são executados. condição do if. O
Na seqüência, temos o if, que tem a sua condição avaliada. Se a fecha chaves é
colocado após o
condição for verdade, os comando4 e comando5 são executados. último comando
do bloco de
Caso contrário, os comando4 e comando5 são desviados. Como este comandos do if.
if possui dois comandos, foi necessário colocá-los entre chaves. Na O if e o else
devem ser
sequência, os comando6 e comando7 são executados. escritos todo em
letras minúsculas.
11
Programação 2
1 main()
2 {
3 float saldo,valor_saque;
6 scanf(“%f”,&saldo);
8 scanf(“%f”,&valor_saque);
11 if(saldo<0)
13 getche();
14 }
12
Programação 2
• Linha 12: printf para mostrar que o saldo ficou inválido. Veja
que este comando está vinculado ao if, dessa forma, ele só
será executado se a condição do if for verdade. Como o if tem
apenas um comando, não precisamos colocar chaves.
13
Programação 2
1.2.2. If Composto
14
Programação 2
Sintaxe
Caso 1 Caso 2
if (condição) if (condição)
comando1; { comando1;
else comando2;
comando2; }
else
comando3;
Caso 3 Caso 4
if (condição) if (condição)
comando1; { comando1;
else comando2;
{ comando2; }
comando3; else
} { comando3;
comando4;
15
Programação 2
16
Programação 2
1 #include <stdio.h>
2 main()
3 {
5 char nome[20];
6 printf(“Caderneta de Notas\n\n”);
8 fflush(stdin);
9 gets(nome);
10 printf(“Nota 1: “);
11 scanf(“%f”,&n1);
12 printf(“Nota 2: “);
13 scanf(“%f”,&n2);
14 media = (n1+n2)/2;
15 if (media>=7)
17 else
19 getche();
20 }
17
Programação 2
• Linha 17: temos um else, que indica que também teremos uma
sequência de comandos para ser executada quando a condição
do if for falsa, ou seja, média do aluno menor que 7.
• Linha 19: comando getche que faz com que a tela de execução
do programa fique aberta, e assim podemos ver o resultado do
programa.
18
Programação 2
Aluno aprovado
Aluno reprovado
1.2.3. If Aninhado
19
Programação 2
Sintaxe
if (condição1) if (condição1)
comando1; comando1;
else else
{ if (condicao2) { if (condicao2)
comando2; comando2;
else else
comando3; { if (condicao3)
} comando3;
else
comando4;
20
Programação 2
1 main()
2 {
3 int x, y;
4 printf(“Compara Numeros\n\n”);
5 printf(“X: “);
6 scanf(“%d”,&x);
7 printf(“\nY: “);
8 scanf(“%d”,&y);
9 if (x > y)
11 else
12 { if (x < y)
14 else
16 }
17 getche();
18 }
21
Programação 2
• Linha 13: printf para escrever que x é menor que y. Este printf
é executado caso a condição do if da linha 12 seja verdade.
• Linha 15: printf para escrever que x e y são iguais. Este printf é
executado caso a condição do if da linha 12 seja falsa.
22
Programação 2
X menor que Y
X maior que Y
X igual a Y
23
Programação 2
24
Programação 2
Sintaxe
comando2; comando2;
break; break;
comando4; comando4;
break; break;
comando6; comando6;
break; break;
} default: comando7;
comando8;
break;
25
Programação 2
3 break;
5 break;
7 break;
8 }
26
Programação 2
1 switch (cargo)
3 break;
5 break;
7 break;
9 break;
10 }
1 switch (cargo)
3 break;
5 break;
7 break;
8 }
27
Programação 2
Cargo Percentual
Gerente 10%
Engenheiro 20%
Técnico 30%
28
Programação 2
1 main()
2 {
3 int cargo;
5 printf(“Empresa Legal\n\n\n”);
6 printf(“Cargo(1-Gerente/2-Engenheiro/3-
Tecnico): “);
7 scanf(“%d”,&cargo);
9 scanf(“%f”,&sal);
10 switch (cargo)
15 }
17 { printf(“\n\n______________________________
\n”);
18 printf(“\n\nResultados\n\n”);
20 printf(“\nSalario Antigo..............: R$
%.2f\n”,sal);
21 printf(“\nSalario Novo................: R$
%.2f\n”,nsal);
22 printf(“\nDiferenca de Salarios: R$
%.2f\n”,nsal - sal);
23 }
24 getche();
25 }
29
Programação 2
30
Programação 2
Cargo Válido
Cargo Inválido
31
Programação 2
main()
int cargo;
printf(“Empresa Legal\n\n\n”);
printf(“Cargo(1-Gerente\2-Eng.\3-Tecnico): “);
scanf(“%d”,&cargo);
scanf(“%f”,&sal);
switch (cargo)
{ prinft(“\n\n____________________________\n”);
prinft(“\n\nResultados\n\n”);
getche();
32
Programação 2
33
Programação 2
main()
int cargo;
printf(“Empresa Legal\n\n\n”);
printf(“Cargo(1-Gerente\2-Engenheiro\3-Tecnico): “);
scanf(“%d”,&cargo);
scanf(“%f”,&sal);
switch (cargo)
{prinft(“\n\n____________________________\n”);
prinft(“\n\nResultados\n\n”);
getche ();
34
Programação 2
35
Programação 2
a tabela:
Média Conceito
>= 9,0 A
< 4,0 E
• Primavera: 22/Set
• Verão: 21/Dez
• Outono: 20/Mar
• Inverno: 20/Jun
Até 1 Kg R$ 5,00
De 1 Kg a 5 Kg R$ 10,00
36
Programação 2
Conheça Mais
Vamos Revisar?
37
Programação 2
38
Programação 2
Capítulo 2 – Estruturas de
Repetição
39
Programação 2
Sintaxe
comando1;
{ comando1;
comando2;
comandon;
Onde:
Notem que cada parte do for é separada por ponto e vírgula. Mas
não colocamos o ponto e vírgula depois do comando que atualiza a
variável de controle, nem após o fecha parênteses.
40
Programação 2
41
Programação 2
cada final da repetição. Notem que esta repetição vai parar quando o i
é 0. Este for também faz a impressão de 1 a 10 na tela. Só que, dessa
vez, os números serão impressos na ordem decrescente.
42
Programação 2
1 main()
2 { float valor;
3 int cod, i;
5 { system(“cls”);
8 scanf(“%d”,&cod);
10 scanf(“%f”,&valor);
11 if (valor<500)
13 else
16 getche();
17 }
18 }
43
Programação 2
• Linha 16: temos o getche() que faz com que possamos ver o
valor do bônus do cliente.
Atenção
• Linha 17: fecha chaves que delimita a sequência de comandos
6
Fiquem atentos do for.
a identação do
programa. • Linha 18: fecha chaves do programa principal6.
44
Programação 2
45
Programação 2
Sintaxe
while (condição)
comando;
while (condição)
{ comando1;
comando2;
comandon;
46
Programação 2
47
Programação 2
1 main()
2 {
3 float valor;
5 contador = 1;
6 while (contador<=5)
7 { system(“cls”);
10 scanf(“%d”,&cod);
12 scanf(“%f”,&valor);
13 if (valor<500)
15 else
17 contador++;
19 getche();
20 }
21 }
48
Programação 2
49
Programação 2
Sintaxe
do
comando;
while (condição);
do
{ comando1;
comando2;
comandon;
} while (condição);
50
Programação 2
51
Programação 2
1 main()
2 {
3 float valor;
5 contador = 1;
6 do
7 { system(“cls”);
10 scanf(“%d”,&cod);
12 scanf(“%f”,&valor);
13 if (valor<500)
15 else
17 contador++;
19 getche();
21 }
52
Programação 2
53
Programação 2
1 main()
2 {
3 float valor;
5 do
6 { system(“cls”);
9 scanf(“%d”,&cod);
11 scanf(“%f”,&valor);
12 if (valor<500)
14 else
17 scanf(“%d”, &continuar);
18 } while (continuar==1);
19 }
54
Programação 2
• Linha 17: scanf para ler a resposta do cliente, que deve ser 1
para continuar ou 2 para parar. O valor que o usuário digitar,
será armazenado na variável continuar.
55
Programação 2
Atenção
Figura 2.7: Tela de execução do programa completo 2.4
Todas as
estruturas de De acordo com a figura 2.7, após os usuário fornecer os dados
repetição são
escritas em do cliente e receber o valor do bônus que o cliente tem direito, é
minúsculo.
feita a pergunta se ele deseja ou não cadastrar outro. Assim que for
Atentem a respondido 2, ou seja, não quer mais cadastrar, a janela do programa
identação dos
comandos do irá fechar. Enquanto estiver respondendo 1, novos cadastros são
programa.
feitos.
A sequência de
comandos de
uma estrutura de
controle, seja de 2.4. Uso do break na Estrutura de Repetição
repetição ou de
seleção, poderá
ser composta Vimos anteriormente o comando break finalizando a sequência
por qualquer
comando válido
de comandos de um case, da estrutura de seleção switch. Mas, este
da linguagem. comando também pode ser usado para forçar o encerramento de
Assim,
poderemos ter uma estrutura de repetição. Se um break for executado dentro de
uma estrutura
de repetição
uma estrutura de repetição, o fluxo do programa será desviado para o
dentro da outra. primeiro comando depois da repetição. Mesmo que a repetição ainda
Se houver
necessidade de não tenha sido executada a quantidade de vezes que foi determinada.
colocar um for
na sequência
Normalmente, o comando break é colocado na sequência de comandos
de comandos de uma estrutura de seleção e só é executado, caso alguma situação
de outro for,
devemos utilizar aconteça.
uma variável de
controle diferente Vamos analisar o programa completo 2.5. Neste programa, o
para cada for
cliente tem um limite de R$ 200 no cartão de crédito da loja. Conforme
as suas compras vão sendo passadas no caixa, seu saldo vai sendo
avaliado. Se a compra de um novo item ultrapassar o limite permitido,
o programa deve parar a venda. Mas, se ele tiver limite, a compra
pode ser feita e finalizada normalmente.
56
Programação 2
1 main()
3 int continuar;
4 total = 0;
5 do
6 { system(“cls”);
9 scanf(“%f”,&preco);
12 else
15 getche();
16 break;
17 }
19 scanf(“%d”, &continuar);
20 } while (continuar==1);
22 getche();
23 }
57
Programação 2
9
Sempre que
• Linha 5: do que inicia a sequência da repetição.
uma variável
for servir de • Linhas 6 a 20: sequência de comandos vinculada ao do/while.
acumulador, seu
conteúdo deve
Nesta sequência temos a solicitação do preço do produto que
ser inicializado. o cliente está comprando. A cada novo produto comprado é
Normalmente com
zero. preciso verificar se o total da compra extrapola os 200 reais
do limite do cartão. Esta verificação é feita no if da linha 10. Se
o limite extrapolar, será executada a sequência de comandos
do else da linha 12. Assim, é impressa uma mensagem que
não pode mais adicionar produtos e, logo em seguida, executa
o break da linha 16, forçando a saída do do/while. Como não
pode mais comprar produtos, temos que sair da repetição.
Por isso foi usado o break. Mas, se a compra não extrapolar o
limite, o cliente vai fazendo as compras dos produtos que ele
desejar. Dessa forma, a execução do break ocorre mediante
a ocorrência de uma situação, que neste caso foi o estouro do
limite.
58
Programação 2
59
Programação 2
Deseja-se saber:
60
Programação 2
• Código da cidade
Deseja-se saber:
Calcule:
• Quantidade de candidatos
• Quantidade de candidatas
61
Programação 2
• O número de votantes;
Conheça Mais
62
Programação 2
Vamos Revisar?
63
Programação 2
Capítulo 3 – Modularização
64
Programação 2
Alvenaria
Sistema Elétrico
Pintura
Sistema Hidráulico
Figura 3.1: Divisões da construção de uma casa
65
Programação 2
Sintaxe
tipo_de_retorno nome_da_função([declaração de
parâmetros])
[return ]
66
Programação 2
67
Programação 2
A figura 3.2 apresenta uma função que calcula a média das duas
notas de um aluno.
{ float m;
m = (n1 + n2)/2;
return m;
Retorno da função
Variável Local
68
Programação 2
Declaração de Constantes
Programa Principal
69
Programação 2
int A, B, C;
Modulo 1
int x, y, z;
Modulo 2
int x, w;
70
Programação 2
não tem acesso a tais variáveis. Notem que, tanto o módulo 1 quanto
o módulo 2, tem uma variável chamada x. Variáveis com o mesmo
nome em módulos diferentes não causam conflito no programa.
Também pode ocorrer de uma função ter uma variável local com o
Atenção
mesmo nome de uma variável global, quando isto acontece, a função
dará preferência à variável local11. 11
Lembrem que
não podemos ter
Um ponto interessante que devemos atentar ao declarar as duas variáveis
globais com o
variáveis do programa é que as variáveis locais só existem (e mesmo nome.
consequentemente, ocupam memória) enquanto o módulo estiver
ativo e são destruídas quando a execução do módulo termina. Com
isso, há uma melhor utilização da memória do programa.
3.5. Parâmetros
f (x , y) = x y
• em que x e y são parâmetros.
f (3 , 2) = 3 2 = 9
Uma correspondência é estabelecida entre os parâmetros da
definição e os argumentos utilizados. No exemplo, o parâmetro x foi
substituído pelo 3 e o parâmetro y foi substituído pelo 2. É importante
perceber que a ordem dos parâmetros é crucial, pois f(3,2) não é o
mesmo que f(2,3).
71
Programação 2
1 void cabecalho()
2 { system(“cls”);
3 printf(”Faculdade Legal\n”);
4 printf(“__________________________________\n”);
5 }
72
Programação 2
Exemplo 3.2
2 { float m;
3 m = (n1 + n2)/2;
4 return m;
5 }
73
Programação 2
main()
comando2; { comando1;
comando3; comando2;
comando4; comando3;
modulo1();
comando5;
{ comando1;
modulo2(); comando2;
comando3;
comando7; comando4;
comando8; }
74
Programação 2
1 void escreva_cabecalho()
2 { system(“cls”);
4 printf(“_______________________________\n\n”);
5 }
8 { int q;
9 q = numero*numero;
10 return q;
11 }
12
13 main()
14 { int n, r;
15 escreva_cabecalho();
17 scanf(“%d”, &n);
18 r = quadrado(n);
19 printf(“\n\nResultado\n\n”);
21 getche();
22 }
75
Programação 2
76
Programação 2
o módulo desenvolvido.
Conheça Mais
Vamos Revisar?
Vamos fazer uma revisão do assunto que foi visto neste capítulo,
77
Programação 2
78
Programação 2
Considerações Finais
Referências
79
Programação 2
Conhecendo a Autora
80
Programação 2
Recife, 2009
Universidade Federal Rural de Pernambuco
Apresentação.........................................................................................5
Considerações Finais........................................................................102
Conhecendo a Autora........................................................................104
Apresentação
Caro(a) aluno(a),
Seja bem-vindo (a) ao terceiro módulo da disciplina Programação II. Neste módulo,
vamos dar mais um passo no nosso aprendizado sobre a linguagem de programação
C.
Neste livro, nós vamos aprender novas formas de armazenar nossos dados. Com os
vetores e registros, poderemos manusear um volume maior de dados, de forma facilitada.
Outro assunto muito importante que será abordado neste volume é o armazenamento de
dados em arquivos. Atualmente, ao terminar a execução do programa, todos os dados
que foram digitados são perdidos. Com o armazenamento de dados em arquivos, isto
não acontece. Assim, iremos desenvolver programas com operações como: cadastro de
elementos, remoção, alteração, consultas, listagens, etc.
Bons estudos!
Conhecendo o Volume 3
• Definição de vetores;
• Definição de registros;
• Vetor de registro;
• Definição de arquivos;
6
Programação 2
• Ponteiros;
7
Programação 2
Capítulo 1 – Armazenamento de
Dados em Vetores
8
Programação 2
0 1 2 3 4
Sintaxe
tipo identificador[tamanho];
9
Programação 2
onde:
1 int idade[100];
2 float nota[25];
3 char nome[80];
10
Programação 2
Exemplo 1.2:
Declaração de vetor usando uma constante no local do tamanho do vetor.
1 #define TAMANHO 30
2 int valor[TAMANHO];
Sintaxe
identificador[indice]
onde:
11
Programação 2
2 int x;
3 x = 3;
4 valor[1] = 6.6;
5 valor[x] = 9.9
6 valor[x+2] = 10.0;
0 1 2 3 4 5 6 7 8 9
Viram como é fácil trabalhar com vetor? Em uma única linha, nós
criamos um conjunto de variáveis, do tamanho da nossa necessidade.
Posteriormente, acessamos cada uma destas variáveis utilizando o
nome do vetor e o índice da variável.
12
Programação 2
Sintaxe
Onde:
idade 12 30 57 25 18 15 13
0 1 2 3 4 5 6
13
Programação 2
vogal a e i o u
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
14
Programação 2
2 ou
3 int valor[3];
4 valor[0] = 7;
5 valor[1] = 4;
6 valor[2] = 20;
Vamos ver como tratar cada uma das situações? Quando nós
sabemos quantos elementos o usuário vai digitar, poderemos usar
uma estrutura de repetição como o for, que irá repetir a leitura dos
elementos, na quantidade definida. Vamos ver o Programa Completo
1.1 a seguir: o usuário precisa armazenar 5 elementos em um vetor
de inteiros, chamado valor.
15
Programação 2
1 main()
2 {
3 int valor[5];
4 int i;
8 scanf(“%d”,&valor[i]);
9 }
10 getche();
11 }
• Linha 5: printf para que o usuário saiba que será feito o cadastro
dos elementos no vetor.
16
Programação 2
• Linha 10: comando getche que faz com que a tela de execução
do programa fique aberta, e assim podemos ver o resultado do
programa.
17
Programação 2
i i+1 valor
0 1 10
0 1 2 3 4
10 15
1 2
0 1 2 3 4
2 3 10 15 9
0 1 2 3 4
10 15 9 6
3 4
0 1 2 3 4
4 5 10 15 9 6 12
0 1 2 3 4
18
Programação 2
1 main()
2 { int valor[5];
3 int q, continuar;
4 q=0;
6 do
8 scanf(“%d”,&valor[q]);
9 q++;
11 scanf(“%d”, &continuar);
13 }
• Linha 5: printf para que o usuário saiba que será feito o cadastro
19
Programação 2
20
Programação 2
q q+1 valor
12
0 1
0 1 2 3 4
12 15
1 2
0 1 2 3 4
2 3 12 15 18
0 1 2 3 4
21
Programação 2
1 main()
2 { int valor[5];
3 int q, continuar, i;
4 q=0;
6 do
8 scanf(“%d”,&valor[q]);
9 q++;
11 scanf(“%d”, &continuar);
15 printf(“ %d “,valor[i]);
16 getche();
17 }
22
Programação 2
23
Programação 2
1 main()
2 { int mat[10];
3 float nota[10];
4 int q, i, continuar;
6 soma = 0;
7 q=0;
8 do
9 { system(“cls”);
24
Programação 2
12 printf(“\nMatricula: “);
13 scanf(“%d”,&mat[q]);
14 printf(“\nNota: “);
15 scanf(“%f”,¬a[q]);
17 q++;
18 printf(“\n\nCadastrar outro(1-sim/2-nao)?
“);
19 scanf(“%d”, &continuar);
21 media = soma/q;
22 system(“cls”);
27 { if (nota[i]>media)
28 printf(“%d \n”,mat[i]);
29 }
31 getche();
32 }
25
Programação 2
26
Programação 2
Figura 1.13: Tela de Execução do Programa Completo 1.4 – Apresentação dos Resultados
27
Programação 2
Sintaxe
//corpo da função
Onde:
28
Programação 2
Sintaxe
nome_da_função(nome_do_vetor);
Onde:
Exemplo 1.6:
declaração e chamada de uma função que tem um vetor como parâmetro
2 {
3 //corpo da função
4 }
6 main()
8 float n;
9 ...
11 ...
12 }
29
Programação 2
A 1 4 7 2 9
0 1 2 3 4
B 3 5 11 4 8
0 1 2 3 4
Soma 4 9 18 6 17
0 1 2 3 4
V 1 4 7 2 9
0 1 2 3 4
30
Programação 2
A 1 4 7 2 12
0 1 2 3 4
B 3 5 11 4 15
0 1 2 3 4
Resultante 1 3 4 5 7 11 2 4 12 15
0 1 2 3 4 5 6 7 8 9
V 14 13 7 22 9
0 1 2 3 4
V 14 13 7 22 9
0 1 2 3 4
31
Programação 2
V 9 22 7 13 14
0 1 2 3 4
A 1 4 7 2 12
0 1 2 3 4
B 3 4 2 14 25
0 1 2 3 4
interseccao 4 2
0 1 2 3 4
A 1 4 7 2 12
0 1 2 3 4
B 3 4 2 14 25
0 1 2 3 4
Diferenca 1 7 12
0 1 2 3 4
32
Programação 2
A 1 4 7 2 12
0 1 2 3 4
B 3 4 2 14 25
0 1 2 3 4
União 1 4 7 2 12 3 14 25
0 1 2 3 4 5 6 7 8 9
V 1 4 7 1 2 1 4 25 3 7
0 1 2 3 4 5 6 7 8 9
Conheça Mais
33
Programação 2
Vamos Revisar?
34
Programação 2
Capítulo 2 – Armazenamento de
Dados em Registros
35
Programação 2
Boletim de Notas
Matricula...: 12345
Nome........: Michel
Disciplina..: Matemática
Média........: 10.0
Situação....: Aprovado
36
Programação 2
Sintaxe
} nome_do_tipo;
Onde:
Sintaxe
nome_do_tipo nome_do_registro;
Onde:
37
Programação 2
3 float media;
4 } Tipo_Aluno;
5 Tipo_Aluno aluno;
38
Programação 2
matricula
nome
disciplina
situacao
media
aluno
Sintaxe
nome_do_registro.campo
Onde:
39
Programação 2
1 aluno.matricula = 12345;
2 scanf(“%f”, &aluno.media);
3 gets(aluno.nome);
40
Programação 2
3 float media;
4 }Tipo_Aluno;
5 Tipo_Aluno alunos[50];
0 1 ... 48 49
41
Programação 2
Sintaxe
nome_do_vetor[indice].campo
Onde:
1 alunos[2].media = 7.5;
2 alunos[3].matricula = 12345;
3 gets(alunos[0].nome);
4 scanf(“%d”,&alunos[2].matricula);
42
Programação 2
Colégio Legal
Cadastro de Aluno
Matricula..:
Nome.......:
Serie(1-4):
Irmao na escola (1-sim/0-nao):
43
Programação 2
Colégio Legal
Relatório Geral
xx xxxxx x x xx.xx
xx xxxxx x x xx.xx
xx xxxxx x x xx.xx
xx xxxxx x x xx.xx
xx xxxxx x x xx.xx
44
Programação 2
1 #include <stdio.h>
2 main()
4 char nome[20];
5 float mens;
6 } Tipo_Aluno;
7 Tipo_Aluno alunos[20];
9 qa =0;
10 do
11 { system(“cls”);
12 printf(“Colegio Legal\n”);
13 printf(“\n\nCadastro de Alunos\n\n”);
14 printf(“\nMatricula.: “);
15 scanf(“%d”,&alunos[qa].mat);
16 printf(“\nNome......: “);
17 fflush(stdin);
18 gets(alunos[qa].nome);
19 printf(“\nSerie(1-4): “);
20 scanf(“%d”,&alunos[qa].serie);
21 printf(“\nIrmao na escola(1-sim/0-nao):
“);
22 scanf(“%d”,&alunos[qa].irmao);
23 switch(alunos[qa].serie)
24 { case 1: alunos[qa].mens = 110; break;
28 }
45
Programação 2
29 if (alunos[qa].irmao == 1)
30 alunos[qa].mens = alunos[qa].mens*0.8;
31 qa++;
33 scanf(“%d”,&resp);
35 system(“cls”);
36 printf(“Colegio Legal\n”);
37 printf(“\n\nRelatorio Geral\n”);
38 printf(“\n________________________________”);
40 printf(“\n________________________________”);
43 printf(“\n_______________________________”);
45 getche();
46 }
46
Programação 2
47
Programação 2
48
Programação 2
• Linha 38: printf para passar uma linha na tela. Esta linha vai
delimitar o cabeçalho da tabela.
49
Programação 2
50
Programação 2
• Linha 40: printf para passar uma linha na tela. Esta linha vai
delimitar o cabeçalho da tabela.
• Linha 41: for para visitar cada uma das posições do vetor e
apresentar os dados dos alunos. A variável de controle do for,
o i, vai variar de 0 até a ultima posição ocupada do vetor. A
variável que tem esta informação é o qa.
• Linha 42: este printf é que vai fazer a montagem das linhas
da tabela, apresentado os dados dos alunos que estão
armazenados no vetor de registro. Este printf também tem
macetes, pois está relacionado com o printf da linha 39. Vamos
lá! Lembram que fizemos a contagem para saber a largura
de cada coluna da tabela? Vamos precisar desta informação
agora.
51
Programação 2
linha 42.
• Linha 43: printf para passar uma linha na tela. Esta linha vai
fechar a tabela.
• Linha 44: printf que informa que o usuário deve teclar enter
para sair.
52
Programação 2
53
Programação 2
1 R$ 170 R$ 50
2 R$ 350 R$ 60
3 R$ 370 R$ 75
Total da Viagem:
dias*diáriahotel + dias*diariacarro(se o cliente for alugar carro)
Cadastro de Cliente
Codigo:
Nome:
Roteiro (1-Brasil, 2-EUA, 3-África):
Tipo de Quarto (1- Standard, 2-Luxo):
Alugar Carro (1-sim/0-nao)?
Quantidade de Dias:
Relatório Geral
xx xxxxx x x x xx xx.xx
xx xxxxx x x x xx xx.xx
xx xxxxx x x x xx xx.xx
54
Programação 2
1 R$ 2500
2 R$ 1700
Empresa Legal
Cadastro de Funcionario
Matricula:
Nome:
Cargo(1-Analista de Sistemas, 2- programador):
Sexo(1-mas/2-fem):
Anos de experiência:
Quantidade de filhos:
55
Programação 2
Empresa Legal
Listagem Geral
xx xxxxx x x xx x xxx.xx
xx xxxxx x x xx x xxx.xx
xx xxxxx x x xx x xxx.xx
xx xxxxx x x xx x xxx.xx
Dia 1.30
Noite 1.60
Fixo 1.25
Empresarial 1.10
56
Programação 2
Ligue Mais
Cadastro de Cliente
Código:
Nome:
Sexo(1-fem/2-mas):
Quantidade de Ligações:
Plano(1-Dia/2-Noite/3-Fixo/4-Empresarial):
Ligue Mais
Listagem Geral
xx xxxxx x xx x xxx.xx
xx xxxxx x xx x xxx.xx
xx xxxxx x xx x xxx.xx
xx xxxxx x xx x xxx.xx
Universidade Legal
Cadastro de aluno
Matricula:
Nome:
Nota 1:
Nota 2:
Nota 3:
Cadastraroutro (1-sim/0-nao)?
57
Programação 2
Universidade Legal
Relatório Geral
Ex: um pólo com 150 alunos, com 15 tutores, que tem laboratório
de informática, mas não tem laboratório de ciências: Verba = 100 x
150 + 500 x 15 + 17000 = 15000 + 7500 + 17000 = 39500.
58
Programação 2
Ministério da Educação
Cadastro de Polo
Codigo:
Cidade:
Quantidade de alunos:
Quantidade de tutores:
Tem lab. de informatica (1-sim/0-nao)?
Tem lab. de ciencias (1-sim/0-nao)?
Ministério da Educação
Listagem Geral
Conheça Mais
Vamos Revisar?
59
Programação 2
capítulo. Vale a pena dar uma lida para verificar como está o nosso
aprendizado. Observem o resumo a seguir:
60
Programação 2
Capítulo 3 – Armazenamento de
Dados em Arquivos
61
Programação 2
3.1.2 Ponteiros
62
Programação 2
Sintaxe
tipo *nome_do_ponteiro;
Onde:
1 FILE *p aluno;
2 FILE *p produto;
63
Programação 2
64
Programação 2
Sintaxe
ponteiro_arquivo = fopen(“nome_do_arquivo”,
“modo_de_abertura”);
Onde:
65
Programação 2
Modo Significado
4 if (pprofessor == NULL)
66
Programação 2
Sintaxe
fclose(ponteiro_arquivo);
Onde:
1 fclose(palunos);
2 fclose(pprofessores);
67
Programação 2
Sintaxe
ponteiro_arquivo);
Onde:
68
Programação 2
3 } TAluno
5 TAluno aluno;
6 FILE *paluno;
69
Programação 2
Agora que já sabemos como fazer para ler um registro que está
armazenado no arquivo, vamos aprender a gravar um registro no
arquivo.
70
Programação 2
Sintaxe
ponteiro_arquivo);
Onde:
71
Programação 2
3 } TAluno
5 TAluno aluno;
6 FILE *paluno;
Sintaxe
fseek(ponteiro_arquivo,numero_de_bytes, origem);
72
Programação 2
Onde:
Origem Significado
1 fseek(paluno, 0,SEEK_END);
73
Programação 2
Figura 3.6: Posição do leitor após a execução dos fseek do exemplo 3.6
Sintaxe
rewind(ponteiro_arquivo);
Onde:
1 rewind(paluno);
74
Programação 2
Sintaxe
int feof(ponteiro_arquivo);
Onde:
1 while (feof(paluno)==0)
Sintaxe
remove(“nome_do_arquivo”);
Onde:
75
Programação 2
1 remove(“alunos.bin”);
Sintaxe
rename(“nome_do_arquivo”, “novo_nome_do_arquivo”);
Onde:
1 rename(“alunos.bin”, “alunos_temp.bin”);
76
Programação 2
1 #include <stdio.h>
4 char nome[20];
5 float med;
6 } TAluno;
8 FILE *paluno;
10
11 void linha()
12 { int i;
14 printf(“_”);
15 }
16
77
Programação 2
17 void cabec()
18 { system(“cls”);
20 linha();
21 }
22
23 void abre_arquivo()
25 if (paluno == NULL)
27 }
78
Programação 2
79
Programação 2
28 void inserir()
29 { int resp;
30 do { cabec();
32 printf(“\nMatricula: “);
33 scanf(“%d”, &aluno_aux.mat);
34 printf(“\nNome.....: “);
35 fflush(stdin);
36 gets(aluno_aux.nome);
37 printf(“\nMedia....: “);
38 scanf(“%f”, &aluno_aux.med);
39 fseek(paluno, 0, SEEK_END);
40 fwrite(&aluno_aux, sizeof(TAluno), 1,
paluno);
43 scanf(“%d”, &resp);
45 }
80
Programação 2
novo cadastro.
• Linha 31: printf que informa o que esta tela faz – cadastro de
alunos.
• Linha 41: printf para informar que o aluno foi cadastrado com
sucesso.
81
Programação 2
47 { int p;
48 p = 0;
49 rewind(paluno);
51 while (feof(paluno)==0)
52 { if (aluno_aux.mat == matp)
53 return p;
54 else
55 { fread(&aluno_aux, sizeof(TAluno), 1,
paluno);
56 p++;
82
Programação 2
57 }
58 }
59 return -1;
60 }
61
65 printf(“\n\n”);
66 linha();
68 linha();
70 aluno_aux.nome, aluno_aux.med);
71 linha();
72 }
83
Programação 2
84
Programação 2
73 void consultar()
75 do{ cabec();
76 printf(“\n\nConsultar Aluno\n\n\n”);
78 scanf(“%d”, &matcon);
79 posicao = procura(matcon);
80 if (posicao == -1)
82 else
83 mostre(posicao);
85 scanf(“%d”, &resp);
87 }
• Linha 76: printf que informa o que esta tela faz – consultar
aluno.
85
Programação 2
86
Programação 2
88 void remover()
90 aluno_nulo.mat = 0;
91 aluno_nulo.med = 0;
92 do{ cabec();
93 printf(“\n\nRemover aluno\n\n\n”);
94 printf(“Matricula: “);
95 scanf(“%d”, &matrem);
96 posicao = procura(matrem);
97 if (posicao == -1)
99 else
100 { mostre(posicao);
103 if (conf == 1)
104 { f s e e k ( p a l u n o , p o s i c a o * s i z e o f
(TAluno),SEEK_SET);
105 f w r i t e ( & a l u n o _ n u l o ,
sizeof(TAluno), 1, paluno);
107 }
87
Programação 2
108 else
110 }
114 }
• Linha 93: printf que informa o que esta tela faz – remover
aluno.
88
Programação 2
89
Programação 2
117 do { cabec();
124 else
125 { mostre(posicao);
128 if (conf == 1)
132 fseek(paluno,posicao*sizeof(TAluno),
SEEK_SET);
133 fwrite(&aluno_aux,sizeof(TAluno), 1,
paluno);
134 mostre(posicao);
136 }
137 else
90
Programação 2
139 }
143 }
• Linha 118: printf que informa o que esta tela faz – alterar média
do aluno.
91
Programação 2
92
Programação 2
145 { cabec();
147 linha();
149 linha();
150 rewind(paluno);
153 { if (aluno_aux.mat != 0)
157 }
158 linha();
160 getche();
161 }
• Linha 146: printf que informa o que esta tela faz – listagem
geral.
93
Programação 2
94
Programação 2
162 main()
164 abre_arquivo();
173 linha();
176 switch(op)
185 break;
95
Programação 2
186 }
188 }
96
Programação 2
Tela de Menu
Shopping Center
Opções:
1 .Cadastrar loja
2. Consultar loja
3. Listagem de todas as lojas
0. Sair
Cadastro
Shopping Center
Cadastro de Loja
Código:
Nome:
Área:
Tipo(1-Confecções, 2-Alimentação, 3-Livros, 4- Serviços):
Consulta
Shopping Center
Consultar Loja
97
Programação 2
Relatório Geral
Shopping Center
Listagem Geral
1 R$ 50
2 R$ 65
3 R$ 80
4 R$ 95
Tela Principal
Opções:
1- Cadastrar roteiro
2- Consultar roteiro
3- Listagem de todos os roteiros
4- Simular viagem
0- Sair
98
Programação 2
Tela de Cadastro
Cadastrar Roteiro
Código:
País(1-Brasil, 2-Espanha, -3-Italia):
Cidade:
Diária de Hotel: R$
Diária Aluguel de Carro: R$
Inserir outro(1-sim,2-não)?
Consultar Roteiro
99
Programação 2
Simular Viagem
Código do roteiro:
Quantidade de dias:
Alugar carro(1-sim, 2-não)?
Observações:
Conheça Mais
100
Programação 2
Vamos revisar?
Vamos fazer uma revisão do assunto que foi visto neste capítulo,
lendo o resumo a seguir:
101
Programação 2
Considerações Finais
102
Programação 2
Referências
103
Programação 2
Conhecendo a Autora
104