Вы находитесь на странице: 1из 129

Prof Angelina V.S.

Melar
1

PROI. ANGILINA V.S. MILAR
ANGILINAMILARI@GMAIL.COM







2011
FATEC ITU



Linguagem
C
Prof Angelina V.S.Melar
2
SUMRIO

Lgica de Programao ................................................................................................................... 7
Algoritmo ........................................................................................................................................ 8
Estruturas dos Algoritmos: Linear / Seletiva/ Repetio ............................................................. 10
Mtodo para a construo de Algoritmo ....................................................................................... 10
Etapas de Desenvolvimento .......................................................................................................... 12
Tipos de Algoritmos ...................................................................................................................... 14
1. Tipos de Algoritmos ........................................................................................................... 14
Pseudocdigo ................................................................................................................................ 15
Fluxograma .................................................................................................................................... 16
Diagrama de Chapin ...................................................................................................................... 18
Paradigmas de Programao forma de programar ...................................................................... 19
1. Programao No Estruturada: ........................................................................................... 19
2. Programao Estruturada (Procedural): ............................................................................. 19
3. Programao Orientada a Objetos ...................................................................................... 20
Modularidade ................................................................................................................................ 20
4. Estratgia de Decomposio ou Dividir para Conquistar ............................................... 20
5. Mdulos .............................................................................................................................. 21
Linguagem C ................................................................................................................................. 23
Processo de Compilao e Ciclo de Vida do Programa ................................................................ 24
6. Linguagem C Compiladora ou Interpretadora? ............................................................. 24
7. Ciclo de Vida do Programa ................................................................................................ 24
Ambiente de Desenvolvimento DEV-C++ ................................................................................... 26
1. Ambiente integrado ............................................................................................................ 26
2. Configurando o ambiente e o editor ................................................................................... 26
3. Configuraes para o Windows Vista/7 ............................................................................. 27
4. Digitao do programa ....................................................................................................... 27
5. Gravao do programa ....................................................................................................... 27
6. Compilao e execuo do programa ................................................................................. 27
7. Criando um cdigo fonte padro ........................................................................................ 28
Estrutura do Programa na Linguagem C ....................................................................................... 29
1. Estrutura bsica .................................................................................................................. 29
2. Diretivas ............................................................................................................................. 29
3. Arquivos de Cabealho (header) ........................................................................................ 30
4. Biblioteca ........................................................................................................................... 31
5. Bloco de instrues e Funo MAIN() ............................................................................... 31
6. Projeto ................................................................................................................................ 31
7. Regras de Digitao e Dicas da Estrutura em C ................................................................. 31
8. Comentrios ....................................................................................................................... 32
Variveis ........................................................................................................................................ 33
1. O que so variveis? ........................................................................................................... 33
2. Mas em que parte da memria vo os dados? .................................................................... 33
Identificadores ........................................................................................................................... 33
3. Declarao de varivel ....................................................................................................... 34
Constantes ..................................................................................................................................... 35
Tipos de dados ............................................................................................................................... 36
Prof Angelina V.S.Melar
3
1. Numrico ............................................................................................................................ 36
2. Literal/ Cadeia de Caracteres .............................................................................................. 36
3. Lgicas ............................................................................................................................... 37
4. Caracter .............................................................................................................................. 37
5. Espao Alocado de Memria ............................................................................................. 37
6. Modificadores de Tipos ...................................................................................................... 38
Dica: Pode-se definir valores em outras bases (diferente da decimal): ..................................... 38
7. Tabela ASCII (American Standard Code for Information Interchange) ............................ 39
8. Cdigo de Barra Invertida .................................................................................................. 40
Operadores Aritmticos ................................................................................................................. 42
1. Operadores Aritmticos ...................................................................................................... 42
Os operadores aritmticos so os operadores usados nas operaes bsicas da matemtica.
Esses operadores so usados para representar as expresses matemticas, os resultados so
valores numricos. ..................................................................................................................... 42
Eles so: +, -, *, /. ...................................................................................................................... 42
Ainda existem o mod e o div, que representam o resto da diviso e o quociente da diviso na
respectiva ordem. Esses operadores somente podem ser usados para nmeros inteiros. .......... 42
Operadores Aritmticos da Linguagem C ................................................................................. 43
2. Operadores de Incremento e Decremento .......................................................................... 43
3. Operadores Aritmticos de Atribuio ou C Reduzido ...................................................... 43
4. Converso de Tipo ............................................................................................................. 43
Prioridade dos Operadores Aritmticos ........................................................................................ 44
Funes Matemticas e Operadores Bit a Bit ................................................................................ 47
1. Funes Matemticas ......................................................................................................... 47
2. Operadores de deslocamento de bits .................................................................................. 47
1. Funo Rand() e SRand() ................................................................................................... 48
Estrutura de Controle Linear/ Sequencial...................................................................................... 49
Funes de Entrada e Sada Formatada ......................................................................................... 50
1. Funo de Sada - printf() ................................................................................................... 50
2. Funo de Entrada scanf() ............................................................................................... 51
1. Funo de Entrada de caracter getch() e getchar() ........................................................... 52
Exemplos ....................................................................................................................................... 52
Exerccios Resolvidos e Propostos ................................................................................................ 55
Operador Relacional e Lgico ....................................................................................................... 56
1. Operadores Relacionais ...................................................................................................... 56
2. Operadores Lgicos ............................................................................................................ 56
3. Tabela Verdade: o conjunto das possibilidades combinatrias dos operadores lgicos. 57
4. Prioridade dos Operadores ................................................................................................. 57
Estrutura de Deciso /Condicional/ Seleo ................................................................................. 58
Exerccio Resolvido ...................................................................................................................... 59
Tipos de Estruturas de Deciso ..................................................................................................... 60
1. Estrutura de Deciso Simples ............................................................................................. 60
2. Estrutura de Deciso Composta: ........................................................................................ 61
3. Estrutura de Deciso Encadeada: ....................................................................................... 62
Intervalos ....................................................................................................................................... 63
Operador Ternrio ......................................................................................................................... 64
Seleo Mltipla ............................................................................................................................ 65
Exerccios Resolvidos ................................................................................................................... 67
Prof Angelina V.S.Melar
4
Variveis de Bloco ........................................................................................................................ 68
Estrutura de Repetio................................................................................................................... 69
Estrutura de Repetio Condicional (Enquanto..Faa / Faa..Enquanto / Repita..at) ................ 70
1. Repetio com Pr-condio- Enquanto..faa .................................................................... 70
2. Repetio com Ps-condio - Faa..Enquanto ................................................................. 71
3. Repetio com Ps-condio - Repita..at ......................................................................... 71
4. Comandos Break, Continue funo Exit() ........................................................................ 72
5. Enquanto Verdadeiro .......................................................................................................... 73
Repetio Pr-Definida Para ...................................................................................................... 75
6. Estrutura em C .................................................................................................................... 76
Variveis Contadoras e Acumuladoras ......................................................................................... 78
SubAlgoritmos/ Modularizao .................................................................................................... 79
1. Sub-Rotinas (Mdulos) ...................................................................................................... 79
2. Declarao da Funo......................................................................................................... 79
3. A funo principal - main() ................................................................................................ 80
4. Comando Return ................................................................................................................ 81
5. Tipo Void ........................................................................................................................... 81
6. Prottipos de Funes ........................................................................................................ 82
7. Chamada (ativao) da Funo ......................................................................................... 82
8. Exemplo Completo de Funo ........................................................................................... 83
9. Classes de Armazenamento de Variveis ........................................................................... 83
Funo com Passagem de Parmetro por Valor ............................................................................ 85
Funes Recursivas ....................................................................................................................... 89
Vetores .......................................................................................................................................... 91
1. Conceito ............................................................................................................................. 91
2. Exemplos: ........................................................................................................................... 91
3. Declarao: ......................................................................................................................... 91
4. Acessando os elementos ..................................................................................................... 92
5. Armazenando os elementos ................................................................................................ 92
6. Endereo do vetor ou matriz unidimensional ..................................................................... 92
7. Exerccios Resolvidos: ....................................................................................................... 93
Vetor String (Cadeias de Caracteres) ............................................................................................ 94
Matriz ............................................................................................................................................ 98
1. Matriz Bidimensional ......................................................................................................... 98
2. Declarao: ......................................................................................................................... 98
3. Armazenando os elementos ................................................................................................ 98
4. Armazenamento feito via teclado ....................................................................................... 99
5. Mostrando os elementos ..................................................................................................... 99
Ponteiros ...................................................................................................................................... 100
1. Variveis ponteiros ........................................................................................................... 100
2. Trabalhando com Matriz atravs de Ponteiros ................................................................. 103
Funes com Passagem de Parmetros por Referncia ............................................................... 105
3. Passagem de Matriz por Referncia ................................................................................. 106
Estruturas ..................................................................................................................................... 108
Unio e Enumerao ................................................................................................................... 116
1. Unio union ................................................................................................................... 116
2. Tipo enumerao .............................................................................................................. 117
Arquivos ...................................................................................................................................... 118
Prof Angelina V.S.Melar
5
3. Abertura do arquivo.......................................................................................................... 118
4. Fechamento do arquivo .................................................................................................... 119
5. Leitura .............................................................................................................................. 119
6. Gravao ........................................................................................................................... 120
Posicionamento e Pesquisa em arquivo binrio ...................................................................... 125
7. Verificando o final do arquivo binrio ............................................................................. 125
8. Para apagar um arquivo .................................................................................................... 125
Conceitos Bsicos ....................................................................................................................... 126
Nvel de Programao das Linguagens ....................................................................................... 128
Bibliografia Consultada e Referenciada ...................................................................................... 129


Prof Angelina V.S.Melar
6



PRIMEIRA PARTE


ALGORITMOS




















Prof Angelina V.S.Melar
7
Lgica de Programao

A lgica usada na programao a mesma lgica usada diariamente pelas pessoas. a
lgica uma das caractersticas que diferencia um ser humano de outro, capaz de torn-lo mais
coerente e racional nas suas aes e com bom senso para tomar as decises.

Mas como essa lgica? De onde ela vem?
A palavra lgica vem do grego logos, que significa expresso, pensamento, conceito,
discurso, razo. Uma das definies de lgica encontrada no dicionrio Aurlio a coerncia
do raciocnio de idias.
O estudo da lgica comeou na Grcia antiga com o filsofo Aristteles, que definiu
lgica como sendo a cincia da demonstrao. Segundo Aristteles, a lgica estuda a razo
como instrumento da cincia ou meio de adquirir a verdade. Como o objetivo da razo o
raciocnio, a lgica est ligada ao raciocnio, uma operao discursiva do pensamento que
consiste em encadear logicamente juzos e dele tirar uma concluso.
O escritor Othon Manoel Garcia define lgica como a cincia das leis ideais do
pensamento, a arte que nos faz proceder, com ordem, facilmente e sem erro, no ato prprio da
razo.
O que ter lgica?
Ter lgica estar em uma determinada situao e saber a melhor maneira de proceder.
conseguir visualizar todas as possibilidades existentes daquele momento e decidir pela mais
adequada.
Quanto mais a pessoa tenta raciocinar corretamente ela estar procurando ter lgica.
Forbellone, destaca a lgica usada no dia-a-dia, pois quando pensamos, falamos, agimos estamos
criando uma ordem no pensamento e nas aes, isto utilizar lgica.

Mas e a Lgica de Programao?
Segundo Forbellone, a aplicao das leis do pensamento e de processos simbolizados de
maneira formal nos computadores, onde so empregadas tcnicas para a produo de solues
logicamente vlidas e que resolvem problemas que sero programados. Para isso sero
desenvolvidos os Algoritmos.

O que um bom programa/sistema?
O importante na programao desenvolver programas que atendam as necessidades do
usurio, com funcionalidade, rapidez, desempenho e confiabilidade. Um bom programa no
depende exclusivamente da linguagem de programao.
Segundo Forbellone, ...fundamental formao do
profissional de programao esto a desenvolver a lgica e a
construo de algoritmos...

preciso ter Lgica de Programao:
Ter lgica raciocinar coerentemente, avaliar as aes
tomadas, organizar o pensamento, visualizar todas as
possibilidades, atualizar as informaes e traar um objetivo

Mas como passar a nossa lgica para o computador?
Uma das ferramentas para isso o Algoritmo.
O que eu devo fazer agora?????
Prof Angelina V.S.Melar
8
Algoritmo

O objetivo de todo o estudo da Lgica de Programao a construo de Algoritmos
coerentes e vlidos.
O algoritmo um processo onde voc organiza e coloca passo a passo suas idias para
atingir um objetivo pr-definido. Tambm pode-se definir como uma sequncia de passos. Esse
processo feito numa linguagem fcil, em seqncias ordenadas e encadeadas, de forma que as
pessoas possam us-la sem problemas.
O algoritmo uma das primeiras e melhores formas usadas para se conseguir resolver
problemas no computador ou mesmo na sua vida cotidiana. Quando voc precisar solucionar um
problema a primeira coisa que dever fazer fazer uma anlise do mesmo, coletar os dados e
estruturar as operaes que devem ser realizadas.
Pense na sua vida real, num problema comum a todos. Vamos imaginar que voc ir
organizar uma festa. Quais so os procedimentos a serem tomados?
Para fazer um algoritmo desse problema preciso antes coletar as idias:
- voc precisa convidar os amigos;
- arrumar um som e msicas;
- comprar salgados e bebidas;
- procurar o local da festa;

Depois organiz-las de acordo com suas prioridades. preciso saber qual o primeiro
passo a se tomar para depois ver o momento de executar o segundo, no esquecendo que o
primeiro deve j estar pronto.
como fazer um pudim gostoso de forma rpida. Como voc faria? Voc colocaria a
forma no forno aceso antes de fazer a massa? Como voc usaria seu raciocnio lgico nesse
procedimento?

por isso que devemos aprender a ter um raciocnio lgico. Ser atravs dele que voc
conseguir ser um bom programador.

Quando comearmos a desenvolver algoritmos estaremos desenvolvendo nosso raciocnio
lgico, pois comearemos a prestar mais ateno aos detalhes. Observaremos que cada situao,
por mais simples que seja pode-se tornar complicada. Mas como assim? Vocs devem estar
pensando.

Estado inicial aes empregadas de Estado final
forma clara e precisa





Algoritmo
Perodo de tempo finito
Objetivo
Atingido
Prof Angelina V.S.Melar
9

Pensem neste problema: Como voc faria para comer uma banana?
Podemos fazer um Algoritmo que usa o portugus coloquial para resolver isso:
1 Voc ter que saber onde est a banana
2 Pegar a banana
3 Descascar a banana
4 Por fim, comer a banana.
Parece ser simples resolver esse problema, onde citamos quatro etapas ordenados de
procedimentos. Mas ser que voc pensou em tudo? Ser que a sua lgica est bem
desenvolvida? Se voc acha que sim, errou. Voc ainda precisar desenvolver muito o seu
raciocnio lgico.
Mas por qu? Voc deve estar fazendo est pergunta. Eu respondo na criao de um novo
algoritmo:
Voc ter que saber onde est a banana
Pegar a banana
Descascar a banana
Verificar se a banana no est estragada por dentro
Se estiver estragada
o Voc dever jog-la
Seno, se estiver inteira boa
o Voc dever comer a banana.
Nesse caso a sua lgica est mais elaborada, verificando uma situao que pode ocorrer.
Mas ainda no est totalmente completa. Pois, voc no acha que a pessoa na hora de pegar a
banana j deveria ver o estado da banana por fora? Se ela estiver preta ou amassada, ento a
pessoa j deveria t-la jogado fora e pegado outra, de forma que todo o processo seria repetido
novamente. Veja no algoritmo abaixo:
1 Voc ter que saber onde est a banana
2 Pegar a banana
3 Verificar o estado da banana por fora
4 Se a banana estiver preta ou amassada
- dever ser jogada fora
- e pegar outra banana
- verificar o estado da banana
- se a banana estiver preta, amassada
.....
5 Se a banana estiver com aparncia bonita por fora dever ser descascada
6 Verificar se a banana no est estragada por dentro
7 Se estiver estragada voc dever
- jog-la
- pegar outra banana
- verificar o estado da banana por fora
- se a banana estiver preta, amassada
- dever ser jogada fora
- pegar outra banana
- verificar o estado da banana
- se a banana estiver preta, amassada
.....
Prof Angelina V.S.Melar
10


Estruturas dos Algoritmos: Linear / Seletiva/ Repetio

Perceba que ao fazer o primeiro algoritmo se pensava numa sequncia de aes (passos)
de forma linear, ou seja, uma ao sendo executada aps a outra. Mas, muitas vezes isso no
pode ser realizado, pois, surgem verificaes, testes que precisam ser feitos e de acordo com o
resultado deste que sero definidas as aes que sero executadas.
O primeiro algoritmo - pegar a banana e com-la. O segundo faz uma verificao, um
teste quanto ao estado da banana. So duas estruturas de algoritmos diferentes: uma linear e outra
de seleo.

o Sequncia define o fluxo de execuo do algoritmo

o Sequncia Linear ou Estrutura Sequencial: onde um conjunto de aes so executadas
uma aps a outra, passo a passo, num fluxo contnuo do comeo ao fim. A execuo
comea de cima para baixo, da esquerda para a direita

o Estrutura Condicional ou Estrutura de Seleo ou Estrutura de Deciso: a ordem de
execuo e as aes dependem do valor resultante de uma verificao. Nem sempre se
quer que todas as aes sejam executadas, de forma que se pode fazer uma seleo e
desvio delas de acordo com um teste condicional.

o Estrutura de Repetio: algumas aes podem ser repetidas, executadas vrias vezes.
Nessa estrutura a sequncia de execuo depender de uma condio, onde dependendo
do resultado dela, ser mudada ou no a sequncia de execuo.



Mtodo para a construo de Algoritmo

Leia e releia atentamente todo o enunciado do problema, procurando
identificar e entender todos os detalhes. No passe para a outra fase se tiver
dvidas no enunciado. preciso ter convico no entendimento do que foi lido.
Muitas vezes o enunciado grande, complexo, cheio de valores e
informaes, mas depois de lido e avaliado percebe-se que sua soluo simples e que muitas
informaes contidas so desnecessrias.

Faa uma anlise de tudo, procurando definir explicitamente o que est contido
no enunciado, destacando os pontos mais importantes.

Elimine os detalhes suprfluos.

Identifique as informaes necessrias para a soluo do problema: as entradas.
Veja se essas informaes j esto contidas no enunciado ou precisaro ser recebidas.
Para isso importante ler at o final o enunciado, sem tomar decises precipitadas. Selecione as
informaes e fique apenas com as mais importantes, as que sero necessrias e usadas nas
Prof Angelina V.S.Melar
11
operaes. Lembre-se que quando voc precisar de uma informao e ela no estiver no
enunciado, isso significa que ela uma entrada.

Verifique as regras que esto explicitas e implcitas: o processamento
As sadas podem ser consultas ou operaes de transformao dos dados de entradas em
sadas.

Defina as informaes que devem ser mostradas no final, ou seja, as respostas do
problema.

Desenvolva o algoritmo.

Verifique se o algoritmo feito est atingindo o seu objetivo: teste
Para isso faa alguns testes com dados fictcios e verifique se o algoritmo est mostrando
corretamente a soluo do problema. Se o resultado no for satisfatrio, leia novamente o
enunciado, revise o algoritmo e efetue novos testes, at conseguir o resultado desejado.

ABSTRAO
Existe dentro da resoluo de problemas o termo Abstrao. Ao desenvolver um
algoritmo voc est preocupado em desenvolver e representar o raciocnio lgico de
programao, mas sem se ater a detalhes computacionais, que sero depois pensados e acrescidos
na codificao. Ento ao abstrair, se deixa de lado as informaes suprfluas, se atem ao que
importante para chegar a resoluo do problema.
A abstrao tem como objetivo tirar informaes suprfluas e introduzir uma notao
concisa. Para esse objetivo ser alcanado devem-se identificar os objetos e os aspectos
importantes, dar-lhes nomes e definir operaes que possam ser aplicadas aos objetos,
permitindo assim realizar uma consistncia em relao as regras do problema.

Prof Angelina V.S.Melar
12

Etapas de Desenvolvimento
No Processamento de Dados se recebem os dados, se realizam as operaes sobre esses
dados e no final so geradas as respostas ou resultados como sada.

Entrada Processamento Sada


Entrada: A entrada o processo onde voc avalia o enunciado do problema e verifica quais
dados esto presentes no enunciado e quais no esto, mas que so essenciais para a soluo do
problema. Quando faltar algum dado voc ter que receb-lo de alguma maneira. Sem as
entradas no h como resolver um problema.
O nmero de entradas muito variado e depende do objetivo do programa.
A entrada pode ser recebida por vrios dispositivos de entradas. Pode ser lida de um
arquivo ou de qualquer outro perifrico de entrada, como teclado ou scanner. Ento, a entrada
pode ser direta, atravs do usurio (receber o salrio) ou indireta, atravs da mquina (pegar a
data do sistema).
Cuidado: no so entradas os dados que podem ser gerados atravs de um clculo
ou de outras entradas.

Processamento: um processo que pega os dados de entrada e efetua uma operao (que pode
ou no ser matemtica), ou uma atribui. Nessa etapa tambm podem ser feitas comparaes e
consultas, gerando dessa forma o resultado e a soluo do problema.

Sada: a parte mais fcil e mais importante de todo o processo, onde devem ser exibidos os
resultados de todo o processamento. A sada pode ser feita por qualquer dispositivo de sada,
desde o monitor at a caixa de som.

Vamos mostrar as etapas de desenvolvimento com um exemplo muito simples e fcil de
resolver. Depois aumentaremos o grau de complexidade, mostrando sempre as alteraes.

1 Exemplo:
O Analista de Sistemas Joaquim pediu para o programador Jlio fazer um programa que efetue
a multiplicao de dois nmeros.
1 necessrio ler atentamente todo o exerccio.
2 Retire o que suprfluo, fique apenas com os dados necessrios.
3 Defina as trs etapas principais de seu algoritmo:

Entrada: Quais os dados de entrada necessrios?
Lendo o enunciado verificamos que para fazer o clculo necessrio ter dois nmeros, s
que estes no foram especificados e no sabemos quais so, por isso devemos receb-los.
Outro detalhe importante ignorar/desprezar a histria colocada no enunciado, como os
nomes e funes dos personagens.

Processamento: Qual clculo deve ser feito com os dados de entrada?
Lendo o enunciado vemos que a operao a ser feita com os dados de entrada a
multiplicao.
Prof Angelina V.S.Melar
13

Sada: O que dever ser mostrado? Qual o objetivo do enunciado?
O objetivo do enunciado calcular e mostrar o resultado da multiplicao de dois
nmeros.

Tendo as idias s montar o algoritmo:
1 Saber o valor do primeiro nmero
2 Saber o valor do segundo nmero
3 Fazer a multiplicao dos dois nmeros
Nmero 1 x Nmero 2 = ???
4 Mostrar o resultado da multiplicao

2 exemplo:
Juracema foi a livraria e comprou dois livros iguais de programao. Quanto ela pagar?
Entrada: Quais so os dados de entrada necessrios?
Saber o preo do livro

Processamento: Qual clculo deve ser feito com os dados de entrada?
Multiplicar o preo pela quantidade comprada, no caso 2. Veja que nessa situao
a quantidade j foi informada (2 livros), por isso, j a temos e no devemos solicit-la como
entrada.

Sada: O que dever ser mostrado? Qual o objetivo do enunciado?
Descobrir o valor que Juracema ter que pagar no caixa.

Algoritmo:
1 Receber o valor do livro
2 Multiplicar o valor do livro por dois (2).
3 Mostrar o resultado do clculo da multiplicao
Prof Angelina V.S.Melar
14

Tipos de Algoritmos

Os algoritmos podem ser escritos de diferentes maneiras, dependendo da sua aplicao.
Nesta apostila desenvolveremos os algoritmos de forma estruturada e padronizada
(pseudocdigo), possibilitando com isso um melhor entendimento dos processos.

1. Tipos de Algoritmos
Os tipos de algoritmos mais conhecidos so:
Descrio Narrativa
Fluxograma
Pseudocdigo
Diagrama de Chapin
Todos esses tipos de algoritmos consistem em analisar o enunciado do problema e
descrever os passos necessrios para a resoluo do problema. O que os diferencia a forma de
descrever e simbolizar esses passos. At o momento todos os algoritmos feitos foram atravs da
Descrio Narrativa.

Descrio Narrativa ou Linguagem Natural: A Descrio Narrativa consiste em
analisar o enunciado e escrever os passos utilizando uma linguagem natural, usada
diariamente pelas pessoas.
Vantagem: no necessrio aprender nenhum conceito novo, pois a lngua natural
(portugus) j conhecida.
Desvantagem: a ambigidade da linguagem coloquial, o uso de adjetivos ou a falta
de clareza quanto as frmulas matemticas. A lngua natural abre espao para vrias
interpretaes (dependendo da pessoa que o ler), o que posteriormente dificultar a
transcrio desse algoritmo para programa.

Fluxograma: O Fluxograma consiste em analisar o enunciado e escrever os passos
utilizando smbolos grficos predefinidos.
Vantagem: o entendimento de elementos grficos mais fcil que o entendimento
de textos.
Desvantagem: necessrio aprender a simbologia grfica do fluxograma e as
correes so mais trabalhosas por se tratar de representao grfica.

Pseudocdigo (portugus estruturado - portugol - pseudolinguagem): O
Pseudocdigo consiste em analisar o enunciado e escrever os passos por meio de
regras pr-definidas. As regras usadas neste material so estruturadas de acordo
com a programao na linguagem C.
Vantagem: a passagem do algoritmo para qualquer linguagem de programao
quase imediata, bastando conhecer as palavras reservadas da linguagem de programao
que ser utilizada. Ser como uma traduo, j que ser criada a estrutura do algoritmo
baseada na linguagem.
Desvantagem: necessrio aprender as regras do pseudocdigo.


Prof Angelina V.S.Melar
15
Pseudocdigo

Como j foi mencionada acima a passagem do pseudocdigo para uma linguagem de
programao mais rpida e a probabilidade de erros menor.

Regras de criao do Pseudocdigo
1. Todos os programas tm um comeo, um meio e um fim. Dessa forma, deve ser indicado
o incio e o fim, internamente as aes que sero executadas.
2. Deve ser usado o recurso de endentao, que deslocamento horizontal, transmitindo o
sentido de hierarquia de execuo.
3. Deve ser feito uso de termos nicos que definem uma ao, como: escreva, leia, se..ento.
4. Deve ser feito uso do conceito de variveis, assim como sua declarao.


Exemplo de Problema: Receba um nmero real e verifique se este positivo, negativo ou
nulo

Descrio Narrativa
1 Receber um nmero
2 Se o nmero for maior que zero, ento, mostre uma mensagem alertando que o nmero
positivo.
3 Se o nmero for menor ou igual 0 ento, deve aparecer uma mensagem avisando que o nmero
negativo ou nulo.

Pseudocdigo
Incio
real num;
escreva (Digite um nmero);
leia (num);
se (num > 0) ento
escreva (Nmero positivo);
seno
escreva (Nmero negativo ou nulo);
Fim

Qual das formas anteriores voc escolheria para construir um algoritmo? Qual desses
exemplos mostra de forma mais clara as aes?


Prof Angelina V.S.Melar
16
Fluxograma

O fluxograma um tipo de Algoritmo que representa graficamente (figuras geomtricas)
os passos necessrios para a resoluo do problema. Para cada passo efetuado, seja o de entrada,
o de processamento, o de sada ou condio tem-se um smbolo de representao. Algumas
empresas adotam smbolos padronizados no fluxograma.
Com a representao por smbolos grficos fica mais rpida a visualizao da lgica
empregada para resolver o problema.


Smbolo

Nome


Finalidade





















Terminal


Processamento


Conexo

Direo do Fluxo


Deciso


Processamento
Prdefinido


Teclado de Linha


Entrada/Sada


Documento ou
Relatrio

Exibio


Conector de Pgina


Subrotina

Indica o incio, continuidade ou fim


Indica operao, clculo ou atribuio


Utilizado para ligar pontos do fluxograma

Utilizado para indicar a seqncia da execuo, conecta os
smbolos

Indica a tomada de uma deciso ou comparao. Podendo
provocar desvios na seqncia lgica de execuo


Utilizado nas estruturas de repetio


Indica a entrada de dados por via teclado


Pode ser usado tanto para entrada quanto para a sada de
informaes

Indica operao de sada via impressora


Indica as sadas de informaes por dispositivos visuais


Usado para indicar a sequncia em outra folha/pgina


Especfica a chamada de uma subrotina

Prof Angelina V.S.Melar
17
SENHA = MARTH
O fluxograma para ser feito com xito, mostrando claramente os processos, deve seguir algumas
regras:
_ ser bem confeccionado;
_ ser legvel;
_ ter smbolos bem dimensionados e alinhados;
_ ter setas que indiquem a direo do fluxo das informaes;
_ a direo dos lados para as condies devem ser fixos;
_ o fluxo deve comear de cima para baixo e da esquerda para a direita;
_ no pode haver encontro das linhas de indicao do fluxo.
_ as informaes escritas dentro dos smbolos devem ser claras, resumidas e bem
entendidas.

Estrutura a ser usada
Veja os smbolos a serem usados e uma explicao mais detalhada de suas finalidades.

TERMINAL: A principal representao desse smbolo indicar o incio e o
fim de uma srie de procedimentos. Quando usarmos este smbolo devemos
identificar sua funo escrevendo dentro dele as palavras INCIO, FIM.

DIREO DE FLUXO: Essas setas indicam a direo do prximo passo a ser
executado, que pode estar a direita, a esquerda, em baixo ou em cima. Ele conecta os
smbolos e o fluxo de execuo, ou seja a sequncia da ao a ser executada.

TECLADO DE LINHA: Existem vrios smbolos que
representam a entrada de dados, mas como a maioria dos
programas a serem feitos tero os dados digitados via teclado
usaremos o smbolo do trapzio.

PROCESSAMENTO: O smbolo do retngulo deve ser usado toda vez que existir
qualquer tipo de processamento; seja um clculo, uma atribuio de valores as
variveis, ou mesmo alterao de qualquer dado.
B = 6

C = A + B



EXIBIO: O smbolo de Exibio um smbolo grfico que representada
sada,e serve para mostrar uma mensagem, um resultado.

Receber
SALARIO
Prof Angelina V.S.Melar
18
CONEXO: Algumas vezes o espao reservado para fazer o fluxograma pequeno e
temos que dividi-lo em partes, usando o smbolo grfico do conector.

A = 3 B = 6
1
1
C = A + B
K
K
FIM
INCIO




Diagrama de Chapin

O Diagrama de Chapin utiliza poucos smbolos e no precisa de nenhum conhecimento
especfico. A desvantagem de uso ocorre quando precisa de muito espao na horizontal e fica
mais difcil a compreenso. Veja os exemplos abaixo:

a)
Incio
Escreva Mensagem
Fim

b)
Incio
Escreva Digite seu nome
Leia NOME pelo teclado
Escreva Bom Dia + NOME
Fim

c)
Incio
Leia A e B no teclado
A maior que B?

Sim No
Escreva
A maior que B
Escreva
B maior que A
Fim


Prof Angelina V.S.Melar
19
Paradigmas de Programao forma de programar

As Linguagens de Programao adotam um estilo (padro) de desenvolvimento. Esse
estilo que possui caractersticas comuns identificam a linguagem, podendo ser: programao no
estruturada, programao estruturada, programao orientada objetos/eventos, programao
lgica. De acordo com o Paradigma de Programao ser desenvolvida a Lgica de Programao.

1. Programao No Estruturada:

Nessa programao a sequncia de aes que sero executadas so seqenciais,
obedecendo uma numerao de linhas. O nico modo de fazer desvios usando o V Para
(codificando GOTO). Essa linguagem no possui estruturas de controle de repetio como
Faa..Enquanto (while) e no permite a estratgia de modularizao.
Exemplo de linguagem no estruturada: Assembly e Basic

Algoritmo No Estruturado:
1. V para DESVIO2
2. DESVIO1.
3. Se precisar comprar ento
4. V para DESVIO3
5. V para DESVIO5
6. DESVIO3.
7. Procure a chave do carro
8. Se achou ento
9. V para DESVIO 2
10. V para DESVIO 4
11. DESVIO2.


2. Programao Estruturada (Procedural):

Em 1965 Edward Dijkstra apresentou um artigo que sugere a programao estruturada e a
eliminao de comandos de desvio.
Esse paradigma foi desenvolvido por Bohm e Jacopine em 1966, onde eles demonstraram
que a lgica pode ser expressa atravs de algumas estruturas bsicas.
Possuem as estruturas: linear (seqencial), deciso (condio ou escolha), de iterao
(repetio ou lao)
Em 1967, Floyd sugeriu o uso de comentrios intercalados.
Em 1970, Nicklaus Wirth sugeriu o processo de decomposio (refinamento sucessivo
das etapas).
A linguagem estruturada foi desenvolvida em grande parte pela m legibilidade causada
pelas instrues de controle de algumas linguagens no estruturadas.
Na programao no estruturada se usava muito a instruo de desvio GOTO para criar
estruturas de laos (iteraes).
Segundo Rinaldi, o que caracteriza a programao estruturada a possibilidade de diviso
de tarefas em rotinas ou blocos independentes entre si. A primeira regra para fazer um
programa a decomposio lgica do problema em partes independentes.
o Exemplo:
Prof Angelina V.S.Melar
20
Rotina: Calculo do desconto de IR
Bloco de verificao da faixa das alquotas

Nesse paradigma o programa tem uma seqncia de instrues executadas linearmente e
seus dados tratados de forma independente das funes, diferente da Programao
Orientada a Objetos.
Na programao estruturada permitido incluir sentenas em qualquer parte da linha.
A linguagem C no totalmente estruturada em blocos, porque no permite criar uma
funo dentro da outra.


3. Programao Orientada a Objetos
Nessa programao existe a definio de classes, encapsulamento, herana, que est
relacionada com a reutilizao e padronizao de cdigo.
A orientao a objetos vem propiciar o aumento de produtividade, diminuio do custo
de desenvolvimento e manuteno (manuteno evolutiva e no corretiva).
As classes so criadas para representar (categorizar) um conjunto de entidades (objetos)
que possuem as mesmas caractersticas e comportamento (ou mesmo similares) dentro de
um contexto.


Quando voc for escolher uma linguagem de programao, considere tambm a:
FORMA DE EXECUAO (Compilador ou Interpretador) e o NVEL DE
PROGRAMAO (baixo, alto)

Modularidade

4. Estratgia de Decomposio ou Dividir para Conquistar
A decomposio uma estratgia de resoluo de problemas. A idia dividir o
problema em problemas menores (subproblemas), at que cada parte (subdiviso) seja pequena o
bastante para que a soluo seja facilmente encontrada.
Segundo Villas, o termo Dividir para Conquistar veio da guerra, onde mais fcil vencer
grupos isolados de inimigos do que todos os inimigos juntos.
A decomposio de um problema reduz a complexidade do mesmo, pois a complexidade
tambm dividida. O foco da ateno fica isolado, de forma que se concentra em um problema
por vez. Quando se tem todos de uma vez, o desenvolvimento da lgica se dispersa e no se
chega a nenhum resultado.
A soluo mais rpida, j que a complexidade menor que ao original.
Como exemplo, podemos destacar o exemplo Folha de Pagamento de uma empresa.
Supondo que o objetivo principal gerar o demonstrativo de um funcionrio. Inicialmente parece
ser bem complexo, mas se voc analisar com calma tem como dividir esse problema, em
problemas menores, como o de calculo de descontos e clculos de benefcios.

Esse processo deve ser feito da seguinte maneira:
1. Divida o problema em suas partes principais no caso da folha, descontos,
benefcios seria um subproblema.
2. Analise a diviso e veja a coerncia da diviso
Prof Angelina V.S.Melar
21
3. Se uma diviso ainda estiver complexa, decomponha novamente. os descontos
podem ser divididos por especialidade
4. Reavalie tudo novamente.

Essa decomposio continua tambm conhecida como refinamento sucessivo. Porque
parte de um problema complexo e abrangente que sucessivamente dividido em problemas mais
simples e especficos.
A tcnica de Refinamento Sucessivo tambm pode se chamar Top-down (de cima para
baixo), uma vez que parte de um problema mais abrangente (abstrato) at atingir um nvel mais
detalhado e especfico. Normalmente essa tcnica a mais fcil de compreender.
Automvel inteiropeas separadas parafusos

Existe a tcnica Bottom-up (de baixo para cima), que o inverso dessa. Essa parte dos
conceitos mais detalhados e especficos e vai agrupando em nveis mais abrangentes (abstratos),
at atingir o nvel desejado.
Potenciao multiplicar somar
o Segundo Rinaldo, a modulao uma tcnica de resoluo de problemas, onde se
divide o problema maior (principal) em problemas menores. A soluo do
problema maior ocorre em decorrncia da soluo dos menores.

5. Mdulos
Cada subproblema um mdulo ou podemos dizer que um subalgoritmo ou subproblema
que realiza tarefas especficas. Em termos funcionais, existem dois tipos de mdulos:

1. Procedimento: um mdulo que executa uma tarefa especfica, que pode ou no gerar
vrias sadas usando as variveis globais ou locais. Ele no retorna valores para o
mdulo que o chamou.

2. Funo: um modulo que ir gerar uma nica sada e que ser devolvida para a funo
principal ou mdulo que o chamou.

Resumo das vantagens:

Subdiviso dos algoritmos complexos: facilita o entendimento;
Estruturao de algoritmos: facilita deteco de erros e a documentao do sistema
Modularizao de sistemas: facilita a manuteno e reutilizao do algoritmo
Prof Angelina V.S.Melar
22





SEGUNDA PARTE


LINGUAGEM C



















Prof Angelina V.S.Melar
23
Linguagem C

A linguagem C foi desenvolvida por programadores para programadores. Ela se
popularizou rapidamente devido a sua velocidade, segurana e eficincia. Com ela possvel
desenvolver desde um simples programa (uma calculadora) at um sistema operacional.

Origens da linguagem C
A linguagem C foi criada por Dennis Ritchie em 1972. Sua origem foi atravs da
linguagem BCPL, desenvolvida por Martin Richards, que influenciou Ken Thompson a criar o B,
que levou a linguagem C.
Com a popularizao dos microcomputadores houve um aumento no desenvolvimento de
implementaes em C, criando discrepncias entre elas. Para resolver essa situao, o rgo
americano de padronizao (American National Standards Institute), em 1983, criou C padro
ANSI, estabelecendo uma definio padronizada da linguagem C. A maioria dos compiladores
so compatveis com esse padro.
A linguagem C++ foi construda sobre os fundamentos da linguagem C e d suporte para
a Programao Orientada a Objetos.
Existem vrios ambientes de desenvolvimento para a linguagem C, como: DEV-C++,
Visual C++, Turbo C, CodeBlocks. O ambiente a ser usado o Dev-C++, cujo compilador a
implementao Mingw do GCC (Gnu C Compiler).

Resumo histrico
1966 BCPL (Martin Richards)
1970 - B (Ken Thompson)
1972 C (Dennis Ritchie)
1978 Livro The C Programming Language (Brian Kernigham e Dennis Ritchie)
1983 - C padro ANSI - rgo americano de padronizao (American National Standards
Institute) O padro ANSI definiu o contedo da biblioteca padro C, palavras
reservadas, estrutura da linguagem (prottipo da funo).
1985 - C++ ( o C projetado para suportar Programao Orientada a Objetos).

Caractersticas e Vantagens:
Facilidade para aprendizagem de outras linguagens de programao, inclusive as
orientadas a objetos
Constitudo por funes
Linguagem de programao estruturada
Ferramenta poderosa de desenvolvimento (pode desenvolver um editor de texto, um
aplicativo comercial, um programa para microcontrolador)
Portabilidade- em relao a mudana do cdigo para plataforma Windows ou Linux
Linguagem compiladora
Prof Angelina V.S.Melar
24

Processo de Compilao e Ciclo de Vida do Programa


6. Linguagem C Compiladora ou Interpretadora?

Uma linguagem de programao pode ser compiladora ou interpretadora. O que as
distingue a forma com que elas executam o programa.
O interpretador l o cdigo fonte linha a linha, executando-as em seguida. J o
compilador, l o cdigo fonte inteiro e se este no tiver erros de sintaxe, ser convertido em um
cdigo de mquina, fazendo com que o processador consiga entend-lo e execut-lo. Se forem
feitas alteraes no programa, este ter que ser compilado novamente, gerando um novo cdigo
de mquina.
Um computador s pode executar programas em linguagem de mquina. Cada programa
executvel uma seqncia de instrues que o processador interpreta e executa as operaes
correspondentes.
O cdigo fonte a traduo dos comandos do pseudocdigo para as respectivas
instrues da linguagem de programao (por exemplo, linguagem C). Essas instrues depois
so traduzidas para a linguagem da mquina (que a linguagem interna que o computador
entende).
O arquivo objeto somente gerado quando o arquivo fonte no possui erro de sintaxe.


7. Ciclo de Vida do Programa

Criao do programa
Para se fazer um programa deve-se escrever uma sequncia correta de instrues que
devero se executados pelo computador. Para se chegar nessa sequncia deve-se desenvolver o
Algoritmo. Essa lgica deve ser desenvolvida numa linguagem natural, parecida com a do ser
humano, que pode ser a Descrio Narrativa e o Pseudocdigo.
Depois de solucionado o problema e escrito o algoritmo em pseudocdigo, este deve ser
passado para uma linguagem de programao, ou seja, codificado. Na nossa disciplina ser
usada a linguagem de programao C. O programa codificado e digitado se chama Arquivo
Fonte. Este deve ser salvo com a extenso .C. Se no for digitada a extenso, ser assumir a
extenso .cpp que padro do ambiente de desenvolvimento (cpp significa c plus plus ou c++).
Para executar esse programa necessrio compil-lo e link-lo. Na compilao as
instrues (linhas) so verificadas e interpretadas pela mquina (CPU), se no houver erros de
sintaxe, ser gerado o arquivo executvel (extenso .exe).
O linkeditor (linker) une os cdigos dos arquivos de bibliotecas usados pela linguagem C
com os arquivos fontes criados pelo programador. Para ver o programa funcionando basta digitar
seu nome ou dar um duplo clique no cone do programa, de acordo com o ambiente que voc
estiver (texto ou grfico).
Os erros de lgica s podem ser detectados pelo programador depois de gerado o arquivo
executvel.
Prof Angelina V.S.Melar
25
Resumo das etapas da criao de um programa
1. Necessidade de um programa
2. Enunciado do problema
3. Descrio das idias numa linguagem natural Descrio Narrativa
4. Criao da sequncia correta de instrues Pseudocdigo - de acordo
com o mtodo da linguagem a ser usada (estruturada)
5. Codificao para uma linguagem de programao Linguagem C
6. Processo de compilao Verificao dos erros de sintaxe, gerao do arquivo
objeto, unio com as bibliotecas
7. Criao do arquivo executvel

O ciclo de criao de um programa em C pode ser analisado abaixo, na seqncia de
figuras abaixo.


arquivo objeto arquivo objeto
arquivo fonte
arquivo biblioteca
arquivo fonte
...
Linkedio
arquivo executvel
arquivo objeto arquivo objeto
arquivo fonte
arquivo biblioteca
arquivo fonte
...
Linkedio
arquivo executvel
Algoritmo
Prof Angelina V.S.Melar
26

Ambiente de Desenvolvimento DEV-C++

1. Ambiente integrado
O DEV-C++ um ambiente integrado de desenvolvimento para a linguagem de
programao C e C++, que inclui um local para digitao do programa (editor de texto), um
compilador (gcc - Gnu C Compiler), um linkeeditor e janela de visualizao do executvel.
Nesse ambiente possvel desenvolver aplicaes console (Console Application), cuja
interface texto ou aplicaes grficas (GUI Application) que usam janelas e elementos visuais
como interface.
Pode-se digitar o programa em outro editor de texto, como o Bloco de Notas, o Word,
devendo ter o cuidado de salv-lo como um arquivo texto, sem qualquer tipo de formatao.
O DEV-C++ pode ser adquirido gratuitamente pelo site
http://www.bloodshed.net/devcpp.html. A verso mencionada nesta apostila a verso 4.9.8.0,
em portugus.



2. Configurando o ambiente e o editor
As configuraes padres do compilador, do ambiente e do editor
de texto podem ser alteradas atravs do menu Ferramentas. Se o seu
ambiente est em ingls mude-o para portugus atravs do menu Tools
(ferramentas) opo Environment Options (Opes do Ambiente) guia
Interface escolha o portugus.
Procure personalizar o seu ambiente de trabalho, criando atalhos e
facilidades no processo de digitao. Por exemplo:
Menu Ferramentas Opes do Editor Ative a opo Destacar as
chaves e os parnteses. Na guia Display ative a opo Nmeros das linhas.
No menu Exibir desabilite a exibio do Navegador de classes/projetos clicando apenas
uma vez nessa opo.


Prof Angelina V.S.Melar
27
3. Configuraes para o Windows Vista/7
Para que o Dev funcione corretamente no
Windows Vista, algumas configuraes devem ser
feitas:
No menu Ferramentas escolha a opo
Opces do Compilador na guia Diretrios, em
Binrios deve ser adicionado o caminho C:\Dev-
Cpp\libexec\gcc\mingw32\3.2 (se no houver).
Na guia Programas deve ser colocado
C:\Dev-Cpp\bin\ em cada linha. Por exemplo, a
primeira linha fica assim: C:\Dev-Cpp\bin\gcc.exe

4. Digitao do programa
Para a digitao do programa no DEV-
C++ necessrio seguir os seguintes passos:
1. No menu escolha a opo Arquivo (File);
2. Escolha a opo Novo e depois Arquivo Fonte ou se preferir a tecla de atalho
<CTRL> e <N> simultaneamente;
3. Aparecer uma nova janela, com o ttulo: (*) Sem Ttulo 1, onde deve ser feita a
digitao do programa fonte.
4. Dependendo da verso, ou mesmo da configurao pr-definida no editor, aparece
um programa inicial. Pode-se apag-lo ou deix-lo, aproveitando as linhas de
cdigo j digitadas.

5. Gravao do programa
Aps a digitao do programa, ele dever ser salvo antes de ser executado, de acordo com
as etapas abaixo:
1. No menu Arquivo escolha a opo Salvar ou use a tecla de atalho <CTRL> e <S>
simultaneamente.
2. Escolha o diretrio de trabalho, digite o nome do arquivo fonte e pressione o
boto Salvar. Observe que a extenso padro do DEV-C++ o .cpp.
Ao salvar o arquivo fonte, cuidado para no salva-lo com nome invlido (com espao
entre as palavras, iniciado com nmero.
Toda vez que voc pressionar o F9 para compilar e executar o Dev estar salvando
automaticamente seu programa.
6. Compilao e execuo do programa
Existem diversas maneiras de ver se o programa est sem erros e funcionando, entre elas:
1. Escolhendo a opo Executar (Execute) do menu e dentro dela a opo Compilar e
Executar (Compile and Run); ou
2. Pressionando a tecla de funo <F9> ou na barra de ferramentas a opo Compilar
e Executar.
Se voc quiser apenas verificar se existem erros no programa, poder inicialmente
compil-lo (atravs do menu Executar, opo Compilar) e futuramente execut-lo (atravs do
menu Executar, opo Executar).


Prof Angelina V.S.Melar
28
7. Criando um cdigo fonte padro

Uma boa forma de configurar o editor criar um
modelo inicial de programa fonte, ou seja, toda vez que
for iniciado um novo arquivo ir aparecer o modelo que
voc definiu. As linhas de comandos e bibliotecas mais
comuns ficam digitadas neste modelo.
Para criar o modelo de cdigo padro escolha a
opo Ferramentas, depois Opes do Editor e a guia
Cdigo. Na parte inferior clique no Cdigo Fonte
Padro e digite seu cdigo fonte.


Os caracteres especiais acentos, cedilha nesse ambiente console so convertidos.
Prof Angelina V.S.Melar
29

Estrutura do Programa na Linguagem C

Um programa codificado na linguagem C tem uma sintaxe e estrutura um pouco diferente
de um programa escrito em outra linguagem, como Pascal. Em C, se trabalha com vrias funes
e bibliotecas. Um programa precisa ter necessariamente uma funo principal (main), que tem as
instrues e funes iniciais do programa. Veja o exemplo abaixo:





1. Estrutura bsica
Um programa feito na linguagem C constitudo basicamente de:
Documentao do programa: comentrios que o programador considera importante,
como objetivo do programa.
Cabealho:
Diretivas de pr-processamento, onde sero definidas as constantes e
includos os arquivos de cabealho.
Declarao e inicializao de variveis globais.
Blocos de instrues: um bloco principal (funo main) e outros blocos de rotinas
(outras funes chamadas a partir da main()).


2. Diretivas
As diretivas do pr-processador iniciam com o smbolo # e cada diretiva deve ser escrita
em linha distinta. As diretivas instruem o compilador a execuo de uma ao dentro do cdigo-
fonte do programa em C. As diretivas do padro C ANSI a serem usadas so: #include, #define.
O pr-processador do C um programa que examina o arquivo fonte e executa as devidas
modificaes com base nas diretivas. Como por exemplo, ao encontrar a diretiva #include ele faz
um desvio, localiza a funo na biblioteca e adiciona seu cdigo ao cdigo do arquivo fonte.
Prof Angelina V.S.Melar
30
#include
Essa diretiva quando lida faz a incluso de um arquivo de cabealho ao arquivo-fonte.
Exemplo:
#include <stdio.h>
arquivo de cabealho: stdio.h

STD standard padro
I input
O output
Funes padres de entrada e sada
Funes associadas: scanf(), printf()

#define
Essa diretiva define um identificador (constante simblica) e uma string que o substituir
toda vez que for encontrado no cdigo-fonte.
Estrutura: #define identificador string

Exemplo: #define EXIBA printf
#define TEXTO \nProgramao de Computadores na Fatec
main()
{
EXIBA(TEXTO);
}

Ao ser executada a diretiva #define, o compilador associa a palavra EXIBA a palavra
printf e toda vez que aparecer a palavra EXIBA ele a substituda por printf e a palavra TEXTO
ser substituda por \nProgramao de Computadores.


3. Arquivos de Cabealho (header)
Cada funo definida na biblioteca C tem seu respectivo arquivo de cabealho (como
citado acima), ou seja, se voc utilizar uma funo de entrada -scanf()- ter que incluir seu
respectivo arquivo de cabealho (stdio.h) no incio do programa. Esse arquivo possui a definio
de tipo e o prottipo da funo.
Os arquivos com a extenso .h, so chamados de arquivos de cabealho, ou header files.










Dica: O arquivo de cabealho feito pelo programador colocados entre .
Exemplo: #include funccondicao.h

Arquivo de
cabealho
Finalidade
stdio.h
conio.h/conio.c
math.h
stdlib.h
time.h
string.h
Suporta entrada e sada com arquivos
Suporta E/S pelo console
Possui diversas funes matemticas
Declaraes miscelneas
Funes de horrio do sistema
Funes de string
Prof Angelina V.S.Melar
31
4. Biblioteca
Uma biblioteca uma coleo de funes. Um arquivo de biblioteca armazena o nome de
cada funo, mais as informaes necessrias para o processo de linkagem. Quando o programa
se referencia a uma funo, o linkeditor procura a funo na biblioteca (que possuem vrias) e
adiciona a parte do seu cdigo ao programa.
As funes padres existentes na biblioteca do compilador C foram definidas pela ANSI.
Algumas empresas criaram funes novas e acrescentaram ao compilador, como por exemplo, a
Borland, acrescentou ao Turbo C a biblioteca CONIO (Console Input/Output).

5. Bloco de instrues e Funo MAIN()
Todos os programas na linguagem C comeam executando o contedo descrito na funo
principal (main) e finalizam com o trmino dessa funo. Essa funo determina a execuo e
ordem de execuo das demais funes que existirem.
As funes possuem um conjunto de instrues (bloco de comandos) com uma tarefa
especfica, como por exemplo, uma funo para calcular um desconto ou logaritmo de um
nmero. O contedo de uma funo delimitado por chaves { }- incio e fim. O cdigo que
estiver dentro das chaves ser executado seqencialmente quando a funo for chamada.

6. Projeto
Pode ser criado um projeto em C, onde podem existir vrios programas (arquivos fontes),
mas um nico arquivo executvel gerado pelo compilador.
Nos projetos sempre haver um arquivo com a funo principal (main()) que indicar o
incio do projeto.

7. Regras de Digitao e Dicas da Estrutura em C
Espaos em branco so desconsiderados
D preferncia para um cdigo limpo, fcil de entender, com alinhamento e endentao. Como
no exemplo que segue:
Com espaos Sem espaos
(correto e incompreensvel) (correto e compreensvel)
#include <stdio.h> #include <stdio.h>
main() { .} main()
{
.
}

H diferenciao de letras maisculas e minsculas (case sensitive)
A linguagem C case sensitive, ou seja, diferencia letra maiscula da minscula. Exemplo:
NOME diferente de Nome que diferente de nome.
As palavras-chaves de C so minsculas. (else palavra-chave, mas ELSE ou Else no
so).

Os parnteses aps o nome de uma funo, como a funo main() obrigatrio.

As chaves { } servem para delimitar um bloco de instrues. As variveis devem ser
declaradas no incio.

Prof Angelina V.S.Melar
32
No C para indicar o final de uma instruo deve ser usado o ;(ponto-e-vrgula). Se for
necessrio podem ser digitadas vrias instrues numa mesma linha.
Como por exemplo: printf Exemplo da Estrutura ; printf de um Programa em C;

Cuidado com as palavras reservadas, exemplo: include, printf, main. Na linguagem C tem
32 palavras, sendo que 27 criadas pelo Dennis Ritchie e 5 do padro ANSI.


8. Comentrios
Para facilitar a compreenso coloque comentrios ao decorrer do cdigo. Esses comentrios
podem ser feitos de duas maneiras:
usando duas barras para comentrios de uma nica linha
barra asterisco para comentrios de mais de uma linha.

Exemplos:
a) Comentrio de uma linha
#include <stdio.h> //Essa linha inclui a biblioteca que tem funes de entrada e sada

O comentrio tambm pode ser iniciado no comeo da linha
soma = n1 / n2;
//o operador de diviso a barra

b) Comentrio com vrias linhas
/*
Autor: Julia Melar
Data: 15/07/2007
Sistema: Cadastro de Fornecedores
*/
Prof Angelina V.S.Melar
33
Variveis

Os dados armazenados no computador podem ser apresentados de duas formas diferentes:
como constantes ou variveis.

1. O que so variveis?
Os dados fornecidos pelos dispositivos de entrada ou aqueles dados processados so
armazenados numa rea da memria do computador chamada de varivel.
A varivel uma posio reservada da memria que usada para armazenar um valor
(tipo de dado) temporariamente. Esse valor pode ser alterado a qualquer momento durante a
execuo do programa. Essas variveis so utilizadas como reas de trabalho, ou seja, como uma
lousa, onde podemos escrever, modificar e apagar quantas vezes for necessrio. Cuidado: cada
varivel armazena um nico contedo por vez, quando for inserido um novo valor, o anterior
apagado.








2. Mas em que parte da memria vo os dados?
Cada dado ser armazenado em uma posio diferente da memria, essa posio um
endereo fsico da memria RAM. Todos esses endeeos precisam ser identificadas, ou seja, ter
um nome de referncia para cada alocao feita na memria. O nome (identificador) da
varivel torna-se o seu endereo.
Imaginem como voc encontraria uma pessoa sem ter seu endereo ou telefone? Imagine
ter que ser saber endereos fsicos: 10CF, 2A00?

Identificadores
Os identificadores so os nomes dados para as variveis, constantes e funes.
A melhor forma de nomear verificar qual ser seu contedo e definir o nome de acordo com
ele. Por exemplo, se for definir uma varivel para armazenar o resultado da soma identifique
como soma.
Imagine as variveis como gavetas etiquetadas, cada uma com um nome, voc somente deve
colocar contedos (objetos) nas gavetas de acordo com a identificao e tipo definido para ela.
Em C existem algumas regras para a formao dos identificadores:
_ o primeira caracter tem que ser obrigatoriamente uma letra ou um sublinhado;
_ o nome pode ser formado por nmeros, s que estes no podem ser colocados na
primeira posio.
_ no pode ter caracteres especiais ou espao, com exceo do caracter _ (underline);
_ as letras maisculas e minsculas so tratadas diferentemente (case sensitive).
_ no pode ser igual a uma palavra reservada da linguagem.
_ no pode ter acento e cedilha ()
__ somente os 31 caracteres so vlidos

Memria
Variveis
Prof Angelina V.S.Melar
34
3. Declarao de varivel

A declarao de variveis obrigatria em quase todas as linguagens de programao,
onde nela feita a definio do nome/local de armazenamento (ligada ao endereo fsico) e
quanto de espao ser reservado para o contedo a ser armazenado (tipo de dado).
A declarao da varivel deve ser feita obrigatoriamente antes da sua utilizao, podendo
ser declaradas em lugares diferentes: dentro da funo (varivel local), fora da funo (varivel
global), ou dentro de um bloco de instrues.

No se esquea que ao definir o tipo de varivel est se determinado a quantidade de espao
(bytes) que ser alocado na memria e o intervalo de valores que ela poder armazenar.

Observao:




Exemplos de Declarao de Varivel:
tipo_de_varivel nome_varivel, nome_varivel;
Pseudocdigo C Dicas em C
real salario;
inteiro num_filho;
caracter sexo;
real porc_aum 5.5;

inteiro qtd_pao, qtd_leite;
float salario;
int num_filho;
char sexo;
float porc_aum =5.5;

int qtd_pao, qtd_leite;



Pode ser atribudo um contedo a varivel
quando ela for declarada.
Podem ser declaradas diversas variveis do
mesmo tipo ao mesmo tempo.



No pseudocdigo o smbolo significa atribuio.
Na linguagem C ela representada com o smbolo =.
Prof Angelina V.S.Melar
35
CONSTANTE
VARIVEL
Constantes

Constantes so dados com valores fixos que no podem ser alterados durante a execuo do
programa. Dentro de um programa podem existir vrias constantes, como por exemplo, o ano
atual, o valor de PI.
As constantes podem ser definidas sem identificador, sendo inseridas diretamente. como na
expresso matemtica:




X + Y + 3


O X e o Y seriam as variveis do programa, pois so as incgnitas e contm um valor
sujeito a alterao, j o nmero 3 uma constante, o seu valor j conhecido e no poder ser
alterado. Em todas as execues ele sempre ser 3.

Exemplos:
A) Data_atual = 1990
Valor_aumento = 1000
Porc_desconto = 0.10
PI = 3.141592

B)
#include <stdio.h>
#include <stdlib.h>
const int ANO_ATUAL = 1990;
main()
{
// ANO_ATUAL = 300; //no permite mudana de valor
printf("%i", ANO_ATUAL);
_sleep(2000);
}


Prof Angelina V.S.Melar
36
Tipos de dados


Quando colocamos o termo tipos de
dados bsicos nos referimos aos tipos
primitivos da linguagem. Cada linguagem
tem seus tipos primitivos e a partir deles
podem criar novos.
Lembre-se que o computador
processa dados. Pense que quando se agrega
valor a um dado tem-se uma informao.
Exemplo: 22 de maro dado, no informa
nada, mas se colocarmos o Dia da gua, que
ocorre no dia 22 de maro, ele tem outro
valor, traz uma informao muito importante,
de conscientizao e valorizao do meio de
sobrevivncia da espcie humana.
Quando voc define o tipo de varivel
o computador reserva (aloca) um espao
(quantidade de bytes) de acordo com o esse
tipo. Mesmo que o valor recebido e
armazenado seja menor que o espao
reservado o computador ainda conserva o
mesmo tamanho pr-definido, havendo um
desperdcio de memria.
Defina de forma correta o tipo de
dado, para que no ocorra falta de memria
durante a execuo do programa ou lentido
de processamento.
Na linguagem C os tipos primitivos
so: caracter (char), inteiro (int), real (float e
double) e sem valor (void).
possvel em C manusear dados
numricos nas bases binria, octal, decimal e
hexadecimal.


1. Numrico
O tipo numrico armazena apenas valores numricos, que podem ser: inteiros ou reais.

Numrico Inteiro - int
Contm nmeros que no possuem a parte decimal, podendo ser positivos, negativos ou
nulos. A representao desse tipo no pseudocdigo ser int, abreviao de inteiro. Na linguagem
C int, abreviao de integer.
Pseudocdigo
int num= -4;
Codificao em C
int num1 = 6000, num2;

Numrico Real- real
So os nmeros positivos, negativos ou nulos que possuem a parte fracionria (parte
decimal). O separador decimal o ponto e no a vrgula (padro americano).
O tipo real pode ser representado pelo real simples ou duplo, a diferena est na preciso
e no nmero de casas decimais. O real simples identificado como float na linguagem C e tem
at 6 dgitos de casas decimais. Se for necessria uma preciso dupla necessrio usar o tipo
double, que suporta at 11 digitos. No pseudocdigo ser definido apenas como real.
Pseudocdigo
real salario= 350.50;
Codificao em C
float n1=20.0, n2 = -15.50;
float n1=0.0, n2, soma;

2. Literal/ Cadeia de Caracteres
Na linguagem C no existe o tipo literal, tambm conhecido como alfanumrico, string,
que aceita armazenar vrios caracteres. Quando houver necessidade do armazenamento de um
nome dever ser feito uso de uma matriz de caracteres.

Prof Angelina V.S.Melar
37
3. Lgicas
As variveis definidas como lgicas (booleanas) podem guardar apenas um dos dois
estados: Verdadeiro ou Falso, sempre armazenando apenas um dgito. Na linguagem C no existe
um tipo especfico para a representao de valores lgicos. O dgito 0 representa o valor lgico
falso e 1 representa o valor lgico verdade (todo valor diferente de 1 falso) .
Pseudocdigo
lgico estado_lampada;
Codificao em C
while (1) //loop infinito

4. Caracter
O tipo char usado para armazenar um caracter da tabela ASCII, que possui letras (a..z,
A..Z), nmeros (0..9) e caracteres especiais (, ^, &, =, #, :). Na maioria dos ambientes no pode
ser usado para clculo, mesmo tendo armazenado um nmero.
Quando for um nico caracter colocamos seu contedo obrigatoriamente entre
apostrofe(). Quando for uma cadeia de caracteres, colocamos entre aspas ().

Pseudocdigo
caracter sexo;
caracter opo = a;

Codificao em C
char sexo = f;
char flag = !;


Exemplo de programa:
main()
{
char a='1', b=1;
printf("%c - %c", a, b);
_sleep(2000);
}
Perceba que a varivel a armazena o smbolo 1 e a varivel b armazena o primeiro
smbolo da tabela ASCII que a carinha.
printf("\n%c - %c - %i - %i\n", a, b, a,b);
//Resultado:1 carinha 49 1 1
//caracter 1 e o primeiro smbolo na ASCIII - o smbolo 1 a carinha
//o smbolo 1 na ASCII tem seu decimal o 49
//o 1 inteiro o 1 na exibio definida como inteiro

5. Espao Alocado de Memria
No se esquea que cada byte ocupa 8 bits (de 0 a 7). Cada bit possui dois estados ( 0 ou
1 )- base 2. Ento, um byte possui 2
8
= 256 combinaes possveis.
Ento o tipo caracter que ocupa 1 byte pode armazenar 256 combinaes diferentes de
bits.Se a cada 8 bits pode-se ter a representao de um nmero inteiro, ento, o char pode
armazenar valores de 0 a 255.
Nmero Decimal 49 Caracter 1 (ASCII)
Bit 7 6 5 4 3 2 1 0
Base Decimal 128 64 32 16 8 4 2 1
Estado - valor 0 0 1 1 0 0 0 1

Prof Angelina V.S.Melar
38
Um tipo que armazena 2 bytes pode ter 2
8
x 2
8
combinaes diferentes de bits, que
equivale a 65538. O que armazena 4 bytes pode ter 2
8
x 2
8
x 2
8
x 2
8
combinaes diferentes,
que equivale a 2.147.483.647 (+- 2 bilhes de combinaes).






6. Modificadores de Tipos
Os modificadores de tipos so usados para modificar o tipo primitivo, fazendo com que
ele aceite outra faixa de valores, aceitando nmeros negativos e positivos.
O tipo signed faz com que o tipo represente os nmeros positivos e negativos. O
unsigned somente aceita os nmeros positivos. A representao de nmeros negativos feita
tomando o bit MSB (Most Significant Bit), onde msb=1 o sinal negativo e msb=0 o sinal
positivo. Como utilizado bit para representao de sinal os valores a serem representado so
metade da faixa padro. Por exemplo, o tipo char que vai de 0 a 255 do tipo signed (s
positivos), para aceitar tipos negativos tem que ser unsigned e seus valores vo de -128..0..+127.
O padro C padro ANSI define que os tipos so signed e no compilador CCS,
MikroC o padro unsigned.
O tipo short (reduz) e long (amplia) so usados para aumentar ou diminuir a faixa de
valores dos tipos bases.

Exemplo:
a) unsigned char n1= 255;
char n2= 255; //padro signed
printf("Unsigned %i - signed %i", n1, n2);
Resultado: 255 e -1


Dica: Pode-se definir valores em outras bases (diferente da decimal):
int hex = 0x80
int oct = 012
128 em decimal
10 em decimal
Valor = 50
Valor = 050
Valor = 0x50
Valor = 0b01010000

Decimal
Octal
Hexadecimal
Binrio
Tipo de
Varivel
Qtd de
bytes
Qtd de
bits
Exemplo de
valores
char
int
float
double
void
1
4
4
8
0
8
32
32
64
0
f 1
14 -23
15.655 10.0
-14.7688665

Prof Angelina V.S.Melar
39
7. Tabela ASCII (American Standard Code for Information Interchange)
Cada combinao de byte pode representar internamente um smbolo (letra, dgito numrico
ou caracter especial). Veja no final dessa apostila a explicao detalhada da ASCII.

FATEC


Exemplo de Cdigo que mostra a ASCII Estendida Unicode Latim I Suplementar (8 bits)
main()
{
int tab;
printf("Caracter Decimal Hexadecimal\n");
for(tab=0;tab<=255;tab++)
printf("\t%c - %i - %x ", tab, tab, tab);
}

































F A T E C
70 65 84 69 67
01000100 01000001 01010010 01000101 01000011
Prof Angelina V.S.Melar
40
8. Cdigo de Barra Invertida
Algumas combinaes e representaes da tabela ASCII no podem ser exibidos na tela,
pois tem uma funo especial- funo de controle. Por exemplo, o retorno de carro (return ou
enter) cujo cdigo decimal o valor 13. Para inserir esses cdigos deve-se usar a barra
invertida juntamente com o cdigo desejado.












Sufixos usados: long int L, unsigned int U, float F, long double- L

Exemplos de Cdigos:
#include <stdio.h>
#include <stdlib.h>
#include <conio.c>
main()
{
char ch;
ch = getch();
if (ch == 13) printf ("Enter %c", ch);
if (ch == 27) printf ("ESC %c", ch);
if (ch == 9) printf ("TAB %c", ch);
if (ch == 8) printf ("Backspace %c", ch);
if (ch == 127) printf ("Del %c", ch);_sleep(2000);
}

main()
{
char ch1= '\a', ch2='\t';
printf("%s", "Alo\n");
printf("%cVeja que esta na proxima linha %c", ch2,ch1);_sleep(2000);
}
/* Exibe o alfabeto em minsculo, usando um contador definido como char.*/
main()
{
char ch;
for (ch='a'; ch <='z'; ch++)
printf("\t%c", ch);_sleep(2000);
}

Cdigos de Controle
Cdigo Formato
\a
\b
\n
\r
\t
\b
\
\\
\
\v
soa um sinal sonoro- alarme
o cursor retrocede uma coluna
o cursor avana para uma nova linha
o cursor retrocede para a primeira coluna da linha
o cursor avana para prxima marca de tabulao
retrocede - backspace
exibe uma aspas duplas
exibe a barra invertida
exibe a aspas simples
faz a tabulao vertical
Prof Angelina V.S.Melar
41
Exerccios de Variveis
1) Defina quais so as variveis e constantes das expresses abaixo:
a) 15 + 14 * y + 3
_____________________________________________________________

b) x + 5 + x + x
_______________________________________________________________

2) Quais identificadores das variveis esto corretos? Explique.

a) 5teste
b) n_rg
c) c.p.f
d) valor-sal
e) cod1
f) cidade/uf
g) $salario
h) _ir
i) n sapato
j) num2cod2
k) nome
l) x
m) my


3) Identifique o tipo ideal para as variveis abaixo. A letra F identifica como nmero real, o I como
numrico inteiro, o C como caracter e o E quando estiver incorreta a alternativa.
a) -8
b) 0
c) X
d)
e) .V.
f) 9
( )
( )
( )
( )
( )
( )

g) -600
h) 500.33
i) 789003983
j) 300.00
k) -92.34
l) 945

( )
( )
( )
( )
( )
( )


4) Identifique as variveis nomeando-as e definindo o tipo de dado ideal para armazenamento.

Informao

Estado civil
Nmero que cala
Peso
Altura
Valor da conta de luz
Salrio
Valor pago pela refeio

Nome da Varivel

________________
_________________
_________________
_________________
_________________
_________________
_________________

Tipo de Varivel

_________________
_________________
_________________
_________________
_________________
_________________
_________________


Prof Angelina V.S.Melar
42
Operadores Aritmticos

1. Operadores Aritmticos

Os operadores aritmticos so os operadores usados nas operaes bsicas da matemtica.
Esses operadores so usados para representar as expresses matemticas, os resultados so
valores numricos.
Eles so: +, -, *, /.
Ainda existem o mod e o div, que representam o resto da diviso e o quociente da diviso
na respectiva ordem. Esses operadores somente podem ser usados para nmeros inteiros.

Exponenciao: usada para elevar um nmero a outro. O operador pode ser o sinal circunflexo
(^) ou dois asteriscos (**) ou uma funo (pow ou exp), dependendo da linguagem de
programao.
Na linguagem escrita quando elevamos um nmero a outro, como o exemplo 2. Desta
forma entendemos que o nmero 2 a base e o 3 o expoente. No computador a representao
diferente. No lugar de colocarmos o 3 em cima , o colocamos do lado, e no meio o smbolo, que
representa o operador de potenciao, ficando da seguinte forma: 3 ** 2 ou 3 ^ 2.
A exponenciao tem maior prioridade que os demais operadores.
Exemplo: 2 ^ 3 ou 2 ** 3
O resultado dessa operao 8, ou seja, o 2 igual a 8.
No C pow(2,3), e em Pascal exp(2 * ln(3)).

Mod e Div
Em muitas linguagens de programao existem o operador div e mod, que tem a funo
de trabalhar com nmeros inteiros. Esses operadores tm a mesma prioridade e devem ser
efetuados antes da adio ou subtrao.
Quando estivermos fazendo clculos de diviso com nmeros inteiros (10, 4500, -900, -
15) podemos utilizar o operador DIV. O resultado da expresso onde foi usado o DIV sempre
um nmero inteiro, o quociente.
5 DIV 2 = 2
5 MOD 2 = 1
Obs: Na linguagem C usado o operador % para representar o MOD.






Exemplos:
22 DIV 5 = 4
22 MOD 5 = 2 ou em C 22 % 5 = 2
70 MOD 10 = 0
2 DIV 2 = 1
-400 DIV 4 = 100

5 2
2 1
Parte Inteira da Diviso
(Quociente)
Resto da Diviso
Prof Angelina V.S.Melar
43
Operadores Aritmticos da Linguagem C
Os operadores aritmticos da linguagem C so: ++, --,*, /, %, +, -. Esses operadores j
esto na ordem de precedncia de execuo. O ponto (.) representa o separador decimal e a
vrgula (,) o separador de milhar. Os operadores com a mesma precedncia so executados da
esquerda para a direita.

2. Operadores de Incremento e Decremento
Esses operadores podem ser usados como prefixo ou sufixo, como, ++n1 ou n1++.
Quando o operador precede a varivel ((++n1), ele executa a operao (incremento ou
decremento) antes de usar o contedo da varivel. Se o operador estiver depois da varivel
(n1++), o computador primeiro usa o valor armazenado na varivel para depois executar a
operao.
Exemplos:
a) n1 = 10 n2 = ++ n1 resultado n2 = 11
b) n1 = 10 n2 = n1++ resultado n2 = 10 somente a prxima vez o x vale 11

3. Operadores Aritmticos de Atribuio ou C Reduzido
Na linguagem C pode ser feito usado de um operador aritmtico com o comando de
atribuio, dessa forma simplificando a programao.
Exemplo: num = num + 2 pode ser escrito da seguinte maneira: num+=2;
num2 = num1 = 10 o valor 10 atribudo a num1 e, em seguida o valor de num1
atribudo da num2 (da direita para a esquerda).

No exemplo acima o operador += acrescenta 2 ao valor da varivel num e o armazena a
varivel num. Esse forma de calculo pode ser usada para qualquer operador aritmtico, como:
num-=2 ou num = num 2;
num*=2 ou num = num * 2;
num/=2 ou num = num / 2;
num%=2 ou num = num % 2;

4. Converso de Tipo
A linguagem C oferece o recuso de converso automtica de valores. A converso pode
ser feita usando o operador cast (operador de molde de tipo). Esse operador colocado entre
parnteses antes do valor a ser convertido.
Exemplo:
a) float x = 5;
o valor de x convertido para 5.0;

Operador Operao Exemplo
+
-
*
/
%
- -
++
Adio
Subtrao
Multiplicao
Diviso
Mdulo
Decremento
Incremento
1 + 1 = 2
1 1 = 0
2 * 2 = 4
2 / 2 = 1
2 % 2 = 0
--x x = x - 1
++x x = x + 1
**Cuidado, ao ser usado o
operador de diviso a um tipo
inteiro, ser retornado um valor
inteiro. Por exemplo, 5/2 ser
igual a 2.

**Sempre ser retornado um valor
real quando houver pelo menos um
nmero real envolvido.
Prof Angelina V.S.Melar
44
b) 5 / 2.0
o valor de 5 convertido para 5.0, porque o segundo operando 2.0. O
resultado da expresso 2.5

c) int a, b;
a = (int) 3.5; -- atribudo o valor 3 para a varivel a
b = (int) 3.5 % 2; -- convertido o valor 3.5 para 3 para depois fazer a
operao mdulo, que s pode ser feita com valores do tipo inteiro.


Prioridade dos Operadores Aritmticos

A precedncia (maior prioridade) de operadores segue a ordem: *, /, %, +, -. Os
operadores com a mesma precedncia so executados da esquerda para a direita.

Operador Finalidade Prioridade Linguagem C
^ ou **
*
/
div
mod
+
-
Exponenciao
Multiplicao
Diviso
Diviso inteira
Resto da diviso
Adio
Subtrao
1
2
2
3
3
4
4
Funo pow(b, e)
*
/

%
+
-

Exemplos de Prioridades:
1) 3 + 4 = 7
A operao da adio pode ser efetuada em primeiro lugar quando no existir nenhuma
outra operao com maior prioridade.

2) 9 - 4 * 2 =
O operador de maior prioridade nesta expresso a multiplicao, devendo ser realizada
em primeiro lugar. 4 * 2 = 8
Depois, substitumos a expresso calculada (4 * 2) pelo seu resultado ( 8 ) e efetuamos a
segunda operao, que a subtrao.
9 - 4*2
9 - 8 = 1
O resultado 1
Percebam que no foi realizada a operao pela ordem que foi escrita, mas sim pela ordem de
prioridades, como na matemtica convencional.
Se no fosse aplicada a prioridade dos operadores o resultado da expresso seria 10, um
valor diferente de 1, o correto.
9 4 * 2 =
5 * 2 = 10

3) 4 * 3 - 4 / 2 ** 2 =
Deve ser realizada em primeiro lugar a operao que tem o operador de maior prioridade,
ou seja, a potenciao 2 ** 2.
4
Prof Angelina V.S.Melar
45
Depois, substitumos a expresso de potenciao (2 ** 2) pelo seu resultado (4).
4 * 3 - 4/ 2* 2
4 * 3 - 4/ 4
Agora os operadores de maior prioridade so a multiplicao e a diviso. Esses dois
operadores tm valor de prioridade igual, ento tanto faz a ordem de execuo.
4 * 3
12
Ento, substituindo a operao pelo resultado, temos:
4 * 3 - 4 / 2 ** 2
4 * 3 - 4 / 4
12 - 4 / 4
Restaram duas operaes a serem feitas: a subtrao e a diviso. Como a diviso tem
maior prioridade a efetuaremos primeiro.
4 / 4
1

4 * 3 - 4 / 2 ** 2
4 * 3 - 4 / 4
12 - 4 / 4
12 - 1 = 11
O resultado da expresso foi 11.
Vamos supor que voc no se lembra das prioridades dos operadores e faa pela ordem
escrita. Ser que o resultado ser o mesmo? Veja a seguir a execuo da mesma expresso.
4 * 3 - 4 / 2 ** 2 =
12 - 2 ** 2 =
12 - 4
8
O resultado no o mesmo que na resoluo anterior.

4) 5 * 2 ^ (4 - 2) =
Neste exerccio temos uma expresso dentro de parnteses. O operador que est dentro do
parntese deve ser sempre efetuado em primeiro lugar.
( 4 - 2)
2
Vamos substituir o resultado da expresso dentro de parnteses na expresso geral.
5 * 2 ^ (4 - 2)
5 * 2 ^ 2
Agora, como no temos mais nenhum parnteses, efetuaremos o clculo da expresso
que tem o operador com maior prioridade.
2 ^ 2
4
Substituindo o resultado da potenciao:
5 * 2 ^ (4 - 2)
5 * 2 ^ 2
5 * 4
20
O resultado 20. Se o clculo fosse feito sem priorizar o parntese o resultado da
expresso seria 100.
Prof Angelina V.S.Melar
46

Exerccios de Expresses Aritmticas e Prioridades de Operadores

1. 3 + 4 * 4 + 8 / 2 =
2. (3 + 4 ) * 4 + (8 / 2) =
3. 64 / 8 - 3 =
4. 4 ^ 3 + 2 * 3 =
5. 81 / 3 ^ 2 =
6. 2 ^ (2 * 1 + 2) / 2 =
7. 4 * 2 ** (4 / 2) =
8. 66 DIV 4 * 2 + 2=
9. 15 MOD 3 * 1 =
10. 27 MOD (3 ** 2) =
11. 17 MOD 2 + 7 DIV 3 =
12. 21 * 16 /4 =
13. 70 DIV 7 =
14. (21 / 2) / 2 * 3 =
15. [12 - (4 * 2) ] + 2 =

Prof Angelina V.S.Melar
47

Funes Matemticas e Operadores Bit a Bit


1. Funes Matemticas
Existem vrias funes matemticas j programadas que esto na biblioteca Math.h,
como funes para calculo da exponenciao, raiz quadrada, logaritmo. Os valores do ngulo so
em radianos.
Funo Explicao Exemplo Exibio
Abs()
pow()
Sin()
Cos()
Tan()
Sqrt()
Log()
Log10()
Retorna o valor absoluto
Calcula exponenciao (potncia)
Calculo o seno do ngulo
Calculo o cosseno do ngulo
Calculo tangente do ngulo
Calcula a raiz quadrada
Calculo o logaritmo natural
Calculo o logaritmo decimal

Abs(-200)
pow(3,2)
sin(90)
cos(90)
tan(90)
sqrt(25)
log(100)
log10(100)
200
9
0.8939
-0.448
-1.9952
5
4.6051
2

2. Operadores de deslocamento de bits
Podem ser feitas operaes lgicas bit a bit com variveis, para isso deve-se usar o
operador de acordo com a operao desejada.
Os operadores << e >> manipulam os bits do tipo int e char, sejam esquerda ou
direita.








Exemplo: a) int v1=100, v2;
v2= v1 & 15;

100 decimal = 0 1 1 0 0 1 0 0
&
15 decimal 0 0 0 0 1 1 1 1
____________
0 0 0 0 0 1 0 0 4 decimal

O estado zero do bit far com que o bit resultante seja 0




Operador Ao
&
|
^
~
>>
<<
Conjuno e -and
Disjuno ou - or
Ou exclusivo - xor
Negao - not
Deslocamento direita
Deslocamento direita
Exemplo:
bit = 00000011
bit << 2 00001100

bit = 01100000
bit >> 2 00011000

Prof Angelina V.S.Melar
48
1. Funo Rand() e SRand()
A funo rand() usada para gerar nmeros aleatrios. Os nmeros gerados aleatoriamente vo
de 0 a 32767.
main()
{
int num;
num = rand();
printf("%i", num); _sleep(2000);
}

Para haver a delimitao dos nmeros gerados.
rand()%10 + 1; // ajustado para gerar nmeros entre 1 e 10 (soma 1 pois comea no 0)

main()
{
int num;
num = rand()%10+1;
printf("%i", num); _sleep(2000);
}


A funo srand() permite a gerao de nmeros diferentes a cada nova execuo.

srand((unsigned int)time((time_t *)NULL));

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

main()
{
srand((unsigned int)time((time_t *)NULL));
int num;
num = rand()%10+1;
printf("%i", num); _sleep(2000);
}

//srand(time(NULL));

Prof Angelina V.S.Melar
49
Estrutura de Controle Linear/ Sequencial

Nesta estrutura a execuo das instrues linear, seqenciais, ou seja, onde uma ao
deve ser executada aps a outra. No existe desvio na execuo.
O conjunto de passos executado num fluxo contnuo do comeo ao fim. A execuo
comea de cima para baixo, da esquerda para a direita Nessa estrutura temos as entradas, os
processamentos e as sadas.

Entrada: a leitura de dados feita atravs de dispositivos de entrada (teclado, mouse, arquivo,
entre outros). Essa leitura feita e depois o dado transportado para a memria principal
(RAM). A entrada no pseudocdigo denominada como leia. O dispositivo de entrada a ser
utilizado o teclado.
Pseudocdigo:
inteiro num;
leia (num) ;
Ser reservado na memria RAM um endereo para num. Depois ser feita a leitura do teclado e
armazenado o valor na varivel num.

Processamento: o processamento pode ser realizado atravs de uma atribuio, ou uma
expresso matemtica, que resultar num valor. O processamento pode ser realizado com as
entradas. O resultado gerado tambm poder ser armazenado na memria.
A atribuio no pseudocdigo representada pela seta ( )e o operador em C para
atribuio o igual ( = ).
Pseudocdigo:
num 4;
Varivel num recebe o valor 4 ou atribudo 4 a varivel num
Codificao em C
num = 4;

Sada: pode ser a exibio de uma mensagem, ou a recuperao de um contedo que est na
memria e ser transmitido para um dispositivo de sada (monitor, impressora, caixa de som,
entre outros).
A sada no pseudocdigo denominada como escreva ou exiba. O dispositivo de sada
a ser utilizado o monitor.
Pseudocdigo:
Escreva (Informe um nmero);
Escreva (Salrio calculado , sal);

Bloco de instrues/comandos
Um bloco de comandos ou instrues determina o conjunto de aes a serem executadas.
Ele serve para definir os limites de existncia de uma varivel, ou seja, o escopo de uma varivel.
Podemos ter diversas variveis declaradas no decorrer do algoritmo/programa, podendo ter duas
com o mesmo nome, mas valores diferentes, dependendo do bloco em que foram declaradas.
As aes dentro do bloco so separadas pelo ponto e vrgula ( ; ). Servindo para organizar
e determinar a execuo ou encerramento de uma ao.

Prof Angelina V.S.Melar
50
Funes de Entrada e Sada Formatada

1. Funo de Sada - printf()
A funo printf() realiza a sada de dados em vrios formatos, de acordo com a
configurao feita pelo programador. O prottipo da funo est no arquivo de cabealho
STDIO.H. Com essa funo possvel exibir mensagens, resultados de clculos, endereos de
memria.
O prottipo do printf() : printf(string_de_controle, lista_de_argumentos);
Na string de controle definido tudo que ser exibido na tela: cadeia de caracteres, o
formato das variveis (usando-se o comando de formato - %) e os caracteres de
controle (usando o smbolo \).
Na lista de argumentos definem os formatos que sero exibidos os valores.

Comandos de Formato mais usados
Cdigo Formato
%c
%d
%i
%f
%lf
%s
%x
%u
%p
%o
%e
%g
%%
um nico caracter
inteiros decimais com sinal
inteiros decimais com sinal
ponto flutuante decimal
double
string cadeia de caracteres
hexadecimal sem sinal
inteiro decimal sem sinal
ponteiro
octal
float exponencial
ponto flutuante curto
%
possvel especificar o tamanho dos campos que sero exibidos. Como nos exemplos
abaixo:
%4d _ _ 3 3
%7.2f _ _ _ 5 . 3 0

7 possveis no total, sendo fixadas 2 para o nmero de casas decimais

Comando Exibio Explicao
printf("%8i", 10); ( 10) As posies definidas a mais
so preenchidas com espao
em branco e o valor alinhado
direita do campo.
printf("%-8i", 10); (10 ) Se o tamanho do campo for
precedido por um - (menos),
ento, o valor ser alinhado
esquerda do campo.
printf("%08i", 10);

(0000010) Se o tamanho do campo for
precedido com o 0 (zero),
ento as posies excedentes
Prof Angelina V.S.Melar
51
so preenchidas com zeros.
printf(%.1f,1910.10) 1910.1 Deve ser colocada a
quantidade de casas decimais a
serem exibidas junto com o
comando de formato, como no
exemplo %.1f
printf(O resultado da soma :); O resultado da soma
soma =4.51;
printf(O resultado : %6.2f, soma);
O resultado da soma
4.51

printf (Mostra o smbolo %% %%") %%
printf ("Um tipo caractere %c e um
tipo inteiro %i",A',20)
Um tipo caractere A e
um tipo inteiro 20

printf ("%s uma string","Este") Este um exemplo string
printf ("%s%d%%","Juros de ",10) Juros de 10%


2. Funo de Entrada scanf()
A funo scanf() usada para fazer entrada de dados. Essa funo captura o valor
digitado no teclado e armazen-o em uma varivel. Os valores capturados so convertidos para o
formato interno apropriado. O prottipo dessa funo est no arquivo de cabealho STDIO.H.

Sua estrutura e: scanf(string_de_controle, &lista_de_argumentos);
Primeiro se define o tipo de varivel a ser recebido
Deve ser colocado o operador & (endereo de memria) antes de cada
uma das variveis da lista de argumentos (exceto para strings).
Deve ser colocado o mesmo nmero de argumentos e de string de
controle.
Num tipo string, o espao em branco finaliza a entrada.

Podem ser recebidos vrios valores ao mesmo tempo, usando como separador de entrada
um espao em branco ou o caracter dois pontos ( : ). Os especificadores %d, %f, %e pulam
automaticamente os brancos que precedem os valores numricos.








Exemplo: float nota1, nota2;
scanf(%f, &nota1); scanf(%f, &nota2);
ou
scanf(%f%f , &nota1, &nota2);

int hora, minuto;
scanf(%i:%i, &hora,&minuto);
Comandos de Formato mais usados
Cdigo Formato
%c
%d , %i
%f , %e, %g
%s

caracter
inteiros decimais com sinal
ponto flutuante decimal
string de caracteres

Prof Angelina V.S.Melar
52
1. Funo de Entrada de caracter getch() e getchar()
As funes getch() e getchar() esto na biblioteca conio.c. Elas so usadas para a entrada de
um caracter. A diferena entre elas que a getchar() espera aps o caracter digitado a tecla enter
e o getch() no.

#include <stdio.h>
#include <stdlib.h>
#include <conio.c>
main()
{
char caracter;
caracter=getch();
printf ("Voce pressionou a tecla %c que equivale ao numero %i Asc",caracter, caracter );
_sleep(2000);
}


Exemplos

Exemplo 1
Faa um programa que receba dois nmeros inteiros e efetue as operaes: adio, subtrao,
multiplicao, diviso, resto da diviso e exponenciao.

Pseudocdigo Codificao em C
Incio
inteiro n1, n2, soma, subtr, mult, divisao,
expo, resto;
escreva (Informe primeiro nmero);
leia (n1);
escreva (Informe segundo nmero);
leia (n2);
soma n1+ n2;
subtr n1 - n2;
mult n1 * n2;
divisao n1 / n2;
resto n1 mod n2;
expo = (n1, n2);
escreva (Soma:, soma);
escreva (Subtracao:, subtr);
escreva (Multiplicacao:, mult);
escreva (Divisao:, divisao);
escreva (Resto da diviso:, resto);
escreva (Exponenciao:, expo);
Fim

#include <stdio.h>
#include <stdlib.h>
#define escreva printf

main()
{
int n1, n2, soma, subtr, mult, divisao,
expon, resto;
escreva ("Informe 2 numeros");
scanf("%i%i", &n1, &n2);
soma= n1+ n2;
subtr= n1 - n2;
mult= n1 * n2;
divisao= n1 / n2;
resto= n1 % n2;
escreva ("Soma: %i - Subtracao: %i \n",
soma, subtr);
escreva ("Multiplicacao: %i \n", mult);
escreva ("Divisao: %i Resto da diviso:
%i\n", diviso, resto);
_sleep(8000);
}
Prof Angelina V.S.Melar
53
Receber
ANO_NASC
Mostrar
IDADE
IDADE = ANO_ATUAL - ANO_NASC
INCIO
FIM
Receber
ANO_ATUAL
IDADE30 = IDADE + 30
Mostrar
IDADE30
Exemplo 2

1) Calcular a idade atual e daqui a 30 anos de uma pessoa.


Descrio Narrativa:
Receber o ano de nascimento
Receber o ano atual
Subtrair o ano atual do ano de nascimento para saber a idade
Somar o valor da idade com 30 para saber quantos anos ter daqui 30 anos
Mostrar idade atual
Mostrar idade daqui a 30 anos.

Pseudocdigo
Inicio
inteiro ano_nasc, ano_atual, idade, idade30;
Escreva (Digite o ano atual);
Leia (ano_nasc);
Escreva (Digite o ano de nascimento);
Leia (ano_atual);
Idade ano_atual ano_nasc;
Idade30 idade +30;
Escreva (A sua idade , idade);
Escreva (Daqui a 30 anos voc ter:,Idade30);
Fim


Linguagem C

#include <stdio.h>
#include <stdlib.h>
main()
{
int ano_nasc, ano_atual, idade, idade30;
printf(\nDigite o ano atual);
scanf(%i,&ano_nasc);
printf(\nDigite o ano de nascimento);
scanf(%i,&ano_atual);
idade = ano_atual ano_nasc;
idade30= idade +30;
printf(A sua idade %i, idade);
printf(Daqui a 30 anos voc ter:
%i,idade30);
}

Linguagem Pascal
Program idade;
Var
ano_nasc, ano_atual, idade, idade30: integer;

begin
write(Digite o ano atual);
readln(ano_nasc);
write(Digite o ano de nascimento);
readln(ano_atual);
idade := ano_atual ano_nasc;
idade30 := idade +30;
writeln(A sua idade , idade);
writeln(Daqui a 30 anos voc ter:, idade30);
end

Prof Angelina V.S.Melar
54
Teste de Mesa

MEMRIA
ANO_NASC ANO_ATUAL
ENTRADA SADA
PROCESSAMENTOS
VALORES
SIMULADOS
1998
1980
18
48
1980 1998
IDADE
18
IDADE = ANO_ATUAL - ANO_NASC
IDADE = 1998 - 1980
IDADE = 18
IDADE30
48
IDADE30 = IDADE + 30
IDADE30 = 18 + 30
IDADE30 = 48
Prof Angelina V.S.Melar
55

Exerccios Resolvidos e Propostos



01) Uma loja de telefone celular paga aos seus vendedores um salrio fixo mais uma comisso de R$
50,00 por cada aparelho vendido. Faa o pseudocdigo e fluxograma que receba o nome do vendedor, o
nmero de aparelhos vendidos e calcule o salrio total do vendedor.

Entrada:
nome do vendedor
nmero de aparelhos vendidos
valor do salrio fixo (mesmo no sendo pedido no enunciado, o valor do salrio fixo deve ser
recebido para o clculo do salrio total)

Processamento:
calcular o valor da comisso
_ quantidade de aparelhos vendidos * 50
calcular o salrio total
_ o valor da comisso + o valor do salrio fixo

Sada: Fluxograma:
mostrar o salrio total do vendedor


Pseudocdigo

INCIO
caracter nome;
inteiro quant;
real sal_bruto, comis, sal_total;
escreva (Nome do Funcionrio:);
leia nome;
escreva (Quantos aparelhos foram vendidos);
leia quant;
escreva (Qual o valor do salrio fixo);
leia sal_bruto;
comis quant * 50;
sal_total sal_bruto + comis;
escreva (O salrio final :, sal_total);
FIM

Receber
NOME_VEND
COMIS = QUANT * 50
INCIO
FIM
SAL_TOTAL = SAL_BRUTO + COMIS
Mostrar
SAL_TOTAL
Receber
QUANT
Receber
SAL_BRUTO
Prof Angelina V.S.Melar
56
Operador Relacional e Lgico

1. Operadores Relacionais

Os operadores relacionais so utilizados em expresses de lgicas, para comparao e
testes condicionais de valores de constantes ou contedo de variveis. Eles podem ser usados
numa expresso que tambm tenha operadores aritmticos. Esses operadores relacionais geram
um resultado lgico (Verdadeiro ou Falso) quando aplicados nas expresses.
Operador (pseudocdigo) Significado C
=
>
<
<=
>=
<>
Igual
Maior
Menor
Menor ou igual
Maior ou igual
Diferente de
= =
>
<
<=
>=
!=

A precedncia de execuo : <. <=, >, >=, !=, ==

Expresso em pseudocdigo Expresso em C Resultado
3 = 5
15 > 5
5+ 6 = 11
7 < 4-5
s = n
3 = = 5
15 > 5
5 + 6 = = 11
7 < 4-5
s = = n
0 - Falso
1- Verdadeiro
1- Verdadeiro
0 - Falso
0 - Falso

Na linguagem C no existe o tipo lgico (booleano) com os valores true e false
(verdadeiro ou falso). Ao verificar uma expresso, o compilador compara e retorna o valor zero
ou um. O valor zero representa o falso e, qualquer valor diferente de zero, no caso o valor um,
representa o verdadeiro.

2. Operadores Lgicos
As expresses lgicas so aquelas que operam com valores lgicos e resultam tambm
num valor lgico. Elas podem ser utilizadas em testes de variveis, tomada de deciso e
expresses matemticas. A funo do operador lgico NO pode modificar valores e
expresses, pois ele serve para negar a expresso.

Operador Operao Prioridade C
NO
E
OU
Negao
Conjuno
Disjuno
1
2
3
!
&&
||
Prof Angelina V.S.Melar
57
3. Tabela Verdade: o conjunto das possibilidades combinatrias dos operadores lgicos.
E OU NO
V e V = V
V e F = F
F e V = F
F e F = F
V ou V = V
V ou F = V
F ou V = V
F ou F = F
No F = V
No V =F

Exemplos:
Pseudocdigo C Explicao
No ( Idade = 5 ) ! ( Idade = = 5 ) Nessa expresso temos o resultado Falso, pois o
operador lgico NO negou a expresso contida
dentro do parnteses.
num1 5
num2 6

num1 > 7 E num2 > 5
num1 = 5;
num2 = 6;

num1> 7 &&
num2>5
O resultado dessa expresso Falso, pois o
operador E exige que as duas condies sejam
verdadeiras para o resultado ser Verdadeiro. Veja
que a primeira condio est indicando que o
Nmero1 maior que 7, mas isso no verdadeiro,
pois o valor do Nmero1 5, e 5 menor que 7. A
segunda condio verdadeira, pois 6 maior que 5.

num1 5
num2 6

num1> 7 OU num2> 5
num1 = 5;
num2 = 6;

num1>7 || num2>5
O resultado dessa expresso Verdadeiro, pois o
operador OU indica que apenas uma das condies
precisa ser verdadeira para o resultado ser
Verdadeiro. Observem a diferena do operador
OU com o operador anterior E.


4. Prioridade dos Operadores
A prioridade de execuo pode ser diferente em algumas linguagens de programao
Prioridade Operador
1
2
3
4
Parnteses
Aritmticos
Relacionais
Lgicos

Exerccio: Descubra se as expresses abaixo so falsas ou verdadeiras:
a) 5 + 6 = 10
b) 5 mod 2 = 2
c) 15 <> 5 + 5
d) 33 > 3 OU carol = carolina
e) 16 > 5 * 2
f) 20 < 2
g) 56 > 45 + 4
h) feijo = feijoada
i) 56 < = 4
j) 70 > = 3 ** 2
k) 5 >= 5 E 4 = 5
l) 12 + 1 = 13 OU 4 + 2 = 7
m) 18 > 7 E 19 < 7
n) 90 = 3 OU 80 > 5

Prof Angelina V.S.Melar
58
Estrutura de Deciso /Condicional/ Seleo

Todas as complexidades de um
problema no podem ser passadas no
computador baseadas apenas numa
estrutura linear, pois esta estrutura no
prev a possibilidade de desvios de
instrues. Para o desenvolvimento de
programas mais completos estudaremos a
partir de agora uma nova estrutura, a de
deciso.
As condies, ou verificaes e
testes esto presentes em quase todos os
programas, devido grande flexibilidade e
poder de ao que tais estruturas
proporcionam.
As decises so representadas
pelas expresses relacionais/lgicas e
essas podem ter dois resultados, a do
Verdadeiro ou a do Falso. Conforme o
resultado um dos caminhos deve ser
executado, sendo obrigatrio existir o do
verdadeiro, mas no o do falso.
Na verdade a deciso uma condio
ou expresso lgica que testada e verificada,
podendo ser verdadeira ou falsa. Se depois de
avaliada a condio e o resultado for
verdadeiro, ento, os passos a serem
executados so diferentes daquele em que se o
resultado fosse falso.
Existem diversas estruturas
condicionais: simples, composta encadeada,
mltipla escolha.


Algoritmos (Descrio Narrativa)
Estrutura Linear
INCIO
Pegar o doce
Tirar da embalagem
Comer o doce
FIM
Estrutura Condicional
INCIO
Pegar o doce
Tirar da embalagem
SE o doce estiver estragado ento
Jogar fora o doce
SENO
Comer o doce
FIM

PEGAR O DOCE
INCIO
FIM
TIRAR DA EMBALAGEM
COMER O DOCE
PEGAR O DOCE
INCIO
FIM
TIRAR DA EMBALAGEM
EST
ESTRAGADO?
JOGAR FORA O DOCE
F V
COMER O DOCE

Prof Angelina V.S.Melar
59
MEMRIA
NUM1 NUM2
ENTRADA
SADA
PROCESSAMENTO
VALORES
SIMULADOS
5
100
100
100 5
No exemplo acima podemos ver facilmente a importncia da estrutura de deciso. Na
primeira estrutura, a linear, existe apenas trs procedimentos e no h verificao das
informaes. Na segunda estrutura foi possvel fazer a verificao de possveis falhas na
seqncia de processos, onde, foi constatada a falta do procedimento que verificasse se o doce
estava ou no estragado.

Exerccio Resolvido

Elabore um programa que receba dois nmeros e no final mostre o maior nmero digitado.
Entrada:
Receber dois nmeros
Processamento:
Verificar qual o maior nmero digitado
Sada:
Mostrar o nmero maior

Pseudocdigo
Inicio
Real num1, num2;
Escreva (Digite o primeiro nmero);
Leia num1;
Escreva (Digite o segundo nmero);
Leia num2;
SE (num1 > num2) ento
Escreva (O maior nmero : , num1);
Seno
Escreva (O maior nmero : , num2);
Fim


Teste de Mesa















Linguagem C
#include <stdio.h>
#include <stdlib.h>
main()
{
float num1, num2;
printf(\nDigite o primeiro nmero);
scanf(%f,&num1);
printf(\nDigite o segundo nmero);
scanf(%f,&num2);
if (num1 > num2)
printf(O maior nmero %f, num1);
else
printf(O maior nmero %f, num2);
}

Prof Angelina V.S.Melar
60
Tipos de Estruturas de Deciso

1. Estrutura de Deciso Simples
A instruo somente ser executada se a condio testada for Verdadeira. Quando for
mais de uma instruo a ser executada deve ser delimitado o bloco de instrues, com seu incio
e fim.

SE (condio) ENTO SE (condio) ENTO
instruo; Incio
instruo 1;
instruo 2;
instruo n;
Fim

if (condio) if (condio)
instruo; {
instruo 1;
instruo n;
}

Exemplo:
a) if (n1 > n2)
printf (O primeiro nmero maior que o segundo);

b) if (n1> n2)
{
printf(O primeiro nmero maior que o segundo);
printf(Informe outro valor);
scanf(%i, &n3);
}
Prof Angelina V.S.Melar
61

2. Estrutura de Deciso Composta:
A condio ser testada e de acordo com o seu resultado (verdadeiro ou falso) ser
executado um caminho (instruo) diferente. Essa estrutura usada quando as duas
possibilidades dependem de uma mesma condio. Onde uma contradiz a outra.

SE (condio) ENTO SE (condio) ENTO
instruo; Incio
SENO instruo 1;
instruo; instruo n;
Fim
SENO
Incio
Instruo 1;
Instruo n;
Fim


if (condio) if (condio)
instruo; {
else instruo 1;
instruo; instruo n;
}
else
{
Instruo 1;
Instruo n;
}
Exemplo:
a) if (n1 > n2)
printf (O primeiro nmero maior que o segundo);
else if (n1 == n2)
printf (Os dois nmero so iguais);
else
printf (O segundo nmero maior que o primeiro);




Prof Angelina V.S.Melar
62

3. Estrutura de Deciso Encadeada:

Essa estrutura usada quando existem vrias verificaes a serem feitas e uma pode
depender da outra. Pode ser executada uma condio simples ou composta dentro de outra
condio.
Pode existir a Estrutura de Deciso Heterognea, quando no existe um padro lgico no
encadeamento. Exemplo: se..seno...se...se...seno.
Quando existe um padro lgico das estruturas de deciso chamada Estrutura de
Deciso Homognea. Exemplo: se..seno..se..seno..se..seno.

SE (condio) ENTO
Incio
instruo;
SE (condio) ENTO
instruo;
Fim
SENO
Incio
Instruo 1;
Instruo n;
Fim

if (condio)
instruo;
else if (condio)
{
instruo 1;
instruo n;
}
else if (condio)
instruo;

Exemplo:
If (n1 > n2)
printf(O primeiro nmero maior que o segundo);
else if (n2 == 0)
{
printf (O segundo nmero no pode ser zero);
printf(Informe outro nmero);
scanf(%i, &n2);
}
else if (n1 == n2)
{
printf (Os dois nmero so iguais);
printf(Informe outro nmero);
scanf(%i, &n3);
}

Prof Angelina V.S.Melar
63
INCIO
FIM
Receber
IDADE
Mostrar
Deve ser vacinada
V F
IDADE
<=
5
...
Intervalos
Dentro da estrutura de deciso existe a definio de intervalos. Estes intervalos definem
as faixas que esto enquadrados os valores. Elas podem ser definidas de diferentes formas, como
nos exemplos abaixo:

Exemplo 1: Receba uma idade qualquer e mostre uma mensagem de acordo com ela. Se a
idade for igual ou menos de 5 anos a criana deve ser
vacinada.

Pseudocdigo
Inicio
Inteiro idade;
Escreva (Digite sua idade);
Leia (idade);
SE (idade <= 5) ento
Escreva (Deve ser vacinada);
Fim




Exemplo 2: Receba a idade de uma pessoa e mostre uma mensagem de acordo com ela. As
pessoas que tem mais de 11 anos e menos de 18 so consideradas adolescentes.

Pseudocdigo

Inicio
Inteiro idade;
Escreva (Digite sua idade);
Leia idade;
SE (idade >= 11) ento
SE (idade <= 18) ento
Escreva
(Adolescente);
Fim
Nesse programa apenas as pessoas que tiverem
idade menor ou igual a 5 anos devem ser vacinadas.
Ficando excludas as com idade superior a 5 anos. Esse
um exemplo de intervalo que contm todos os valores
menores ou iguais a 5.
No exemplo anterior todos os valores menores que 5
seriam vlidos. J nesse exemplo, somente os nmeros que vo
de 11 a 18 so vlidos. Nessa expresso pode ser usado o
operador lgico E.
SE idade >= 11 E idade <= 18 ento
Prof Angelina V.S.Melar
64

Exemplo 3: Receba a idade de uma pessoa e mostre uma mensagem de acordo com ela. As
pessoas que tiverem menos de 18 anos e mais de 85 no esto aptas a dirigir e devem ser
alertadas com uma mensagem.

Pseudocdigo
Inicio
Inteiro idade;
Escreva (Digite sua idade);
Leia idade;
SE (idade < 18) ento
Escreva (No pode dirigir);
SE (idade > 85) ento
Escreva (No pode dirigir);
Fim


Operador Ternrio
Em C existe o operador ? (operador condicional) que facilita a verificao de sentenas
simples (nicas).
Estrutura: condio ? expresso1 : expresso2;
A condio avaliada;
Se ela for verdadeira o resultado a execuo da expresso1;
Se a condio for falsa o resultado a execuo da expresso2.

1) /* O reajuste ser de acordo com o salrio.
Se este for maior que 2000 o reajuste ser de
10%, seno, de 30% */

#define escreva printf
main()
{
int sal = 1000;
float reajuste;
sal>2000 ? reajuste = 0.10 : reajuste = 0.30;
escreva ("reajuste : %g\n", reajuste);
_sleep(2000);
}

2) /*Mostra o quadrado de um nmero
diferente de zero. Se o nmero digitado for
zero aparece a mensagem Erro */

#define escreva printf
main()
{
int x;
escreva("Entre com o valor de x");
scanf("%i", &x);
x!= 0 ? printf("\n Quadrado de x = %i",
(x*x)) : printf("\nErro");
_sleep(2000);
}

As faixas acima mostram claramente que h dois tipos de intervalo diferentes: um
intervalo com valores menores de 18 e outro intervalo com valores superiores a 85. Sendo
excludos todos os valores internos da faixa. Este tipo de intervalo pode ser definido com o
operador lgico OU.

SE idade < 18 OU idade > 85 ento
Prof Angelina V.S.Melar
65
Seleo Mltipla
As linguagens de programao possuem um comando exclusivo para seleo mltipla
(verifique...caso). Nessa estrutura o computador far um teste sucessivo, verificando o valor da
expresso numa lista seqencial de constantes, ao encontr-lo ele executar o bloco de comandos
que esto associados constante.
Dependendo da linguagem que for utilizada essa estrutura pode ser exclusiva, ou seja,
quando for executado um caso, os demais sero excludos. Na linguagem C se faz a excluso
pelo comando break e somente pode ser usada essa estrutura para verificaes de valores de uma
varivel do tipo inteiro ou caracter, no existe teste de intervalos, ou mesmo vrias verificaes
ao mesmo tempo.

Pseudocdigo:
verifique <varivel>
incio
caso <valor> : <instrues> ; pare;
caso <valor> : <instrues >; pare;
....
caso no seja nenhuma das opes anteriores: < instrues>; pare;
fim do verifique

** tem linguagens que permite o teste de intervalo de valores como:
caso valor 1..valor n:
case valor1, valor 3, valor 7:

Codificao em C:
switch (varivel)
{
case <valor>:
instrues;
break;
case <valor>:
instrues;
break;
...
default:
instrues;
}

O comando default executado se nenhum valor for encontrado nos case anteriores, ou
seja, nas comparaes ele no encontrar um valor verdadeiro. O uso do default opcional.
O comando break serve como um desvio de execuo. Ao ser executado dentro do switch
ele finaliza a seqncia de instrues do case e sai do switch. Se no for usado o break o
computador continuar dentro do switch executando as instrues dos outros case.

Prof Angelina V.S.Melar
66
Exemplos:
a)
#include <stdio.h>
#include <conio.c>
main()
{
int num;
printf("Informe um valor inteiro");
scanf("%i", &num);
switch(num)
{
case 1:case 2:printf("Valor baixo");
break;
case 5:case 8:printf("Valor alto");
break;
default:
printf("Valor Invalido\n");
break;
}
getch();
}


b)
case / :
if( n2 = = 0 )
printf(No existe diviso por zero);
else
r= n1 / n2;
break;



Curiosidade:




Pode existir case sem instruo associada.
Caso isso ocorra o computador executar
as instrues do prximo case.
Prof Angelina V.S.Melar
67

Exerccios Resolvidos

01) Faa um programa que classifique as mquinas conforme a produo de cabo para telefones.
Veja a tabela abaixo:

Pseudocdigo
Incio
Real quantpro;
Leia quantpro;
SE (quantpro >= 60000) ento
Escreva (Produo Boa);
SENO SE (quantpro > 40000) ento
Escreva (Produo Regular);
SENO
Escreva (Produo Ruim);
Fim










Linguagem C
#include <stdio.h>
#include <stdlib.h>
main()
{
float quantpro;
printf(\nDigite a quantidade produzida);
scanf(%f,&quantpro);
if (quantpro >= 60000)
printf (Produo Boa);
else if (quantpro > 40000)
printf(Produo Regular);
else
printf(Produo Ruim);
}
02) Receba um nmero inteiro e classifique-o como negativo, positivo ou nulo. Essa classificao dever
ser exibida por uma mensagem.

main()
{
int numero;
scanf(%i, &numero);
if (numero = = 0)
printf(Nmero Nulo);
else
if (numero > 0)
printf (Nmero Positivo);
else
printf(Nmero Negativo);
}

Ou...




Produo Classificao
maior ou igual a 60.000
menor que 60.000 e maior que 40.000
menor ou igual a 40.000
Boa
Regular
Ruim
main()
{
int numero;
scanf(%i, &numero);
if (numero = = 0)
printf(Nmero Nulo);
if (numero > 0)
printf (Nmero Positivo);
if (numero < 0)
printf(Nmero Negativo);
}

Prof Angelina V.S.Melar
68
Variveis de Bloco

Os blocos de instrues que so delimitados pelas {}, podem ser descritos dentro de uma
estrutura condicional, de repetio, entre outras. Dentro desse bloco podemos definir variveis
locais a eles, de forma que essas so variveis locais ao bloco, ou seja, definidas e acessadas
somente no bloco. Podemos ter vrias variveis com o mesmo nome no mesmo cdigo fonte,
sendo todas variveis distintas, de acordo com a sua declarao.

/* Exemplo do uso de variveis de bloco
e a exibio do endereo da memria*/

#include <stdio.h>
#include <stdlib.h>
main()
{
int cont=0;
printf("\nValor do contador %i", cont);
printf("\nEndereco de cont %i\n", &cont);
if (cont == 0)
{
int cont = 5;
printf("\n\tValor do contador do bloco %i", cont);
printf("\n\tEndereco de cont do bloco %i\n", &cont);
}
printf("\nValor do contador fora do bloco %i", cont);
printf("\nEndereco de cont fora do bloco %i", &cont);
getch();
}



Prof Angelina V.S.Melar
69

Estrutura de Repetio

Lao (Loop)
Toda vez que voc ler ou ouvir a palavra loop saiba que ela significa retornar, igual o
loop de uma montanha russa, onde voc gira, e gira e repete essa volta vrias vezes. Ento, loop
na programao significa repetio, iterao, volta a executar um procedimento j executado.

Pode ser feita a repetio de apenas uma instruo ou de um conjunto de instrues,
podendo ser ou no definida a quantidade de vezes que ir repetir.

Tome cuidado na hora da definio dos processos a serem repetidos. Se voc quiser que a
tela seja limpa toda vez que for exibida uma mensagem; ento a instruo para limpar a tela deve
estar dentro do corpo do loop, seno, a tela ser limpa apenas uma vez.

A estrutura que aprenderemos a partir de agora usada para tornar automtica a repetio
de um programa inteiro ou apenas uma parte dele. Com a repetio automtica os programas
tornam-se mais rpidos e geis, no existindo linhas de comandos idnticas repetidas.


A estrutura de repetio pode ser pr-definida com contador ou condicional


Quando for repetido um trecho do programa e j se souber a quantidade de vezes que ele
ser executado, ento, voc usar a estrutura de repetio pr-definida com contador. Um
exemplo onde podemos usar esta estrutura num programa que faz a exibio do nmero 1 at
300.
Mas, quando no conhecido de antemo o nmero de vezes a ser repetido um conjunto
de instrues, ento voc usar a estrutura com condio. Essa estrutura consiste em executar as
instrues enquanto uma condio pr-definida for verdadeira.


Smbolo de repetio no fluxograma
Esse smbolo usado para representar estruturas de repetio, sejam elas
pr-definidas ou no.
Prof Angelina V.S.Melar
70
N = 3
INSTRUES
ENQUANTO
N < =20
Receber
N
INSTRUES
Condio
V
a
lid
a

o
d
a
c
o
n
d
i

o

Estrutura de Repetio Condicional (Enquanto..Faa /
Faa..Enquanto / Repita..at)

Essa estrutura de repetio usada quando a quantidade de vezes um determinado trecho
do programa desconhecida. O que determina o trmino o resultado da verificao de uma
condio.
Existe a repetio pr-condio, com teste no incio, e a ps-condio, com teste no final.

1. Repetio com Pr-condio- Enquanto..faa
Neste tipo de estrutura de repetio, o bloco de
instrues ser repetido enquanto a condio testada no lao
for verdadeira. Quando ela se tornar falsa pra a repetio e o
fluxo de execuo passa para a prxima linha depois do lao.
O teste da condio feito no incio antes de comear o bloco
de instrues que sero repetidos.

Cuidado ao usar o Enquanto: Se na primeira vez a
condio testada j for falsa, ento, no ocorrer nenhuma vez
a execuo das instrues dentro do lao. Para que isso no
ocorra necessrio fazer a validao da condio, ou seja,
torn-la verdadeira antes de testar.

Enquanto .. Faa

Incio
...
Instruo;
validao da condio;
ENQUANTO (condio) FAA
Instruo;
Fim


Obs:Estrutura que repete apenas uma
instruo



Estrutura em C

while (condio)
instruo;

Incio
...
Instruo;
validao da condio;
ENQUANTO (condio) FAA
Incio
Instruo;
Instruo;
Fim
Fim

Obs: Sero repetidas vrias instrues, por isso
h a necessidade de haver um delimitador
(inicio/fim) do bloco de repetio.

while (condio)
{
Instruo1;
Instruo2;
...
Instruo n;
}
Prof Angelina V.S.Melar
71

2. Repetio com Ps-condio - Faa..Enquanto


Incio
...
Instruo;
Faa
Incio
Instruo1;
Instruo2;
...
Instruo n;
Fim
ENQUANTO (condio);
Fim

3. Repetio com Ps-condio - Repita..at
Na linguagem Pascal existe o tipo de repetio Repeat..until, que no pseudocdigo
representamos pelo repita..at. Essa estrutura tambm faz a verificao da condio no final do
bloco de instrues, como a estrutura do Faa..enquanto. A diferena que no repita..at, a
repetio feito at a condio testada se torne verdadeira, ou seja, enquanto for falsa a condio
continua repetindo a execuo.

Incio
Instruo;
Repita
Instruo1;
Instruo2;
...
Instruo n;
at (condio);
Fim





Na linguagem C existe o teste da condio no final do bloco de repetio:

Faa .. Enquanto

Nesta estrutura a execuo das instrues ocorrer pelo menos uma vez, pois a condio
que determina o fim da repetio est no final do bloco de instrues. De forma, que no
preciso validar a condio no incio.
Enquanto a condio testada for verdadeira ser feita a execuo das instrues
repetidamente.

Prof Angelina V.S.Melar
72
PENSE:












Exemplos de Pseudocdigo

a) num 1; b) resp s;
enquanto (num >0) faa enquanto (resp = s) faa
incio
...
fim

c) faa
incio
....
fim
enquanto (num >0);



Exemplos em C
a) num = 1; b) resp = s; c) do
while (num >0) while (resp = s) { .
{ { ....
.... ... }while(num >0);
} }



4. Comandos Break, Continue funo Exit()
Esses comandos so usados para se fazer um desvio na execuo. O break e o continue
so usados dentro de laos (for, while).
Break: pode ser usado para terminar um case(switch) ou para forar o trmino de um
lao. Depois de encerrado o lao ele retorna para o comando seguinte fora do lao.

Continue: ele encerra apenas a iterao atual do lao- no executa as instrues aps ele -
voltando ao incio da repetio.

Exit(): finaliza a aplicao, podendo retornar um valor, qualquer valor diferente de 0
significa deu algum tipo de erro.


Imagine a situao: Voc tem que desenvolver o mdulo de
Saque para um Banco. Como voc faria?
permite o saque quantas vezes quiserem e depois deduz do
saldo
Ou...
primeiro faria o programa verificar o saldo para depois
permitir o saque.

Prof Angelina V.S.Melar
73
5. Enquanto Verdadeiro
O valor 1 significa verdadeiro, de forma que voc pode colocar uma condio sem
definio da expresso lgica.

Exemplo 1: para criar um loop infinito:
while (1)
{
printf("Programao de um loop ");
}

Exemplo 2: para criar um loop com a condio de trmino definida dentro do estrutura de
repetio:

#include <stdio.h>
#include <stdlib.h>
int main()
{
int num;

while (1)
{
scanf("%d", &num);
if (num ==0)
exit(0);
}

_sleep(7000);

}



Dica: O exit(0) ir finalizar o programa direto. Se for usado o break no lugar do exit(0) ele ir
finalizar a repetio e ir continuar o programa executando o _sleep(7000), e as demais
instrues que houverem aps a estrutura de repetio.

Prof Angelina V.S.Melar
74

Faa um programa que receba as notas e faltas de 2 alunos. Faa a consistncia da nota,
alertando quando for digitada uma nota invlida (menor que 0 ou maior que 10).

#include <stdio.h>
#include <stdlib.h>
main()
{
float cont=1, nota=0, falta;
while (cont <= 2)
{
printf("\nDigite a nota do aluno:");
scanf("%f", &nota);
if ((nota < 0) || (nota > 10))
{
printf("\nA nota digitada deve estar entre 0 e 10");
continue;
}
printf("\nDigite a frequencia do aluno:");
scanf("%f", &falta);
cont++;
}
system("pause");
}

Prof Angelina V.S.Melar
75

Repetio Pr-Definida Para

Essa estrutura de repetio usada quando conhecida a quantidade de vezes em que
uma determinada parte do programa ser repetida. Essa parte pode ser formada por uma ou vrias
instrues.




PARA <varivel_controlevalor inicial> AT <valor_final> INC <incremento> FAA
Instruo;


PARA varivel_controle DE valor inicial AT valor_final PASSO valor_incremento FAA
Instruo;


Varivel de controle ou Varivel Contadora
atravs dessa varivel que se
controla a repetio. Essa varivel pode
ser iniciada tanto com valores negativos
como positivos, dependendo da forma
que feita a contagem e controle da
varivel: regressiva ou progressiva.
Na linguagem C podem existir
diversas variveis de controle.
Valor inicial: O valor inicial
indica qual o primeiro valor a ser
armazenado dentro da varivel de
controle.
Valor final: atravs desse valor
que determinado o fim a repetio. Na
linguagem C o que existe no lugar do
valor final uma condio. Enquanto
essa condio for verdadeira continua a
repetio, quando ela se torna falsa o
lao finalizado.
Incremento ou decremento: O incremento ou decremento um valor ou uma frmula que
muda o valor da varivel de controle, de maneira que essa varivel saia do valor inicial e atinja o
valor final, e dessa maneira torne falsa a condio testada.

C
CONDIO

INSTRUES
INSTRUES
REPITA
N = 1, 20, 1
Varivel de repetio
Valor inicial
Valor final
Valor de Incremento
PRXIMO N
Prof Angelina V.S.Melar
76


6. Estrutura em C

for (varivel de controle = valor inicial; condio que define o fim do lao; valor do
incremento ou decremento)
instruo;
ou,

for (varivel de controle = valor inicial; condio que define o fim do lao; valor do
incremento ou decremento)
{
Instruo 1;
Instruo 2 ;
...
Instruo n;
}

Exemplos:
a) for (cont =1; cont <=10; cont ++)
printf(Ordem crescente: %i, cont);

b) for (cont =10; cont >=1; cont --)
{
printf(Ordem decrescente: %i , cont);
_sleep(500);
system(cls);
}
Dicas:
O break encerra o lao a qualquer momento.

O continue faz com que o lao seja finalizado sem executar as instrues abaixo
e volte ao incio, fazendo um novo ciclo.

O uso de mais de uma varivel dentro do for deve ser feito com o uso da vrgula
(,).
for (n1=1, n2=1; n1+n2 < 10; n1++, n2++)

No obrigatria a definio dos trs parmetros, podendo ser feito um lao
infinito.
for ( ; ; )
printf(Oi!);

O lao for pode ser usado para criar um atraso de tempo. Para isso ele no deve
possuir nenhuma instruo associada a ele.
for (atraso =0 ; atraso < 100; atraso++);


Prof Angelina V.S.Melar
77
Cuidado: Se a condio a ser testada j inicia sendo falsa, as instrues dentro do lao
nunca sero executadas.
int cont = 100;
for (; cont <1 ; cont++)


Cadastre o nmero de identificao das 200 peas.

Incio
int numiden, cont;
PARA contl AT 200 INC contcont +1 FAA
Incio
Escreva (Nmero de identificao do funcionrio:);
Leia (numiden);
Fim
Fim

Linguagem C
#include <stdio.h>
#include <stdlib.h>
main()
{
int numiden, cont;
for (cont=1;cont <=200;cont++)
{
printf (Nmero de identificao do funcionrio);
scanf (%i, &numiden);
system(pause);
}
}

Explicao:
1. No exemplo acima inicialmente feita a atribuio do valor 1 a varivel de controle
com o valor.
2. Em seguida feita a verificao da condio que determina o fim da repetio, se ela
for Verdadeira inicia a execuo do cdigo que est no bloco. Se for falsa j finaliza
(mesmo se nunca executou o cdigo dentro do bloco de comandos).
3. Executa o bloco de instrues, que contm a entrada do nmero de identificao. No
final da execuo do bloco automaticamente adicionado ao contedo da varivel de
controle o valor 1 (anteriormente valia 1, mais 1 de agora, a varivel passa a ter o valor
2).
4. Depois verificado o valor da varivel com o valor final pr-definido (200), como no
passo 2. Repetindo todo o processo vrias vezes. At que ...
5. o valor da varivel de controle atinja o valor maior que o definido no intervalo (201).
Quando isso ocorrer a repetio pra e ser iniciada uma nova seqncia de comandos
definidos fora da repetio, aps o bloco de comandos.

Condio de trmino da repetio:
Repete at que o valor de cont fique maior que 200
Ou
Enquanto o valor de cont for menor ou igual a 200 repete

Prof Angelina V.S.Melar
78

Variveis Contadoras e Acumuladoras


Variveis Contadoras:
o nome dado a uma varivel
numrica que tem a funo de "contar"
valores, ocorrncias, ou mesmo, um
determinado fenmeno. Esse recurso de
programao usado em programas de
cadastro, pesquisa, controles. Atravs dessas
variveis possvel contar o nmero de
pessoas cadastradas, o nmero de peas com
defeito.

Cuidados:
todas as variveis contadoras
devem ser zeradas no incio;
o contedo da varivel
contadora deve ser
incrementado com o valor de
uma constante (normalmente
o valor 1);
para a varivel contadora ser
incrementada vrias vezes ela
deve ser colocada dentro de
um lao.

Exemplo:
ContPessoas ContPessoas + 1;

Variveis Acumuladoras:
Para cada situao deve-se usar uma
regra, um procedimento. Quando se faz a
contagem de algum dado usa-se a varivel
contadora, incrementando o seu contedo
com o valor 1. Mas, se houver a necessidade
de acumular o valor de uma varivel, ento,
usa-se a varivel acumuladora, onde elas so
incrementadas no pelo valor 1, mas sim
pelo valor de outra varivel.

Cuidados:
todas as variveis
acumuladoras devem ser
zeradas no incio do processo;
o contedo de uma varivel
acumuladora deve ser
incrementado com o valor de
outra varivel;
para a varivel acumuladora
ser incrementada vrias vezes
ela deve ser colocada dentro
de um lao.

Exemplo:
Somanota Somanota + Nota;



Varivel Contadora = Varivel contadora + 1
cont++;

Varivel Acumuladora = Varivel acumuladora + valor de outra varivel
Soma += nota;

Prof Angelina V.S.Melar
79

SubAlgoritmos/ Modularizao

1. Sub-Rotinas (Mdulos)
As sub-rotinas, tambm chamadas de mdulos ou subprogramas, so trechos de
instrues que realizam tarefas especficas e que podem ser realizadas diversas vezes durante a
execuo do programa.
Ao ser decomposto um programa em subprogramas ou sub-rotinas este tem sua
complexidade tambm dividida. Desta forma possvel focalizar a ateno em um problema de
cada vez, fazer os programas ficarem mais organizados e menores.
A linguagem C possibilita o uso de sub-rotinas por meio das funes. Na linguagem C
existe a funo principal main(), que sempre a primeira rotina executada, e a partir desta as
outras rotinas so executas. A linguagem C formada por funes, como printf(), scanf(),
system(), que so includas atravs da diretiva #include (j explicada anteriormente).

2. Declarao da Funo
tipo_de_retorno nome_da_funo (tipo_de_parmetro nome_do_parmetro, ....)
{
declarao das variveis locais;
corpo da funo;
retorno;
}

O tipo_retorno especifica o tipo de valor (int, float) que a funo retornar atravs do
return. Os tipos podem ser inteiros (int), reais (float), char (caracter) ou mesmo void (no
retorna nada). Se no especificado o tipo o compilador assume um retorno inteiro.
O nome_da_funo o identificador da funo. Atravs dele possvel saber o que a
funo executar, por exemplo, se a funo for criada para fazer uma adio ela pode ser
chamada de soma(). O compilador procura pelo nome da funo para fazer o desvio de execuo.
A lista de parmetros separada por vrgula. O tipo_de_parmetro e o seu nome so
respectivamente o tipo e o nome da varivel que sero passados para a funo. Uma funo
pode no ter parmetros. Esses parmetros estabelecem a comunicao bidirecional entre o
subalgoritmo e o algoritmo que o chamou.
O corpo da funo contm todas as instrues que devero ser executadas pela funo.
Ele deve estar entre chaves { }. A chaves de abertura { marca o incio da funo e a chaves
fechada } marca o final da funo.

As variveis locais so variveis declaradas dentro (internamente) da funo onde sero
usadas e somente so conhecidas (visveis e acessveis) pela funo que as criou.

Exemplo:
float media_notas (float nota1, float nota2)
{
float media;
media = (nota1+nota2)/2;
return media;
}
Prof Angelina V.S.Melar
80
3. A funo principal - main()
Por padro a funo main() deve ser do tipo inteiro, ou seja seu retorno um valor inteiro.
Esse valor pode ser usado pelo sistema operacional para verificar se a execuo do programa foi
bem sucedida. Quando o valor retornado zero 0 significa que a execuo foi bem sucedida,
caso contrrio ocorreu algum erro.
int main()
{
return 0;
}
A funo principal pode receber vrios valores (argumentos) quando executada, que
depois podem ser processadas. Veja a explicao no exemplo a seguir:
Na linha de comando sero passados o nome do programa e 2 nmeros inteiros, como:
ANGELINA 8 27
O programa ANGELINA iniciar executando a funo main() que estar recebendo 3
argumentos, o nome do programa, o nmero 8 e o nmero 27. Para que ele possa receber esses
valores foi definido da seguinte maneira:








int main (int argc, char * argv[])
No caso acima o argc teria o valor 3 e o argv a matriz formada por ANGELINA, 8 e 27.

Exemplo 1 :
int main(int argc, char *argv[])
{
printf("Total de argumentos passados %i", argc);
printf("Nome do programa %s", argv[0]);
_sleep(3000); return 0;
}

Exemplo 2:
int main(int argc, char *argv[])
{
int i=0;
printf("Total de argumentos passados %i", argc);
while (i< argc)
{
printf("\n%d - string informadas %s", argc, argv[i]);
i++;
}
_sleep(3000);
return 0;
}
Contm o total de
argumentos passados
(lembre do c como
contador)
um ponteiro de uma matriz de
caracteres. Cada elemento est
direcionado para um argumento
Prof Angelina V.S.Melar
81

Exemplo 3:
int main(int argc, char *argv[])
{
int i=0;
if (atoi(argv[1]) > 0)
printf("\nNumero positivo");
_sleep(3000);
return 0;
}


4. Comando Return
Tem duas formas de uso:
ele provoca uma sada imediata das funo que o contm, retornando a funo anterior.
retornar um valor para outra funo


5. Tipo Void
Todas as funes que no devolvem valores devem ser declaradas como tipo void.
Quando uma funo no tem parmetros, deve ser colocado o void entre parnteses.
Quando no existe um retorno o tipo de funo void.
As funes podem ser usadas como rotinas de entrada, rotinas de criao de ela ou rotinas
de exibio de dados. Muitas rotinas so especficas e independem dos valores de variveis de
outras rotinas, por isso o uso do tipo void na especificao das funes.

Exemplo:
void entrada(void);
main()
{
entrada();
....
system(pause);
}


void entrada(void)
{
system(cls);
printf(\n\n\n); printf(<1> - Adio \n); printf(<2> - Subtrao \n);
printf(<3> - Multiplicao \n); printf(<4> - Diviso \n);
printf(<5> - Sair \n);
}
O void no parmetro opcional.
O void na definio do tipo de funo
obrigatrio
Prof Angelina V.S.Melar
82
6. Prottipos de Funes
O prottipo da funo foi acrescido com o padro C ANSI. O prottipo da funo deve
ser usado quando a funo for definida aps a funo principal main(). Ele um cabealho que
indica ao compilador a existncia de uma funo dentro do programa, podendo estar no meio ou
no final.
Definio do Prottipo
tipo_de_retorno nome_da_funo (tipo_de_parmetro nome_do_parmetro, ....)
float media_notas (float nota1, float nota2);

main()
{
}

** Se a funo for descrita no incio do programa, antes da funo principal main(), no
precisa ser feito o seu prottipo.

7. Chamada (ativao) da Funo
A chamada de funo existe quando h uma referncia de uma funo dentro do
programa. Durante o acionamento da funo, o fluxo de execuo desviado para ele, e logo
aps sua concluso, o fluxo de execuo retorna a linha de origem (a que o desviou).
Na linha de chamada da funo pode haver o envio ou no de argumentos para outra
funo. Esses argumentos so valores de variveis, que podem ser usadas na outra funo.
No so definidos os tipos de dados dos argumentos, pois os mesmos so definidos no
incio da funo.

Exemplo: float media_notas (float nota1, float nota2);
main()
{
float n1,n2,media;
media= media_notas (n1, n2);

}

float media_notas (float nota1, float nota2)
{ ....}

Os argumentos enviados para a funo devem ser compatveis com os parmetros, ou
seja, se foram enviadas duas variveis (argumentos) exemplo nota1 e nota2 devem ser
definidos na funo a ser executada duas variveis (parmetros) para estar recebendo os
contedos das variveis. Os tipos de variveis devem ser iguais, ou seja, se os dados enviados
so inteiros, ento a variveis definidas para receb-los tambm devem ser inteiros.


n1 e n2 so argumentos (enviam)
nota1 e nota2 so parmetros (recebem)
Prof Angelina V.S.Melar
83
8. Exemplo Completo de Funo
#include <stdio.h>
#include <stdlib.h>

float media_notas (float nota1, float nota2); //prottipo da funo

main( ) // incio da funo principal
{
float n1, n2, media; // definio das variveis locais
printf("\n Este programa calcula a mdia de duas notas");
printf("\n\n Primeiro nota");
scanf("%f", &n1);
printf("\n\n Segunda nota");
scanf("%f", &n2);
media= media_notas (n1, n2); // chamada da funo media_notas()
printf("\n\n A mdia das notas %.2f \n", media);
system("pause");
} // fim da funo principal


float media_notas (float nota1, float nota2) // declarao da funo media_notas
{
float media; // definio das variveis locais
media = (nota1+nota2)/2;
return media; //retorna o resultado da mdia para a
funo principal
} // fim da funo media_notas()

** A funo media_notas() do tipo float porque o retorno dela ser uma varivel do tipo float
(media).
** Os parmetros (nota1 e nota2) so do tipo float porque seus respectivos argumentos (n1,n2) so
do tipo float.

9. Classes de Armazenamento de Variveis
Variveis Globais: So variveis definidas fora de qualquer funo especfica, no incio
do programa, antes da funo principal. Elas podero ser manipuladas por qualquer
funo e parte do programa e seus endereos e alocaes de memria permanecem at o
final do programa- ou seja ficam ocupando espao. Essas variveis so definidas como
extern. Elas so inicializadas com zero, caso o programador no as inicialize.

Variveis Locais: So variveis declaradas dentro de uma funo especfica e so
visveis apenas na funo em que foram criadas. Funes distintas podem ter variveis
locais com o mesmo nome. Quando a funo iniciada as variveis locais so criadas e
quando essas funes so finalizadas as variveis locais so destrudas e liberados os
endereos de memria. Essas variveis so automticas definidas e so definidas
como auto. Elas no so inicializadas com zero.
Ento, a varivel local ser visvel apenas na funo que a cria e a varivel global ser
visvel por todas as funes existentes no programa. Isso pode ser alterado se voc definir
a varivel como esttica.

Prof Angelina V.S.Melar
84
Variveis Estticas: essas variveis so visveis e definidas internamente dentro de uma
funo (localmente), mas no perde seu valor depois de finalizada a funo.

/* Exemplo do uso de variveis estticas*/
#include <stdio.h>
#include <stdlib.h>
void contador ();
main()
{
contador();
contador();
contador();
_sleep(2000);
}

void contador ()
{
static int cont=0;
printf("\nValor do contador %i", cont++);
}

*** Perceba que a inicializao somente ocorre a primeira vez que a funo executada.
Tambm existe a static definida fora da funo que pode ser usada em qualquer parte do cdigo-
fonte atual, mas no pode ser usada por outros arquivos fontes. Isso quando for usada uma estrutura de
projetos.

Register: as variveis definidas como register so armazenadas num registrador do
processador e no na memria RAM. Dessa maneira aumentada a velocidade de
processamento, j que no precisa do acesso a memria. Essas variveis devem ser int ou
char.


Prof Angelina V.S.Melar
85

Funo com Passagem de Parmetro por Valor

Quando uma funo chamada, os parmetros dessa funo copiam os valores dos
argumentos que so passados pela funo que a chama.
Essa passagem de parmetro denominada Passagem de Parmetros por Valor. Isto
ocorre porque so passados para a funo apenas os valores dos parmetros e no os prprios
parmetros.
Os valores dos argumentos no so alterados fora da funo que os criou.
No exemplo abaixo vemos que o valor mostrado da varivel num a primeira vez (na
funo main()) diferente do valor mostrado na funo quadrado(), pois, so duas variveis
diferentes. O valor da varivel num alterado na funo quadrado(), mas permanece inalterada
na funo main().

Exemplo: Programa que calcula o quadrado de um nmero qualquer, usando funo.
#include <stdio.h>
#include <stdlib.h>
float quadrado (float num); //prottipo da funo quadrado()

main()
{
float num, qd; //declarao das variveis locais
printf ("Entre com um numero: ");
scanf ("%f",&num);
printf ("Na funo MAIN a varivel num vale %.2f \n", num);
qd= quadrado(num); //chama a funo quadrado() e envia o
argumento num
printf ("O quadrado do %.2f = %.2f\n",num, qd);
system(pause);
}

float quadrado(float num) //declarao da funo quadrado() e
do
{ parmetro num
num = num*num;
printf ("Na funo QUADRADO a varivel num vale %.2f \n", num);
return num; //retorna a funo que a chamou
retornando um valor (num) que ser
} atribudo a varivel qd.

** A funo quadrado() do tipo float porque o retorno dela ser uma varivel do tipo float (num).
** O parmetro (num) do tipo float porque o argumento (num) do tipo float.
Prof Angelina V.S.Melar
86

Exerccios Resolvidos

1) Faa uma funo que calcule a soma de dois nmeros recebidos na funo principal.
#include <stdio.h>
#include <stdlib.h>
float soma (float a, float b); // prottipo da funo soma
main( ) // incio da funo principal
{
float n1, n2, total; // definio das variveis locais
printf("\n Este programa calcula a soma de dois nmeros");
printf("\n\n Digite o valor do primeiro nmero");
scanf("%f", &n1);
printf("\n\n Digite o valor do segundo nmero");
scanf("%f", &n2);
total=soma(n1, n2); // chamada da funo soma()
printf("\n\n A soma de %.2f com %.2f %.2f \n", n1, n2,total);
system("pause");
} // fim da funo principal

float soma (float a, float b) // definio da funo soma
{
float res; // definio das variveis locais
res= a+b;
return(res); // retorna o resultado da soma dos
nmeros enviados
} // fim da funo soma()

]

2) Elabore um programa que tenha as seguintes funes:
_ na funo principal deve ser recebidas pedidas duas notas e feitas s chamadas de
funes.
_ uma funo que receba a nota do aluno e faa a consistncia;
_ uma funo que calcule a mdia;
_ uma funo que exiba o resultado, se o aluno est aprovado, reprovado ou em exame.
#include <stdio.h>
#include <stdlib.h>
float ler_nota(void); /* prottipos das funes*/
float calcula_media(float p1, float p2);
void exibe_resultado(float med);
void pausa(void);
main()
{
float n1, n2, med;
printf("Primeira prova: "); n1=ler_nota();
printf("Segunda prova : "); n2=ler_nota();
med=calcula_media(n1, n2);
exibe_resultado(med); pausa();
}


Prof Angelina V.S.Melar
87
float ler_nota(void)
{
float n;
do
{
scanf("%f", &n);
if (n<0.0 || n>10.0)
printf("Nmero Invlido! Redigite..:");
}while (n<0.0 || n>10.0);
return(n);
}

float calcula_media(float p1, float p2)
{
float res;
res = (p1 + p2) / 2; /* Calcula a mdia*/
return(res);
}

void exibe_resultado(float med)
{
printf("Media %.1f: ", med);
if (med < 3.0)
printf("Aluno reprovado\n");
else if (med >= 3.0 && med < 7.0)
printf("Aluno em exame\n");
else if(med >= 7.0)
printf("Aluno aprovado\n");
}

void pausa(void)
{
system(pause);
system(cls);
}

3) Exemplo completo de validao de dados, sem usar a funo atoi() ou atof().

int caractermaiusculo(char ch)
{
return (ch >= 'A' && ch <= 'Z');
}

int caracterminusculo(char ch)
{
return (ch >= 'a' && ch <= 'z');
}

int digitonumerico(char ch)
{
return (ch >= '0' && ch <= '9');
}
Prof Angelina V.S.Melar
88
int main(void)
{
char c;
while(1)
{
c=getch( );
putchar(c);
if (digitonumerico(c) == 1)
puts("Valor Numerico\n");
else if (caractermaiusculo(c) == 1)
puts("Caracter Maiusculo\n");
else if (caracterminusculo(c) == 1)
puts("Caracter Minusculo\n");
else
puts("Caracter especial\n");
}
system("pause");
return 0;
}
Prof Angelina V.S.Melar
89
Funes Recursivas

Essas funes tm esse nome por poderem chamar a si mesmas de forma direta ou indireta. Por
exemplo, para calcular o fatorial de um nmero pode ser feita uma funo e ela precisar chamar a si
mesma (forma direta). Quando uma funo chama outra e depois essa outra chama a que a chamou
definida como funo recursiva indireta.
As variveis locais de chamadas recursivas so independentes entre si, como se tivessem
chamando funes diferentes.

Exemplo: Calculo do fatorial de um nmero qualquer.
/* N! = N * (N-1)!
4! = 4 * 3* 2 * 1
4! = 4 * 3! 3! = 3 * 2! 2! = 2*1 ! 1!= 1
Se N! for 0 o resultado 1
Seno, N * (N-1)
*/
#include <stdio.h>
#include <stdlib.h>

main()
{
int num, r_fatorial;
printf("Informe valor: ");
scanf("%i", &num);
r_fatorial = 1;
if (num == 0)
r_fatorial = 1;
else
{
do
{
r_fatorial *= num;
num--;
}while (num !=0);
}
printf("O fatorial desse numero e %i", r_fatorial);

_sleep(2000);
}

Usando funo recursiva direta
#include <stdio.h>
#include <stdlib.h>

int f_fatorial(int num);

main()
{
int num;
printf("Informe valor");
scanf("%i", &num);
Prof Angelina V.S.Melar
90
printf("O fatorial desse numero %i", f_fatorial(num));
_sleep(3000);
}

int f_fatorial(int num)
{
if (num == 0)
return 1;
else
return num*f_fatorial(num-1);
}

As variveis locais de chamadas recursivas so independentes entre si, como se tivessem chamando
funes diferentes.

Simulao da execuo:
Fatorial do nmero 2
A)- envia o argumento 2
- na funo testa o valor
- tem o return 2 * f_fatorial(2-1)
*** no retorna, pois primeiro tem um funo a ser executada.

B) -envia o argumento 1 (do calculo anterior 2-1)
- na funo testa o valor
- tem o return 1 * f_fatorial(1-1)
*** no retorna, pois primeiro tem um funo a ser executada.

C) - envia o argumento 0 (do calculo anterior 1-1)
- na funo testa o valor
- veja que agora tem o return 1

-- esse retorna o valor 1 passo B
- tem o return 1 * 1
--esse tambm retorna o valor calculado 1 ao passo A, que calcula return 2 * 1 e retorna
o valor 2 a funo principal e exibe o resultado.



Prof Angelina V.S.Melar
91
Vetores

1. Conceito

Os vetores so matrizes unidirecionais homogneas e podem ser chamadas de: arranjos
unidimensionais, variveis indexadas, variveis compostas homogneas unidimensionais ou
arrays.
O vetor um mecanismo de estruturao de dados usado para representar variveis do
mesmo tipo de dado, que so referenciados pelo mesmo nome e cada elemento atravs de sua
posio dentro dela.
Consiste em locaes contguas de memria. O endereo mais baixo corresponde ao primeiro
elemento e o mais alto ao ltimo.
Os vetores so variveis indexadas por apenas um ndice (uma dimenso, unidimensional).
O elemento do vetor acessado por meio de um ndice.
O ndice 0 contm o primeiro elemento armazenado.
Uma string (cadeia de caracteres) um vetor de caracteres.

2. Exemplos:

float media[10]; // vetor com 10 elementos do tipo real

0 1 2 3 4 5 6 7 8 9
2.5 4.5 6.5 3.5 10 8 7 5.5 6 8.5

char nome[4]; // vetor com 4 elementos do tipo caracter (string)
A N A \0

int notas[4]; //vetor com 4 elementos do tipo inteiro
6 3 10 5


3. Declarao:
A declarao de um vetor pode ser feita da seguinte maneira:
tipo_da_varivel nome_da_varivel [tamanho];
Onde:
tipo_da_varivel o tipo base do vetor (int, float, char, etc), ou seja, qual tipo de
contedo ser armazenado na varivel;
tamanho_da_varivel a quantidade de elementos que o vetor armazenar.

Exemplo:
float medias[45];

- A linguagem C reservar 180 bytes (45 x 4), ou seja, so 45 variveis do tipo
float, onde cada float ocupa 4 bytes. Estes bytes so reservados de maneira contgua.
Prof Angelina V.S.Melar
92
4. Acessando os elementos
Cada elemento do vetor um elemento individual, ou seja, seu contedo no est
vinculado com os outros. Para acess-lo eu preciso de uma referncia a mais do que somente seu
nome, preciso saber onde se localiza o elemento dentro do vetor. Para isso acessamos os
elementos do vetor, individualmente, atravs de um ndice.
Na linguagem C os ndices iniciam no 0 e finalizam valendo o tamanho do vetor -1,
devendo ser colocados entre colchetes.
Exemplo: float media[10];

A primeira mdia ser armazenada na posio 0 do vetor e a ltima ser na posio 9;
0 1 2 3 4 5 6 7 8 9
2.5 4.5 6.5 3.5 10 8 7 5.5 6 8.5

media[0] acessa o primeiro elemento do vetor;
media[9] acessa o ltimo elemento do vetor;
media[2] acessa o terceiro elemento do vetor;

5. Armazenando os elementos
Para ser feito o armazenamento no vetor necessrio de definir seu nome e em qual
posio dever ser armazenada (qual ndice). O armazenamento pode ser feito separadamente ou
em conjunto, de uma vez s. Veja os exemplos abaixo:
media[0] = 2.5;
float media[10]= {2.5,4.5,6.5,3.5,10,8,7,5.5,6,8.5};
float media[]= {2.5,4.5,6.5,3.5,10,8,7,5.5,6,8.5};
media[1] = 4.5;


** Cuidado: No se esquea que o ndice sempre inicia no 0.
Ao declarar um vetor voc coloca o tamanho total.

6. Endereo do vetor ou matriz unidimensional
Quando se refere ao endereo do vetor, pense que o primeiro elemento d incio ao vetor, ou seja,
media equivale ao endereo inicial do vetor (media[0] igual a media). Por isso quando for feita
a entrada de uma string no se pode colocar o &.


Exemplos
a) Recebendo elementos de um vetor do tipo inteiro digitados via teclado
for ( i=0; i<100; i++ )
{
printf(Digite %i elemento do vetor, i++);
scanf( %i, &vet[i] );
}

b) Mostrando os elementos de um vetor na tela:
for ( i=0; i<100; i++ )
printf( %i, vet[i] );

Prof Angelina V.S.Melar
93
c) Inicializando um vetor com zeros
for ( i=0; i<100; i++ )
valores[i] = 0;


7. Exerccios Resolvidos:
1) Crie um vetor com 10 elementos do tipo inteiro e depois armazene automaticamente os
valores de 0 a 9.
main()
{
int x[10]; //definio do vetor
int i; //definio da varivel para controlar o ndice
for (i = 0; i < 10; i ++) //definio do lao para gerar o vetor
x [i] = i; //atribuio do valor da varivel i ao vetor x
system(pause); }

2) Crie um vetor com 10 elementos do tipo inteiro e depois armazene automaticamente os
resultados da tabuada do nmero 2.
main()
{
int r[10];
int t;
for(t=0;t<10;t++)
{
r[t]=t*2;
printf("%i\n",r[t]);
}
system("pause");
}

3) O professor de Programao de Computadores precisa de um programa que calcule a mdia
geral da sala, verificando dessa forma o desempenho dos alunos. O programa deve receber e
armazenar as notas dos 35 alunos e calcular a mdia geral da sala.
main()
{
int notas[35],i,soma =0;
for(i=0;i<5;i++)
{
printf("Digite a nota do aluno %d: ",i);
scanf("%f",&notas[i]);
soma=soma+notas[i];
}
printf("Media das notas: %f.",soma/5);
system("pause");
}
Prof Angelina V.S.Melar
94

Vetor String (Cadeias de Caracteres)

Na linguagem C no existe o tipo de dado string, dessa forma necessrio criar um vetor
de caracteres para armazenar uma cadeia de caracteres (string).
Ao usar esse tipo de vetor deve-se tomar cuidado para o fato de que as strings tm o seu
ltimo elemento como caracter null (\0). Para declarar a string, devemos declarar sempre um
elemento a mais para o terminador. Cada caracter um elemento independente e pode ser
acessado de um ndice.
Existem bibliotecas e funes especiais para o tratamento e manipulao de strings. O
cabealho padro string.h.

Exemplos de declarao e atribuio:
a) char nome[7];
b) char nome[] = {b,i,a,n,c,a};
d) char mensagem[10] = Exemplo;

Armazenamento e entrada de strings
Funo scanf()
A funo scanf(%s, &nome) recebe apenas o primeiro nome. Quando o usurio
pressionar o espao ele finaliza essa string, ignorando o sobrenome. Ento a funo scanf()
usada para receber uma palavra, apenas uma string.

Funo gets()
A funo gets() usada para receber uma sria de strings, que podem ser separadas,
digitadas, com ou sem espao. Exemplo: gets(nome);
Cuidado: no coloque o ndice do vetor, pois, a funo se encarrega de separar cada
caracter na sua respectiva posio dentro do vetor ou matriz.

Exemplo: Faa um programa que receba um texto e depois mostre quantas vogais foram
digitadas.
main()
{
char texto[10];
int vogais=0,t;
printf ("Digite um texto\n");
gets(texto);

for (t=0;t<10;t++) // ou for (t=0; texto[i] != '\0';t++)
{
if (texto[t] == 'a' || texto[t] == 'e' || texto[t] == 'i' || texto[t] == 'o' || texto[t] == 'u')
vogais++;
}

printf ("Total de vogais: %i\n", vogais); system ("pause");
}

Prof Angelina V.S.Melar
95
Funo strlen() Retorna o tamanho da string
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
char nome[40];
printf(Digite seu nome: ); gets(nome);
printf(O tamanho do nome : %i\n, strlen(str));
}

Funo strcat() Unio de variveis string
main()
{
char nome[40], sobrenome[15];
int i;
printf ("\nEntre com um nome: "); scanf ("%s", nome);
printf ("\nEntre com um sobrenome: "); scanf ("%s", sobrenome);
strcat(nome, " ");
strcat(nome, sobrenome);
printf ("\nO seu nome %s \n", nome);
}

Funes: atoi(), atof()
Essas funes fazem a converso de uma string em um valor numrico. A atoi() converte
a string para um valor inteiro. A atof() converte para um nmero ponto flutuante.
Cuidado com o valor informado se for usado o atoi ele somente aceita o valor inteiro e
ignora a parte decimal. Exemplo: 287.455 somente aceita o 287
Uma string invlida retorna na converso o valor zero.

Dica: Quando voc quiser que no trave o programa na entrada de dados, de forma que o usurio
informe uma letra no lugar de entrar com o nmero, use uma dessas funes.

int main()
{
char num1[3], num2[3];
int inum1;
float fnum2;
printf("\nInforme o valor"); gets(num1);
printf("\nInforme o valor"); gets(num2);
inum1= atoi(num1);
fnum2= atof(num2);
printf("\nOs numeros validos informados sao %i e %.2f",inum1, fnum2);
_sleep(3000);
}
Prof Angelina V.S.Melar
96
Funo strcmp() usada para comparar strings. Ela recebe e compara duas strings. Essa
funo retorna 0 se as duas forem iguais, seno, se a primeira string for maior que a segunda
retorna um valor positivo, seno, retorna um valor negativo.
main()
{
char senha1[10], senha2[10];
printf("\nCadastro de senha\n");
printf("Informe sua senha:"); gets(senha1);
printf("Redigite sua senha: "); gets(senha2);
if ( strcmp(senha1,senha2) == 0 )
printf ("\nSenha vlida");
else if ( strcmp(senha1,senha2) >0 )
printf ("\nA primeira senha e maior");
if ( strcmp(senha1,senha2) < 0 )
printf ("\nA primeira senha e menor");
getch();
}

Ou
int i=0, i =0;
char nomes[20];
gets(nome_pes);
while(i<20 || !achou) //poderia ser ! (achou == 0)
{
if (!strcmp(nomes[i], valor)
{
achou = 1;
break;
}
else
i++;
}

Funo puts() usada para mostrar uma nica string por vez, mas com a vantagem de pular
a linha automaticamente.
main()
{
char senha1[10]= "Fatec", senha2[10]= "Fatec Itu";
puts("Senhas cadastradas\n");
puts(senha1); //aparece Fatec
puts(senha2); //aparece Fatec Itu
puts(&senha1[4]); //aparece c itu a partir do ndice 4.
}

Funo strstr() procura uma string dentro de outra string
Exemplo: if (strstr(string_lida, string_pesq) != NULL)
break;
Prof Angelina V.S.Melar
97
Funo strchr() procura um caracter dentro de uma string
Exemplo com as duas funes de pesquisa:
int main()
{
char nome[20]="Ana carolina";

if (strstr(nome, "Ana"))
printf("O nome possui o Ana");
else
printf("O nome no possui o Ana");

if (strchr(nome, 'a'))
printf("O nome possui o caracter a");
else
printf("O nome no possui o caracter a");
getchar();
return 0;
}

Funo fgets() A funo fgets() efetua a leitura de dados do tipo string fornecidos via teclado
delimitando seu tamanho. Ela aceita caracteres em branco no meio do string, colocando o
caractere de controle \0 apenas quando for pressionada a tecla <Enter>.
Para utilizar esta funo, preciso informar trs parmetros, sendo o nome da matriz-
string, o seu tamanho e o nome do buffer em uso:
fgets(VARIAVEL, TAMANHO, stdin);

puts("Informe seu nome ........: "); fgets(NOME, 20, stdin);


Prof Angelina V.S.Melar
98
Matriz
Segundo Giovanni e Bonjorno: Matriz o conjunto ordenado dos nmeros que formam uma
tabela, onde cada nmero um elemento.
Matriz transposta: quando temos uma matriz de origem m x n e a transposta n x m

1. Matriz Bidimensional
A linguagem C permite que seja declarada uma matriz bidimensional (varivel composta
homognea bidirecional) ou mesmo multidimensional.
Na matriz bidimensional o primeiro ndice indica a linha e o segundo a coluna. Os ndices
iniciam no zero(0). Para calcular o espao de memria necessrio para armazenar a matriz
necessrio fazer o seguinte calculo:
int pontos_jogos [2] [4];

qtd de linhas * qtd de colunas * qtd do tipo (inteiro)
tamanho = 2 * 4 * 2
tamanho = 16
Lembre-se que internamente essa matriz tem seus valores armazenados linearmente, de
forma continua na memria, cada elemente armazenado em um endereo, cujo prximo elemento
est no endereo seguinte da memria.

2. Declarao:
A declarao de uma matriz bidimensional pode ser feita da seguinte maneira:
tipo nome [dimenso1] [dimenso2];
ou
tipo nome [linha] [coluna];

Exemplos:
1) char tabela[5][5];

2) int pontos_jogos [2] [4];

0 1 2 3
0
1
pontos_jogos [0,1]

3. Armazenando os elementos
A inicializao e armazenamento de uma matriz pode ser individual ou coletivo. Como
nos exemplos abaixo:

pontos_jogos [0] [1] = 5;
pontos_jogos [1] [3] = 60
int i[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int quadrados[5][2] = {1, 1, 2, 4, 3, 9, 4, 16, 5, 25};
float nota[2][3] = {{9, 8, 7} , {6.5, 4, 2}};


pontos_jogos [1,3]

Prof Angelina V.S.Melar
99
4. Armazenamento feito via teclado
A leitura e armazenamento dos elementos de uma matriz via teclado deve ser usando uma
estrutura de repetio (lao). O for o mais usado.
Supondo que a matriz foi declarada como: int mat [2] [3];

O lao da linha (1 dimenso) inicia no 0 e finaliza no 1 e o lao da coluna (2
dimenso) inicia no 0 e finaliza no 2.

for (l=0; l<2; l++)
{
for (c=0; c<3; c++)
scanf (%i, &mat[ l ] [c ]);
}


5. Mostrando os elementos
Para mostrar os valores armazenados dentro de uma matriz tambm usada a estrutura do
for. Para exibir a matriz mat declarada acima.

for (l=0; l<2; l++)
{
for (c=0; c<3; c++)
printf (%i, mat [ l ] [c ] );
}

Prof Angelina V.S.Melar
100
Ponteiros

1. Variveis ponteiros
Uma varivel ponteiro um tipo especial de varivel, que tem como contedo um
endereo de memria de outra varivel, esse endereo em hexadecimal. O tipo dessa varivel
ponteiro deve ser o mesmo tipo da varivel para a qual est apontando, por exemplo se ela estiver
apontando para um endereo de uma varivel cujo contedo float ento ela (a varivel ponteiro)
deve ser definida como float.
Para trabalhar com ponteiros usado os operadores unrios & e * antes da varivel. O
formato de exibio usado na funo printf() pode ser %p, %x, u %X, a diferena apenas
quanto ao formato de exibio.

Definio e declarao do ponteiro
Define o tipo da varivel e do ponteiro dessa varivel

int *p, v;

O que define que a varivel um ponteiro o * antes do nome. O * tambm poderia estar
junto com o tipo: int* p.

Atribuio do endereo ou direcionado o ponteiro
O endereo de memria da varivel v armazenado no ponteiro p

p = &v;


int main()
{
int *p, v;
v= 8;
p= &v;

printf("\nO endereco de v e %p", &v);
printf("\nO conteudo do p e %p", p);
printf("\nO endereco do p e %p", &p);
getchar();
}
Prof Angelina V.S.Melar
101
Cuidado com o uso do operador *.
O * pode ser usado tanto para declarar o ponteiro quanto para indicar o contedo da
varivel para qual ele est apontando.
main()
{
int *p, v;
v= 8;
p= &v;
printf("\nO endereco de v e %p", &v);
printf("\nO conteudo do p e %p", p); // o endereo memria de v
printf("\nO endereco do p e %p", &p);
printf("\nO valor de v %d", v);
printf("\nO valor de v mostrado atraves do ponteiro p %d", *p);
}


Podemos usar mais ponteiros para direcionar para o mesmo local da memria.
main()
{
int *p, *p2, v;
v= 8;
p= &v;
p2= p; //no usa o & para pegar o endereo do outro ponteiro
printf("\nO endereco de v e %p", &v);
printf("\nO conteudo do p e %p", p);
printf("\nO endereco do p e %p", &p);
printf("\nO valor de v %d", v);
printf("\nO valor de v mostrado atraves do ponteiro p %d", *p);
printf("\nO valor de v mostrado atraves do ponteiro p2 %d", *p2);
}

Aritmtica de ponteiros
Pode ser feito uso das operaes de adio e subtrao com os ponteiros. Mas cuidado
para no pegar o contedo da varivel para o qual ele est apontando e sim seu endereo. Se
acrescentarmos no programa anterior o cdigo abaixo:
int t;
t= sizeof(t); //ver o tamanho do tipo int e quantos bytes vai avanar
p++; printf("\nO contedo de p e %p", p);
printf("\nO contedo apontado pelo ponteiro p %d", *p);

Est sendo feito uma adio no ponteiro p++, de forma que ele ir avanar 4 bytes na
memria, pois, a cada incremento ele acrescentar ao seu endereo a quantidade de bytes de seu
tipo.
De forma que quiser retroceder e voltar a apontar para v, basta fazer uma subtrao com o
ponteiro.
p--;

Cuidado: voc tem que atribuir
um endereo para o ponteiro
Prof Angelina V.S.Melar
102


Vendo o contedo da varivel atravs de seu ponteiro de forma indireta
main()
{
double *p, v;
v= 8;
p= &v;
printf("\nO contedo de p e %p", p); //endereo de v
printf("\nO contedo apontado pelo ponteiro p %f", *p);
p--; printf("\nO contedo de p e %p", p);
printf("\nO contedo apontado pelo ponteiro p %f", *p);
}



Perceba que o tipo Double oculpa 8 bytes, quando subramos o ponteiro ele voltou 8 bytes.
main()
{
int *p, v;
v= 8;
p= &v;
printf("\nP %d e V %d", *p, v);
v+= 10; //somando 10 ao valor de v
printf("\nP %d e V %d", *p, v);
*p= *p+1;//somando 1 ao valor de v atravs do ponteiro
printf("\nP %d e V %d", *p, v);
(*p)++; //somando 1 ao valor de v atravs do ponteiro --use ()
printf("\nP %d e V %d", *p, v);
*p++; //erradoooo - voc acrescentou 1 ao valor do ponteiro
printf("\nP %d e V %d", *p, v);
}
Prof Angelina V.S.Melar
103
Cuidado para no errar
*p++; //errado - voc acrescentou 1 ao valor do
ponteiro
printf("\nP %d e V %d", *p, v);
*p--; //errado - voc subtraiu 1 ao valor do ponteiro
printf("\nP %d e V %d", *p, v);

2. Trabalhando com Matriz atravs de Ponteiros
muito usado em matriz, a passagem do endereo dessa matriz para outra funo, atravs
de ponteiros. Para isso voc deve direcionar o ponteiro para o primeiro elemento da matriz. Isso
pode ser feito de duas maneiras:
int main()
{
int mat[4]={10,20,30,40}, *pm;
pm = mat; //direciona para o ndice 0
printf("\n1o elemento: %d", *pm);
//ou
pm = &mat[0]; //tem que colocar o & para informar o ndice 0
printf("\n1o elemento: %d", *pm);
printf("\n1o elemento: %d", mat[0]);
}

Veja o programa abaixo:
int mat[4]={10,20,30,40}, *pm;
pm = mat;
printf("\n1o elemento: %d", *pm);
//ou
pm = &mat[0]; //tem que colocar o & para informar a posio 0
printf("\n1o elemento pelo pm %d e pelo mat[0]", *pm, mat[0]);
pm= &mat[1]; //apontando para o 2 elemento
printf("\n2o elemento pelo pm %d", *pm);
pm++; //somando 4 bytes ao endereo do ponteiro e indo para o 3 elemento
printf("\n3o elemento pelo pm %d", *pm);
*pm = *pm *2; //multiplicando por 2 o contedo do 3 elemento
printf("\n3o elemento pelo pm %d", *pm);
*(pm++); //apontando para o prximo endereo
printf("\n4o elemento pelo pm %d", *pm);




Prof Angelina V.S.Melar
104
Voc pode fazer o calculo diretamente na exibio
int mat[3] = {10, 20, 30}, *pmat;
pmat = mat;
printf("mat[0] = %d \n", *(pmat));
printf("mat[1] = %d \n", *(++pmat));
printf("mat[2] = %d \n", *(++pmat));
printf("mat[0] = %d \n", *(pmat-=2));
getchar();


Recebendo valores de uma matriz atravs de seu ponteiro
#define E 3
main()
{
int mat[3], *pmat, i;
pmat = mat;
printf("Informe os valores da unidimensional\n");
for (i=0; i<E; i++)
{
printf("\n%d valor", i+1); scanf("%d", pmat);
pmat++;
}

for (i=0; i<E; i++)
{
pmat--;
printf("\n%d", *pmat);
}
getchar();
}


1. Trabalhando com ponteiro e string
main()
{
char *pnome, nome[20];
int compr=0;
printf("Digite um nome: "); gets(nome);
pnome = nome;
while (*pnome != '\0' )
{
printf("%c- %p\n", *pnome, pnome);
compr++;
pnome++;
}
printf("\nQuant caracteres %i\n", compr);
system("pause");
}
Prof Angelina V.S.Melar
105
Funes com Passagem de Parmetros por Referncia

A diferente da Passagem de Parmetros por Referncia em relao a Passagem de
Parmetro por Valor que nesse tipo de passagem no se passa para a funo os valores das
variveis, mas sim suas referncias (seus endereos de memria).

Usando a passagem por referncia fica mais simples a mudana dos valores das variveis,
que deve ter seu valor usado e alterado independente da funo. Para que isso ocorra deve-se
declara as variveis como ponteiros. Os ponteiros so a referncia para poder alterar o valor da
varivel fora da funo. No se esquea quando usar a funo deve colocar um &(endereo) na
frente das variveis que estiverem sendo passadas para a funo.

No programa abaixo o que passado para a funo quadrado o endereo das variveis
num1 e num2. Estes endereos so copiados nos ponteiros pa e pb. Atravs do operador *
acessando o contedo apontado pelos ponteiros e modificando-o. Os valores armazenados em
num1 e num2 so modificados.


void quadrado(int *pnum1,int *pnum2);

main()
{
int num1,num2;
printf("\nDigite o primeiro nmero"); scanf("%d",&num1);
printf("\nDigite o segundo nmero"); scanf("%d",&num2);
printf("\n\nAntes da chamada da funo Quadrado - os nmeros so %i
%i\n",num1,num2);
quadrado(&num1,&num2);
printf("\n\Depois da chamada da funo Quadrado - os nmeros so %i
%i\n",num1,num2);
system("pause");
}

void quadrado(int *pnum1,int *pnum2)
{ *pnum1=*pnum1 * *pnum1;
*pnum2=*pnum2 + 5;
}


Prof Angelina V.S.Melar
106
3. Passagem de Matriz por Referncia
Na passagem da matriz, voc ir enviar o endereo do elemento 0. Quando for definido o
ponteiro para receber o endereo de uma matriz unidimensional, voc no precisa colocar a
dimenso (quantidade de elementos) que essa matriz ter, porque na linguagem C ele apenas
precisa saber o tipo dessa matriz. Voc que far o controle dos elementos.
Quando a matriz for bidimensional obrigatrio informar a quantidade de elementos da
segunda dimenso.





void recebe(int pmat[], int t); /////////void recebe(int *pmat[], int t);

int main()
{
int mat[3], i ;
recebe(mat, 3);
for (i=0; i<3; i++)
printf("\n%d", mat[i]);

_sleep(20000);
}

void recebe(int pmat[], int t)
{
int i;
for (i=0; i<t; i++)
{
scanf("%d", pmat);
pmat++;
}
}

Na matriz bidimensional veja a definio da segunda dimenso

void calculamedia(float notas[][3])
{
int i;
for (i=0; i<3; i++)
{
notas[i][2]= (notas[i][0]+ notas[i][1])/2.0;
}
}




O operador * no precisa ser colocado, pois quando se passa um matriz
unidimensional ou bidimensional sempre ser por referncia.

Prof Angelina V.S.Melar
107
int main()
{
float notas[3][3];
int l, c, i;
for (l=0; l<3; l++)
{
printf("\n\nAluno %d\n", l+1);
for (c=0; c<2;c++)
{
printf("%d Nota", c+1);
scanf("%f", &notas[l][c]);
}
}
calculamedia(notas);
printf("\nMedias dos alunos");
for (i=0; i<3; i++)
{
printf("\n%d aluno teve %.2f", i+1, notas[i][2]);;
}
_sleep(20000);
}

Prof Angelina V.S.Melar
108
Estruturas

ESTRUTURAS (Struct) VARIVEIS COMPOSTAS HETEROGNEAS
Muitas vezes precisamos manipular dados compostos, mas que identificam uma nica
representao. Para isso necessrio ter um mecanismo de agrupamento, estruturando os dados
em um nico contexto, como por exemplo um ponto representado tanto pela coordenada x
quanto pelas coordenada y, elas so dependentes (no devem ser tratadas de forma isolada).
Assim como um data, que formada tanto pelo dia, quanto pelo ms e pelo ano.

A sintaxe da deinio de uma estrutura :
struct nome_da_estrutura
{
Componentes/membros dessa estrutura;
tipo nome_da_varivel;
};

Estruturas permitem definir estruturas complexas de dados, com campos de tipos
diferentes. Por meio da palavra-chave struct e type def definimos um novo tipo de dado. Definir
um tipo de dado significa informar ao compilador o seu nome, o seu tamanho em bytes e o
formato em que ele deve ser armazenado e recuperado na memria. Aps ter sido definido, o
novo tipo existe e pode ser utilizado para criar variveis de modo similar a qualquer tipo simples.

struct Dados_Pessoais
{
char nome[81];
int idade;
float peso;
} P1; foi feita a declarao da varivel P1 que do tipo
Dados_Pessoais no final da definio da estrutura, mas, essa
declarao poderia ser feito de outra forma, como abaixo:

/* Declarao de variveis do tipo struct Dados_Pessoais*/
struct Dados_Pessoais P2, P3;

Definindo um novo tipo de dado com o typedef

typedef struct Dados_Pessoais
{
char Nome [ 81];
int Idade;
float Peso;
} Pessoa;

/* A declarao das variveis do tipo Dados_Pessoais/
Pessoa Cliente, Funcionario;

Prof Angelina V.S.Melar
109
Uma vez criada a varivel composta heterognea, denominada estrutura, seus membros podem
ser acessados por meio do operador de acesso ponto (.). Esse conecta o nome da varivel
estrutura a um dos seus membros.
estrutura membro

gets(Pessoa.Nome);
Pessoa.Idade = 41;
Pessoa.Peso = 75.6;

Outro exemplo direto de denominao de um tipo de dado:
int main()
{
typedef float R; //o nome R um mneumnico do tipo float
R n1;
scanf("%f", &n1); printf("Numero digitado %g", n1);
}

Resumindo
struct ponto
{
float x;
float y;
};
typedef struct ponto P;
typedef struct ponto
{
float x;
float y;
} P;
ou struct ponto P;


scanf (%f%f, &p.x, &p.y); printf(As coordenadas so %.2f - %.2f, p.x, p.y)

Exemplos de uso:
2. Recebendo dados
main()
{
struct dados_pessoais
{
char nome[81];
int idade;
float peso;
};
struct dados_pessoais aluno;

printf("\nNome do aluno:"); gets(aluno.nome);
printf("\nIdade:"); scanf("%i", &aluno.idade);
printf("\nPeso:"); scanf("%f", &aluno.peso);
printf("%i %s %.2f \n", aluno.idade, aluno.nome, aluno.peso);
}
Prof Angelina V.S.Melar
110
3. Recebe e mostra uma estrutura de horas
main()
{
struct evento
{
int h, m;
float s;
};
struct evento ev;
printf("Entre com a hora de um evento(hh:mm:sec): ");
scanf("%i:%i:%f", &ev.h, &ev.m, &ev.s);
printf("A hora fornecida foi: %d:%d:%.2f\n", ev.h, ev.m, ev.s);
}

4. Igualando estruturas
main()
{
struct data
{
int dia;
char mes[10];
int ano;
};
data natal = { 25, "Dezembro", 1994};
data aniversario = { 30, "Julho", 1998};
printf("%i %s %i \n", aniversario.dia, aniversario.mes, aniversario.ano);

aniversario = natal;
printf("%i %s %i \n", natal.dia, natal.mes, natal.ano);
printf("%i %s %i \n", aniversario.dia, aniversario.mes, aniversario.ano);
}

5. Recebendo e verificando dados
#include <stdio.h>
#include <stdlib.h>
int main()
{
struct dados_pessoais
{
char nome[81];
int idade;
float peso;
};

typedef struct dados_pessoais Aluno; //define o novo tipo Aluno
Aluno A; //define a varivel A que do tipo Aluno

printf("\nNome do aluno:"); gets(A.nome);
Prof Angelina V.S.Melar
111
printf("\nIdade:"); scanf("%i", &A.idade);
printf("\nPeso:"); scanf("%f", &A.peso);
printf("%i %s %.2f \n", A.idade, A.nome, A.peso);
if (A.peso >30)
printf("Precisa comer mais\n\n");
system("pause");return 0;
}

Ou
typedef struct dados_pessoais{
char nome[81];
int idade;
float peso;
}Aluno; //define o tipo Aluno

Aluno A; //define a varivel a que do tipo Aluno


6. Usando uma matriz do tipo estrutura
struct dados_pessoais
{
char nome[81];
int idade;
float peso;
} aluno[3];

int main()
{
int i;
for (i=0;i<3;i++)
{
printf("\nCadastro n: %i\n", i+1);
fflush(stdin); printf("\nNome do aluno:"); gets(aluno[i].nome);
printf("\nIdade:"); scanf("%i", &aluno[i].idade);
printf("\nPeso:"); scanf("%f", &aluno[i].peso);
printf("%i %s %.2f \n", aluno[i].idade, aluno[i].nome, aluno[i].peso);
}
system("pause"); return 0;
}

Ou
main()
{
int i;
struct dados_pessoais
{
char nome[81];
int idade;
Prof Angelina V.S.Melar
112
float peso;
};

struct dados_pessoais aluno, *paluno;

paluno = &aluno;

for (i=0;i<3;i++)
{
printf("\nCadastro n: %i\n", i+1);
fflush(stdin);
printf("\nNome do aluno:"); gets(paluno->nome);
printf("\nIdade:"); scanf("%i", paluno->idade);
printf("\nPeso:"); scanf("%f", paluno->peso);
printf("%i %s %.2f \n", *paluno->idade, *paluno->nome, *paluno->peso);
}
system("pause");
}

Usando uma estrutura dentro da outra estrutura
typedef data
{
int dia;
int mes;
int ano;
};

struct dados_pessoais
{
char nome[81];
int idade;
float peso;
data data_niver ;
} aluno[3];

main()
{
int i;
for (i=0;i<3;i++)
{
printf("\nCadastro n: %i\n", i+1);
fflush(stdin);
printf("\nNome do aluno:"); gets(aluno[i].nome);
printf("\nIdade:"); scanf("%i", &aluno[i].idade);
printf("\nPeso:"); scanf("%f", &aluno[i].peso);
printf("\nData de Aniversario:"); scanf("%i-%i%i", &aluno[i].data_niver);
printf("%i %s %.2f \n", aluno[i].idade, aluno[i].nome, aluno[i].peso);
}
Prof Angelina V.S.Melar
113
7. Usando estrutura e funo
void exibedesenho(struct desenho xtrapezio);

struct desenho
{
int basemenor;
int basemaior;
int altura;
float area;
};
main()
{
struct desenho trapezio;
trapezio.basemenor =2;
trapezio.basemaior= 7;
trapezio.altura = 5;
trapezio.area= (trapezio.basemenor + trapezio.basemaior) * trapezio.altura/2;
exibedesenho(trapezio);
}

void exibedesenho(struct desenho trapezio)
{
printf("Base menor: %i \n \r", trapezio.basemenor);
printf("Base maior: %i \n \r", trapezio.basemaior);
printf("Altura : %i \n \r", trapezio.altura);
printf("Area do Trapezio: %.f \n \r", trapezio.area);
}

8. Fazendo a referncia de estrutura em uma funo
void calculadesenho(struct desenho *ptrapezio);
struct desenho
{
int basemenor;
int basemaior;
int altura;
float area;
};

main()
{
struct desenho trapezio;
calculadesenho(&trapezio);
printf("Base menor: %i \n \r", trapezio.basemenor);
printf("Base maior: %i \n \r", trapezio.basemaior);
printf("Altura : %i \n \r", trapezio.altura);
printf("Area do Trapezio: %.f \n \r", trapezio.area);
system("pause");
}
Prof Angelina V.S.Melar
114

void calculadesenho(struct desenho *ptrapezio)
{
(*ptrapezio).basemenor =2;
(*ptrapezio).basemaior= 7;
(*ptrapezio).altura = 5;
(*ptrapezio).area= ((*ptrapezio).basemenor + (*ptrapezio).basemaior) * (*ptrapezio).altura/2;
}

ou
void calculadesenho(struct desenho *ptrapezio)
{
ptrapezio->basemenor =2;
ptrapezio->basemaior= 7;
ptrapezio->altura = 5;
ptrapezio->area= (ptrapezio->basemenor + ptrapezio->basemaior) * ptrapezio->altura/2;
}

9. Fazendo a referncia de estrutura em uma funo
void exibe(struct ponto *pponto);
struct ponto
{
float x;
float y;
};

main()
{
struct ponto vponto;
printf("\nDigite as coordenadas dos pontos x e y: ");
scanf("%f %f", &vponto.x, &vponto.y);
exibe(&vponto);
vponto.x= 5.7; printf("\nOs pontos digitados foram %.2f e %.2f \n", vponto.x, vponto.y);
system("pause");
}

void exibe(struct ponto *pponto)
{
printf("\nOs pontos digitados foram %.2f e %.2f \n", pponto->x, pponto->y);
}

Ou
void exibe(struct ponto cponto);
struct ponto
{
float x;
float y;
};
Prof Angelina V.S.Melar
115
main()
{
struct ponto vponto;
printf("\nDigite as coordenadas dos pontos x e y: "); scanf("%f %f", &vponto.x, &vponto.y);
exibe(vponto);
printf("\nOs pontos digitados foram %.2f e %.2f \n", vponto.x, vponto.y);
}

void exibe(struct ponto cponto)
{
printf("\nOs pontos digitados foram %.2f e %.2f \n", cponto.x, cponto.y);
cponto.x= 5.7;
}

10. Fazendo Alocao Dinmica de Memria
float media(int n, float *v);
main()
{
int i, n;
float *v, med;
printf("Quantos elementos serao armazenados: "); scanf("%i", &n);
v= (float *) malloc(n * sizeof(float)); //aloca 4*n bytes de memria em tempo de execuo
if (v==NULL)
{
printf ("Memoria Insuficiente"); system("pause"); return 1;
}

for (i=0; i<n; i++)
{
printf(" %i - ", i+1); scanf("%f", &v[i]);
}
med= media(n,v); printf("Media %.2f \n\n", med);
free(v); //libera a memria
}

float media(int n, float *v)
{
int i;
float s=0;
for (i=0; i<n;i++)
s+= v[i];
return s/n;
}


main()
{
int i, n; float *nota = NULL;
printf(Entre com tamanho n: ); scanf(%d,&n);
nota=(float *)malloc(n*sizeof(float));
for (i=0; i < n; i++)
{
printf( Entre a nota %i:, i+1); scanf(%f, nota+i);
}
for (i=0; i < n; i++)
printf(\n %.2f \n, *(nota+i));
free(nota);
}

Prof Angelina V.S.Melar
116
Unio e Enumerao

1. Unio union

O tipo unio usado para compartilhar um mesmo endereo de memria para vrias variveis,
que podem ser de tipos diferentes.
void main()
{
union variavel
{
float valor_hora;
float valor_mensal;
};
union variavel var;
var.valor_hora = 5.5; printf("\nValor da Hora %.2f", var.valor_hora);
var.valor_mensal = 346.5; printf("\nValor Mensal%f", var.valor_mensal);
printf("Valor da Hora %.2f", var.valor_hora); //permanece o ltimo valor atribudo
ao endereo de memria, que o valor 346.5 (mensal)
getchar();
}
Cuidado: Somente uma varivel pode ser usada por vez, se for usado um outro membro da
unio o anterior se perde (sobrescreve).

#include <stdio.h>
#include <stdlib.h>
void main()
{
union variavel
{
int valor_hora;
float valor_mensal;
} var;
printf("\nInforme o valor da hora"); scanf("%i", &var.valor_hora);
printf("\nValor da Hora informado: %i", var.valor_hora);
var.valor_mensal = 346.5; printf("\nValor Mensal pre-definido: %f", var.valor_mensal);
printf("\nUltimo valor armazenado %g", var.valor_hora); //permanece o ltimo valor atribudo ao
endereo de memria, que o valor 346.5 (mensal)
}

Prof Angelina V.S.Melar
117
2. Tipo enumerao

uma forma de definir inicialmente os valores, ou seja, pr-definidos.
enum Mes { Jan = 1, Fev, Mar, Abr, Mai,Jun, Jul, Ago, Set, Out,Nov, Dez};

Se no for definido um valor inial da sequncia definida, ele sempre inicia a partir do zero.

enum meses {Jan = 1, Fev, Mar,Abr, Mai, Jun, Jul, Ago, Set, Out,Nov, Dez};
main()
{
int dia;
meses mes;
mes = Set; //ou mes = meses(9);
if (mes == Jan || mes == Mar || mes == Mai || mes == Jul || mes == Ago || mes == Out || mes ==
Dez)
dia = 31;
else if (mes == Fev)
dia = 28;
else
dia = 30;
printf(Numero dias: %d \n,dia);
}






Prof Angelina V.S.Melar
118
Arquivos

A manipulao de um arquivo feita atravs da associao de uma varivel ponteiro
(FILE) a um arquivo fsico (Stream), esse arquivo pode ser um arquivo texto (uma planilha do
excel, um documento do Word) ou um arquivo binrio (um arquivo do sistema, um arquivo de
dados).
O contedo do arquivo depende da forma de criao do mesmo, pondendo ser criado e
armazenado:
Modo binrio, com uma sequncia de bytes gravados, desconhecidos numa
leitura pelo usurio.
Modo texto, com uma sequncia de caracteres da tabela ASCII, compreensvel
numa leitura pelo usurio.

Os arquivos gravados em modo binrio tem um tamanho menor, j que esto convertidos
em bytes, enquanto que se for gravado em modo texto, cada caracter ter que ser convertido para
binrio. A pesquisa de dados em um arquivo binrio mais rpida e fcil. Dessa forma, usamos
arquivo binrios para armazenar uma grande quantidade de dados, como vrios cadastros
(registros) e que no sejam compreensveis por questo de segurana, e o modo texto para gravar
arquivos que podem ser compreensveis pelo usurio e abertos por qualquer editor.

3. Abertura do arquivo
Para abrir ou mesmo criar um arquivo usada a funo fopen(). Para fazer uso dessa
funo necessrio antes criar um varivel ponteiro (FILE) que direcionar para um endereo de
memria do arquivo.
FILE *parq;
A funo fopen recebe dois argumentos string: a localizao (diretrio) junto com o nome
do arquivo, e o modo de abertura do arquivo. A localizao padro o local onde est o arquivo
executvel.
fopen (nome, modo)
parq = fopen(nome_arq, modo );

Existe vrios modo com o quais o arquivo pode ser aberto ou criado.
r
w


a


rt
rb
- +

wt
wb
at

Abre arquivo j existente para leitura
Abre para leitura e gravao. Caso o arquivo j exista ele sobrescreve os dados,
destruindo os dados armazenados anteriormente, seno, existir ele cria um novo arquivo.
Abre para leitura e gravao, mas, antes de tudo se posiciona no final dele. Se o arquivo
j existir o abre e depois comea a gravar, acrescentando os dados no final. Se o arquivo
no existir ele cria um novo arquivo para gravao.
Abre o arquivo texto para leitura. Esse arquivo j deve existir
Abre o arquivo binrio para leitura. Esse arquivo j deve existir
Abre e grava no arquivo (a opo r+ abre o arquivo, e faz gravao no incio do
arquivodiferente do modo append (a))
Cria um novo arquivo texto e o abre para leitura e gravao.
Cria um novo arquivo binrio e o abre para leitura e gravao. Se o arquivo no existir,
ele ser criado. Se j existir, o contedo anterior ser destrudo.
Abre um arquivo texto j existente e adiciona as informaes no final do arquivo (se o
arquivo no existir, ele criado).
Prof Angelina V.S.Melar
119
rt
ab
Abre um arquivo texto j existente para leitura
Abre o arquivo binrio para leitura e gravao (usa os mesmos conceitos anteriores

parq = fopen(var_nome, const_modo ); OU parq = fopen( C:\\LOCAL\\ARQUIVO.TXT, w);

A funo fopen() retorna um endereo de memria do arquivo quando esta for executada
com sucesso, ou um valor NULL quando der erro (erro de abertura ou criao do arquivo). Com
esse retorno possvel fazer verificaes e exibio de mensagem de alerta para o usurio.
if (parq == NULL)
{
printf(Erro de abertura do arquivo);
exit(1);
}

4. Fechamento do arquivo
Para fechar o arquivo usada a funo fclose(). Essa funo atualiza o arquivo com as
informaes que esto no buffer (memria) e depois libera a memria. Resumindo efetiva a
gravao, fecha o arquivo e libera a memria.
fclose(parq);

5. Leitura
muito importante definir a forma de leitura e gravao de um arquivo, pois, se for
necessrio fazer uma consulta de todos os dados armazenados deve-se iniciar a leitura desde o
incio do arquivo (percorrendo todo o arquivo at o final).

Leitura de um arquivo binrio
A leitura de um arquivo binrio sempre feita de um registro por vez, o computador far
a leiutura por intervalos de bytes, onde cada registro tem um tamanho fixo. Essa leitura feita a
partir de seu posicionamento no arquivo, por isso importante saber como ser feita a abertura
do arquivo (posicionamento no incio ou no final do arquivo).

parq = fopen( C:\\LOCAL\\ARQUIVO.TXT, rb);

fread(o endereo onde ser armazenado o contedo lido,
tamanho em bytes a ser avanado o cursor,
o nmero de registros que vai ler por vez,
o ponteiro que indica o nome do arquivo que tem o contedo lido






fread(&devedores, sizeof(devedores), 1, parq);

Resumindo: feita a leitura de uma quantidade sequencial de bytes do arquivo fsico e depois
guardado na memria atravs de um tipo estrutura. Aps a leitura de um registro o ponteiro fica
posicionado no prximo registro do arquivo, podendo ser feita ou no sua leitura.
o nome da estrutura (registro) que
armazenar o contedo lido
qtd de bytes lidos
(tamanho da estrutura)
qtd de registros
lidos (sempre 1)
nome do ponteiro
do arquivo que est
sendo lido
Prof Angelina V.S.Melar
120
Leitura de um arquivo texto

Funo fgets() l uma string de caracteres de um arquivo aberto.
fgets (varivel que recebe a entrada, nmero de caracteres lidos, ponteirodearquivo);

fgets(CAD.nome, 20, parq); //faz a leitura da string e a carrega no ponteiro

Cuidado: O tamanho sempre considerando o valor inicial no zero. Se o tamanho total 20,
ento se coloca 19, sempre total - 1.

Obs: O posicionamento fica no fim da linha atual no arquivo se o caracter de mudana de linha
ocorrer antes de serem lidos todos os caracteres. Toda vez que executa o fgets() atualizada a
posio de leitura corrente do arquivo aberto. Retornando NULL quando no h mais dados para
serem lidos.

Tambm existe as funes: fscanf(), fgetc() para leitura de um arquivo texto. Abaixo esto
alguns trechos de cdigo com essas funes:

FILE *parq
char nome[35];
parq = fopen("dados.txt", rt);
fscanf (parq,"Nome: %s",nome);
puts(Nome gravado); printf(%s, nome);
fclose(fp);


6. Gravao

Gravao em modo binrio
A gravao no modo binrio realizada atravs da funo fwrite(). Para usar essa funo
necessrio passar alguns argumentos, como descrito abaixo:
parq = fopen( C:\\LOCAL\\ARQUIVO.TXT, ab);

fwrite (o endereo onde est o contedo a ser gravado,
tamanho em bytes a ser gravado,
o nmero de elementos que vai gravar(nmero de registros que sero gravados)
o ponteiro que indica o endereo para onde vai copiar- nome do arquivo fsico)






fwrite(&devedores, sizeof(devedores), 1, parq);

Cuidado: Se a estrutura foi definida para armazenar um nico registro no se coloca o &.

nome da estrutura (registro)
que contm os dados
qtd de bytes a
serem gravados
qtd de registros a
serem gravados
ponteiro que
direciona para o
arquivo a ser gravado
Prof Angelina V.S.Melar
121
Resumindo: O fwrite pega o contedo que est posicionado na memria, em um registro, e o
grava em um arquivo que est direcionado atravs do ponteiro.


Exemplos em modo binrio:
1. Gravao dos dados em modo binrio
struct entrada
{
char nome[40];
float valor;
} devedores[4];

main()
{
int i;
FILE *fp;
for (i=0; i<4; i++)
{
fflush(stdin); printf("Digite o nome: "); gets(devedores[i].nome);
printf("Valor da Divida: R$"); scanf("%f", &devedores[i].valor);
}

fp = fopen("devedores.txt","w"); //Etapa de abertura e gravao do arquivo
if (fp == NULL)
{
printf(Erro de abertura do arquivo);
exit(1);
}
fwrite(&devedores, sizeof(devedores), 1, fp);
//se for um nico devedor no se deve colocar o &devedores
fclose(fp);
_sleep(3000);
}

2. Leitura dos dados em modo binrio
struct entrada
{
char nome[40];
float valor;
} devedores[4];

main()
{
int i;
FILE *fp;
printf("Segunga etapa Exibicao dos devedores ");
fp = fopen("devedores.txt","r");
fread(&devedores, sizeof(devedores),1,fp);
Prof Angelina V.S.Melar
122
for (i=0; i<4; i++)
{
printf("\n%s - R$ %.2f",devedores[i].nome,devedores[i].valor);
}
fclose(fp);
}

3. Exemplos diversos
f= 3.1415;
fwrite (&f, sizeof(f), 1, fp)

float m[10][2];
fwrite (m, sizeof(m), 1, fp)


Gravao em modo Texto
Funo fprintf(): Essa funo grava dados em um arquivo aberto. O retorno da funo o total
de bytes gravados.

fprintf ( ponteiro do arquivo a ser gravado, formato de gravao, valores a serem gravados)
fprintf (parq,"<tr> <td>%d x %d = %d </td></tr>", num, tabuada, resultado);
fprintf(parq, Cadastro de Alunos);
fprintf(parq, %s, nome);

Exemplo de criao e gravao de arquivo texto
int main()
{
FILE *arquivo;
int t,c=0,r ;
printf ("Digite qual a tabuada...:"); scanf ("%d",&t);
arquivo = fopen("tabuada.xls","w");
printf (arquivo,"<table>");
do
{
r=c*t;
fprintf (arquivo,"<tr><td>%d x %d = %d</td></tr>",c,t,r);
c++;
} while (c<=10);

fprintf (arquivo,"</table>");
fclose(arquivo);
printf ("Arquivo gravado com sucesso");
_sleep(4000);
}

Prof Angelina V.S.Melar
123
Exemplo de criao, leitura e gravao de um arquivo no modo texto
#include <stdio.h>
#include <stdlib.h>
int main()
{
typedef struct //definindo uma estrutura de dados-- conhecida como registro
{
char nome [20];
char senha [6];
} registro;
registro CAD;
FILE * parq; //definio do ponteiro de arquivo

char opcao, existe;
char nome_arquivo [15];
while(1)
{
system("cls");
printf("\nC- Cadastro");
printf("\nL- Consulta");
opcao = getch();
switch(opcao)
{
case 'c': case 'C':
printf ("\nInforme o nome do arquivo a ser criado: "); gets (nome_arquivo);
parq = fopen (nome_arquivo, "wt"); //abertura/criao do arquivo
while (1)
{
printf ("Nome:"); gets (CAD.nome);
if (!strcmp(CAD.nome,""))
{
puts("No foi informado nome. Finalizando o cadastro!");
system("pause");
break;
}
else
{
printf ("Senha de acesso: "); gets (CAD.senha);
fprintf (parq, "%s", CAD.nome); fprintf (parq, "%s\n",
CAD.senha); //gravao dos dados
}
}
fclose (parq); //fechando o arquivo
break;
case 'l': case 'L':
printf ("\nInforme o nome do arquivo a ser aberto e consultado: ");
do
{
Prof Angelina V.S.Melar
124
gets (nome_arquivo);
if (! strcmp(nome_arquivo,""))
{
puts("No foi informado um nome correto de arquivo. Finalizando!");
exit(0);
}
existe = access(nome_arquivo,4);
if (existe)
printf("%s no existe \n",nome_arquivo);
} while (existe);
parq = fopen (nome_arquivo,"rt"); //abrindo o arquivo no modo leitura
while (!(feof (parq))) //enquanto no for final de arquivo continua lendo
{
fgets(CAD.nome, 20, parq); //faz a leitura da string e a carrega no ponteiro
fgets(CAD.senha, 6, parq);
printf ("%s%s", CAD.nome, CAD.senha);
}
fclose (parq);
system("pause");
break;
default:
printf("\nOpcao invalida\n");
exit(0);
}
system("pause");
}
}


Prof Angelina V.S.Melar
125
Posicionamento e Pesquisa em arquivo binrio

Para ser feita a leitura e a gravao de um arquivo necessrio saber a posio ideal para
que esse processo seja realizado. Existe a funo fseek() que define um ponto especfico de
posicionamento no arquivo:

fseek( ponteiro do arquivo, quantos bytes ir avanar, qual a relao de avano)
Voc tem que definir atravs do segundo argumento a quantidade certa de bytes para atingir a
posio desejada (registro).
O terceiro argumento define a posio que se deve estar para depois avanar. Eles podem ser:
SEEK_CUR avano a partir a posio corrente (atual)
SEEK_SET avano a partir do incio do arquivo
SEEK_END avano iniciando do final do arquivo

fseek( parq, 3*sizeof(devedores), SEEK_SET);

Primeiro se posiciona para depois fazer a leitura do registro. No exemplo acima, est se
posicionando 4 registro.
fread(&devedores, sizeof(devedores), 1, fp);

possvel posicionar no final do arquivo para fazer uma gravao com o fseek:
fseek(pdevedores, 0, SEEK_END);

A funo rewind() posiciona no incio do arquivo.
Rewind(pdevedores);

7. Verificando o final do arquivo binrio
usada a funo feof() para verificar se est ou no no final do arquivo. Esse funo tem
um valor de retorno, podendo ser 0 se ainda no est no final do arquivo, ou outro valor (no caso
consideramos 1) para indicar o posicionamento no final do arquivo.

while ( !(feof (parq))) ou while (feof (parq) == 0)
Usamos essa funo dentro de estruturas de repetio, no exemplo acima feita a leitura
enquanto no for final de arquivo.

8. Para apagar um arquivo
Para apagar um arquivo fsico usada a funo remove(nomedoarquivo). Esse
comando s pode ser executado se o arquivo estiver fechado.
remove(devedores.bin);

Prof Angelina V.S.Melar
126

Conceitos Bsicos

BIT
Cada letra do alfabeto, nmero ou smbolo pode ser representado no computador por um
conjunto de sinais eltricos, chamados de Bits. Toda instruo e controle que deve ser executada
pelo computador transmitido atravs desses Bits.
O termo BIT, vem de Binary Digit, cuja traduo Digito Binrio, usado para representar
a passagem ou no da corrente eltrica no computador (ou campo magntico: positivo ou
negativo), tendo apenas dois estados. A passagem da corrente ou impulso eltrico pode ser
desginado pelo digito 1 e a no passagem da corrente eltrica pelo digito 0.
O BIT a menor unidade de medida de dados que o computador tem.Como um nico
BIT no consegue representar todas as letras, digitos binrios e smbolos so feitos os
agrupamentos de Bits. O conjunto de 8 Bits forma um agrupamento denominado Byte.
As informaes em formato binrio so representadas(codificadas) de acordo com
algumas tabelas. Existe representao de cdigo de 4 bits (BCD, Gray), cdigo 5 bits
(BAUDOT- servios de telex), cdigo de 7 btis (ASCII) e 8 bits (EBCDIC). O nmero de bits
utilizado no cdigo determina o nmero mximo de caracteres possveis a serem representados.
Exemplo 7 bits = 2
7
= 128 combinaes.
Algumas tabelas foram criadas pelos fabricantes de computadores. Exemplo: ASCII e
EBCDIC

ASCII
A Tabela ou Cdigo ASCII (American Standard Code for Information Interchange
Cdigo Padro Americano para o Intercmbio de Informao), criada (1963) e atualizada (1968)
na dcada de 60, para representar os caracteres (letra, digito ou caracter especial), essa tabela
baseada na combinao 7 bits e para representao o ingls. Com essas combinaes possvel
fazer 128 representaes vlidas. Existe 1 bit de paridade para verificao de erros.
Quando se pressiona a tecla F (01000100), os circuitos do teclado geram um sinal de 8
voltagens diferentes correspondentes ao seu cdigo de 8 bits, feita a verificao da sua
representao ASCII e depois produzido o eco na tela do caracter F.
Nessa tabela tem:
128 representaes, cujo valor decimal vai de 0 a 127.
o 33 representaes no so imprimveis, pois so caracteres de controle,
como as representaes: 13 do ENTER, 27 do ESC, 9 do TAB, 127 do
DEL.
93 so representaes dos caracteres imprimveis (do cdigo 33 ao 126), como o
alfabeto em maisculas e em minsculas, os nmeros de 0 a 9.
Mudanas na tabela de cdigo ASCII ASCII Estendido
Prof Angelina V.S.Melar
127
A ASCII inicialmente no atendia a representao do texto em portugus, no
considerava o , , , , .
Com o tempo, a tabela ASCII foi expandida at o nmero 255, considerando a
combinao do 8 bits, essa tabela foi denominada ASCII Estendida. Mas ainda assim, ela no
permite representar ao mesmo tempo os grafemas do sistema latino e de outros como o grego,
hebraico. Em funo disso, foram criadas vrias tabelas ASCII, cada uma adaptada a uma
ortografia especfica.


EBCDIC
O cdigo EBCDIC (Extended Binary Coded Decimal Interchange Code- Cdigo BCD
Ampliado para Intercmbio) foi criado pela IBM e utiliza 8 bit para fazer uma representao,
existindo a possibilidade de fazer 256 combinaes diferentes.


Unicode
Existe o padro Unicode (www.unicode.org) que se prope a desenvolver um sistema
abrangente e padronizado de representao de escrita em computadores. A tabela Unicode
abrange os mais variados sistemas de escrita (latino, chins, etc), alm de considerar smbolos
matemticos, musicais, de moeda, etc.
Ela subdividida em blocos, como: Unicode Latim Bsico, Unicode Latim I
Suplementar, Unicode Latim Estendido A, Unicode Latim Estendido B, Unicode Extenses IPA,
Unicode Letras modificadoras de espaamento, Unicode Sinais diacrticos combinados
A Unicode Latim Bsico equivale exatamente tabela ASCII de 7 bits. A Unicode Latim
I Suplementar equivale a ASCII estendida, de 8 bits. Os blocos Extenses IPA, Letras
Modificadoras de Espaamento e Sinais Diacrticos combinados so de especial interesse dos
lingistas porque trazem a simbologia do Alfabeto Fontico Internacional.

Unidade de Medida
Ns temos na nossa vida diria as unidades de medidas metro, litro, hertz e no
computador os bits. Como a contagem de medida do computador binria (base 2- 2 estados 0 e
1) e o nosso sistema mtrico de medida decimal tem-se:
2
10
1.024bytes KB Kilo K(mil)
2
20
1.048.576 bytes MB Mega M(milho)
2
30
1.073.741.824 bytes GB Giga G(bilho)

Hz (hertz)- 1 Hertz equivale a uma oscilao de sinal corrente- em 1 segundo. Ento
GHz equivale a mudana do estado 0 e 1- mais de 1 bilho de vezes por segundo (pulsos).
Convencionou a usar o digito 1 ( corrente eltrica alta) para a representar a voltagem de 1,2V e
o digito 0 para a corrente eltrica baixa, de 0,2V.


Prof Angelina V.S.Melar
128

Nvel de Programao das Linguagens


Os programas podem ser escritos em diferentes linguagens, as quais o computador
consegue interpretar as instrues e execut-las. Essas linguagens possuem conjuntos de regras
(sintaxe) e comandos.
Os cdigos dos programas so um conjunto de instrues que sinalizam CPU para
realizar operaes de conexo de circuito.


Linguagem de Mquina: So instrues escritas em formato binrio, descrevendo exatamente
quais circuitos ligar ou desligar. uma linguagem mais complexa de aprender, porm, a CPU
somente executa essa linguagem, somente pode ser instruda por ela. Todas as outras linguagens
devem ser traduzidas para essa, para poderem ser executadas. Isso feito atravs do uso de um
compilador ou interpretador.
Exemplo de cdigo: 00010101

Linguagem de Baixo Nvel: Assembly uma linguagem que associa mnemnicos-cdigos s
instrues de linguagem de mquina. Nela foi possvel simbolizar os endereos de memria,
dando um nome para uma rea da memria.
Exemplo de cdigo: A significa adicionar

Linguagem de Alto Nvel: uma linguagem que utiliza comandos na forma de palavras (o
idioma empregado o ingls). Um nico comando pode executar vrias instrues em linguagem
de mquina.
A linguagem C e C++ so consideradas por alguns escritores de Nvel Mdio, pois ele
tem recursos de baixo nvel, como acesso direto a endereos de memria, manipulao do
hardware, mas tambm tem uma linguagem com uma sintaxe mais parecida com a do ser
humano.
Exemplo de cdigo: printf(Professora Angelina\n);

Alguns enquadram as linguagens dentro das geraes. Nessas geraes existe a
diferenciao do uso ou no, de caractersticas como: banco de dados, interface grfica,
linguagem mais natural (inteligncia artificial).

Exemplos de linguagens de alto nvel: Pascal, Delphi, Visual C#, Cobol.
Prof Angelina V.S.Melar
129
Bibliografia Consultada e Referenciada


ASCENCIO, Ana F. G. e CAMPOS, Edilene A. V. Fundamentos da Programao de
Computadores. Ed. Pearson, 2002

CELES, Waldemar; CERQUEIRA, Renato e RANGEL, Jos L. Introduo a Estrutura de
Dados. Ed. Campus, 2004

FORBELLONE, A. L. V.; et.al. Lgica de Programao - A Construo de Algoritmos e
Estruturas de Dados. 2 ed. Makron Books. 2000.

PEREIRA, Fabio. PIC Programao em C, So Paulo, 7ed. rica, 2007

SCHILDT, Herbert. C Completo e Total. 3 ed. Ed. Makron Books. 1996.

SENAI-SP. MDI. Tecnologia de Elaborao de Material Didtico Impresso. So Paulo, 1996

VILLAS, Marcos Vianna e VILLASBOAS, Luiz Felipe P. Programao: conceitos, tcnicas e
linguagens. Rio de Janeiro, Ed. Campus, 1988

RINALDI, ROBERTO. Turbo Pascal 7.0 Comandos e Funes. Ed. rica, So Paulo, 1993

CARIB, Roberto e CARIB Carlos. Introduo Computao. Ed. FTD, 1996 SP

STAIR, Ralph M. Princpios de Sistemas de Informao. Ed. LTC, 2ed, 1996. RJ

Вам также может понравиться