Você está na página 1de 171

Lógica

 de  Programação  
Prof.  Alexandre  Mignon  
(amignon@uninove.br)  

NOTAS  DE  AULA  

1  
Introdução  à  Lógica  de  
Programação  

2  
Introdução  à  Lógica  de  Programação  
•  Um   computador   é   uma   ferramenta   para  
solucionar   problemas   que   envolvam   a  
manipulação  de  informações.  
–  Dois  Ipos  básicos:  dados  e  instruções  
•  Um   programa   de   computador   é   uma  
sequência   de   ações   (instruções)   inseridas   na  
máquina   que   permite   ao   computador   realizar  
determinadas  tarefas.  

3  
Introdução  à  Lógica  de  Programação  
•  Lógica  é  a  técnica  de  encadear  pensamentos  para  
aIngir  determinado  objeIvo.  
•  Seqüência   Lógica   são   passos   executados   até  
aIngir  um  objeIvo  ou  solução  de  um  problema.  
•  Instruções  são  um  conjunto  de  regras  ou  normas  
definidas   para   a   realização   ou   emprego   de   algo.  
Em  informáIca,  é  o  que  indica  a  um  computador  
uma  ação  elementar  a  executar.  

4  
Introdução  à  Lógica  de  Programação  
•  A  Lógica  de  Programação  é  a  fase  de,  a  parIr  
de   um   problema,   formular   soluções   que  
gerem  um  programa  de  computador.  
•  Programar   é   basicamente   construir  
algoritmos.  
•  Programas   são   algoritmos   escritos   em   uma  
linguagem   de   programação   (C,   Pascal,   Java,  
etc.)  e  que  são  interpretados  e  executados  por  
uma  máquina.  
5  
Algoritmo  

Sequência  lógica  e  finita  de  instruções  que  


devem  ser  seguidas  para  a  resolução  de  um  
problema  ou  a  execução  de  uma  tarefa  

6  
Algoritmo  -­‐  Exemplo  
•  Algoritmo  para  reIrar  a  devolução  do  imposto  de  
renda:  
INÍCIO  
1.  Sair  de  casa  
2.  Ir  ao  banco  
3.  Dirigir-­‐se  ao  balcão  
4.  Já  chegou  a  devolução  do  imposto  de  renda?  
5.  Sim:  Vá  para  o  passo  11  
6.  Não:  Voltar  para  casa  
7.  Esperar  um  dia  
8.  É    sábado,  domingo  ou  feriado?  
9.  Sim:  Vá  para  o  passo  7  
10.  Não:  Vá  para  o  passo  1  
11.  ReIrar  o  dinheiro  
12.  Voltar  para  casa  
FIM  

7  
Fases  para  Montar  um  Algoritmo  
•  Para  montar  um  algoritmo,  é  necessário  dividir  o  
problema   apresentado   em   três   fases  
fundamentais:  

Entrada   Processamento   Saída  

–  Entrada:  dados  de  entrada  


–  Processamento:   procedimentos   uIlizados   para   se  
chegar  ao  resultado  final  
–  Saída:  dados  processados    
8  
Organização  Básica  de  um  
Computador  

9  
Organização  Básica  de  um  
Computador  
•  Um   computador   é   consItuído   de   quatro  
unidades   básicas:   unidade   de   entrada,  
unidade   de   saída,   unidade   de   processamento  
central  e  memória.  
•  Unidade   de   entrada   é   um   disposiIvo   que  
permite   que   o   usuário   interaja   com   um  
computador,   fornecendo-­‐lhe   dados   e  
informações.  Por  exemplo,  teclado  e  mouse.  

10  
Organização  Básica  de  um  
Computador  
•  Unidade   de   saída   serve   para   que   sejam  
fornecidos   ao   usuário   do   computador   os  
resultados   do   processamento   realizado.   Por  
exemplo,  monitor  de  vídeo  e  impressora.  
•  Unidade   Central   de   Processamento   (CPU   –  
Central   Processing   Unit)   é   responsável   por  
todo   processamento   requerido.   Nela   são  
realizadas,   por   exemplo,   operações  
aritméIcas  e  lógicas.  
11  
Organização  Básica  de  um  
Computador  
•  A   memória   armazena   dados   e   informações  
que   serão   uIlizados   no   processamento,   além  
dos  programas  que  vão  manipular  estes  dados  
e  estas  informações.  
•  A   memória   é   dividida   em   partes,   chamadas  
posições  de  memória,  sendo  associada  a  cada  
uma   delas   um   endereço,   o   qual   é   uIlizado  
para  se  ter  acesso  a  posição.  

12  
Organização  Básica  de  um  
Computador  
•  Muitas   vezes,   essa   unidade   é   chamada  
memória   RAM   (Random   Access   Memory   –  
Memória  de  Acesso  Aleatório)  
•  Qualquer  armazenamento  na  memória  de  um  
computador   é   temporário,   pois   quando   o  
computador   é   desligado   tudo   o   que   está  
armazenado  desaparece.  

13  
Tipos  de  Dados  

14  
Tipos  de  Dados  
•  Os   dados   são   representados   por   elementos  
advindos   do   mundo   externo,   os   quais  
representam   as   informações   que   os   seres  
humanos   manipulam.   Eles   devem   ser   abstraídos  
para  serem  processados  por  um  computador  
•  São  caracterizados  por  três  Ipos  básicos:  
–  Numéricos  (inteiros  ou  reais)  
–  Caracteres  
–  Lógicos  

15  
Inteiros  
•  Dados  numéricos  posiIvos  ou  negaIvos  
•  Exclui  qualquer  valor  numérico  fracionário  
•  Exemplo:  35,  234,  -­‐56,  -­‐9,  0  

16  
Reais  
•  Dados   numéricos   posiIvos,   negaIvo   e   números  
fracionários  
•  Exemplo:  35,  234,  -­‐56,  -­‐9,  -­‐45.99,  4.5,  0  

17  
Caracteres  
•  Seqüência  de  valores  delimitados  por  aspas  
•  Formadas  por:  letras,  números  e  símbolos  
•  Também   conhecido   como:   alfanumérico,   string,  
literal,  cadeia  
•  Exemplo:  “Programação”,  “10a”,  “10”,  “  ”  

18  
Lógicos  
•  Dados   com   valores   que   sugerem   uma   única  
opção  entre  duas  possibilidades  existentes  
•  Representação:  verdadeiro  ou  falso,  0  (zero)  ou  1  
(um),  sim  ou  não  
•  Também  conhecido  como  booleano  

19  
Variáveis  e  Constantes  

20  
Variáveis  
•  Variável   é   tudo   aquilo   que   é   sujeito   a   variações,  
que  é  incerto,  instável  ou  inconstante.  
•  Como   referenciar   a   armazenar   os   dados  
armazenados  em  um  computador?  
•  Os  valores  são  armazenados  na  memória  
•  Cada   Ipo   de   dado   diferente   ocupa   um   número  
específico  de  bytes  na  memória  
•  Para  recuperar  um  valor  é  necessário  saber  o  seu  Ipo  
e  o  endereço  do  byte  inicial  ocupado  na  memória  

21  
Variáveis  
•  De   formar   geral,   podemos   dizer   que   uma   célula  
de  memória  está  associada  a  um  idenIficador  
•  O   termo   variável   é   freqüentemente   uIlizado   com  
sinônimo  de  idenIficador  
•  Variável   é   uma   enIdade   que   guarda   valores   que  
podem   ser   alterados   no   decorrer   de   um  
algoritmo  
•  Embora   uma   variável   possa   assumir   diferentes  
valores,   ela   só   pode   armazenar   um   valor   a   cada  
instante  
22  
Variáveis  
•  Uma   variável   não   pode   armazenar   um   valor   de   Ipo  
de  dado  diferente  daquele  para  o  qual  foi  criada  
•  Uma   variável   deve   possuir   um   nome   e   este   é  
uIlizado   para   sua   idenIficação   e   representação  
dentro  de  um  programa.  

23  
Variáveis  
•  Regras  de  definição  e  uso  de  variáveis:  
–  O  nome  de  idenIficação  de  uma  variável  pode  uIlizar  um  ou  mais  
caracteres  
–  O   primeiro   caractere   de   idenIficação   do   nome   de   uma   variável  
deve   sempre   ser   alfabéIco   (letras   maiúsculas   ou   minúsculas),   os  
demais  podem  ser  alfanuméricos  (letras,  números  e  _)  
–  Na   definição   de   um   nome   composto   de   uma   variável   não   podem  
exisIr  espaços  em  branco  entre  os  nomes  
–  Jamais  uma  variável  pode  ser  definida  com  o  mesmo  nome  de  uma  
palavra   que   represente   os   comandos   de   uma   linguagem   de  
programação  de  computadores,  ou  seja,  as  palavras  reservadas  de  
uma  linguagem  de  programação  
–  Não  pode  ser  uIlizado  como  nome  de  variável  algum  que  já  tenha  
sido  usado  para  idenIficar  o  nome  de  um  programa  

24  
Papéis  de  Variáveis  em  um  Programa  
•  Ação:   quando   seu   valor   inicial   é   modificado   ao  
longo  da  execução  de  um  programa.  
•  Controle:   quando   seu   valor   é   vigiado   e   uIlizado  
principalmente   em   operações   lógicas   de   decisão  
ao  longo  de  um  programa.  

25  
Constantes  
•  Constante   é   tudo   que   é   fixo,   estável,   inalterável,  
imutável,  conrnuo,  invariável,  de  valor  fixo  e  que  
é  aplicado  sob  diversos  pontos  de  vista.  
•  Exemplo:  resultado  =  soma  *  1.23  

26  
Formas  de  Representação  da  
Lógica  de  Programação  

27  
Formas  Básicas  de  Representação  da  
Lógica  de  Programação  
•  Descrição  NarraIva  
•  Diagrama  de  Blocos  (Fluxograma)  
•  Português  Estruturado  (Pseudocódigo)  

28  
Descrição  NarraIva  
•  UIliza   linguagem   natural   para   especificar   os  
passos  para  a  realização  das  tarefas.  
•  Como  dá  margem  a  interpretações  errôneas  e  
ambiguidades,   inerentes   à   sua   caracterísIca  
pouco   formal,   é   pouco   uIlizada   para   a  
especificação  de  algoritmos.  

29  
Diagrama  de  Blocos  
•  Descreve   o   método   e   a   seqüência   das   ações   a  
serem  estabelecidas  para  um  computador  
•  Usa  diversos  símbolos  geométricos  
•  Facilita   a   visualização   completa   e   imediata   da  
linha  de  raciocínio  lógico  de  um  programador  
•  Os   diagramas   de   blocos   podem   ser   feitos   e  
quebrados  e  vários  níveis  
•  Deve  ser  indicado  de  cima  para  baixo  
•  É  incorreto  e  “proibido”  ocorrer  o  cruzamento  de  
linhas  de  fluxo  de  dados  entre  os  símbolos  

30  
Diagrama  de  Blocos  –  Símbolos  Básicos  

31  
Diagrama  de  Blocos  –  Símbolos  Especiais  

32  
Diagrama  de  Blocos  -­‐  Exemplo  

33  
Português  Estruturado  
•  Linguagem  de  projeto  de  programação  
•  Notação  para  elaboração  de  algoritmos,  os  quais  
serão   uIlizados   na   definição,   criação   e  
desenvolvimento   de   documentação   genérica   do  
código  de  um  programa  de  computador  
•  Normalmente   não   é   executada   por   um  
computador.  

34  
Português  Estruturado  -­‐  Exemplo  
programa Soma
var
num1, num2, res : inteiro
inicio
leia num1, num2
res ! num1 + num2
escreva “Soma: ”, res
fim

35  
Comandos  de  Leitura  e  Escrita  de  
Dados  

36  
Comando  de  Atribuição  
(Processamento  de  Dados)  
•  Um   comando   de   atribuição   permite-­‐nos  
fornecer   um   valor   a   uma   variável,   em   que   o  
Ipo   deve   ser   comparvel   com   o   Ipo   da  
variável.  
•  Sintaxe:  
identificador ! expressão
•  Exemplo:  
A ! B
X ! 10
Y ! C + D + 1
SOMA ! A1 + A2 + 6 37  
Comando  de  Leitura  
(Entrada  de  Dados)  
•  Diagrama  de  Blocos  
–  Teclado  em  linha  ou  entrada  manual  

<variável(is)>  

•  Português  Estruturado  
–  leia <variável(is)>
•  Os  dados  lidos  por  um  algoritmo  devem  ser  
armazenados  em  variáveis.  
38  
Comando  de  Leitura  
Exemplo  
•  Diagrama  de  Blocos  
raio   N1,  N2,  N3  

•  Português  Estruturado  
leia raio
leia N1, N2, N3
•  É  possível  ler  o  valor  de  vários  dados  em  
uma  única  instrução,  para  isto,  basta  
separar  cada  idenIficador  de  variável  por  
39  
vírgula.  
Comando  de  Escrita  
(Saída  de  Dados)  
•  Diagrama  de  Blocos  
–  Teclado  em  linha  ou  entrada  manual  
<variável(is)  ou  
informações>  

•  Português  Estruturado  
–  escreva <variável(is) ou informações>
•  Os  dados  de  saída  de  um  algoritmo  podem  vir  
de  variáveis,  expressões  ou  constantes.  
40  
Comando  de  Escrita  
Exemplo  
•  Diagrama  de  Blocos  
Apresenta  a  mensagem  Ola  
“Ola  Mundo”   Mundo  na  tela  

Apresenta  o  valor  da  


res   variável    res  na  tela  

Apresenta  a  mensagem  
“Soma:  ”,  s   Soma:  e  o  valor  da  variável  
s  na  tela  

Apresenta  os  valores  das  


N1,  N2   variáveis  N1  e  N2  na  tela  

41  
Comando  de  Escrita  
Exemplo  
•  Português  Estruturado  
escreva “Ola Mundo”
escreva res
escreva “Soma: ”, s
escreva N1, N2
•  É  possível  escrever  o  valor  de  vários  dados  
em  uma  única  instrução,  para  isto,  basta  
separar  cada  dado  por  vírgula.  

42  
Comando  de  Leitura  e  Escrita    
Exemplo  
programa Exemplo
var
v1, res : inteiro
inicio
leia v1
res ! v1 * v1
escreva res
fim

43  
Blocos  
•  Um   bloco   pode   ser   definido   como   um  
conjunto   de   ações   com   uma   função   definida,  
neste  caso  um  algoritmo  pode  ser  visto  como  
um  bloco.  
•  Para   delimitar   um   bloco,   uIliza-­‐se   os  
delimitadores  início  e  fim.  

44  
Estrutura  Sequencial  
•  A   estrutura   sequencial   de   um   algoritmo  
corresponde   ao   fato   de   que   o   conjunto   de  
ações   primiIvas   será   executado   em   uma  
sequência   linear   de   cima   para   baixo   e   da  
esquerda   para   a   direita,   isto   é,   na   ordem   em  
que  foram  escritas.  

45  
Introdução  à  Linguagem  C  

46  
Introdução  à  Linguagem  C  
•  A  linguagem  C  foi  primeiramente  criada  por  Dennis  M.  Ritchie  
e  Ken  Thompson  no  laboratório  Bell  em  1972.  
–  A  definição  está  conIda  no  livro  The  C  Programming  Language  
•  C   é   uma   linguagem   uIlizada   como   ferramenta   na  
programação  de  qualquer  Ipo  de  sistema  
–  Ex:   sistemas   operacionais,   planilhas   eletrônicas,   processadores   de  
texto,   gerenciadores   de   banco   de   dados,   processadores   gráficos,  
sistemas   de   transmissão   de   dados,   para   solução   de   problemas   de  
engenharia  ou  ysica,  etc.  
–  O  sistema  operacional  UNIX  é  desenvolvido  e  C.  

47  
Introdução  à  Linguagem  C  
•  A   linguagem   C   foi   desenhada   para   que   o   usuário   possa  
planejar  programas  estruturados  e  modulares.  
–  O  resultado  é  um  programa  mais  legível  e  documentado.  
–  Os  programas  em  C  tendem  a  ser  bastante  compactos  e  de  execução  
rápida.  
•  Programas   em   C   podem   ser   desenvolvidos   em   partes  
separadas   por   pessoas   disIntas   e   depois   unidos   num   produto  
final,   o   que   significa   que   bibliotecas   de   funções   podem   ser  
criadas  ou  usadas  sem  realmente  conhecer  o  código  de  cada  
uma  delas.  

48  
Conceito  de  Compiladores  
•  Todo   programa   escrito   numa   linguagem   de   programação   de   alto  
nível  precisa  ser  traduzido  para  a  linguagem  de  máquina,  para  que  
o   computador   possa   executá-­‐lo,   para   isso   existem   os  
interpretadores  e  os  compiladores.  
•  Interpretador:   faz   a   análise   sintáIca   (verifica   se   o   programa   fonte  
está  escrito  de  acordo  com  a  gramáIca  definida  pela  linguagem)  e  a  
análise   semânIca   (verifica,   por   exemplo,   uma   mulIplicação   entre  
Ipos  de  dados  diferentes).  Executa  o  programa  passo  a  passo.  
•  Compilador:   Tal   como   o   interpretador,   faz   a   análise   sintáIca   e  
semânIca  do  programa  fonte.  O  compilador  lê  o  arquivo  contendo  
o  programa  escrito  em  uma  dada  linguagem  de  programação  e  gera  
um   programa   em   linguagem   de   máquina   que   seja   equivalente   ao  
programa  inicial  de  tal  forma  que  o  computador  o  entenda.  
49  
Compilador  vs  Interpretador  
Interpretador

Programa  
Fonte  
Interpretador   Saída  

Dados  

Compilador

Programa  
Compilador  
Fonte  

Dados   Programa  Objeto   Saída  

50  
Criação  de  um  Programa  em  
Linguagem  C  
•  A   criação   de   um   programa   em   linguagem   C   segue   basicamente   três  
passo:  
–  Criação  do  programa  fonte  (texto)  
–  Compilação  desse  programa,  para  a  sua  tradução  em  código  executável  
–  Execução  do  código  produzido  

51  
Estrutura  Básica  de  um  Programa  em  C  
•  Um  programa  em  C  consiste  em  uma  ou  várias  “funções”.  
•  Forma  geral  da  função  main:  
main () {
// instruções
}
•  Os  parênteses  após  o  nome  indicam  que  esta  é  uma  função.  
–  A  função  “main”  é  uIlizada  para  indicar  a  função  que  inicia  o  programa.  
•  Toda   função   C   deve   ser   iniciada   por   uma   chave   de   abertura,   {,   e  
encerrada  por  uma  chave  de  fechamento,  }  
•  A   função   main()   deve   exisIr   em   algum   lugar   do   seu   programa   e  
marca  o  ponto  de  início  da  execução  do  programa.  
–  Se  um  programa  for  consItuído  de  uma  única  função  esta  será  main()  

52  
O  Pré-­‐Processador  C  
•  O   pré-­‐processador   C   é   um   programa   que   examina   o  
programa-­‐fonte   em   C   e   executa   certas   modificações   nele,  
baseado  em  instruções  chamadas  direIvas.  
•  O   pré-­‐processador   faz   parte   do   compilador   e   pode   ser  
considerado   uma   linguagem   dentro   da   linguagem   C.   Ele   é  
executado   automaIcamente   antes   da   compilação.   DireIvas  
do  pré-­‐processador  seriam  instruções  desta  linguagem.  
•  Instruções   para   o   pré-­‐processador   devem   fazer   parte   do   texto  
que   criamos,   mas   não   farão   parte   do   programa   que  
compilamos,   pois   são   reIradas   do   texto   pelo   compilador  
antes  da  compilação.  

53  
O  Pré-­‐Processador  C  
•  Todas   a   direIvas   do   pré-­‐processador   são   iniciadas   com   o  
símbolo   (#).   As   direIvas   podem   ser   colocadas   em   qualquer  
parte  do  programa,  mas  é  costume  serem  colocadas  no  início  
do  programa,  antes  de  main(),  ou  antes  do    começo  de  uma  
função  parIcular.  
•  Não   há   ponto-­‐e-­‐vírgula   após   qualquer   direIva   do   pré-­‐
processador.  

54  
A  DireIva  #include  
•  A   direIva   #include   causa   a   inclusão   de   um   programa-­‐fonte  
em   outro   Ela   diz   ao   compilador   para   incluir,   na   hora   da  
compilação,  um  arquivo  especificado.  Sua  forma  geral  é:  
#include “nome_do_arquivo” ou
#include <nome_do_arquivo>  
•  A  diferença  entre  usar  “  ”  e  <  >  é  somente  a  ordem  de  procura  
nos   diretório   pelo   arquivo   especificado.   Se   o   arquivo   esIver  
nos   caminhos   de   procura   pré-­‐especificados   do   compilador  
(como  é  o  caso  do  arquivo  stdio.h)  use  <  >.  

55  
Variáveis  
•  As   variáveis   são   o   aspecto   fundamental   de   qualquer  
linguagem  de  computador.  Uma  variável  em  C  é  um  espaço  de  
memória  reservado  para  armazenar  um  certo  Ipo  de  dado  e  
tendo  um  nome  para  referenciar  o  seu  conteúdo.  
•  Uma   variável   é   um   espaço   de   memória   que   pode   conter,   a  
cada  tempo,  valores  diferentes.  

56  
Declaração  de  Variáveis  
•  Uma   declaração   de   variável   é   uma   instrução   para   reservar  
uma   quanIdade   de   memória   apropriada   para   armazenar   o  
Ipo  especificado.  
•  Uma   declaração   de   variável   consiste   no   nome   de   um   Ipo,  
seguido  do  nome  da  variável.  
•  Exemplo:  int num;  
•  Em  C  todas  as  variáveis  devem  ser  declaradas.  
•  Se   você   Iver   mais   de   uma   variável   do   mesmo   Ipo,   poderá  
declará-­‐las   de   uma   única   vez,   separando   seus   nomes   por  
vírgulas.  
•  Exemplo:  int aviao, foguete, helicoptero;  

57  
Nomes  de  Variáveis  
•  A   escolha   de   nomes   significaIvos   para   suas   variáveis   pode  
ajudá-­‐lo  a  entender  o  que  o  programa  faz  e  prevenir  erros.  
•  Pode-­‐se  usar  quantos  caracteres  quiser  para  o  nome  de  uma  
variável  
•  O  primeiro  caractere  deve  ser  obrigatoriamente  uma  letra  ou  
o  caractere  de  sublinhar  (_).  
•  Os   demais   caracteres   podem   ser   letras,   números   ou  
caracteres  de  sublinhar.  
•  Uma   variável   não   pode   ter   o   mesmo   nome   de   uma   palavra-­‐
chave  de  C.  
•  Em  C  letras  minúsculas  e  maiúsculas  são  diferentes  
–  Exemplo:  PESO,  Peso,  peSo,  peso  
58  
Palavras-­‐Chaves  em  C  
auto double int struct
break else long switch
case enum register typedef
char extern return union
const float short
unsigned
continue for signed void
default goto sizeof volatile
do if static while

59  
Tipos  de  Dados  
•  O  Ipo  de  uma  variável  informa  a  quanIdade  de  memória,  em  
bytes,   que   esta   irá   ocupar   e   a   forma   como   o   seu   conteúdo  
será  armazenado.  

TIPO   BIT   BYTES   ESCALA  


char 8 1 -128 a 127
int 16 2 -32768 a 32767
float 32 4 3.4E-38 a 3.4E+38
double 64 8 1.7E-308 a 1.7E+308
void 0 0 sem valor

60  
Modificadores  de  Tipos  
•  Com  exceção  de  void,  os  Ipos  de  dados  básicos  podem  estar  
acompanhados  por  modificadores  na  declaração  de  variáveis.  
Os  modificadores  de  Ipos  oferecidos  por  C  são:  
–  long ou long int (4 bytes)
–  unsigned char (de 0 a 255)
–  unsigned int (de 0 a 65535)
–  unsigned long
–  short (2 bytes no IBM-PC)

61  
Inicializando  Variáveis  
•  É   possível   combinar   uma   declaração   de   variável   com   o  
operador  de  atribuição  para  que  a  variável  tenha  um  valor  ao  
mesmo   tempo   de   sua   declaração;   é   o   que   chamaremos   de  
inicialização  de  variáveis.  
   int evento = 5;
char corrida = ‘C’;
float tempo = 27.25;  

62  
Atribuições  MúlIplas  
•  C  permite  que  você  atribua  o  mesmo  valor  a  muitas  variáveis  
usando  atribuições  múlIplas  em  um  único  comando.  
     
   x = y = z = 10;  

63  
Função  de  Saída  de  Dados  
•  A  função  prinK()  é  uma  das  funções  de  E/S  (entrada  e  saída)  
que  podem  ser  usada  em  C.  Ela  não  faz  parte  da  definição  de  
C   mas   todos   os   sistemas   têm   uma   versão   de   prinK()  
implementada.  
•  Esta   função   é   uIlizada   para   imprimir   dados   na   tela   do  
computador.  Os  dados  a  serem  impressos  devem  ser  passados  
como  argumentos  da  função  prinK().  
•  Sintaxe:  
 printf (“expr. de controle”, lista de argumentos);  

64  
Função  de  Saída  de  Dados  
•  Exemplo:  
#include <stdio.h>
#include <stdlib.h>
main () {
printf (“Este e’ o numero dois: %d”, 2);
system (“PAUSE”);
}
•  A  expressão  de  controle  pode  conter  caracteres  que  serão  exibidos  na  tela  
e   códigos   de   formatação   que   indicam   o   formato   em   que   os   argumentos  
devem   ser   impressos.   No   exemplo   acima,   o   código   de   formatação   %d  
solicita   a   função   prinK()   imprimir   o   segundo   argumento   em   formato  
decimal.  
•  prinK()   é   uma   função   da   biblioteca   padrão   do   C   (stdio.h).   Para   uIlizar   a  
função   prinK()   a   biblioteca   stdio.h   deve   ser   incluída   com   a   direIva  
#include.   65  
Função  de  Saída  de  Dados  
•  Exemplo  2:  
#include <stdio.h>
#include <stdlib.h>
main () {
printf (“Ola Mundo! \n”);
system (“PAUSE”);
}
•  Neste   exemplo   a   expressão   de   controle   contém   apenas   os  
caracteres  que  devem  ser  impressos  na  tela  e  um  caractere  especial  
de  impressão    (“\n”)  que  indica  ao  programa  para  colocar  o  cursor  
na  próxima  linha.  
•  Quando   não   temos   nenhum   código   de   formatação   na   expressão   de  
controle,     não   deve   ser   passado   nenhum   outro   argumento   para   a  
função  prinK().
66  
Função  de  Saída  de  Dados  
•  Exemplo  3:  
#include <stdio.h>
#include <stdlib.h>
main () {
int numInt = 10;
float numReal = 15.25;
printf (“%d %f”, numInt, numReal);

system (“PAUSE”);
}

67  
Formatos  de  Impressão  
•  A   tabela   abaixo   apresenta   os   códigos   para   impressão  
formatada  da  função  prinK():  
Código  prinK()    Formato  
%c        Caractere  Simples  
%d        Decimal  
%e        Notação  Cienrfica  
%f        Ponto  Flutuante  (float)  
%g        %e  ou  %f  (o  mais  curto)  
%o        Octal  
%s        Cadeia  de  Caracteres  
%u        Decimal  sem  sinal  
%x        Hexadecimal  
%ld      Decimal  Longo  
%lf        Ponto  Flutuante  Longo  (double)  
%%      Um  único  sinal  de  porcentagem  
68  
Caracteres  Especiais  de  Impressão  
•  A  tabela  abaixo  apresenta  os  códigos  de  C  para  caracteres  que  
não  podem  ser  inseridos  diretamente  pelo  teclado.  
Códigos  Especiais    Significado  
\n          Nova  linha  
\r          Retorno  do  cursor  
\t          Tab  
\b          Retrocesso  
\”          Aspas  
\\          Barra  
\f          Salta  página  de  formulário  
\0          Nulo  

69  
Modificadores  de  Formato  
•  O  Especificador  de  Largura  Mínima  de  Campo  
–  Um   número   colocado   entre   o   símbolo   %   e   o   código   de   formato   age  
como  um  especificador  de  largura  mínima  de  campo.  Isso  preenche  a  
saída   com   espaços,   para   assegurar   que   ela   aInja   um   certo  
comprimento  mínimo.  
–  Para   preencher   com   0s,   deve-­‐se   colocar   um   0   antes   do   especificador  
de   largura   mínima   de   campo.   Por   exemplo,   %05d   preencherá   um  
número   de   menos   de   cinco   dígitos   com   0s   de   forma   que   seu  
comprimento  total  seja  cinco.

70  
Modificadores  de  Formato  
•  O  Especificador  de  Precisão  
–  O   especificador   de   precisão   segue   o   especificador   de   largura   mínima  
de  um  campo  (se  houver  algum),  consisIndo  em  um  ponto  seguido  de  
um  número  inteiro.  O  seu  significado  exato  depende  do  Ipo  de  dado  a  
que  está  sendo  aplicado.  
–  Exemplo:  
#include <stdio.h>
main () {
printf (“%.4f\n”, 123.1234567);
printf (“%6.4d\n”, 21);
printf (“%6.0d\n”, 21);
printf (“%.15s\n”, “Este e um teste simples”);
}
Saída: 123.1235
0021
21
Este e um teste 71  
Função  de  Entrada  de  Dados  
•  A  função  scanf()  é  outra  das  funções  de  E/S  implementada  em  
todos   os   compiladores   C.   Ela   é   o   complemento   de   prinK()   e  
nos   permite   ler   dados   formatados   da   entrada   padrão  
(teclado).  
•  Sua   sintaxe   é   similar   à   de   prinK(),   isto   é,   uma   expressão   de  
controle  seguida  por  uma  lista  de  argumentos  separados  por  
vírgula.  
•  A   principal   diferença   está   na   lista   de   argumentos.   Os  
argumentos  de  scanf()  devem  ser  endereços  de  variáveis.  
•  Sintaxe:  
 scanf (“expr. de controle”, lista de argumentos);  

72  
Função  de  Entrada  de  Dados  
•  A  expressão  de  controle  pode  conter  códigos  de  formatação,  
precedidos  por  um  sinal  %.  
•  A   lista   de   argumentos   deve   consisIr   nos   endereços   das  
variáveis.  C  oferece  um  operador  para  Ipos  básicos  chamado  
operador   de   endereço   e   referenciado   pelo   símbolo   &   que  
resulta  o  endereço  do  operando.  
•  scanf()   é   uma   função   da   biblioteca   padrão   do   C   (stdio.h).   Para  
uIlizar  a    função  scanf()  a  biblioteca  stdio.h  deve  ser  incluída  
com  a  direIva  #include.  

73  
Função  de  Entrada  de  Dados  
•  Exemplo:  
#include <stdio.h>
#include <stdlib.h>
main () {
float anos, dias;
printf (“Digite sua idade em anos: ”);
scanf (“%f”, &anos);
dias = anos * 365;
printf (“Sua idade em dias e’ %.0f.\n”, dias);
system (“PAUSE”);
}

74  
O  Operador  de  Endereço  (&)  
•  Toda   variável   ocupa   uma   certa   localização   na   memória,   e   seu   endereço   é   o   do  
primeiro   byte   ocupado   por   ela.   Um   inteiro   ocupa   2   bytes.   Se   você   declarou   uma  
variável   n   como   inteira   e   atribui   a   ela   o   valor   2,   quando   n   for   referenciada  
devolverá   2.   Entretanto,   se   você   referenciar   n   precedido   de   &   (&n)   devolverá   o  
endereço  do  primeiro  byte  onde  n  está  guardada.  
•  Exemplo:  
#include <stdio.h>
#include <stdlib.h>
main () {
int num = 2;
printf (“Valor=%d, endereco=%u”, num, &num);
system (“PAUSE”);
}
Saída:  Valor=2,  endereco=1370  
•  Um   endereço   de   memória   é   visto   como   um   número   inteiro   sem   sinal,   por   isso  
usamos  %u.   75  
Códigos  de  Formatação  de  scanf()  
•  A  tabela  abaixo  apresenta  os  códigos  de  formatação  da  função  
scanf():  
Código      Função  
%c        Leia  um  único  caractere  
%d      Leia  um  inteiro  decimal  
%e        Leia  um  número  em  notação  cienrfica  
%f        Leia  um  número  em  ponto  flutuante  
%o      Leia  um  inteiro  octal  
%s        Leia  uma  série  de  caracteres  
%u      Leia  um  decimal  sem  sinal  
%x        Leia  um  número  hexadecimal  
%l        Leia  um  inteiro  longo  
%lf      Leia  um  double  
76  
Exemplo  
•  Programa   que   calcula   e   apresenta   na   tela   a   soma   de   dois  
números  inteiros.  
#include <stdio.h>
#include <stdlib.h>
main () {
int num1, num2;
printf (“Digite o primeiro valor:”);
scanf (“%d”, &num1);
printf (“Digite o segundo valor:”);
scanf (“%d”, &num2);
int soma = num1 + num2;
printf (“Soma: %d”, soma);
system (“PAUSE”);
}
77  
Exemplo  2  
•  Programa   que   calcula   e   apresenta   na   tela   a   área   de   um  
círculo.  
#include <stdio.h>
#include <stdlib.h>
main () {
float raio;
printf (“Digite o valor do raio:”);
scanf (“%f”, &raio);
float area = 3.1415 * raio * raio;
printf (“Area: %.2f”, area);
system (“PAUSE”);
}

78  
Constantes  
•  O   qualificador   const   pode   ser   aplicado   à   declaração   de  
qualquer  variável  para  especificar  que  seu  valor  não  deve  ser  
mudado.  
   const float PI = 3.1415;
const float SALARIO_MINIMO = 350.00;  
     

79  
A  DireIva  #define  
•  A   direIva   #define   pode   ser   usada   para   definir   constantes  
simbólicas  com  nomes  apropriados  
•  Exemplo:  #define PI 3.1415  
•  Quando  o  compilador  encontra  #define,  ele  subsItui  cada  
ocorrência  de  PI  por  3.1415    
•  A   frase   à   esquerda   (PI),   que   será   procurada,   é   chamada  
“idenIficador”.   A   frase   à   direita   (3.1415),   que   será  
subsItuída,   é   chamada   “texto”.   Um   ou   mais   espaços   separam  
o  idenIficador  do  texto.  
•  Por  convenção,  o  idenIficador  é  escrito  em  letras  maiúsculas.  
•  Só  é  permiIdo  escrever  um  comando  destas  por  linha.  

80  
Exemplo  
•  Programa  que  calcula  a  área  de  um  círculo.  
#include <stdio.h>
#include <stdlib.h>
#define PI 3.1415
main () {
float raio;
printf (“Digite o valor do raio:”);
scanf (“%f”, &raio);
float area = PI * raio * raio;
printf (“Area: %.2f”, area);
system (“PAUSE”);
}

81  
Comentários  
•  Comentários  podem  ser  colocados  em  qualquer  lugar  de  seu  programa.  
•  Comentários   começam   com   dois   caracteres,   chamados   símbolos   de  
comentários,   barra-­‐asterisco   (/*)   e   terminam   por   asterisco-­‐barra   (*/).  
Como   C   ignora   espaços,   os   comentários   podem   ser   escritos   em   vários  
linhas.  
 /*
Aqui esta
um exemplo de
comentario em
multiplas linhas
*/
•  Não  são  permiIdos  os  simbolos  de  /*  ou  */  no  interior  de  um  comentário.  
 /* estou escrevendo /* um comentario ilegal */  
82  
Operadores  AritméIcos  

83  
Operadores  AritméIcos  
•  Duas  categorias:  unários  e  binários  
•  São   unários   quando   atuam   na   inversão   do   estado  
de  um  valor  numérico  
•  São   binários   quando   uIlizados   em   operações  
matemáIcas   de   divisão,   mulIplicação,   adição   e  
subtração  
•  Em   uma   expressão   aritméIca,   caso   necessite  
alterar   o   nível   de   prioridade   de   um   referido  
cálculo,   ele   deve   ser   definido   por   meio   de  
parênteses.   84  
Operadores  AritméIcos  
Operador   Operação   Categoria   Resultado   Prioridade  
!   Atribuição   -­‐   -­‐   -­‐  
+   Manutenção  de   Unário   -­‐   1  
sinal  
-­‐   Inversão  de  sinal   Unário   -­‐   1  
↑   Exponenciação   Binário   Inteiro  ou  Real   2  
↑(1/n)   Radiciação  de  n   Binário   Real   2  
/   Divisão   Binário   Real   3  
*   MulIplicação   Binário   Inteiro  ou  Real   3  
div   Divisão   Binário   Inteiro   3  
mod   Módulo     Binário   Inteiro   3  
(Resto  da  divisão)  
+   Adição   Binário   Inteiro  ou  Real   4  
-­‐   Subtração   Binário   Inteiro  ou  Real   4  
85  
Expressões  AritméIcas  
•  São   definidas   pelo   relacionamento   existente  
entre   variáveis   e   constantes   numéricas   com   a  
uIlização  dos  operadores  aritméIcos  
•  Exemplo  
resultado ! 10 * (3 + v1)

86  
Transformando  Expressões  
MatemáIcas  em  Computacionais  
•  As   expressões   aritméIcas   em   computação   são  
escritas  de  uma  forma  um  pouco  diferente  da  
forma  conhecida  em  matemáIca:  
–  Expressão  matemáIca:    
X  =  {43  .  [55  :  (30  +  2)  ]  }  
–  Expressão  Computacional:  
X  !  (43  *  (55  /  (30  +  2)  )  )  

87  
Transformando  Expressões  
MatemáIcas  em  Computacionais  
•  Na   forma   computacional,   as   chaves   e  
colchetes   são   abolidos,   uIlizando-­‐se   em   seu  
lugar  apenas  parênteses  
•  É  também  subsItuído  o  sinal  de  (=)  igual  pelo  
sinal  de  (!)  implicado  ou  atribuído  
•  O  sinal  implicado  ou  atribuído  (!)  é  uIlizado  
para   indicar   que   o   valor   de   uma   expressão  
aritméIca   está   sendo   armazenado   em   uma  
variável  
88  
Transformando  Expressões  
MatemáIcas  em  Computacionais  
•  Exemplo:  fórmula  para  calcular  a  área  de  um  
triângulo  
–  Expressão  matemáIca:  

–  Expressão  computacional:  
A  !  (b  *  h)  /  2  

89  
Operadores  Relacionais  

90  
Operadores  Relacionais  
•  Uma   condição   é   o   estabelecimento   de   uma  
relação  lógica  entre  dois  elementos  
•  Variável  x  Variável,  Variável  x  Constante  
•  Para   definir   uma   relação   lógica   é   necessário  
usar  operadores  relacionais  
•  Uma   relação   lógica   retorna   somente   os  
valores  verdadeiro  ou  falso  
•  Os   operadores   relacionais   possuem   o   mesmo  
nível  de  prioridade  
91  
Operadores  Relacionais  
Símbolo   Significado  
=   Igual  a  
>   Maior  que  
<   Menor  que  
>=   Maior  ou  igual  a  
<=   Menor  ou  igual  a  
<>   Diferente  de  

92  
Operadores  Lógicos  

93  
Operadores  Lógicos  
•  UIlizados   para   uma   mesma   tomada   de  
decisão   que   necessite   de   mais   de   uma  
condição  
•  Também   conhecidos   como   operadores  
booleanos  
Símbolo   Significado  
e   Conjunção  
ou   Disjunção  
não   Negação  

94  
Operador  Lógico  E  
•  UIlizado   quando   duas   ou   mais   condições  
necessitam   ser   verdadeiras   para   obter-­‐se   um  
resultado   lógico   verdadeiro.   Caso   contrário,   o  
resultado  do  valor  lógico  será  falso.  

Condição  1   Condição  2   Resultado  


Verdadeira   Verdadeira   Verdadeiro  
Verdadeira   Falsa   Falso  
Falsa   Verdadeira   Falso  
Falsa   Falsa   Falso  

95  
Operador  Lógico  Ou  
•  UIlizado  quando  pelo  menos  uma  de  duas  ou  
mais   condições   necessita   ser   verdadeira   para  
obter-­‐se  um  resultado  lógico  verdadeiro.  Caso  
contrário  o  valor  lógico  será  falso  
Condição  1   Condição  2   Resultado  
Verdadeira   Verdadeira   Verdadeiro  
Verdadeira   Falsa   Verdadeiro  
Falsa   Verdadeira   Verdadeiro  
Falsa   Falsa   Falsa  

96  
Operador  Lógico  Não  
•  Inverte   o   valor   lógico   de   uma   determinada  
condição  

Condição   Resultado  
Verdadeira   Falso  
Falsa   Verdadeira  

97  
Operadores  Lógicos  -­‐  Prioridade  
•  Os  operadores  lógicos  possibilitam  o  uso  de  mais  de  
uma  condição  para  a  tomada  de  uma  única  decisão  
•  É   necessário   levar   em   conta   a   ordem   de   prioridade  
dos  operadores  lógicos  
•  Caso   necessite   alterar   o   nível   de   prioridade   de   uma  
expressão  deve  ser  uIlizado  parênteses  
Operador   Operação   Prioridade  
não   Negação   1  
e   Conjunção   2  
ou   Disjunção   3  

98  
Operadores  

Linguagem  C  

99  
Operadores  AritméIcos    
Linguagem  C  
•  C   oferece   6   operadores   aritméIcos   binários   (operam   sobre  
dois   operandos)   e   um   operador   aritméIco   unário   (opera  
sobre  um  operando).    
•  Binários  
= Atribuição
+ Soma
- Subtração
* Multiplicação
/ Divisão
% Módulo (Resto da divisão inteira)
•  Unário  
 - Menos unário (Indica a troca de sinal)
•  Precedência  (mais  alta  -­‐>  mais  baixa)  
- (menos unário), * / %, + -
Para  alterar  a  ordem  de  precedência,  uIlize  parênteses.  
100  
Operadores  de  Incremento  (++)  e  
Decremento  (-­‐-­‐)  
•  Considere   os   operadores   abaixo   que   não   são   comuns   em   outras  
linguagens:  
++ incrementa de 1 seu operando
-- decrementa de 1 seu operando
•  O   operador   de   incremento   (++)   incrementa   de   um   seu   operando.   Este  
operador  trabalha  de  dois  modos:  
–  O  primeiro  modo  é  chamado  pré-­‐fixado  e  o  operador  aparece  antes  do  nome  
da  variável.  
–  O  segundo  é  o  modo  pós-­‐fixado  em  que  o  operador  aparece  seguindo  o  nome  
da  variável.  
•  Em   ambos   os   casos,   a   variável   é   incrementada.   Porém   quando   ++n   é  
usado  numa  instrução,  n  é  incrementada  antes  de  seu  valor  ser  usado,  e  
quando  n++  esIver  numa  instrução,  n  é  incrementada  depois  de  seu  valor  
ser  usado.  
•  Os    operadores  de  incremento  e  decremento  tem  precedência  sobre  todos  
os  operadores  aritméIcos.   101  
Operadores  de  Incremento  (++)  e  
Decremento  (-­‐-­‐)  
•  Exemplo  1:  
Se  as  seguintes  linhas  de  programa  forem  executadas:  
n = 5;
x = n++;
printf (“x = %d n = %d”, x, n);
a  saída  será: x = 5 n = 6
•  Exemplo  2:  
Se  as  seguintes  linhas  de  programa  forem  executadas:  
n = 5;
x = ++n;
printf (“x = %d n = %d”, x, n);
a  saída  será: x = 6 n = 6
102  
Operadores  AritméIcos  de  Atribuição  
•  Operadores  AritméIcos  de  Atribuição  
+=, -=, *=, /=, %=
•  Cada   um   destes   operadores   é   usado   com   um   nome   de   variável   à   sua  
esquerda  e  uma  expressão    à  sua  direita.  A  operação  consiste  em  atribuir  
um   novo   valor   à   variável   que   dependerá   do   operador   e   da   expressão   à  
direita.
•  Se   x   é   uma   variável,   exp   uma   expressão   e   op   um   operador   aritméIco   (+,
-, *, / ou %),  então    
   x op= exp;          equivale  a          x = (x) op (exp);
•  Exemplos:  
 i += 2; equivale  a                          i = i + 2;
x *= y + 1; equivale  a x = x * (y + 1)
t /= 2.5; equivale  a t = t / 2.5;
p %= 5; equivale  a p = p % 5;
d -= 3; equivale  a d = d – 3; 103  
Operadores  Relacionais  
Linguagem  C  
Símbolo   Significado  
==   Igual  a  
>   Maior  que  
<   Menor  que  
>=   Maior  ou  igual  a  
<=   Menor  ou  igual  a  
!=   Diferente  de  

•  Os   operadores   aritméIcos   têm   maior   precedência   que   os  


operadores  relacionais.  

104  
Operadores  Lógicos  
Linguagem  C  

Operador   Significado   Precedência  


! Negação  –  Não  Lógico   1  
&& Conjunção  –  E  Lógico   2  
|| Disjunção  –  OU  Lógico   3  

105  
Precedência  dos  Operadores  
Linguagem  C  
Operadores   Tipos  
! - ++ -- unários;  não  lógico  e  menos  aritméIco  
* / % aritméIcos  
+ - aritméIcos  
< > <= >= relacionais  
== != relacionais  
&& lógico  E  
|| lógico  OU  
= += -= *= /= %= aritméIcos  de  atribuição  

106  
Desvio  Condicional  Simples  

107  
Desvio  Condicional  Simples  
•  Recurso  para  tomada  de  decisão  simples  
•  Deve   ser   uIlizado   caso   seja   necessário   executar  
instruções  somente  se  uma  condição  for  verdadeira  
•  A   tomada   de   decisão   simples   uIliza   a   instrução  
se...então...fim_se.   Nesta   instrução,   se   a   condição  
estabelecida   for   verdadeira,   são   executadas   todas   as  
instruções  definidas  entre  se...então  e  fim_se,  depois  são  
executadas  todas  as  condições  existentes  após  fim_se.  Se  
a   condição   estabelecida   for   falsa,   são   executadas   as  
instruções  que  estão  definidas  após  a  instrução  fim_se  

108  
Desvio  Condicional  Simples  
Diagrama  de  Blocos   Português  Estruturado  

se condição então
instruções
fimse

Linguagem  C  

if (condição){
instruções;
}

109  
Desvio  Condicional  Simples  
Exemplo  
•  Ler  dois  valores  numéricos,  efetuar  a  adição  e  apresentar  o  seu  resultado  
caso  o  valor  somando  seja  maior  que  10.  
•  Diagrama  de  Blocos:  

110  
Desvio  Condicional  Simples  
Exemplo  
•  Português  Estruturado:  

programa SOMA_NUMEROS
var
A, B, X : inteiro
inicio
escreva “Digite dois numeros inteiros”
leia A, B
X ! A + B
se X > 10 então
escreva X
fimse
fim

111  
Desvio  Condicional  Simples  
Exemplo  
•  Linguagem  C:  

#include <stdio.h>
#include <stdlib.h>
main () {
int a, b, x;
printf (“Digite dois numeros inteiros \n“);
scanf (“%d%d”, &a, &b);
x = a + b;
if (x > 10) {
printf (“Soma: %d \n”, x);
}
system (“PAUSE”);
}
112  
Desvio  Condicional  Composto  

113  
Desvio  Condicional  Composto  
•  se...então...senão...fimse  
•  Deve  ser  uIlizado  caso  seja  necessário  executar  instruções  se  
uma  condição  for  verdadeira  ou  executar  outras  instruções  se  
a  condição  for  falsa  
•  Nesta   instrução,   se   a   condição   estabelecida   for   verdadeira,  
são  executadas  todas  as  instruções  definidas  entre  se...então  
e  senão.  Se  a  condição  estabelecida  for  falsa,  são  executadas  
todas   as   instruções   que   esIverem   definidas   entre   senão   e  
fimse  
•  Somente   após   a   execução   de   uma   das   possibilidades  
anteriores  é  que  o  programa  executa  as  instruções  existentes  
após  o  fimse  
114  
Desvio  Condicional  Composto  
Diagrama  de  Blocos   Português  Estruturado  

se condição então
instruções para cond. verdadeira
senão
instruções para cond. falsa
fimse

Linguagem  C  

if (condição){
instruções;
}
else {
instruções;
}

115  
Desvio  Condicional  Composto  
Exemplo  
•  Ler  dois  valores  numéricos  e  efetuar  a  adição.  Caso  o  valor  somando  seja  maior  ou  
igual  a  10,  deve  ser  apresentado  somando  a  ele  5;  caso  o  valor  somado  não  seja  
maior  ou  igual  a  10,  deve  ser  apresentado  subtraído  dele  7.  
•  Diagrama  de  Blocos:  

116  
Desvio  Condicional  Composto  
Exemplo  
•  Português  Estruturado:  

programa SOMA_NUMEROS
var
A, B, X, R : inteiro
inicio
escreva “Digite dois numeros inteiros”
leia A, B
X ! A + B
se X >= 10 então
R ! X + 5
senão
R ! X – 7
fimse
escreva R
fim
117  
Desvio  Condicional  Composto  
Exemplo  
•  Linguagem  C:  

#include <stdio.h>
#include <stdlib.h>
main () {
int a, b, x, r;
printf (“Digite dois numeros inteiros \n”);
scanf (“%d%d”, &a, &b);
x = a + b;
if (x >= 10) {
r = x + 5;
}
else {
r = x – 7;
}
printf (“Resultado: %d \n”, r);
system (“PAUSE”);
}

118  
Desvio  Condicional  Encadeado  

119  
Desvio  Condicional  Encadeado  
(Aninhado)  
•  UIlizado   quando   é   necessário   estabelecer  
algumas   verificações   lógicas   de   condições  
definidas  sucessivamente  

120  
Desvio  Condicional  Encadeado  
Diagrama  de  Blocos  

121  
Desvio  Condicional  Encadeado  
Português  Estruturado  
se condição1 então
instruções para condição1 verdadeira
senão
se condição2 então
instruções para condição2 verdadeira, porém condição1 falsa
senão
instruções para condição1 e condição2 falsa
fimse
fimse

122  
Desvio  Condicional  Encadeado  
Linguagem  C  
if (condicao1) {
instruções;
}
else {
if (condicao2) {
instruções;
}
else {
instruções;
}
}  

123  
Desvio  Condicional  Encadeado  
Exemplo  
•  Elaborar  um  algoritmo  que  efetue  o  cálculo  do  
reajuste   de   salário   de   um   funcionário.  
Considere  que  o  funcionário  deve  receber  um  
reajuste   de   15%   caso   seu   salário   seja   menor  
que  500.  Se  o  salário  for  maior  ou  igual  a  500,  
mas  menor  ou  igual  a  1000,  seu  reajuste  será  
de   10%;   caso   seja   ainda   maior   que   1000,   o  
reajuste  deverá  ser  de  5%.  

124  
Desvio  Condicional  Encadeado  
Exemplo  
•  Diagrama  de  Blocos:  

125  
Desvio  Condicional  Encadeado  
Exemplo  
•  Português  Estruturado:  
programa ReajustaSalario
var
salario : real
novoSalario : real
inicio
escreva “Salario: ”
leia salario
se salario < 500 então
novoSalario ! salario * 1.15
senão
se salario <= 1000 então
novoSalario ! salario * 1.10
senão
novoSalario ! salario * 1.05
fimse
fimse
escreva novoSalario
fim 126  
Desvio  Condicional  Encadeado  
Exemplo  
•  Linguagem  C:  
#include <stdio.h>
#include <stdlib.h>
main () {
float salario, novoSalario;
printf (“Salario: ”);
scanf (“%f”, &salario);
if (salario < 500) {
novoSalario = salario * 1.15;
}
else {
if (salario <= 1000) {
novoSalario = salario * 1.10;
}
else {
novoSalario = salario * 1.05;
}
}
printf (“Novo Salario: %.2f \n”, novoSalario);
system (“PAUSE”);
} 127  
Desvio  Condicional  Encadeado  
O  Comando  else-­‐if
•  A  construção  else-­‐if  é  uma  maneira  reformatada  de  nihos  if-­‐else:  
#include <stdio.h>
#include <stdlib.h>
main () {
float salario, novoSalario;
printf (“Salario: ”);
scanf (“%f”, &salario);
if (salario < 500)
comando else-if
novoSalario = salario * 1.15;
else if (salario <= 1000)Esse else está associado
novoSalario = salario * 1.10; ao comando
else if (salario <= 1000)
novoSalario = salario * 1.05;
printf (“Novo Salario: %.2f \n”, novoSalario);
system (“PAUSE”);
}

128  
Desvio  Condicional  com  MúlIpla  
Escolha  

129  
Desvio  Condicional  com  MúlIpla  Escolha  

•  Deve   ser   uIlizado   quando   houver   a  


necessidade   de   construir   um   programa   no  
qual   seja   necessário   uIlizar   uma   seqüência  
grande  de  instruções  do  Ipo  se  

130  
Desvio  Condicional  com  MúlIpla  Escolha  
Diagrama  de  Blocos  

131  
Desvio  Condicional  com  MúlIpla  Escolha  
Português  Estruturado  
escolha variável
caso valor1:
instruções
caso valor2:
instruções
...
caso contrário:
instruções
fimescolha

132  
Desvio  Condicional  com  MúlIpla  Escolha  
Linguagem  C  
switch (expressao) {
case constante1:
instruções; /*opcional*/
case constante2: /*opcional*/
instruções; /*opcional*/
....
default: /*opcional*/
instruções; /*opcional*/
}  

133  
O  Comando  switch
•  O  comando  switch  avalia  a  expressão  entre  parênteses,  após  
a   palavra   switch,   e   compara   seu   valor   com   os   rótulos   dos  
casos.  
•  A   expressão   entre   parênteses   deve   ser   de   valor   inteiro   ou  
caractere.  
•  Cada  caso  deve  ser  rotulado  por  uma  constante  do  Ipo  inteiro  
ou   caractere   ou   por   uma   expressão   constante.   Você   não  
poderá   usar   uma   variável   e   nem   uma   expressão   lógica   para  
rótulo.  Esta  constante  deve  ser  terminada  por  dois  pontos  (:)  
e  não  por  ponto-­‐e-­‐vírgula.  
•  Pode   haver   uma   ou   mais   instruções   seguindo   cada   case.   Estas  
instruções  não  necessitam  estar  entre  chaves.  
134  
O  Comando  switch
•  O  corpo  de  um  switch  deve  estar  envolto  por  chaves.  
•  Se   um   caso   for   igual   ao   valor   da   expressão,   a   execução  
começa  nele.  
•  Se   nenhum   caso   for   saIsfeito   e   exisIr   um   caso   default:   a  
execução   começará   nele,   senão     o   programa   processará   as  
instruções  seguintes  ao  bloco  switch.  Um  default:  é  opcional.  
•  Os  rótulos  dos  casos  devem  ser  todos  diferentes.  
•  O   comando   break   causa   uma   saída   imediata   do   switch.   Se  
não  exisIr  um  comando  break  seguindo  as  instruções  de  um  
caso,   o   programa   segue   executando   todas   as   instruções   dos  
casos  abaixo.  

135  
Desvio  Condicional  com  MúlIpla  Escolha  
Exemplo  
•  Ler   um   número   inteiro.   Caso   o   número   lido  
seja  9,  apresentar  na  tela  O  numero  e  igual  a  
9.   Caso   o   número   lido   seja   10,   apresentar   na  
tela   O   numero   e   igual   a   10.   Caso   o   número  
lido   seja   igual   a   11,   apresentar   na   tela   O  
numero   e   igual   a   11.   Caso   contrário,  
apresentar  na  tela  O  numero  esta  errado.  

136  
Desvio  Condicional  com  MúlIpla  Escolha  
Exemplo  
•  Diagrama  de  Blocos:  

137  
Desvio  Condicional  com  MúlIpla  Escolha  
Exemplo  
•  Português  Estruturado:  
programa NUMEROS
var
num : inteiro
inicio
escreva “Digite um numero:”
leia num
escolha num
caso 9:
escreva “O numero e igual a 9”
caso 10:
escreva “O numero e igual a 10”
caso 11:
escreva “O numero e igual a 11”
caso contrário:
escreva “O numero esta errado”
fimescolha
fim
138  
Desvio  Condicional  com  MúlIpla  Escolha  
Exemplo  
•  Linguagem  C:  
#include <stdio.h>
#include <stdlib.h>
main () {
int num;
printf (“Digite um numero: ”);
scanf (“%d”, &num);
switch (num) {
case 9:
printf (“O numero e igual a 9”);
break;
case 10:
printf (“O numero e igual a 10”);
break;
case 11:
printf (“O numero e igual a 11”);
break;
default:
printf (“O numero esta errado”);
}
system (“PAUSE”);
} 139  
Estrutura  de  RepeIção  Enquanto  

140  
Estruturas  de  RepeIção  
•  São  necessárias  quando  se  tem  que  repeIr  um  determinado  conjunto  de  
instruções,  que  representem  um  comportamento  padrão,  várias  vezes  
•  Com  estas  estruturas,  escreve-­‐se  as  instruções  uma  única  vez,  e  ela  pode  
ser  executada  várias  vezes  
•  RepeIções  podem  ser  controladas  por:  
–  Condição  
–  Contador  
•  Quando  o  controle  é  por  contador,  a  interrupção  é  prevista  no  instante  em  
que  é  iniciada  a  execução  da  estrutura  de  repeIção  
•  Quando  o  controle  é  por  condição,  deve  haver  uma  expressão  lógica,  e  a  
interrupção  é  controlada  por  meio  do  resultado  desta  expressão  
–  É   imprescindível   que   haja   uma   instrução   dentro   do   bloco   de   instruções   que   permita   a  
alteração  do  valor  lógico  da  condição  
•  As  estruturas  de  repeIção  são  também  conhecidas  como  laços  

141  
Estrutura  de  RepeIção  Enquanto  
•  É  uma  estrutura  que  faz  um  teste  lógico  no  início  de  um  laço,  
verificando   se   é   permiIdo   executar   o   trecho   de   instruções  
subordinado  a  esse  laço  
•  Esta   estrutura   tem   o   seu   funcionamento   controlado   por  
decisão,  isto  é,  uma  condição  
•  Executa   um   determinado   conjunto   de   instruções   enquanto   a  
condição  verificada  for  verdadeira  
•  No   momento   em   que   a   condição   se   torna   falsa,   o  
processamento  é  desviado  para  fora  do  laço  
•  Se   a   condição   for   falsa   logo   de   início,   as   instruções   conIdas  
no  laço  são  ignoradas    

142  
Estrutura  de  RepeIção  Enquanto  
Diagrama  de  Blocos   Português  Estruturado  

enquanto (condição) faça


instruções
fimenquanto

Linguagem  C  

while (condição){
instruções;
}

143  
Estrutura  de  RepeIção  Enquanto  
Exemplo  1  
•  Elaborar   um   algoritmo   que   calcule   a   média  
aritméIca  de  3  notas  de  30  alunos    
•  Diagrama  de  Blocos:  

144  
Estrutura  de  RepeIção  Enquanto  
Exemplo  1  
•  Português  Estruturado:  

programa media
var
cont : inteiro
n1, n2, n3, m : real
inicio
cont ! 1
enquanto (CONT <= 30) faça
escreva “Digite 3 notas”
leia n1, n2, n3
m ! (n1 + n2 + n3) / 3
escreva “Media: ”, m
cont ! cont + 1
fimenquanto
fim   145  
Estrutura  de  RepeIção  Enquanto  
Exemplo  1  
•  Linguagem  C:  
#include <stdio.h>
#include <stdlib.h>
main () {
int cont;
float n1, n2, n3, m;
cont = 1;
while (cont <= 30) {
printf (“Digite 3 notas \n”);
scanf (“%f%f%f”, &n1, &n2, &n3);
m = (n1 + n2 + n3) /3;
printf (“Media: %.2f\n”, m);
cont = cont + 1;
}
system (“PAUSE”);
}
146  
Contador  
•  Um  contador  é  uIlizado  para  contar  o  número  de  vezes  que  um  bloco  de  
instruções  é  executado.  Em  estruturas  de  repeIção,  um  contador  ajuda  a  
contar  quantas  vezes  o  laço  é  executado.  
•  Um   contador   é   uma   variável   que   recebe   ela   mesma   mais   um   valor  
constante.  
       Exemplo:    cont  !  cont  +  1  
•  Um  contador  deve  ser  inicializado  
•  Um  contador  deve  ser  incrementado  
inicialização  
cont ! 1
enquanto (cont <= 30) faça
...
cont ! cont + 1 incremento  
fimenquanto

147  
Estrutura  de  RepeIção  Enquanto  
Exemplo  2  
•  Elaborar   um   algoritmo   que   leia   10   números  
inteiros  posiIvos  e  apresente  na  tela  a  soma  
dos  números  lidos.  
•  Diagrama  de  Blocos:  

148  
Estrutura  de  RepeIção  Enquanto  
Exemplo  2  
•  Português  Estruturado:  

programa soma
var
num, cont, acum : inteiro
inicio
cont ! 1
acum ! 0
enquanto (cont <= 10) faça
escreva “Numero Positivo: ”
leia num
acum ! acum + num
cont ! cont + 1
fimenquanto
escreva “Soma: ”, acum
fim   149  
Estrutura  de  RepeIção  Enquanto  
Exemplo  2  
•  Linguagem  C:  
#include <stdio.h>
#include <stdlib.h>
main () {
int num, cont, acum;
cont = 1;
acum = 0;
while (cont <= 10) {
printf (“Numero Positivo: ”);
scanf (“%d”, &num);
acum = acum + num;
cont = cont + 1;
}
printf (“Soma: %d\n”, acum);
system (“PAUSE”);
}
150  
Acumulador  
•  Um  acumulador,  também  conhecido  como  somador,  é  uIlizado  para  obter  
somatórios.   Em   estruturas   de   repeIção,   um   acumulador   ajuda   a   acumular  
valores  cada  vez  que  um  laço  é  executado.  
•  Um   acumulador   é   uma   variável   que   recebe   ela   mesma   mais   o   valor   de  
outra  variável.  
       Exemplo:    acum  !  acum  +  num  
•  Um  acumulador  deve  ser  inicializado  
•  O  valor  adicionado  ao  acumulador  a  cada  execução  de  laço  é  variável  
–  Diferente  do  contador,  cujo  valor  adicionado  é  sempre  constante  

inicialização  
acum ! 0
enquanto (cont <= 10) faça
...
acum ! acum + num acumulação  
...
fimenquanto  
151  
Estrutura  de  RepeIção  Enquanto  
•  O   Exemplo   2   uIliza   o   pré-­‐conhecimento   da   quanIdade   de   números  
posiIvos   a   serem   lidos   para   calcular   a   soma.   Entretanto,   se   não  
soubéssemos   quantos   números   deveriam   ser   lidos,   o   que   faríamos   para  
controlar  o  laço  de  repeIção?  
•  Precisaríamos   de   um   laço   que   fosse   executado   por   uma   quanIdade  
indeterminada  de  vezes.  
•  Assim,  teríamos  de  encontrar  outro  critério  de  parada,  que  possibilitasse  
que  o  laço  fosse  finalizado  após  o  úlImo  número  posiIvo  (independente  
de  quantos  sejam)  ter  sido  informado.  
•  Isso  pode  ser  feito  uIlizando  um  valor  predefinido  como  finalizador,  a  ser  
informado  após  o  úlImo  número  posiIvo.  

152  
Estrutura  de  RepeIção  Enquanto  
Exemplo  3  
•  Elaborar   um   algoritmo   que   efetue   leituras  
sucessivas   de   números   inteiros   posiIvos   até  
que  um  número  negaIvo  seja  informado.  Ao  
final,   apresentar   a   soma   dos   números  
posiIvos  informados.  
•  Diagrama  de  Blocos:  

153  
Estrutura  de  RepeIção  Enquanto  
Exemplo  3  
•  Português  Estruturado:  

programa soma
var
num, acum : inteiro
inicio
acum ! 0
escreva “Numero: ”
leia num
enquanto (num >= 0) faça
acum ! acum + num
escreva “Numero: ”
leia num
fimenquanto
escreva “Soma: ”, acum
fim   154  
Estrutura  de  RepeIção  Enquanto  
Exemplo  3  
•  Linguagem  C:  
#include <stdio.h>
#include <stdlib.h>
main () {
int num, acum;
acum = 0;
printf (“Numero: ”);
scanf (“%d”, &num);
while (num >= 0) {
acum = acum + num;
printf (“Numero: ”);
scanf (“%d”, &num);
}
printf (“Soma: %d\n”, acum);
system (“PAUSE”);
}
155  
Estrutura  de  RepeIção  Repita  

156  
Estrutura  de  RepeIção  Repita  
•  É  uma  estrutura  que  realiza  um  teste  lógico  no  final  do  laço  
•  Esta   estrutura   tem   o   seu   funcionamento   controlado   por  
decisão,   isto   é,   uma   condição,   porém   executa   um   conjunto   de  
instruções   pelo   menos   uma   vez   antes   de   verificar   a   validade  
da  condição  estabelecida  
•  O   comando   repita   tem   seu   funcionamento   em   senIdo  
contrário   ao   comando   enquanto,   pois   sempre   processa   um  
conjunto   de   instruções   no   mínimo   uma   vez   até   que   a  
condição  seja  verdadeira    
•  Se  a  condição  for  falsa,  o  laço  conInua  
•  Se  a  condição  for  verdadeira,  o  laço  é  encerrado  

157  
Estrutura  de  RepeIção  Repita  
•  Na   Linguagem   C,   o   resultado   da   avaliação   da   condição   é  
interpretado   de   maneira   inversa   ao   Diagrama   de   Blocos/
Português  Estruturado:  
–  Se  a  condição  for  verdadeira,  o  laço  conInua  
–  Se  a  condição  for  falsa,  o  laço  é  encerrado  

158  
Estrutura  de  RepeIção  Repita  
Diagrama  de  Blocos   Português  Estruturado  

repita
instruções
ateque (condição)

Linguagem  C  

do {
instruções;
} while (condição);

159  
Estrutura  de  RepeIção  Repita  
Exemplo  
•  Elaborar   um   algoritmo   que   efetue   a   leitura  
de   uma   série   de   valores,   representando   os  
preços   dos   itens   comprados   por   cliente.   Ao  
final,   apresentar   na   tela   o   total   a   ser   pago.  
Para   finalizar   a   entrada   de   dados   o   usuário  
deve  informar  o  valor  zero.  
•  Diagrama  de  Blocos:  

160  
Estrutura  de  RepeIção  Repita  
Exemplo  
•  Português  Estruturado:  

programa caixa
var
p, s : real
inicio
s ! 0
repita
escreva “Preco: ”
leia p
s = s + p
ateque (p = 0)
escreva “Total: ”, s
fim  

161  
Estrutura  de  RepeIção  Repita  
Exemplo  
•  Linguagem  C:  

#include <stdio.h>
#include <stdlib.h>
int main () {
float p, s;
s = 0;
do {
printf (“Preco: ”);
scanf (“%f”, &p);
s = s + p;
} while (p != 0);
printf (“Total: %.2f\n”, s);
system (“PAUSE”);
}
162  
Estrutura  de  RepeIção  Para  

163  
Estrutura  de  RepeIção  Para  
•  Os   laços   que   possuem   um   número   pré-­‐conhecido   de  
execuções  poderão  ser  processados  por  meio  da  estrutura  de  
repeIção  para  
•  Esta  estrutura  tem  o  seu  funcionamento  controlado  por  uma  
variável  denominada  contador        
•  Executa   um   determinado   conjunto   de   instruções   certo  
número  de  vezes    

164  
Estrutura  de  RepeIção  Para  
Diagrama  de  Blocos  

165  
Estrutura  de  RepeIção  Para  

Português  Estruturado  

para variável de inicio até fim passo incremento faça


instruções
fimpara

Linguagem  C  

for (inicialização, condição, incremento) {


instruções;
}

166  
Estrutura  de  RepeIção  Para  
Exemplo  
•  Elaborar   um   algoritmo   que   calcule   a   média  
aritméIca  de  3  notas  de  30  alunos    
•  Diagrama  de  Blocos:  

167  
Estrutura  de  RepeIção  Para  
Exemplo  
•  Português  Estruturado:  

programa media
var
cont : inteiro
n1, n2, n3, m : real
inicio
para cont de 1 até 30 passo 1 faça
escreva “Digite 3 notas”
leia n1, n2, n3
m ! (n1 + n2 + n3) / 3
escreva “Media: ”, m
fimpara
fim  

168  
Estrutura  de  RepeIção  Para  
Exemplo  
•  Linguagem  C:  

#include <stdio.h>
#include <stdlib.h>
int main () {
int cont;
float n1, n2, n3, m;
for (cont = 1; cont <= 30; cont++) {
printf (“Digite 3 notas \n”);
scanf (“%f%f%f”, &n1, &n2, &n3);
m = (n1 + n2 + n3) /3;
printf (“Media: %.2f\n”, m);
}
system (“PAUSE”);
}
169  
Linguagem  C  
Operadores  de  Incremento  (++)  e  Decremento  (-­‐-­‐)  
•  Considere   os   operadores   abaixo   que   não   são   comuns   em   outras  
linguagens:  
++ incrementa de 1 seu operando
-- decrementa de 1 seu operando
•  O  operador  de  incremento  (++)  incrementa  de  um  seu  operando.  Exemplo:  
   cont++        equivale  a        cont  =  cont  +  1  
•  O   operador   de   decremento   (-­‐-­‐)   decrementa   de   um   seu   operando.  
Exemplo:  
   cont-­‐-­‐        equivale  a        cont  =  cont  -­‐  1  
•  Os    operadores  de  incremento  e  decremento  devem  ser  usados  somente  
com   operandos   que   são   variáveis,   isto   é,   o   operando   não   pode   ser   um  
valor  constante.  

170  
Bibliografia  
•  Manzano,   J.   A.   N.   G.;   Oliveira,   J.   F.   Algoritmos:   Lógica   para  
Desenvolvimento   de   Programação   de   Computadores.   21ª   ed.  
Ed.  Érica,  2007.  
•  Forbellone,   A.   L.   V.   Lógica   de   Programação.   2ª   ed.   Ed.   Makron  
Books,  2000.  
•  Evaristo,  J.  Programando  com  PASCAL.  2ª  ed.  2004.    
Download:  hŽp://professor.ic.ufal.br/jaime/livros/pascal.htm  
•  Mizrahi,   V.   V.   Treinamento   em   Linguagem   C   –   Módulo   I.   Ed.  
Makron  Books,  1990.  
•  Schildt,  H.  C  –  Completo  e  Total.  Ed.  Makron  Books,  1995.  

171  

Você também pode gostar