Escolar Documentos
Profissional Documentos
Cultura Documentos
kesedejulio@gmail.com
Apostila de
Linguagem
Linguagem de Programação C 2
Apêndices A – Algoritmos e Fluxogramas......................................................................75
Apêndices B – Resumo de comandos e funções..............................................................82
Apêndices C – Acesso a Portas de Comunicação...........................................................83
Bibliografia........................................................................................................................88
Linguagem de Programação C 3
1 - Introdução
1.1Recomendações ao Aluno
http://kent.dl.sourceforge.net/sourceforge/dev-cpp/devcpp-4.9.9.2_setup.exe
Linguagem de Programação C 4
indicará a linha do erro através de um destaque colorido. Na aba
“Compilador” (parte inferior do IDE) aparecerão a linha e a descrição do
erro ocorrido. Tente corrigi-lo e compile novamente. O programa só
poderá ser executado se todos os erros de compilação forem retirados
do programa. Após a compilação sem erros, você poderá executar o
programa. Clique em “Executar/Executar”. Aparecerá um console
(janelinha preta) com a execução do programa em andamento.
Após conferir que o programa está correto, ou seja, fez
exatamente o que você pediu que fizesse, você poderá abrir uma nova
aba (Arquivo/Novo/Arquivo fonte) para digitar o próximo exemplo.
Segue abaixo 3 exemplos para serem digitados, compilados
e executados. Nossos exemplos sempre seguirão este padrão: um
enunciado dizendo o que deve ser feito, uma coluna com o número da
linha (ou do bloco) do código, outra coluna para o código que deve ser
digitado e outra com a descrição do que ele faz. Exercite digitando os
exemplos abaixo.
Digite o Exemplo 1.1:- Faça um programa que escreva seu nome na tela.
1 #include <stdio.h> Permite o uso das funções printf().Não
precisam ser incluídos para arquivos .c.
2 #include <conio.h> Permite o uso da função getch(). Não
precisam ser incluídos para arquivos .c
3 int main(){ Abre a função principal do programa
4 printf("Kesede R Julio"); Imprime a mensagem na tela
5 getch(); Pára a execução do programa
6 } Fecha a função principal
Digite o Exemplo 1.2:- Faça um programa que mostre uma mensagem de Olá personalizada.
Permita que o usuário digite seu nome.
1 #include <stdio.h> Permite o uso das funções printf() e
scanf().Não precisam ser incluídos para
arquivos .c.
2 #include <conio.h> Permite o uso da função conio(). Não
precisam ser incluídos para arquivos .c
3 int main(){ Abre a função principal do programa
char nome[30]; Reserva um espaço na memória para
guardar até 29 caracteres.
4 scanf(“%s”,nome); Recebe o nome do usuário e guarda na
variável nome
5 printf("Ola, %s“, nome); Imprime a mensagem na tela
substituindo o formato (%s) pelo
conteúdo da variável nome
Linguagem de Programação C 5
6 getch(); Pára a execução do programa
7 } Fecha a função principal
Digite o Exemplo 1.3:- Um empregado da empresa Alfa tem dois vencimentos: salário e
gratificação. Faça um programa que receba os vencimentos do empregado, e mostre o salário
que ele irá receber.
1 #include <stdio.h> Permite o uso das funções printf() e
scanf().Não precisam ser incluídos para
arquivos .c.
2 #include <conio.h> Permite o uso da função conio(). Não
precisam ser incluídos para arquivos .c
3 int main(){ Abre a função principal do programa
4 float salario; Define espaço de memória chamado
salario
5 float grat; Define espaço de memória chamado grat
6 float soma; Define espaço de memória chamado
soma
7 printf(“Digite o salario: "); Imprime uma mensagem na tela
8 scanf(“%f”,&salario); Recebe o que o usuário digitou e guarda
em salario
9 printf("\nDigite a gratificacao: "); Imprime uma mensagem na tela
10 scanf(“%f”,&grat); Recebe o que o usuário digitou e guarda
em salario
11 soma = salario + grat; Soma o conteúdo de salário e grat e
guarda em soma
12 printf("\n\nO resultado eh: %f", soma); Imprime a mensagem na tela
substituindo o formato %f pelo conteúdo
de soma
13 getch(); Pára a execução do programa
14 } Fecha a função principal
Linguagem de Programação C 6
<tipo de retorno> <nome da função> (<argumento>,...){
<comandos e funções>
}
Onde:
Tipo de retorno: é o tipo da informação que uma função
pode retornar. Em nosso exemplo o retorno é “int”. Voce poderá
encontrar o tipo de retorno da main() como “void”.
Nome da função: é o que identificará a função. Se houver
apenas uma função (como no exemplo 1.1) no programa, esta deverá
se chamar, obrigatoriamente, “main” (principal).
Argumentos: são entradas de informações recebidas por
outras funções. No exemplo 1.1, não há entrada de argumentos.
Comandos e funções: é a própria lógica do programa.
Comandos, chamada de funções pré-definidas, chamada de funções
escritas pelo programador, colocadas em uma seqüência lógica para ser
obedecida pelo compilador.
Onde:
“formatação da saída” é tudo que queremos escrever na tela
para o usuário. Quando quisermos mostrar conteúdo de variáveis no
meio do texto, colocamos os formatos dos tipos (vide tabela abaixo),
que serão substituídos pelas variáveis.
“variável” é o nome da variável que queremos mostrar ao
usuário. Seu conteúdo será substituído nos formatos de tipo colocados
na formatação da saída.
Exemplo:
printf(“Resultado da soma: %d.”, soma);
Caso a variável “soma” seja 10, a mensagem mostrada para
Linguagem de Programação C 7
o usuário será: “Resultado da soma: 10.” (sem aspas).
Onde:
“formatação da entrada” é apenas o formato do tipo (vide
tabela abaixo) da variável onde será alocada a informação digitada pelo
usuário.
“endereço da variável” é o endereço de onde será alocada a
informação. Para informar o endereço de uma variável, basta colocar o
caractere “&” antes do nome da variável.
Exemplo:
scanf(“%f”, &valor);
Formato Tipo
%d, %i Inteiro
%f Float
%c Caractere
%lf Double
%s Cadeia de caracteres (string)
Linguagem de Programação C 8
conjunto dos números inteiros – Ex.: 5, 37,1005
char: 1 byte com sinal – qualquer caractere – Ex.: 'a', 'F', ';'
Aritméticos
Símbolo Descrição
+ Soma
- Subtração
* Multiplicação
/ Divisão
% Resto da divisão
++ Incremento
-- Decremento
Lógicos
== Igualdade
!= Diferente
< Menor
<= Menor ou igual
> Maior
>= Maior ou igual
Condicionais
&& E
|| Ou
Bit-a-bit
Linguagem de Programação C 9
& E
| Ou
Linguagem de Programação C 10
1 Dolar 1,9
1 Euro 3,1
d = x 2 −x 12 y 2− y 1 2
Linguagem de Programação C 12
2 - Comandos de Decisão
2.1Comando if/else
Digite o Exemplo 2.1:- Entre com o valor da nota de uma determinada disciplina de um aluno e
mostre a mensagem de “Aprovado”, se sua nota for maior ou igual a 6, ou “Reprovado”, se sua
nota for menor que 6.
1 #include <stdio.h> Permite o uso das funções printf() e scanf()
Linguagem de Programação C 13
5 scanf(“%f”, ¬a); Recebe a nota do usuário
8 } Fecha o if
11 } Fecha else
8 } Fecha o if
11 } Fecha else
} Fecha else
Linguagem de Programação C 14
“Aprovado” na tela, caso contrário, testa se a nota é maior que 4, caso
seja mostra “Exame” na tela, caso contrário, mostra “Reprovado”.
2.2Switch
Sintaxe simplificada:
Linguagem de Programação C 15
Digite o exemplo 2.1: Faça um programa que permite que o usuário entre com o código do
produto e o programa mostre o nome deste produto. Os produtos são: cod. 1 – cd, cod. 2 – livro,
cod. 3 – revista, cod. 4 – jornal.
8 case 1: Verifica se o código é igual a 1
22 } Fecha switch()
2.3Exercícios
Switch
Linguagem de Programação C 16
designado para fazer um programa que agende os serviços em
seus respectivos horários. O programa deve receber o numero do
serviço e mostrar o seu horário de agendamento. Use o comando
switch, com mensagem de erro caso o usuário digite um numero
invalido. Faça o algoritmo e o fluxograma antes do programa.
If-else
IMC Situação
Abaixo de 20 (exclusive) Abaixo do peso normal
Entre 20 e 24,9 (inclusive) Peso normal
Entre 25 e 35 (inclusive) Acima do peso normal
Acima de 35 (exclusive) Obeso
Linguagem de Programação C 17
Faça um programa que receba a altura e o peso do usuário. De
acordo com a fórmula do IMC, mostre a situação do usuário.
Linguagem de Programação C 18
3 - Comandos de Repetição
3.1Comando while
Sintaxe simplificada:
while (<condição>){
<comandos e funções>
}
Linguagem de Programação C 19
verdade, a variável é mostrada na tela. Ao comando “i=i+1”
chamamos de contador. O contador é um conceito importante na
programação, pois através dele podemos alterar o valor de uma variável
através de um “passo” determinado. Podemos ter contadores que
somem com passo de 1 em 1 (como no caso do exemplo), de 2 em 2,
de 5 em 5, ou seja, como nos convier. Uma variação deste conceito é o
acumulador. A diferença é que, ao invés de contarmos (acumularmos)
constantes numéricas (1, 2, 3 etc), acumulamos variáveis, como:
salários, notas, idades, prestações etc.. O exemplo 3.2 mostra o uso de
um contador (cont) e de um acumulador (somaid).
Digite o Exemplo 3.2:- Faça um programa que receba a idade de 10 alunos de uma academia e
mostre a média das idades.
1 #include <stdio.h> Permite o uso das funções printf() e
scanf()
2 #include <conio.h> Permite o uso da função getch()
3 int main(){ Abre a função principal do programa
4 int idade, cont=1, somaid=0; Define espaços de memória inteiros
para guardar as idades, o contador
(cont) e o acumulador (somaid). O
contador e acumulador devem ser
inicializados.
5 float media; Define espaço de memória float para
guardar a media
6 printf(“Digite as idades\n”); Imprime mensagem na tela
7 while (cont<=10){ Verifica se o contador é menor ou
igual a 10
8 scanf(“%i”, &idade); Recebe a idade do usuário e guarda
seu valor na variável “idade”
9 somaid=somaid+idade; (acumulador) Soma a idade ao
acumulador (que vale zero da
primeira vez) e guarda o resultado
no próprio acumulador. Na próxima
iteração o acumulador já estará
atualizado.
10 cont=cont+1; (contador) Soma 1 ao contador
(que vale 1 da primeira vez) e
guarda o resultado no próprio
contador. Na próxima iteração o
contador já estará atualizado.
11 } Fecha o while
Linguagem de Programação C 20
Digite o Exemplo 3.2:- Faça um programa que receba a idade de 10 alunos de uma academia e
mostre a média das idades.
12 media=somaid/10; Calcula a media.
13 printf(“A media eh %f”,media); Mostra a media na tela
14 getch(); Páara a execução do programa
15 } Fecha a função principal
3.2Comando do-while
Digite o Exemplo 3.3:- Faça um programa que receba o nome, a quantidade de horas
trabalhadas e o valor da hora de vários funcionários de uma empresa. Mostre, para cada
funcionário, o seu salário. Pergunte ao usuário se ele deseja continuar digitando dados de mais
funcionários.
1 #include <stdio.h> Permite o uso das funções printf() e
scanf()
2 #include <conio.h> Permite o uso da função getch()
3 int main(){ Abre a função principal do programa
4 char nome[30], resp; Declara a variável nome do tipo string
de 30 caracteres e a variável resp com
1 caractere
5 float horas, valor_h, sal; Declara variaveis do tipo float
6 do{ Abre o do-while
7 printf(“Nome:”); Imprime mensagem (rotulo do que
será digitado)
8 fflush(stdin); Limpa buffer do teclado
9 gets(nome); Recebe string toda do usuário
10 printf(“Horas trabalhadas:”); Imprime mensagem (rotulo do que
será digitado)
11 scanf(“%f”, &horas); Recebe horas trabalhadas do usuário
12 printf(“Valor hora:”); Imprime mensagem (rotulo do que
será digitado)
Linguagem de Programação C 21
13 scanf(“%f”,&valor_h); Recebe valor das horas trabalhadas do
usuário
14 sal=horas * valor_h; Multiplica quant de horas pelo valor e
guarda na variavel sal
15 printf(“Salario : %.2f\n”, sal); Imprime a variavel sal
16 printf(“Deseja continuar <s/n>?”); Pergunta ao usuário se deseja
continuar
17 fflush(stdin); Limpa buffer do teclado
18 resp=toupper(getchar()); Recebe a resposta do usuário e
converte sua resposta para maúscula
19 }while (resp=='S'); Verifica se a resposta é igual a S, caso
seja, volta no “do” para executar os
comandos novamente
20 } Fecha a função principal
3.3Teste de mesa
Este tipo de teste é muito útil quando queremos verificar se
a lógica do nosso programa está correta. A compilação de um programa
verifica apenas erros de sintaxe, o que não significa que o nosso
programa funcione conforme planejamos que funcionasse. Bem, um
teste de mesa é tarefa simples, porém requer cuidados. Você assumirá
o papel do compilador quando da execução do programa, por isso não
podemos perder de vista a linha do programa que está sendo executada
em cada momento.
Começamos um teste de mesa montando uma única tabela
contendo uma coluna para cada variável declarada e mais uma coluna
para o que for escrito na tela, de acordo com o modelo abaixo. Os
valores das variáveis estarão sendo colocadas na tabela a medida que o
programa for requerendo. Assim como também, as mensagens que
serão impressas na tela. Sempre que colocamos um novo valor em uma
variável devemos riscar o anterior, dizendo a nós mesmos que o valor
Linguagem de Programação C 22
mudou. Nunca apague os valores apenas risque-os.
Teste de mesa
Memória Tela
<var. 1> <var. 2> <var. 3> <var. 4>
<val. 1> <val. 4> <val. 5> <val. 7> <mensagem 1>
<val. 2> <val. 6> <val. 8> <mensagem 2>
<val. 3>
Linguagem de Programação C 24
Teste de mesa
Memória tela Teste de mesa
Linguagem de Programação C 25
20 0 1 A soma das idades eh
25 20 2 126
23 45 3
30 68 4
28 98 5
126 6
3.4Exercícios
Valor da Desconto
compra (R$) (%)
Até 500,00 5
Linguagem de Programação C 26
De 501,00 a 1000,00 10
Acima de 1000,00 12
5
3.4.11Calcule a seguinte expressão: x
i 1
i
Linguagem de Programação C 27
3.4.16Uma das primeiras aplicações de computadores foi o cálculo
de trajetória de projéteis. Se um projétil é atirado com uma
velocidade inicial V (m/s) a um ângulo de inclinação θ (radianos),
sua posição no plano vertical (x,y) no tempo t (segundos) é
calculada pelas fórmulas:
x=Vcosθ t
1
y=Vsenθ t− g t 2
2
π m
Onde: 0θ e g =9.8 2
2 s
Faça um programa que, dados os parâmetros θ e V, liste as
coordenadas x e y em intervalos de 0.01 segundos para um tiro
em particular, terminando a listagem quando o projétil atingir o
solo.
Linguagem de Programação C 28
4 - Vetor
int vet[5];
10 15 7 4 34 Elementos do vetor
0 1 2 3 4 Índices do vetor
Figura 4.1 - Alocação de elementos em um vetor de 5 posições
int a[10];
Linguagem de Programação C 29
melhor as variáveis de controle dos índices.
4.1Comando For
Sintaxe:
for (<inicialização>;<condição>;<incremento>){
<comando>
}
for (i=0;i<10;i++){
a[i]=0;
}
Digite o Exemplo 4.1:- Faça um programa que receba as notas dos alunos de uma classe de 30
alunos e calcule a média da classe. Estas notas devem ser carregadas em um vetor.
1 /*-------------------------------------------------------- O “/*” e o “*/”, abre e fecha um
Descrição: Calcula media das notas de 30 alunos bloco de comentários. Estes
de uma classe
comentários ajudam muito em
Data : Agosto/2009
Autor : Kesede R Julio seus estudos. Faça isso em
---------------------------------------------------------*/ todos os seus programas.
2 #include <stdio.h> Permite inclusão de funções de
i/o
3 #include <conio.h> Permite inclusão da função
getch()
4 int main(){ Abre função principal
5 float notas[30], media, soma=0; Declara o vetor notas com 30
Linguagem de Programação C 30
posições do tipo float, assim
como media e soma
(inicializada com 0)
6 int i; Declara variável i
7 for (i=0;i<30;i++){ Abre comando for. Inicializa i
com 0, verifica se i é menor que
30, na primeira vez. Nas outras
vezes, soma 1 em i e torna a
verificar se i é menor que 30
8 printf("Entre com a %i a. nota", i+1); Mostra uma mensagem na tela
9 scanf(“%f”,¬as[i]); Recebe valor digitado pelo
usuário e guarda na iésima
posição de “notas”. Da primeira
vez i é igual a zero.
10 soma=soma+notas[i]; (acumulador) Acumula a nota
recebida na variável “soma”
(inicializada com zero) .
11 } Fecha o comando for, fazendo o
programa voltar na linha 7
12 media= soma/i; Divide “soma” por “i” (sai do
looping valendo 30) e guarda o
resultado em “media”
13 printf("A media da classe eh: %.1f", media); Imprime o valor de “media”
14 getch(); Pára a execução do programa
15 } Fecha a função principal
4.2Exercícios
Linguagem de Programação C 31
4.2.4Faça um programa que carregue um vetor de inteiros,
permitindo que o usuário defina a quantidade de elementos a
serem carregados. O usuário também deve digitar o valor de um
elemento o qual deseja saber quantos destes elementos existem
no vetor.
DP =
∑ x i −x 2
n−1
N −1
S= ∑ x ii 2
i=0
Linguagem de Programação C 32
4.2.9Cadastre em um vetor, 50 números de cheques que foram
recebidos por uma loja em um dia de trabalho. Permita que o
usuário faça uma busca neste vetor, afim de verificar se um
determinado número de cheque foi ou não cadastrado. Dê
mensagem ao usuário mostrando se o número consta ou não no
cadastro de cheques.
Linguagem de Programação C 33
4.2.12 Considere um sistema de sensoriamento de aquecimento
de telhas em um determinado dia (24 horas). Duas telhas são
expostas ao sol com sensores sobre elas, uma com uma tinta
especial (telha 1) e outra não (telha 2 ). A cada 15 minutos o
sensor capta (usuário digita) a temperatura das telhas as quais
são registradas em dois vetores distintos (TempTelha1 e
TempTelha2). Mostre qual das telhas teve menor aquecimento
médio durante todo o dia.
Linguagem de Programação C 34
elevador ultrapassar sua carga máxima, é mostrado em um
monitor um aviso de “Peso Excedido”. Faça um programa que
execute a simulação de pessoas entrando e saindo do elevador.
Os valores devem ser digitados pelo usuário.
Linguagem de Programação C 35
5 - String
char nome[10];
gets(nome);
Digite o Exemplo 5.1:- Faça um programa que atribua o conteúdo de uma string para outra
Linguagem de Programação C 36
string e mostre-a na tela.
1 #include <stdio.h> Permite inclusão de funções de i/o
2 #include <string.h> Permite inclusão de funções para manipulação de
string
3 #include <conio.h> Permite inclusão da função getch()
4 int main(){ Abre função principal
5 char string[10]; Declara variavel “string” de 10 posições
6 char str1[10] = "abcdefghi"; Declara variável “str1” de 10 posições e inicializa
com “abcdefghi”
7 strcpy(string, str1); Copia conteúdo de “str1” para “string”
8 printf(“%s”, string); Imprime o conteúdo de “string”
9 getch(); Pára a execução do programa
10 } Fecha função principal
Digite o Exemplo 5.2:- Faça um programa que compare o conteúdo de strings e dê mensagens
indicando o resultado da comparação.
1 #include <stdio.h> Permite inclusão de funções de i/o
2 #include <string.h> Permite inclusão de funções para
manipulação de string
3 #include <conio.h> Permite inclusão da função getch()
4 int main(){ Abre função principal
5 char buf1[4] = "aaa", buf2[4] = "bbb", Declara e inicializa variáveis
buf3[4] = "ccc";
6 int ptr; Declara variável “ptr”
7 ptr = strcmp(buf2, buf1); Compara conteúdo de “buf2” com
conteúdo de “buf1”. Atribui para “ptr” 0,
1 ou -1,caso sejam iguais, buf2 maior que
buf1 ou buf2 menor que buf1,
respectivamente.
8 if (ptr > 0){ Verifica se “ptr” é maior que 0 (buf2
maior que buf1)
9 printf("buffer 2 eh maior que Caso seja, mostra mensagem
buffer 1\n");
10 } Fecha if
11 else{ Abre else
12 if (ptr == 0){ Verifica se “ptr” é igual a 0 (buf2 igual
buf1)
13 printf("buffer 2 eh igual ao Caso seja, mostra mensagem
buffer 1\n");
14 } Fecha if
Linguagem de Programação C 37
15 else{ Abre else
16 printf("buffer 2 eh menor que o Mostra mensagem, pois se entrou aqui é
buffer 1\n");
porque negou as duas condiões acima
(com certeza buf2 é menor que buf1)
17 } Fecha else
18 } Fecha else
19 ptr = strcmp(buf2, buf3); Compara conteúdo de “buf2” com
conteúdo de “buf3”. Atribui para “ptr” 0,
1 ou -1,caso sejam iguais, buf2 maior que
buf1 ou buf2 menor que buf1,
respectivamente.
20 if (ptr > 0){ Verifica se “ptr” é maior que 0 (buf2
maior que buf3)
21 printf("buffer 2 eh maior que Caso seja, mostra mensagem
buffer 3\n");
22 } Fecha if
23 else{ Abre else
24 if (ptr == 0){ Verifica se “ptr” é igual a 0 (buf2 igual
buf3)
25 printf("buffer 2 eh igual ao Caso seja, mostra mensagem
buffer 3\n");
26 } Fecha if
27 else{ Abre else
28 printf("buffer 2 eh menor que o Mostra mensagem, pois se entrou aqui é
buffer 3\n");
porque negou as duas condiões acima
(com certeza buf2 é menor que buf3)
29 } Fecha else
30 } Fecha else
31 getch(); Pará a execução do programa
32 } Fecha função principal
Digite o Exemplo 5.3- Faça um programa que mostre a quantidade de caracteres de uma string.
1 #include <stdio.h> Permite inclusão de funções de i/o
2 #include <string.h> Permite inclusão de funções para
manipulação de string
3 #include <conio.h> Permite inclusão da função getch()
4 #include <stdio.h> Permite inclusão de funções de i/o
5 #include <string.h> Permite inclusão de funções para
manipulação de string
6 int main(){ Abre função principal
Linguagem de Programação C 38
7 char string[25] = "Kesede Rodrigues Julio"; Declara e inicializa variavel“string”
de 25 posições
8 printf(“%d”,strlen(string)); Strlen() retorna a quantidade de
caracteres que a variável string
contém. O resultado é mostrado na
tela
9 getch(); Pára a execução do programa
10 } Fecha função principal
Digite o Exemplo 5.4:- Faça um programa que concatene duas strings e mostre o resultado da
concatenação na tela.
1 #include <stdio.h> Permite inclusão de funções de i/o
2 #include <string.h> Permite inclusão de funções para
manipulação de string
3 #include <conio.h> Permite inclusão da função getch()
4 #include <string.h> Permite inclusão de funções para
manipulação de strings
5 #include <stdio.h> Permite inclusão de funções de i/o
6 int main(){ Abre função principal
7 char destino[25]; Declara e inicializa variavel “destino” de
25 posições
8 char espaco[2] = " ", sobrenome[10] = Declara variáveis strings
"Rodrigues", nome[10] = "Kesede";
9 strcpy(destino, nome); Copia nome para destino
10 strcat(destino, espaco); Concatena (junta) espaço com destino
11 strcat(destino, sobrenome); Concatena (junta) sobrenome com
destino
12 printf(“%s”, destino); Imprime destino
13 getch(); Pará a execução do programa
14 } Fecha função principal
5.1Exercícios
Linguagem de Programação C 39
5.1.3 Um programa de criptografia codifica as vogais a, e, i, o, u
como 1, 2 ,3, 4, 5, respectivamente. Faça um programa que
receba uma frase codificada do usuário e mostre-a decodificada.
Linguagem de Programação C 41
6 - Matriz
a[3][3];
0 1 2
0 10 20 43
1 27 8 78
2 82 3 7
Figura 6.1 - Alocação de elementos em uma matriz 3x3.
a[1][2] = 78;
for (i=0;i<10;i++){
for (j=0;j<10;j++){
a[i][j] = 0;
}
}
Linguagem de Programação C 42
Digite o exemplo 6.1: Faça um programa que carregue, a partir do usuário, uma matriz 10x10
representando o centro de uma cidade. Cada índice, contém o número de acidentes anual
ocorridos em cada cruzamento. O programa deve mostrar a esquina (linha e coluna) que ocorreu
o maior número de acidentes.
1 #include <stdio.h> Include arquivo de
cabeçalho
2 int main(){ Abre função principal
3 int ac[10][10], i_maior, j_maior, i, j, maior, tot=0; Declara variáveis.
4 for(i=0; i<10; i++){ Carrega a matriz a partir
for(j=0; j<10;j++){
scanf(“%i”, &ac[i][j]); do usuário
}
}
5 maior=ac[0][0]; Incializa a variavel auxiliar
for(i=0; i<10; i++){
for(j=0; j<10;j++){ “maior” com o primeiro
if(ac[i][j] > maior){ elemento da matriz. Em
i_maior=i;
j_maior=j; seguida, percorre a matriz
maior=ac[i][j]; verificando se existe algum
}
} elemento maior que o
} primeiro, guardado na
printf(“A rua %i esquina com %i teve %i acidentes,
sendo a esquina com maior nr de acidentes do centro.”, variavel “maior”. Caso
i_maior,j_maior, maior);
exista, atualiza “maior” e
getch();
guarda os índices (esquina)
deste elemento. Ao final,
imprime e pára o
programa.
6 } Fecha main()
6.1Exercícios
Linguagem de Programação C 43
resultados. Como exemplo, considere a matriz 4 x 2 a seguir. A
última linha conterá o somatório das linhas anteriores. Ex.:
0 1
0 4 2
1 5 9
2 8 20
3 17 31
d ( x 2 x1)2 ( y 2 y1)2
O valor de n será dado pelo usuário.
Linguagem de Programação C 45
7 - Estruturas Heterogêneas
struct jogador{
char nome[40];
int scoreMensal;
int scoreDiario;
};
gets(jog1.nome);
jog1.scoreMensal=2500;
jog1.scoreDiario=150;
gets(jog2.nome);
jog2.scoreMensal=3400;
jog2.scoreDiario=100;
Note que temos que usar o “.” (ponto) para separar o nome
da variável estrutura (variável declarada do tipo estrutura) da variável
membro (variáveis internas).
Como uma estrutura funciona como um tipo, podemos
declarar vetores e até matrizes de estruturas. Por exemplo, se
tivéssemos 10 ou 100 jogadores, não seria prático declararmos uma
variável para cada jogador, assim poderíamos declarar uma variável
vetor do tipo estrutura. Ex.:
Linguagem de Programação C 46
jogador jog[100];
for (c=0;c<100;c++){
gets(jog[c].nome);
}
Digite o exemplo 7.1: Faça um programa que carregue, a partir do usuário, os dados geográficos
das cidades do Brasil. Inclua estas informações em um vetor de estrutura. Os dados são: nome
da cidade, x e y (a origem 0,0 deste sistema é Brasília). Após a inclusão destes dados, o
programa deve permitir ao usuário a digitação de um cidade qualquer, sua referência x e y, e listar
a distância desta cidade em relação a cada cidade cadastrada.
1 #include <stdio.h> Include arquivos de
#include <stdlib.h>
#include <conio.h> cabeçalho
#include <ctype.h>
#include <math.h>
2 int main(){ Abre função principal
3 typedef struct DadosGeo{ Declara uma struct como
char nome[50];
int x, y; tipo contendo 3
}; informações: nome, x, y
int i=0, xRef, yRef, qtdcid; Declara variáveis, inclusive
DadosGeo cidades[1000];
char nomeRef[50], resp; o vetor “cidades” do tipo
float dist; DadosGeo
Linguagem de Programação C 47
4 do{ Carrega o vetor, a partir do
system("cls");
printf("Nome: "); usuário
fflush(stdin);
gets(cidades[i].nome);
printf("\nPosicao X: ");
scanf("%i",&cidades[i].x);
printf("\nPosicao Y: ");
scanf("%i",&cidades[i].y);
i++;
printf("Existem mais cidades? <S/N> ");
fflush(stdin);
resp=toupper(getch());
}while (resp=='S');
5 qtdcid=i; Guarda a quantidade de
cidades digitadas pelo
usuário, para usar no
controle do FOR.
6 printf("\nEntre com o nome da cidade referencia: "); Recebe do usuário os
gets(nomeRef);
printf("\nPosicao X: "); dados da cidade que será
scanf("%i",&xRef); referência para o cálculo
printf("\nPosicao Y: ");
scanf("%i",&yRef); das distâncias
7.1 Exercícios
Linguagem de Programação C 48
8 - Funções
Onde:
tipo de retorno: pode ser void, float, int, char
nome da função: nome que será usado ao chamarmos a
função para executá-la.
parâmetros: variáveis que são recebidas de uma outra
função.
declaração de variáveis: onde, geralmente, criam-se as
variáveis (alocação de espaço na memória)
<comandos e chamadas de funções pré-definidas ou não>:
onde a lógica é codificada
}: fecha a função
Digite o Exemplo 8.1: Faça um função que receba dois valores inteiros do usuário, some-os e
mostre o resultado para o usuário.
1 void soma2(){ Abre a função soma2
4 scanf(“%i”,&val2); “val2”
Linguagem de Programação C 49
6 printf(“%i”,soma); Imprime “soma”
Digite o Exemplo 8.1 (continuação): Faça a função main() para chamar a executar de soma2()
1 int main(){ Abre a função principal
Digite o Exemplo 8.2: Faça um programa que recebe dois valores a partir do usuário, some-os
e mostre o resultado na tela. Os valores devem ser recebidos como parâmetro em uma função
que some-os e mostre o resultado.
1 #include <stdio.h> Permite o uso da função printf()
2 #include <conio.h> Permite o uso da função getch()
3 void soma2(int v1, int v2){ Abre a função soma2() e recebe os valores de
val1 e val2 em v1 e v2, respectivamente. A
quantidade de valores enviados deve ser a
quantidade de variáveis aqui declaradas. A
atribuição é realização da esquerda para direita.
4 int soma; Declara variável local “soma”
5 soma=v1+v2; Soma v1 e v2 e guarda resultado em soma
6 printf(“%i”,soma); Imprime a variável soma na tela
7 getch(); Pára o programa
Linguagem de Programação C 50
8 } Fecha função soma2()
9 int main(){ Abre função principal
10 int val1, val2; Declara variáveis val1 2 val2 como inteiros
11 scanf(“%i”,&val1); Recebe val1 do usuário
12 scanf(“%i”,&val2); Recebe val2 do usuário
13 soma2(val1,val2); Chama a função soma2() para execução,
enviando os valores das variáveis val1 e val2.
14 } Fecha a função soma2()
Quando precisamos retornar um valor a partir de uma função, podemos usar o comando
return e declarar o tipo do valor retornado antes do nome da função (ao invés de void).
Digite o Exemplo 8.3: Faça um programa que recebe dois valores a partir do usuário, some-os
e mostre o resultado na tela. A soma deve ser feita em uma função, que receberá os valores
como parâmetro e retornará o resultado.
1 #include <stdio.h> Permite o uso da função printf()
2 #include <conio.h> Permite o uso da função getch()
3 void soma2(int v1, int v2){ Abre a função soma2() e recebe os valores de
val1 e val2 em v1 e v2, respectivamente. A
quantidade de valores enviados deve ser a
quantidade de variáveis aqui declaradas. A
atribuição é realização da esquerda para direita.
4 int soma; Declara variável local “soma”
5 soma = v1+v2; Soma v1 e v2 e guarda resultado em soma
6 return Retorna o valor de “soma” para a função
chamadora
8 } Fecha função soma2()
9 int main(){ Abre função principal
10 int val1, val2, s; Declara variáveis val1 2 val2 como inteiros
11 scanf(“%i”,&val1); Recebe val1 do usuário
12 scanf(“%i”,&val2); Recebe val2 do usuário
13 s = soma2(val1,val2); Chama a função soma2() para execução,
enviando os valores das variáveis val1 e val2.
Após a execução de soma2(), atribui o valor de
Linguagem de Programação C 51
retorno na variável “s”.
printf(“%i”,s); Imprime a variável “s”
getch(); Pára o programa
14 } Fecha a função soma2()
Digite o Exemplo 8.4: Faça uma função que receba o valor do lado de um quadrado e devolva
sua área e seu perímetro.
1 #include <stdio.h> Permite inclusão de funções de i/o
2 #include <conio.h> Permite inclusão da função getch()
3 void area_per(float l, float *a, float *p); Declara o protótipo da função
4 int main(){ Abre função principal
5 float lado, perimetro, area; Declaração da variáveis locais
6 scanf(“%f”,&lado); Recebe valor de lado do usuário
7 area_per(lado, &area, &perimetro); Chama a função area_per() e envia
o valor de “lado”, o endereço de
“area” e o endereço de “perimetro”.
8 printf(“área = %.2f perímetro = %.2f“, area, Imprime o valor de area e
perimetro);
perimetro, alterados na função
area_per()
9 getch(); Pára a execução do programa
10 } Fecha função principal
11 void area_per(float l, float *a, float *p){ Abre função area_per() e recebe o
valor enviado de “lado” (linha 7) em
“l”, o endereço enviado de “area”
(linha 7) em “a” e o endereço
enviado de “perimetro” (linha 7) em
“p”
12 *p = l * 4; Calcula o perímetro e atribue o
resultado no conteúdo do endereço
Linguagem de Programação C 52
p (variável perímetro)
13 *a = l * l; Calcula a área e atribue o resultado
no conteúdo do endereço a
(variável area)
14 } Fecha a função area_per()
8.3 Exercícios
Linguagem de Programação C 53
Retorne 0 se não existir raiz, 1 se existir uma única raiz, e 2 se
existirem duas raízes. O protótipo da função será: int bascara(float
ax, float bx, float cx, float *raiz1, float *raiz2);
8.3.5 Faça um programa que calcule o Desvio Padrão de uma
sequência de valores inteiros. Para isto cria as seguintes funções:
1. int RecebeValores(int *v);
Esta função receberá os valores do usuário, carregará em um
vetor (v) e retornará quantos valores foram digitados. O
carregamento deve parar quando o usuário digitar o valor 0 (zero).
2. float CalcMedia(int *v, int T);
Esta função calcula e retorna a média aritmética do vetor (v) de
tamanho T.
3. float DesvioPadrao(int *v, float m, int T);
Esta função calcula e retorna o Desvio Padrão dos valores do vetor
“v” de tamanho “T” utilizando a média dos valores “m”.
Linguagem de Programação C 54
9 - TAD – Tipo Abstrato de Dados
Exemplo 9.1: Crie um arquivo contendo uma estrutura e duas funções para manipula-la, uma
para carregar o vetor e outra para mostrá-lo na tela. Grave este arquivo como Cor.h
1 #include <stdio.h> Inclue arquivos de protótipos.
#include <conio.h>
Exemplo 9.2: Crie um arquivo Cor.c contendo que permita a entrada de cores (R, G e B) em
uma estrutura e logo em seguida mostre estas cores na tela. Use a TAD Cor.h
1 #include “Cor.h” Inclusão da TAD Cor.h que
deve estar no mesmo diretório
deste arquivo
2 void main(){ Abre função principal
3 Cor c; Define variável do tipo
estrutura para uso na
aplicação. Isto é possível
devido a inclusão da TAD
através do include.
4 Carregar(&c); Chama a função Carregar()
enviando como parâmetro por
referência a variável c. Isto
possibilitará a alteração das
variáveis internas da estrutura.
5 Mostrar(c); Chama a função Mostrar()
Linguagem de Programação C 55
enviando como parâmetro por
valor a variável c, pois apenas
uma cópia da estrutura
chegará na função, uma vez
que a mesma não será
modificada por ela.
6 getch(); Pára o programa
7 } Finaliza a função principal.
9.1 Exercícios
9.1.1 Faça uma TAD Aluno.h com sua estrutura contendo ra, nome, nota 1, nota 2,
media, e funções para:
9.1.2 Faça uma TAD Carro.h com sua estrutura contendo placa, modelo, fabricante,
cor, data de venda. A data de venda tambem deve ser uma estrutura, uma vez que é
uma variável composta. Faça funções para:
Linguagem de Programação C 56
10 - Arquivo
10.1Armazenamento em disco
Campo
RA Nome Nota
1231 Carlos 5,1 Registro
5432 Mônica 7,8
4533 Tânia 3,4
8754 Aurelio 6,9
Linguagem de Programação C 57
estrutura>,<qtd de estruturas a serem lidas>,<nome interno do
arquivo>)
Linguagem de Programação C 58
Digite o Exemplo 10.1: Faça um programa que receba do usuário o número do RA e o nome de
5 alunos e grave estas informações em um arquivo no disco.
1 #include <stdio.h> Inclue função de i/o de arquivo
2 #define MAX 5 Define a macro MAX como 5
3 struct Aluno{ Declara o modelo Aluno para ser
int ra;
char nome[30]; usado para gravar os dados de
}; cada aluno
4 int main(){ Início da função principal
5 FILE *ArqAlu; Declara variável ponteiro de
arquivo
6 struct Aluno RegAlu; Declara variável de estrutura
7 int i; Declara variável i
8 ArqAlu=fopen("Alunos.dat","a"); Abre o arquivo para gravação de
registros. Vincula o arquivo
interno (ArqAlu) com o arquivo
externo (Alunos.dat). O arquivo
será criado no diretório corrente,
caso já nao exista.
9 for (i=0;i<MAX;i++){ Início do looping (5x)
10 printf("Digite o RA do %i.o aluno: ",i+1); Recebe variáveis (RA e nome) do
scanf("%i",&RegAlu.ra);
printf("Digite o nome do %i.o aluno: ",i+1); usuário e guarda nas variáveis
scanf(" %s",RegAlu.nome); de registro. Note o espaço em
branco antes do “%”, isto é
importante para toda entrada de
caracteres.
11 fwrite(&RegAlu,sizeof(RegAlu),1,ArqAlu); Grava o registro no arquivo
12 } Fim do looping
13 fclose(ArqAlu); Fecha o arquivo
14 } Fim da função principal
Digite o Exemplo 10.2: Faça um programa que mostre os dados gravados no exemplo 9.1.
1 #include <stdio.h> Inclue função de i/o de arquivo
2 struct Aluno{ Declara o modelo Aluno para ser
int ra;
char nome[30]; usado para gravar os dados de
}; cada aluno
3 int main(){ Início da função principal
4 FILE *ArqAlu; Declara variável ponteiro de
arquivo
5 struct Aluno RegAlu; Declara variável de estrutura
Linguagem de Programação C 59
6 int i; Declara variável i
7 ArqAlu=fopen("Alunos.dat","r"); Abre o arquivo para leitura de
registros. Vincula o arquivo interno
(ArqAlu) com o arquivo externo
(Alunos.dat). Caso o arquivo não
estiver criado no diretório corrente,
devolverá “NULL” para ArqAlu.
8 printf("RA Nome\n"); Imprime um cabeçalho para os
dados
9 while (fread(&RegAlu,sizeof(RegAlu),1,ArqAlu)){ Lê um registro do arquivo e aloca
na estrutura de memória. O fread()
retorna 1 (while torna-se
verdadeiro) se conseguiu ler um
registro e zero (while torna-se
falso), caso contrário.
10 printf("%i ", RegAlu.ra); Mostra dados alocados na
printf("%s\n", RegAlu.nome);
estrutura da memória pelo fread()
11 } Finaliza o looping
12 fclose(ArqAlu); Fecha o arquivo
13 } Fim da função principal
Digite o Exemplo 10.3: Faça a manutenção (Inclusão, Consulta Geral, Consulta por Código,
Alteração e Exclusão) de um arquivo de brinquedos de uma fabrica.
1 #include <string.h> Inclui protótipos pré-definidos
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
2 void inclusao(); Inclui protótipos das funções que foram
int consulta_geral(); criadas pelo programador
int consulta_cod();
int alteracao();
int exclusao();
char menu();
3 struct Reg_brinq{ Define uma estrutura chamada Reg-brinq,
char cod_prod[5]; contendo 4 variáveis de dados e mais
char descricao[30]; uma variável flag (“exc”) para marcar ou
float preco; não o registro para exclusão.
int qtd_vend;
Linguagem de Programação C 60
char exc;
};
4 int main(){ Abre main()
5 char opcao='0'; Inicializa opcao com zero para forçar a
primeira entrada no looping.
while (opcao!='6'){ Verifica se a variavel opcao é 6. Usuário
deseja encerrar o programa.
opcao=menu(); Chama a função menu() e atribui o
retorno para a variável “opcao”
switch(opcao){
Verifica se a variável “opcao” é 1,2,3,4,5
case '1':
ou 6 e chama a respectiva função. Caso
inclusao();
seja opcao 6, o programa se encerra. O
break;
break fará com que o programa saia do
case '2':
switch.
consulta_geral();
break;
case '3':
consulta_cod();
break;
case '4':
alteracao();
break;
case '5':
exclusao();
break;
case '6':
exit(1);
}
}
6 } Fecha main()
Linguagem de Programação C 61
9 } Fecha menu()
Linguagem de Programação C 62
35 Reg_brinq brinq; Declara variável brinq do tipo estrutura
36 Arq_brinq=fopen("brinq.dat","rb"); Abre o arquivo para leitura (“rb”)
37 if (Arq_brinq==NULL){ Verifica se o arquivo conseguiu ser
38 printf("Erro de abertura!"); aberto. Caso nao consiga (diretorio
39 getchar(); errado, problema na midia etc), mostra
40 return 0; um erro e volta ao menu principal.
41 }
42 system(“cls”); Mostra um cabeçalho para o relatório do
printf("CONSULTA GERAL\n\n"); brinquedos
printf(" Codigo Descricao
Preco Qtd Vendida\n");
43 while Lê um registro do arquivo e atribui para a
(fread(&brinq,sizeof(brinq),1,Arq_brinq)){
estrutura da memoria. O fread() retorna 1
caso tenha conseguido ler e zero, caso
contrario. Portanto, ele entrará no looping
se conseguir ler e sairá dele se não tiver
mais nada para ser lido no arquivo
44 printf(" %s %s %.2f Mostra todos os campos que foram
%d”, brinq.cod_prod , brinq.descricao,
brinq.preco, brinq.qtd_vend); carregados para a estrutura a partir do
arquivo.
45 getchar(); Para o programa para mostrar dados.
46 } Fecha while
47 fclose(Arq_brinq); Fecha arquivo
48 } Fecha consulta geral
Linguagem de Programação C 63
62 system(“cls”); Recebe o codigo do brinquedo que o
63 printf("CONSULTA POR usuário deseja encontrar.
CODIGO\n\n");
64 printf("Digite o Codigo: ");
65 gets(xcod_prod);
66 achou=0; Inicializa flag com zero
67 fseek(Arq_brinq,0,SEEK_SET); Envia ponteiro do aruivo p/ o primeiro
registro
68 while (fread(&brinq,sizeof(brinq), 1, Lê um registro do arquivo e atribui para a
Arq_brinq)){
estrutura da memoria. O fread() retorna 1
caso tenha conseguido ler e zero, caso
contrario. Portanto, ele entrará no looping
se conseguir ler e sairá dele se não tiver
mais nada para ser lido no arquivo
69 if (!strcmp(xcod_prod, Verifica se o campo cogido do registro
brinq.cod_prod ) ){
que acabou de ser lido é o codigo que o
usuário está procurando. O strcmp
retorna zero caso as duas variáveis sejam
iguais, por isso negamos (“!”) o retorno
para que entre no if caso seja igual.
70 printf("Descricao: "); Caso sejam iguais, mostra o restante dos
printf(“%s\n”, brinq.descricao); campos do registro
printf("Preco: ");
printf(“%.2f\n”, brinq.preco);
printf("Qtd Vendida: ");
printf(“%d\n”, brinq.qtd_vend);
71 achou=1; Seta variavel flag para um (achou o
registro)
72 getchar(); Pára o programa
73 break; Sai do looping
74 } Fecha if
75 } Fecha while
76 if (achou==0){ Mostra mensagem caso o brinquedo não
printf("\nEste brinquedo nao esta seja encontrado
cadastrado!!");
}
77 printf("\nDesejar continuar a consulta Pergunta se deseja continuar e retorna
<s/n>? ");
para o “do” (linha 61) caso deseje.
78 resp=toupper(getchar());
79 }while (resp=='S');
80 fclose(Arq_brinq); Fecha o arquivo
Linguagem de Programação C 64
81 } Fecha a consulta por codigo
Linguagem de Programação C 65
99 printf("Qtd Vendida: ");
100 printf(“%d\n”, brinq.qtd_vend);
101 printf("Campos para alterar:\n"); Disponibiliza todos os campos para
102 pritnf("Descricao: "); eventual alteração do usuário
103 gets(brinq.descricao);
104 printf("Preco: ");
105 scanf(“%f”,&brinq.preco);
106 pritnf("Qtd Vendida: ");
107 scanf(“%d”,&brinq.qtd_vend);
108 fseek(Arq_brinq,ftell(Arq_brinq)- Retorna o ponteiro do arquivo para o
sizeof(brinq),SEEK_SET);
registro que foi lido, pois o mesmo foi
deslocado na leitura.
109 fwrite(&brinq,sizeof(brinq),1,Arq_b Grava sobre o registro que foi lido,
rinq);
alterando-o
110 achou=1; Seta flag para 1
111 break; Sai do while
112 } Fim do if
113 } Fim do while
114 if (achou==0){ Mostra mensagem caso nao tenha
printf("\nO brinquedo nao esta encontrado o codigo do brinquedo no
cadastrado!!";
arquivo
}
115 pritnf("\nDesejar continuar a alteracao Pergunta se deseja continuar e retorna
<s/n>? ";
para o “do” (linha 88) caso deseje.
116 resp=toupper(getchar());
117 }while (resp=='S');
118 fclose(Arq_brinq); Fecha arquivo
119 } Fecha alteração
Linguagem de Programação C 66
return 0;
}
126 do{ Abre looping do-while
127 system(“cls”); Recebe o codigo do brinquedo que o
printf("EXCLUSAO POR usuário deseja encontrar.
CODIGO\n \n");
printf("Digite o Codigo: ");
gets(xcod_prod);
128 achou=0; Inicializa flag com zero
129 fseek(Arq_brinq,0,SEEK_SET); Coloca o ponteiro do arquivo apontando
para o primeiro registro.
130 while (fread( &brinq,sizeof(brinq), 1, Lê um registro do arquivo e atribui para a
Arq_brinq)){
estrutura da memoria. O fread() retorna 1
caso tenha conseguido ler e zero, caso
contrario. Portanto, ele entrará no looping
se conseguir ler e sairá dele se não tiver
mais nada para ser lido no arquivo
131 if (!strcmp( xcod_prod, Verifica se o campo cogido do registro
brinq.cod_prod) && (brinq.exc=='n')){
que acabou de ser lido é o codigo que o
usuário está procurando. O strcmp
retorna zero caso as duas variáveis sejam
iguais, por isso negamos (“!”) o retorno
para que entre no if caso seja igual.
132 printf(“%s\n”, brinq.descricao); Caso sejam iguais, mostra o restante dos
printf("Preco: "); campos do registro
printf(“%.2f\n”, brinq.preco);
printf("Qtd Vendida: ");
printf(“%d\n”, brinq.qtd_vend);
133 printf("Confirma exclusao Pergunta para o usuário se deseja
<s/n>? \n";
realmente excluir
134 resp=toupper(getchar()); Recebe a resposta do usuário
135 if (resp=='S'){ Verifica se a resposta é afirmativa
136 brinq.exc='s'; Marca o registro p/ exclusao
137 fseek(Arq_brinq,ftell(Arq_brinq)- Retorna o ponteiro do arquivo para o
sizeof(brinq),SEEK_SET);
registro que foi lido, pois o mesmo foi
deslocado na leitura.
138 fwrite(&brinq,sizeof(brinq),1,Arq Grava sobre o registro que foi lido,
_brinq);
alterando-o
139 } Fecha if
140 achou=1; Muda flag
141 break; Sai do while
Linguagem de Programação C 67
142 } Fecha while
143 } Fecha do-while
144 if (achou==0){ Mostra mensagem se não encontrou o
printf("\nO brinquedo nao esta código procurado
cadastrado!!";
}
145 printf("\nDesejar continuar a exclusao Pergunta ao usuário se deseja continuar,
<s/n>? ";
recebe resposta e retorna ao “do” caso a
resp=toupper(getchar());
resposta seja afirmativa
}while (resp=='S');
146 fclose(Arq_brinq); Fecha arquivo principal
147 Arq_brinq=fopen("brinq.dat","rb"); Abre o arquivo principal p/ leitura e o
xArq_brinq=fopen("brinq1.dat","wb"); auxiliar p/ gravacao
148 while (fread(&brinq,sizeof(brinq), 1, Lê um registro do arquivo principal e
Arq_brinq)){
atribui para a estrutura da memoria.
149 if (brinq.exc=='n'){ Verifica se o flag de exclusão é 'n'
(registro não excluído)
150 xbrinq=brinq; Atribui todo o registro principal para
auxiliar
151 fwrite(&xbrinq,sizeof(xbrinq),1,xArq_ Grava registro no arquivo auxiliar
brinq);
152 } Fecha if
153 } Fecha while
154 fclose(Arq_brinq); Fecha arquivo principal
155 fclose(xArq_brinq); Fecha arquivo auxiliar
156 remove("brinq.dat"); Apaga o arquivo principal
157 rename("brinq1.dat","brinq.dat"); Muda o nome do arquivo auxiliar para que
este seja o principal
158 } Fecha exclusão
Linguagem de Programação C 68
(exc='n'). Logo após a criação deste arquivo o principal é apagado e o
auxiliar é renomeado, passando então a ser o principal.
10.2Exercícios
Linguagem de Programação C 69
10.2.12Uma rotina que mostre a quantidade de produtos em
estoque.
10.2.13Uma rotina que mostre o valor total do estoque.
10.2.14Uma rotina que mostre o valor médio do estoque.
10.2.15Faça uma função que receba, do usuário, o código, o
nome, o nr de mortes, de todos os bairros de Campinas. Guarde as
informações digitadas em arquivo.
10.2.16Faça uma função que leia um arquivo já gravado (na
questão 10.2.9) e guarde em uma matriz (definido por parâmetro),
o código, o nr de mortes dos bairros com mais de 10 mortes no
mês. O tamanho (qtd de linhas) da matriz deve ser retornado.
Linguagem de Programação C 70
11 - Allegro
http://www.rafaeltoledo.net/out-of-series-3-configurando-a-
biblioteca-allegro-no-codeblocks-ubuntu/
Linguagem de Programação C 71
Agora que já instalamos o Allegro, vamos testá-lo. Configure
o Dev para carregar a biblioteca Allegro acessando “Tools”/”Compiler
options”, tick “Add these commands ... line” e escreva -lalleg na caixa
de texto logo abaixo. Dê OK e abra uma página em branco para
digitação do exemplo abaixo.
Digite o Exemplo 11.1 :- Faça um programa em modo gráfico que mostre um retângulo, um
retângulo preenchido, uma reta, um circulo e 5 pontos na tela.
1 #include <allegro.h> Inclui arquivo de protótipos para
funções do Allegro
2 int main(){ Abre main()
3 allegro_init(); inicializa Allegro
4 install_keyboard(); Inicializa teclado
5 set_gfx_mode(GFX_AUTODETECT_WINDOWE define o modo grafico, abrindo uma
D, 640, 480, 0, 0); janela 640x480
6 rect(screen,10,10,100,100,makecol(0,0,255)); desenha retangulo azul de 10,10 à
100,100
7 rectfill(screen,200,200,540,100,makecol(0,255,0 desenha retangulo preenchido de verde
)); de 200,200 à 540,100
8 line(screen,10,400,500,250,makecol(255,0,0)); desenha linha vermelha de 10,400 à
500,250
9 circle(screen,600,600,50,makecol(155,100,0)); desenha circulo de centro 600,600 de
raio 50
10 putpixel(screen,450,450,makecol(200,200,50)); desenha 5 pontos na tela
11 putpixel(screen,460,450,makecol(200,200,50));
12 putpixel(screen,470,450,makecol(200,200,50));
13 putpixel(screen,480,450,makecol(200,200,50));
14 putpixel(screen,490,450,makecol(200,200,50));
15 readkey(); pára o programa
16 } Fecha main()
17 END_OF_MAIN() necessario p/ portabilidade
11.1 Exercícios
Básicos
11.1.1 Desenhe na tela um retângulo de 50 x 100 pontos,
utilizando line(), a partir da posição (100,100)..
11.1.2 Desenhe 1 circulo de raio 50, circunscrito em um
quadrado, no centro de cada quadrante de uma janela gráfica
Linguagem de Programação C 72
de 800x600.
11.1.3 Faça um desenho humanóide, contendo cabeça, tronco,
pernas e braços. Use linhas, círculos e elipses.
11.1.4 Faça um programa que desenhe a bandeira do Brasil na
tela. Use line() para desenhar o losango e floodfill() para pintar
as figuras.
if
11.1.5 Faça um programa que desenhe um retângulo de 50 x 100
(50 de largura por 100 de altura) em uma janela gráfica de
800x600. O usuário deverá decidir qual dos 4 cantos da janela
gráfica será desenhado este retângulo, digitando 1 (canto
superior esquerdo), 2 (canto superior direito), 3 (canto inferior
direito) ou 4 (canto inferior esquerdo).
11.1.6 Faça um programa que desenhe uma linha de tamanho
100 no centro de uma janela gráfica de 800x600. O usuário
deverá decidir qual a direção desta linha, digitando 1
(horizontal), 2 (vertical).
While
11.1.7 Faça 20 circunferências circunscritas na tela. Use while.
11.1.8 Refaça o exercício 11.1.2, desenhando uma circunferência
de cada cor.
11.1.9 Refaça o exercício 11.1.2, pintando o interior de cada área
formada entre elas com cores diferentes.
11.1.10 Faça 50 retângulos circunscritos na tela.
11.1.11 Refaça o exercício 11.1.5, desenhando um retângulo de
cada cor.
11.1.12 Refaça o exercício 11.1.5, pintando o interior de cada
área formada entre eles com cores diferentes.
11.1.13 Faça um campo de futebol com faixas no gramado de cor
verde escuro e claro.
11.1.14 Desenhe uma grade de 50x50, a partir da linha 0, coluna
0, com intervalo entre linhas e colunas de 10 pontos, em uma
janela gráfica.
11.1.15 Preencha uma área quadrada de 100x100 da janela
gráfica, usando pontos (putpixel()), a partir da posição 50,50.
Os pontos devem estar espaçados de 3 pontos entre cada um
deles.
11.1.16 Faça a representação de um ambiente (contornado de
linha preta), através de uma grade cinza clara, de 300x300
com espaçamento de 10x10 para cada vão. Pinte de preto um
destes vãos para representar a localização de um sensor.
Animação
11.1.17 Faça uma bola amarela ficar "pingando" na tela. Faça o
Linguagem de Programação C 73
desenho na própria tela (screen).
11.1.18 Faça uma bola amarela ficar "pingando" na tela, usando a
técnica double-buffer. A idéia desta técnica é realizar todas as
atualizações em uma variável de memória e, depois disso,
copiar (função blit()) a variável para a tela
11.1.19 Refaça o exercício 11.1.10 mudando a cor da bola sempre
que a mesma tocar a borda.
Vetor
11.1.20 Permita que o usuário digite 10 valores referentes ao
tamanho de 10 linhas a serem desenhadas na tela. Carregue os
valores em um vetor e desenhe as linhas com intervalo de 20
pixel entre elas.
11.1.21 Permita que o usuário digite valores referentes as cores
RGB de 10 círculos, a serem desenhados na tela. Estes valores
deverão ser armazenados em 3 vetores, um para cada cor. Os
círculos não poderão se sobrepor.
11.1.22 Desenhe na tela um gráfico, que represente os valores
dos PH´s da chuva de cada município,. Receba o vetor de
índices de Ph de 20 municípios. Os eixos (cuja origem deve
estar em 10,400) devem ser pretos e as linhas verticais
coloridas (uma cor representando cada município),. Escreva os
títulos do gráfico, do eixo x e do eixo y.
Matriz
11.1.23 Faça um programa que receba uma matriz (5x2), a partir
do usuário, onde cada linha faz referencia a cada cidade do
estado e cada coluna faz referencia a localização “x” e “y”.
Após o carregamento da matriz, desenhe um círculo de raio 5,
representando cada cidade na tela.
Obs.: O x e o y já estão na escala da tela do computador.
Arquivo
11.1.24 Leia a localização x e y, e o nome da cidade, referentes a
cada cidade do estado de São Paulo, a partir de um arquivo e
plote as cidades na tela com os respectivos nomes de
identificação.
Linguagem de Programação C 74
Apêndices A – Algoritmos e Fluxogramas
Tarefa 3: Corrida
1. Iniciar a corrida
2. Correr até acabar o percurso
3. Parar de correr
Comandos descrição
Inicio Marca o início da lógica
Fim Marca o fim da lógica
Indica uma atribuição à memória
Linguagem de Programação C 76
Leia Recebe uma informação do usuário
escreva Retorna uma informação ao usuário
Se-senão-fimdose Decide qual procedimento executar
dependendo de uma condição
inicio
. . leia nota1
. . leia nota2
. . media ← (nota1 + nota2) / 2
. . escreva media
fim
Símbolos Descrição
Início/Fim – determina o começo ou final de uma seqüência de
procedimentos.
Atribuição – altera conteúdo da memória.
Abre/fecha arquivo
Linguagem de Programação C 77
Conector de página – conecta uma parte do fluxograma à outra localizada
em outra página
Início
Leia Nota 1
Leia Nota 2
Escreva media
Fim
inicio
. . leia nota1
. . leia nota2
. . media ← (nota1 + nota2) / 2
. . se media >= 5
. . . . escreva “Aprovado”
. . senão
. . . . escreva “Reprovado”
. . fim do se
. . escreva media
fim
Linguagem de Programação C 78
início
leia nota1
leia nota2
media = (nota1+nota2)/2
não sim
media >=5
Escreva Escreva
“Reprovado” “Aprovado”
Escreva
media
fim
Linguagem de Programação C 79
Um outro recurso importante da lógica é o comando de
repetição chamado “enquanto”. Este recurso permita repetir a execução
de procedimentos, ou seja, quando temos que fazer a mesma coisa
muitas vezes, podemos usar este recurso. NO caso apresentado acima,
caso queiramos permitir que o programa seja executado para 30
alunos, ao invés de apenas um, podemos usar o comando “enquanto” e
repetir a execução de todo o procedimento (digitação das notas, calculo
e exibição da mensagem) 30 vezes. Mostramos abaixo como o
algoritmo e fluxograma seriam reescritos.
inicio
. . cont = 1
. . enquanto cont <= 30
. . . . leia nota1
. . . . leia nota2
. . . . media ← (nota1 + nota2) / 2
. . . . se media >= 5
. . . . . . escreva “Aprovado”
. . . . senão
. . . . . . escreva “Reprovado”
. . . . fim do se
. . . . escreva media
. . . . cont = cont + 1
. . fim do enquanto
fim
Linguagem de Programação C 80
início
cont = 1
não
cont <=30
sim
leia nota1
leia nota2
media = (nota1+nota2)/2
não
media >=5 sim
Escreva Escreva
“Reprovado” “Aprovado”
Escreva
media
cont = cont + 1
fim
Linguagem de Programação C 81
Apêndices B – Resumo de comandos e funções
stdio.h
scanf() Recebe entrada do scanf(“%i”,&valor); %i é o formato e valor é a variável que
usuário guardará a informação do usuário
printf() Mostra informações ao printf(“Valor: %i”,valor); a variável valor substituirá o formato (%i)
usuário quando a mensagem for impressa.
fopen() Abre arquivo arq=fopen(“c:\\arquivo.dat”,”a”); Abre, se já existir, o arquivo arquivo.dat. Se
não existir, cria. Vincula ao nome interno
(arq) e permite inclusão no final do arquivo
(parâmetro “a”). O parâmetro “w” abre para
criação e gravação e o parâmetro “r” abre
para leitura.
fclose() Fecha arquivo fclose(arq) Fecha o arquivo que foi vinculado ao nome
interno “arq”
fread() Lê um registro do leu=fread(®,sizeof(reg),1,arq); A variável “leu” receberá 1 se um registro
arquivo e guarda na conseguiu ser lido pela função e 0, caso
memória contrário. Os parâmetros são: endereço da
struct (registro), tamanho em bytes da struct,
qtd de structs a serem lidos e nome interno
do arquivo.
fwrite() Grava o conteúdo da fwrite(®,sizeof(reg),1,arq); Grava um registro no arquivo através da
struct da memória para struct “reg” da memória. Os parâmetros são:
o arquivo endereço da struct, tamanho em bytes da
struct, qtd de structs a serem lidos e nome
interno do arquivo.
conio.h
getch() Pausa o programa e l=getch(); Recebe um caractere do usuário e guarda na
recebe um caractere do variavel “l”. Usado sem a variável apenas
usuário. pausa o programa aguardando digitação de
qualquer tecla.
math.h
sqrt() Calcula e retorna a raiz=sqrt(x); A variável raiz receberá o valor da raiz
raiz quadrada de um quadrada do conteúdo da variável x.
numero
cos() Calcula e retorna o c=cos(ang); A variável c receberá o coseno da variável
coseno de um numero ang (valor do ângulo em radiano)
sin() Calcula e retorna o s=sin(ang); A variável s receberá o seno da variável ang
seno de um numero (valor do ângulo em radiano)
Comandos
if/else Executa determinadas if (nota >= 5){ A condição “nota>=5” testa se nota maior
instruções de acordo printf(“Aprovado”); que 5 e se for o programa imprimirá
com condições } “Aprovado” na tela; caso contrário (nota <5)
else{ o programa imprimirá “Reprovado”
printf(“Reprovado”
}
while Repete a execução de valor=1; A variável “valor” é inicializada com 1. O
determinadas while (valor <= 5){ while verificada se valor é menor que 5 e
instruções enquanto a printf(“\nValor %i”,valor); enquanto não for menor, o programa
condição for valor=valor + 1; imprimirá o conteúdo de valor na tela,
verdadeira } somando 1 à variavel valor após cada
impressão na tela.
for Repete a execução de for (i=1;i<=5;i++){ A variável de controle “i” é incializada em
determinadas printf(“\nValor %i”, i); 1. o for testa se i é menor ou igual a 5 e se
instruções enquanto a } for o programa mostra o valor de “i” na tela,
condição for retorna a 1ª linha, soma 1 na variavel “i” e
verdadeira testa novamente, se i for ainda menor ou
igual a 5, entra novamente no for e mostra
novamente o valor de i. Isto se repete até i
Linguagem de Programação C 82
Nome Descrição Exemplo Observações
ser maior que 5.
Linguagem de Programação C 83
Apêndices C – Acesso a Portas de Comunicação
Porta Paralela
/**************************************************
PortaP.h - Programa TEST.c do Roger.com modificado
-- test interface to inpout32.dll
( http://www.logix4u.net/inpout32.htm )
Copyright (C) 2003, Douglas Beattie Jr.
Modificado em 2006, Kesede R Julio
*******************************************************/
#include <stdio.h>
#include <conio.h>
#include <windows.h>
HINSTANCE hLib;
inpfuncPtr inp32;
oupfuncPtr oup32;
int InicializaPP(void)
{
if (hLib == NULL) {
printf("LoadLibrary Failed.\n");
return -1;
}
Linguagem de Programação C 84
/* get the address of the function */
if (inp32 == NULL) {
printf("GetProcAddress for Inp32 Failed.\n");
return -1;
}
if (oup32 == NULL) {
printf("GetProcAddress for Oup32 Failed.\n");
return -1;
}
void FinalizaPP(){
FreeLibrary(hLib);
}
Digite o Exemplo B1:- Faça um programa que acenda dois leds quaisquer ao mesmo tempo e
faça tocar um beep.
1 #include "PortaP.h" Inclui as funções de acesso
(InicializaPP() e FinalizaPP())
à porta paralela
2 int main(){ Abre main()
Linguagem de Programação C 85
8 } Fecha main()
0 0 0 1 0 0 1 1
bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 Bit 0
27
26
25
24
23
22
21 20 valor do bit
Porta Serial
Linguagem de Programação C 86
Para utilizá-lo siga as instruções abaixo:
Crie um Projeto no Dev-cpp
1. Selecione File/New/Project. Escolha um nome para o seu
projeto, escolha “Console Application” e clique OK.
2. Clique no “+” ao lado do nome do seu projeto. Clique-
direito no “main.cpp” e remova este arquivo. Não salve as mudanças.
3. Clique-direito no nome do projeto e some seu .c ao projeto.
4. Inclua também o arquivo Pserial.o
5. Clique-direito no nome do projeto. Escolha “Project
Options”. Na aba “Files” selecione o arquivo Pserial.o e tique em
“Including in linking”. Dê OK.
6. Não esqueça de incluir o “Pserial.h” em seu .c. Deixe estes
dois arquivo na mesma pasta.
7. Pronto! Basta executar seu projeto.
Linguagem de Programação C 87
Bibliografia
Linguagem de Programação C 88
Agradecimentos
Linguagem de Programação C 89