Buscar

ALGORISMO E PROGRAMAÇÃO APLICADA

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 126 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 126 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 126 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

ALGORITMOS E 
PROGRAMAÇÃO APLICADA
PROF. ME. RAFAEL BARBOSA
Reitor: 
Prof. Me. Ricardo Benedito de 
Oliveira
Pró-reitor: 
Prof. Me. Ney Stival
Gestão Educacional:
Prof.a Ma. Daniela Ferreira Correa
PRODUÇÃO DE MATERIAIS
Diagramação:
Alan Michel Bariani
Thiago Bruno Peraro
Revisão Textual:
Felipe Veiga da Fonseca
Letícia Toniete Izeppe Bisconcim 
Luana Ramos Rocha
Produção Audiovisual:
Márcio Alexandre Júnior Lara
Marcus Vinicius Pellegrini
Osmar da Conceição Calisto
Gestão de Produção: 
Kamila Ayumi Costa Yoshimura
Fotos: 
Shutterstock
© Direitos reservados à UNINGÁ - Reprodução Proibida. - Rodovia PR 317 (Av. Morangueira), n° 6114
 Prezado (a) Acadêmico (a), bem-vindo 
(a) à UNINGÁ – Centro Universitário Ingá.
 Primeiramente, deixo uma frase de 
Sócrates para reflexão: “a vida sem desafios 
não vale a pena ser vivida.”
 Cada um de nós tem uma grande 
responsabilidade sobre as escolhas que 
fazemos, e essas nos guiarão por toda a vida 
acadêmica e profissional, refletindo diretamente 
em nossa vida pessoal e em nossas relações 
com a sociedade. Hoje em dia, essa sociedade 
é exigente e busca por tecnologia, informação 
e conhecimento advindos de profissionais que 
possuam novas habilidades para liderança e 
sobrevivência no mercado de trabalho.
 De fato, a tecnologia e a comunicação 
têm nos aproximado cada vez mais de pessoas, 
diminuindo distâncias, rompendo fronteiras e 
nos proporcionando momentos inesquecíveis. 
Assim, a UNINGÁ se dispõe, através do Ensino a 
Distância, a proporcionar um ensino de qualidade, 
capaz de formar cidadãos integrantes de uma 
sociedade justa, preparados para o mercado de 
trabalho, como planejadores e líderes atuantes.
 Que esta nova caminhada lhes traga 
muita experiência, conhecimento e sucesso. 
Prof. Me. Ricardo Benedito de Oliveira
REITOR
33WWW.UNINGA.BR
U N I D A D E
01
SUMÁRIO DA UNIDADE
INTRODUÇÃO ..............................................................................................................................................................5
1. CONCEITOS BÁSICOS DE HARDWARE E SOFTWARE DE UM COMPUTADOR.................................................6
1.1 HARDWARE ............................................................................................................................................................8
1.2 UNIDADE CENTRAL DE PROCESSAMENTO - UCP ...........................................................................................8
1.3 MEMÓRIAS ...........................................................................................................................................................8
1.4 PERIFÉRICOS DE ENTRADA E SAÍDA .................................................................................................................8
1.5 SISTEMA OPERACIONAL .....................................................................................................................................9
2. SISTEMA DE NUMERAÇÃO: DECIMAL, BINÁRIO, OCTAL E HEXADECIMAL ....................................................9
2.1 CONVERSÃO DECIMAL PARA BINÁRIOS .......................................................................................................... 10
2.2 CONVERTER BINÁRIO EM DECIMAL ............................................................................................................... 12
CONCEITOS BÁSICOS DA CIÊNCIA DA COMPUTAÇÃO, 
ÁLGEBRA DE BOOLE E FUNDAMENTOS DA LÓGICA 
DE PROGRAMAÇÃO
PROF. ME. RAFAEL BARBOSA
ENSINO A DISTÂNCIA
DISCIPLINA:
ALGORITMOS E PROGRAMAÇÃO
APLICADA
4WWW.UNINGA.BR
2.3 CONVERTER DECIMAL PARA OCTAL ................................................................................................................ 13
2.4 CONVERTER DECIMAL PARA HEXADECIMAL ................................................................................................. 14
2.5 CONVERTER BINÁRIO PARA OCTAL ................................................................................................................. 15
2.6 CONVERTER BINÁRIO PARA HEXADECIMAL .................................................................................................. 16
3. TABELA ASCII ....................................................................................................................................................... 16
4. ÁLGEBRA DE BOOLE ........................................................................................................................................... 20
4.1 HISTÓRIA DA ÁLGEBRA DE BOOLE ................................................................................................................. 20
4.2 FUNÇÕES DE BOOLE .......................................................................................................................................... 21
4.3 FUNÇÕES BOOLEANAS BÁSICAS E SUAS TABELAS VERDADES ...................................................................23
4.4 POSTULADOS DA ÁLGEBRA DE BOOLE ......................................................................................................... 25
4.5 PROPRIEDADES DA ÁLGEBRA DE BOOLE ..................................................................................................... 26
4.5.1 TEOREMAS DE ÁLGEBRA DE BOOLE ........................................................................................................... 26
5. FUNDAMENTOS DA LÓGICA DE PROGRAMAÇÃO .............................................................................................27
5.1 ALGORITMOS ......................................................................................................................................................27
5.2 CONSTRUÇÃO DE FLUXOGRAMAS ................................................................................................................. 28
5WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 1
ENSINO A DISTÂNCIA
INTRODUÇÃO
A onda de novas tecnologias computacionais tende a gerar novos tipos de sistemas, 
novas formas de criar ferramentas, novas formas de dados e assim por diante, que muitas vezes 
derrubaram seus predecessores. O que pareceu ser a evolução é, de certa forma, uma série de 
revoluções. Entretanto o desenvolvimento de tecnologias de computação é mais do que uma 
cadeia de inovação - um processo que tem sido uma característica das tecnologias físicas que 
moldam nosso mundo. Por exemplo, existe uma cadeia de inspiração da roda hidráulica, 
da máquina a vapor, ao motor de combustão interna. Subjacente a isso, é um processo de 
habilitação. A indústria de construção de motores a vapor produziu as habilidades, materiais e 
ferramentas utilizados na construção dos primeiros motores de combustão interna.
Na computação, algo mais rico está acontecendo, novas tecnologias emergem, não só 
pela substituição dos predecessores, mas também pela envolvente. A computação está criando 
plataformas em que se reinventa. Nesta unidade iremos explorar alguns conceitos básicos de 
ciência da computação e como que interpretar a linguagem de máquina (binários) e a lógica que 
norteia a computação.
6WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 1
ENSINO A DISTÂNCIA
1. CONCEITOS BÁSICOS DE HARDWARE E SOFTWARE 
DE UM COMPUTADOR
A evolução dos computadores pode ser considerada desde o surgimento do ENIAC 
(Eletronic Numerical Integrator and Computer - Computador Integrador Numérico Eletrônico), 
como o primeiro computador digital de grande escala, até o Tianhe-2, o supercomputador chinês 
que alcançou a marca de 33,86 petaflop/s, ou seja, 33,8615 operações por segundo. Para se ter 
uma ideia, isso representa um equipamento 1 milhão de vezes mais rápido que um computador 
comercial comum. Esses avanços foram graças às descobertas e pesquisas no campo da eletrônica:
• Em 1904, o inglês John Ambrose Fleming (1849-1945) desenvolveu a válvula termiônica, 
também chamadavárias vezes de válvula a vácuo, como podemos observar na Figura 1. As 
válvulas eram utilizadas como componente de controle para integrar dispositivos biestáveis (com 
dois estados estáveis ON/OFF).
Figura 1 - Válvula Termiônica. Fonte: Domínio Público (2017).
• Na década de 50, com aperfeiçoamento das técnicas, foi possível utilizar os semicondutores, 
para o desenvolvimento do diodo e o transistor, permitindo a redução do tamanho de circuitos e 
aumentando a confiabilidade dos equipamentos.
Figura 2 – Transistor. Fonte: King of Wallpapers (2017).
7WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 1
ENSINO A DISTÂNCIA
• Nos anos seguintes, começou a miniaturização com os circuitos integrados, composto 
basicamente por dispositivos semicondutores sobre um substrato fino de material semicondutor 
(BRIAN, 1998).
Figura 3 - Circuito integrado. Fonte: Wiki Wand (2017).
• Na década de 70 surgiu o microprocessador, que conseguiu implementar toda a CPU de 
um computador num único elemento integrado (Friederich e Korbs, 2014).
A maioria dos computadores segue a arquitetura de von Neumann, que descreve um 
computador de três partes principais: CPU (Computer Processing Unit - Unidade Central de 
Processamento), Memória e dispositivos de entrada e saída. Esses componentes podem ser vistos 
na Figura 4.
Figura 4 - Diagrama do princípio do funcionamento do computador. Fonte: Doc Player (2017).
8WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 1
ENSINO A DISTÂNCIA
1.1 Hardware
Pela definição usual, Hardware é a parte física do computador, formado por componentes 
eletrônicos, como por exemplo, mouse, teclado, monitor, caixa de som dentre outros. Não 
necessariamente apenas componentes externos, como também os internos, por exemplo, 
memória RAM, placa de vídeo, placa de rede e etc.
1.2 Unidade Central de Processamento - UCP
Basicamente é um circuito eletrônico, conhecido como processador, tem a função de 
executar as instruções de um programa, executando as operações aritméticas, lógicas e o controle 
das entradas e saídas especificadas pela instrução (WEIK, 1971). 
A forma, a concepção e a implementação da UCP mudaram ao longo de sua história, 
mas sua operação fundamental permanece inalterada. Os componentes principais da UCP 
são a Unidade Lógica Aritmética (ULA), que tem a função de executar as operações lógicas e 
aritméticas; a Unidade de Controle (UC ou CC), que tem como atribuição direcionar a operação 
do processador para responder as instruções do programa; e os registradores, que têm como 
função armazenar os dados para o processamento. Alguns autores dizem que os registradores se 
incluem na mesma categoria das memórias cache. 
1.3 Memórias
Na computação, memória refere-se aos dispositivos de hardware do computador usados 
para armazenar informações para uso imediato. A memória opera a uma velocidade elevada, por 
exemplo, a memória de acesso aleatório (RAM), que armazena grandes quantidades de dados. 
Nesta subseção, iremos ver os dois tipos de memória, a principal e a secundária.
Memória Principal:
• Memória RAM (Random-access memory - Memória de Acesso Aleatório): armazena as 
instruções do programa para aumentar a velocidade, ou seja, permite que os itens de dados sejam 
lidos ou escritos independentes da localização física dos dados da memória. 
• Memória ROM (Random-Only Memory - Memória exclusiva para leitura): é um tipo de 
memória não volátil. Os dados são armazenados permanentemente ou não, serve para armazenar 
informações do firmware (software que está intimamente ligado ao hardware).
Memória Secundária:
• As memórias secundárias ou auxiliares são um meio para guardar informações que não 
podem ser perdidas, mesmo quando o computador é desligado por qualquer motivo. Este tipo 
de memória é conhecido ainda como memória de massa ou externa (Frederich e Korb, 2014). 
Alguns exemplos, disco magnéticos (HD) ou flexível (disquete), CD-ROM e Pen drive.
1.4 Periféricos de Entrada e Saída
São dispositivos que permitem a comunicação com o computador. Todos esses dispositivos 
são processados pela UCP.
9WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 1
ENSINO A DISTÂNCIA
• Dispositivos de entrada: são utilizados para introduzir informações para o computador. 
Exemplos: teclado, mouse, leitora de código de barras, scanner.
• Dispositivos de saída: são utilizados para exibir informações armazenadas ou processadas 
pelo computador. Exemplos: impressora, Display, mostradores digitais.
1.5 Sistema Operacional
Basicamente, o Sistema Operacional (SO) é um software de sistema que gerencia recursos 
de hardware e software e fornece serviços comuns para os programas de computador. Todos 
os programas de computador, salvo o firmware, necessitam de um sistema operacional para 
funcionar.
Os sistemas operacionais utilizam um recurso chamado (time-sharing), esse recurso 
serve para planejar tarefas para uso eficiente do processador, armazenamento de dados em massa, 
impressão e outros recursos.
Para as funções de hardware como entrada e saída e alocação de memória, o sistema 
operacional atua como intermediário entre os programas e o hardware do computador 
(STALLINGS, 2005). Embora o código do programa seja normalmente executado diretamente 
pelo hardware, o programa frequentemente faz chamada para o SO ou até mesmo é interrompido 
por ele. 
Os sistemas operacionais (SO) de desktop (referência ao computador de mesa) e notebooks 
mais utilizados, de acordo com o Global Stats (2015), no período de 2015, é dominante o SO da 
Microsoft, o Windows, com uma participação do mercado de cerca de 82%. O SO da Apple Inc. 
está em segundo lugar (9,8%), e o Linux o SO gratuito está em terceiro com 1,5%. Ainda de 
acordo com a Global Stats, o mercado de sistema operacionais de celulares, o Android do Google 
é dominante, com 87,5%, em segundo o iOS da Apple com 12,1%, os outros SO somam 0,4%. No 
setor de supercomputadores e servidores é dominante o sistema operacional Linux.
2. SISTEMA DE NUMERAÇÃO: DECIMAL, BINÁRIO, 
OCTAL E HEXADECIMAL
Com o surgimento da computação no campo da multimídia, é comum termos um 
olhar de máquinas de manipulação de texto, vídeos e imagens, mas realmente os computadores 
funcionam manipulando apenas números. Sons e imagens são interpretados pelo computador 
como um conjunto de números.
De acordo com Damas (2011), tudo começou com a invenção do bit (binary digital), que 
pode ser representado por dois estados: ligado e desligado. Geralmente ligado (1) e desligado (0), 
um bit serve perfeitamente para indicar o sexo de um determinado indivíduo, pois existe o sexo 
masculino e o feminino:
• 1 - Feminino
• 0 - Masculino
Se pretendermos representar o estado civil de uma pessoa, o bit já não chega, pois 
existem vários estados: solteiro, casado, divorciado e viúvo. Precisamos juntar dois bits de forma 
a representar o estado civil:
• 00 - Solteiro
• 01 - Casado
• 10 - Divorciado
10WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 1
ENSINO A DISTÂNCIA
• 11 - Viúvo
No entanto, em vias de normas, podemos juntar apenas grupos de 8 bits, o que passa a 
ser chamado de byte.
O byte representa uma letra, sinal de pontuação, pixel e outras informações que o 
computador processa. Para que isso ocorra, os computadores utilizam uma tabela que combina 
números binários com símbolos, a tabela ASCII (American Standard Code for Information 
Interchange), que iremos ver mais adiante ainda nesta unidade.
2.1 Conversão Decimal para Binários
O sistema decimal de numeração (base 10) possui dez possíveis valores (0,1,2,3,4,5,6,7,8,9) 
para cada casa numérica. Já o sistema binário possui dois valores (0,1) para cada casa numérica. Já 
que apenas o sistema binário é a linguagem interna dos computadores, o programador deve saber 
converter decimal para binário. Existem vários métodos para a conversão,no entanto, vamos 
ensinar o método mais prático, que é a divisão curta por dois com resto, por exemplo: 
Converter 1810 para binário. 
Solução: para converter esse número decimal em binário, faça a divisão por dois e escreva 
o resto.
1810 Resultado Fracionada? Binário
18/2 9 Não, é uma divisão 
exata
0
9/2 4,5 Sim, divisão 
fracionada
1
4/2 2 Não, é uma divisão 
exata 
0
2/2 1 Não, é uma divisão 
exata
0
1/2 0,5 Sim, divisão 
fracionada
1
1810 = 100102
Escreva os binários de baixo para cima
11WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 1
ENSINO A DISTÂNCIA
b) Converter 12510 para binário:
12510 Resultado Binário
125/2 62,5 1
62/2 31 0
31/2 15,5 1
15/2 7,5 1
7/2 3,5 1
3/2 1,5 1
1/2 0,5 1
12510 = 11111012
c) Converter 19210 para binário:
19210 Resultado Binário
192/2 96 0
96/2 48 0
48/2 24 0
24/2 12 0
12/2 6 0
6/2 3 0
3/2 1,5 1
1/2 0,5 1
19210 = 110000002
A conversão não parece ser difícil, mas deve-se ter atenção. São muitos números 
e muitas variáveis, se houver erros, a leitura final ficará comprometida!
12WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 1
ENSINO A DISTÂNCIA
Na tabela a seguir observe os decimais convertidos em binários.
Decimal Binário
0 00000
1 00001
2 00010
3 00011
4 00100
5 00101
6 00110
7 00111
8 01000
9 01001
Tabela 1 - Decimal e seu valor correspondente em binário. Fonte: o autor.
2.2 Converter Binário em Decimal 
Se analisarmos a tabela 1, vemos que os múltiplos de 2 estão todos colocados 
estrategicamente, contendo um dos bits e todos os outros zeros. Por exemplo, o decimal 9, observe 
se enumerarmos da esquerda para direita, cada casa é uma posição, que pode representar dois 
valores (0 ou 1), ou seja base 2. Vamos verificar o exemplo abaixo: 
010012
Binário 0 1 0 0 1
24 23 22 21 20
Resultado 0 8 0 0 1
A soma é igual: 0+8+0+0+1 = 9 
Outro exemplo, o mesmo no caso:
100102
Binário 1 0 0 1 0
24 23 22 21 20
Resultado 16 0 0 2 0
A soma é igual: 16+0+0+2+0 = 18
13WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 1
ENSINO A DISTÂNCIA
2.3 Converter decimal para octal
O octal se tornou amplamente utilizado na computação pois era ideal em converter 
sistemas binários uma vez que cada dígito octal pode ser escrito como um único número binário 
de três dígitos. Assim, foi possível diminuir custos de display e calculadoras (PRICE; PESELNICK, 
1987).
Basicamente é um sistema numérico de base 8, (0,1,2,3,4,5,6 e 7), para converter um 
número decimal em octal é simples. 
Exemplos:
1810 para octal:
Podemos verificar que 1810 = 228
Caso esteja com dúvidas tire a prova real:
2×81 + 2× 80 = 16 + 2 = 18
b) 1610 para octal:
Para não ficar muito confuso, na operação, coloque apenas o resto.
1610 = 208
c) 9610 para octal:
9610 = 1408
Caso esteja com dúvidas, faça a prova real:
1x 82 +4 x 81 + 0 x 80 = 64 + 32 + 0 = 96
14WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 1
ENSINO A DISTÂNCIA
Decimal Octal
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 10
9 11
Tabela 2 - Decimal para octal. Fonte: o autor.
2.4 Converter Decimal Para Hexadecimal
O sistema numérico hexadecimal tem a base numérica 16, possui 16 símbolos possíveis 
para representar um único dígito (0,1,2,3,4,5,6,7,8,9, A, B, C, D, E, F). Para converter precisamos 
do auxílio da tabela a seguir. 
Decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Hexadecimal 0 1 2 3 4 5 6 7 8 9 A B C D E F
 
Os números hexadecimais são amplamente utilizados por profissionais da computação, 
pois é mais conveniente que o binário, mais adiante iremos verificar a razão disso. Agora vamos 
ver um exemplo.
Converter 1810 em hexadecimal
Utilizaremos o mesmo princípio, da operação para converter em octal, mas só que agora 
com a base 16.
Então 1810 = 1216
b) Converter 102410 em hexadecimal
Para números decimais muito grandes o sistema hexadecimal é vantajoso veja:
102410 = 40016
15WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 1
ENSINO A DISTÂNCIA
b) Converter 12510 em hexadecimal:
12510 = 7D
D = 13, como podemos ver na tabela 2.
2.5 Converter Binário Para Octal
É extremamente simples converter Binário para Octal, temos que observar que a base 
octal (8 valores) pode ser representada por 3 bits. Podemos confirmar isso visualizando a tabela 
a seguir:
Octal Binário
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111
Tabela 3 - Octal para binário. Fonte: o autor.
Exemplos:
1001102 para octal
Vamos agrupar os bits 3 em 3:
De acordo com a tabela (100) = 4 e (110) = 6
b) 101101012 para octal:
101101012 = 2658
16WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 1
ENSINO A DISTÂNCIA
2.6 Converter Binário Para Hexadecimal
Tem o mesmo princípio que o Octal, porém a base não é a mesma, hexadecimal (16 
valores), nesse caso deve-se agrupar os bits em grupos de 4.
Hexa Binário Hexa Binário
0 0000 8 1000
1 0001 9 1001
2 0010 A 1010
3 0011 B 1011
4 0100 C 1100
5 0101 D 1101
6 0110 E 1110
7 0111 F 1111
Tabela 4 – Converter Binário para Hexadecimal. Fonte: o autor.
Exemplos:
1001102 para Hexadecimal:
Observe que foram inseridos dois zeros 
no lado esquerdo, para fazer agrupamento
de 4 bits.
1001102 = 2616
b) 101101012 para Hexadecimal:
101101012 = B516
3. TABELA ASCII 
A tabela ASCII (American Standard Code for Information Interchange - Código Padrão 
Americano para Intercâmbio de Informações), representa texto em computadores, equipamentos 
de telecomunicação e outros dispositivos. A maioria dos dispositivos modernos de codificação se 
baseiam no ASCII (MACKENZIE, 1980).
A ASCII foi desenvolvida a partir do código telegráfico. Seu primeiro uso comercial foi 
como código de teleimpressor de sete bits, promovido pelos serviços de dados da empresa Bell. 
O trabalho sobre o padrão ASCII começou nos anos 60, três anos depois foi publicada a primeira 
versão e foi submetida a uma revisão no final dos anos 60, e passou por uma atualização em 
1986. Originalmente baseado no alfabeto inglês, ASCII codifica 128 caracteres especificados em 
inteiros de sete bits. Os caracteres codificados podem ser vistos na tabela a seguir.
17WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 1
ENSINO A DISTÂNCIA
Caractere Decimal Hexadecimal Binário Comentário
NUL 00 00 0000 0000 Caracter Nulo
SOH 01 01 0000 0001 Começo de cabeçalho de 
transmissão
STX 02 02 0000 0010 Começo de texto
ETX 03 03 0000 0011 Fim de texto
EOT 04 04 0000 0100 Fim de transmissão
ENQ 05 05 0000 0101 Interroga
ACK 06 06 0000 0110 Confirmação
BEL 07 07 0000 0111 Sinal sonoro
BS 08 08 0000 0100 Volta um caracter
HT 09 09 0000 1001 Tabulação Horizontal
LF 10 0A 0000 1010 Próxima linha
VT 11 0B 0000 1011 Tabulação Vertical
FF 12 0C 0000 1100 Próxima Página
CR 13 0D 0000 1101 Início da Linha
SO 14 0E 0000 1110 Shift-out
SI 15 0F 0000 1111 Shift-in
DLE 16 10 0001 0000 Data link escape
D1 17 11 0001 0001 Controle de dispositivo
D2 18 12 0001 0010 Controle de dispositivo
D3 19 13 0001 0011 Controle de dispositivo
D4 20 14 0001 0100 Controle de dispositivo
NAK 21 15 0001 0101 Negativa de Confirmação
SYN 22 16 0001 0110 Synchronous idle
ETB 23 17 0001 0111 Fim de transmissão de bloco
CAN 24 18 0001 1000 Cancela
EM 25 19 0001 1001 Fim de meio de transmissão
SUB 26 1A 0001 1010 Substitui
ESC 27 1B 0001 1011 Escape
FS 28 1C 0001 1100 Separador de Arquivo
GS 29 1D 0001 1101 Separador de Grupo
RS 30 1E 0001 1110 Separador de registro
US 31 1F 0001 1111 Separador de Unidade
Tabela 5 – ASCII. Fonte: Mackenzie (1980).
18WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 1
ENSINO A DISTÂNCIA
Espaço 32 20 0010 0000
! 33 21 0010 0001
“ 34 22 0010 0010
# 35 23 0010 0011
$ 36 24 0010 0100
% 37 25 0010 0101
& 38 26 0010 0110
‘ 39 27 0010 0111
( 40 28 0010 1000
) 41 29 0010 1001
* 42 2A 0010 1010
+ 43 2B 0010 1011
, 44 2C 00101100
- 45 2D 0010 1101
. 46 2E 0010 1110
/ 47 2F 0010 FFFF
0 48 30 0011 0000
1 49 31 0011 0001
2 50 32 0011 0010
3 51 33 0011 0011
4 52 34 0011 0100
5 53 35 0011 0101
6 54 36 0011 0110
7 55 37 0011 0111
8 56 38 0011 1000
9 57 39 0011 1001
: 58 3A 0011 1010
; 59 3B 0011 1011
< 60 3C 0011 1100
= 61 3D 0011 1101
> 62 3E 0011 1110
? 63 3F 0011 1111
@ 64 40 0100 0000
A 65 41 0100 0001
B 66 42 0100 0010
C 67 43 0100 0011
D 68 44 0100 0100
19WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 1
ENSINO A DISTÂNCIA
E 69 45 0100 0101
F 70 46 0100 0110
G 71 47 0100 0111
H 72 48 0100 1000
I 73 49 0100 1001
J 74 4A 0100 1010
K 75 4B 0100 1011
L 76 4C 0100 1100
M 77 4D 0100 1101
N 78 4E 0100 1110
O 79 4F 0100 1111
P 80 50 0101 0000
Q 81 51 0101 0001
R 82 52 0101 0010
S 83 53 0101 0011
T 84 54 0101 0100
U 85 55 0101 0101
V 86 56 0101 0110
W 87 57 0101 0111
X 88 58 0101 1000
Y 89 59 0101 1001
Z 90 5A 0101 1010
[ 91 5B 0101 1011
\ 92 5C 0101 1100
] 93 5D 0101 1101
^ 94 5E 0101 1110
_ 95 5F 0101 1111
` 96 60 0110 0000
a 97 61 0110 0001
b 98 62 0110 0010
c 99 63 0110 0011
d 100 64 0110 0100
e 101 65 0110 0101
f 102 66 0110 0110
g 103 67 0110 0111
h 104 68 0110 1000
i 105 69 0110 1001
20WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 1
ENSINO A DISTÂNCIA
j 106 6A 0110 1010
k 107 6B 0110 1011
l 108 6C 0110 1100
m 109 6D 0110 1101
n 110 6E 0110 1110
o 111 6F 0110 1111
p 112 70 0111 0000
q 113 71 0111 0001
r 114 72 0111 0010
s 115 73 0111 0011
t 116 74 0111 0100
u 117 75 0111 0101
v 118 76 0111 0110
w 119 77 0111 0111
x 120 78 0111 1000
y 121 79 0111 1001
z 122 7A 0111 1010
{ 123 7B 0111 1011
| 124 7C 0111 1100
} 125 7D 0111 1101
~ 126 7E 0111 1110
DELETE 127 7F 0111 1111
Tabela 6 – Caracteres. Fonte: Mackenzie (1980).
Cabe lembrar que o ASCII reserva 32 códigos (0 - 31) para caracteres de controle (veja 
a coluna de comentários), originalmente destinados a não representar informações imprimíveis, 
mas sim para dispositivos de controle (como impressoras) que fazem o uso do ASCII. 
4. ÁLGEBRA DE BOOLE
4.1 História da Álgebra de Boole
A álgebra de Boole antecede os desenvolvimentos modernos no campo da álgebra abstrata 
e na lógica matemática, no entanto está intimamente ligada às origens de ambos os campos 
(DUNN; HARDEGREE, 2001). 
Em 1847, dois grandes trabalhos inovadores foram publicados por matemáticos 
britânicos: Lógica Formal por Augustus de Morgan (1806-1871) e a Análise Matemática da 
Lógica por George Boole (1815-1864). Ambos os autores procuraram expandir os limites da 
lógica tradicional, desenvolvendo um método geral para representar e manipular inferências 
logicamente válidas.
21WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 1
ENSINO A DISTÂNCIA
Embora de natureza explicitamente algébrica, a abordagem audaz e original de Boole levou 
a um sistema de álgebra muito estranho. Em seu trabalho publicado no livro “Uma Investigação 
das Leis do Pensamento”, publicado em 1854, Boole explorou essa álgebra estranha e verificou que 
seu sistema se assemelhava e divergia da álgebra tradicional. Apesar de não ter sido bem recebido 
na época, posteriormente tornou-se um campo de estudo em matemática e uma ferramenta 
poderosa na concepção e estudo de circuitos eletrônicos e arquitetura de computadores. 
Na década de 1930, ao estudar circuitos de comutação, Claude Shannon (1916 - 2001), 
matemático e engenheiro eletrônico estadunidense, conhecido como pai da teoria da informação, 
observou que também se poderia aplicar as regras da álgebra de Boole na configuração de 
circuitos de comutação, como uma maneira de analisar e projetar circuitos por meios algébricos 
em termos de porta lógicas. A implementação eficiente das funções booleanas, para resolução 
de problemas fundamentais em circuitos lógicos combinacionais, fez desenvolver as modernas 
ferramentas de automação, permitindo o desenvolvimento da computação.
4.2 Funções de Boole
O estudo da Álgebra de Boole passa pela definição de uma série de símbolos, com a 
finalidade de formalização de expressões matemáticas para análise mais adequada de suas funções. 
Enquanto a álgebra tradicional opera com relações quantitativas, a álgebra de Boole opera 
com relações lógicas. As variáveis booleanas são representadas por letras que podem assumir 
apenas dois valores (0 ou 1), e as variáveis da álgebra tradicional representam números reais. 
 Vamos considerar dois operadores “+” e “”, soma e multiplicação, como ficaria esses 
operadores na álgebra booleana? Veja na tabela a seguir.
Operador Álgebra Tradicional Álgebra Booleana
“+” Soma “OR” ou “OU”
“” Multiplicação “AND” ou “E”
Tabela 7 - Operadores da álgebra tradicionais e booleana. Fonte: o autor.
Verificando a tabela, podemos perceber que a álgebra booleana não exige uma resposta 
numérica, contudo, busca uma conclusão lógica de alguma expressão. Vamos analisar o exemplo 
a seguir na Figura 5:
Figura 5 - Circuito elétrico simples com chave tipo switch. Fonte: o autor.
22WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 1
ENSINO A DISTÂNCIA
Para representarmos o estado da variável binária, utilizamos um procedimento chamado 
tabela verdade. A tabela a seguir representa a função binária . Número de variáveis binárias é 4, 
logo a tabela tem 24 = 16 linhas.
a b c d S
0 0 0 0 0
0 0 0 1 0
0 0 1 0 0
0 0 1 1 1
0 1 0 0 0
0 1 0 1 0
0 1 1 0 0
0 1 1 1 1
1 0 0 0 0
1 0 0 1 0
1 0 1 0 0
1 0 1 1 1
1 1 0 0 1
1 1 0 1 1
1 1 1 0 1
1 1 1 1 1
Tabela 8 - verdade da função S = f(a,b,c,d) = a . b + c . d . Fonte: o autor.
Em um circuito elétrico simples, para ligar a lâmpada basta fechar os interruptores 
(a e b) ou (c e d). Qual a função lógica formada por variáveis binárias que representa 
esse circuito? 
Lembrando que as variáveis na álgebra booleana podem representar dois números 
(0 ou 1). Logo a função que representa esse circuito é:
S = f(a,b,c,d) = a·b + c·d 
23WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 1
ENSINO A DISTÂNCIA
4.3 Funções Booleanas básicas e suas tabelas verdades
A seguir, iremos estudar as funções booleanas básicas e as respectivas tabelas verdades:
• Função Igualdade:
S(a) = a 
a S
0 0
1 1
• Função União (OR ou OU) - Soma lógica:
S (a,b) = a+b
a b S
0 0 0
0 1 1
1 0 1
1 1 1
• Função intersecção (AND ou E) - Multiplicação lógica:
S (a,b) = a . b
a b S
0 0 0
0 1 0
1 0 0
1 1 1
24WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 1
ENSINO A DISTÂNCIA
• Função negação (NOT ou N): 
S (a) = α
a S
0 1
1 0
• Função da negação da intersecção (NAND ou NE):
S (a,b) = a · b
a b S
0 0 1
0 1 1
1 0 1
1 1 0
• Função negação da reunião (NOR ou NOU):
S(a,b) = a + b
a b S
0 0 1
0 1 0
1 0 0
1 1 0
25WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 1
ENSINO A DISTÂNCIA
• Função OR ou OU exclusivo (XOR ou XOU) ():
S(a,b) = a⋅b + a⋅b
S(a,b) = a⊕b
a b S
0 0 0
0 1 1
1 0 1
1 1 0
4.4. Postulados da Álgebra de Boole
Por meio dos postulados e teoremas, é possível simplificar as expressões lógicas.
Seguem os postulados e teoremas de acordo com Daghlin (1995):
Postulado 1 - A soma lógica de uma variável (a) mais 1 é sempre 1.
Postulado 2 - A soma lógica de uma variável mais um valor lógico 0 sempre será igual a 
variável.
Postulado 3 - O produto lógico de uma variável por um valor lógico 1 sempre será a 
variável.
Postulado 4 - O produto lógico de uma variável por um valor lógico 0 será sempre 0.
Postulado 5 - A soma lógica ou o produto de duas variáveis iguais é igual a própria variável.
Postulado 6 - A soma lógica de uma variável mais a negação da mesma é sempre 1.
Postulado 7 - O produto lógico de uma variável pela negação da mesma é sempre 1.
Postulado 8 - A variável negada duas vezes (ou par de vezes) fica sempre constante.
 
26WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 1
ENSINO A DISTÂNCIA
Postulado 9 - Se dois membros de uma igualdade forem negados, não sofrerá alteração, 
ou seja:
4.5 Propriedades da Álgebra de Boole
 
Dentro da álgebra de Boole existem três tipos de propriedades: a comutativa, associativa 
e a distributiva:
• Comutativa
a+b = b+a
a b = b a
• Associativa
a + (b + c) = (a + b) + c = a + b + c 
a (bc) =(ab)c = abc 
• Distributiva
a (b + c) = ab + ac
4.5.1 Teoremas de Álgebra de Boole
Os teoremas são propostos para simplificações em álgebra booleana, são no total três 
teoremas fundamentais, o terceiro foi formulado pelo matemático De Morgan um dos responsáveis 
pelo desenvolvimento da lógica:
• Teorema 1
• Teorema 2
• Teorema 3 de De Morgan:
27WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 1
ENSINO A DISTÂNCIA
5. FUNDAMENTOS DA LÓGICA DE PROGRAMAÇÃO
Os computadores mais antigos foram frequentemente programados sem a ajuda de uma 
linguagem de programação, a inserção dos códigos era geralmente na forma binária com cartões 
perfurados ou fita magnética, ou, alternando interruptores no painel frontal do computador. As 
linguagens de máquinas foram posteriormente substituídas pelas linguagens de programação, 
com o intuito de facilitar no desenvolvimento do programa. Para entendermos o funcionamento 
da lógica de programação é preciso saber alguns conceitos, que falaremos adiante.
5.1 Algoritmos 
De acordo com Salvetti (1999), o algoritmo é uma sequência finita de instruções ou 
operações cuja execução, em tempo finito, resolve um problema computacional, qualquer que 
seja sua instância. 
Sobre a origem da palavra Algoritmo, encontra-se no sobrenome, Al-Khwarizmi, do 
matemático persa Mohamed ben Musa que viveu no século IX. Além de matemático, também era 
astrônomo, membro da “Casa da Sabedoria”, uma academia de cientistas em Bagdá (LOUREIRO, 
2010). A álgebra foi introduzida na Europa ocidental por meio dos seus trabalhos, cujas obras 
foram traduzidas no ocidente no século XII, uma dessas obras falava sobre o sistema decimal.
Um algoritmo é formalmente uma sequência de passos finitos que levam uma execução 
de uma tarefa. Podemos pensar em algoritmo como uma receita (MORAES, 2000). Por exemplo:
 Exemplo 1 - Somar dois números
Passo 1: Receber os dois números.
Passo 2: Somar os dois números.
Passo 3: Mostrar o resultado obtido
 Exemplo 2 - Sacar dinheiro em caixa eletrônico
Passo 1: Ir até o caixa eletrônico. 
Passo 2: Colocar o cartão.
Passo 3: Digitar senha.
Passo 4: Selecionar a opção “saque”.
Passo 5: Digitar valor da quantia que deseja sacar.
Passo 6: Retirar o cartão.
Passo 7: Retirar o dinheiro.
Passo 8: Sair. 
Você deve estar pensando que poderia alterar os passos para simplificar ou deixar mais 
detalhado, entretanto devemos pensar que o problema pode ser resolvido de várias maneiras 
diferentes, porém atingindo o mesmo objetivo. Em suma, podemos ter vários algoritmos 
diferentes para resolver o mesmo problema.
28WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 1
ENSINO A DISTÂNCIA
5.2 Construção de fluxogramas 
De acordo com Ascencio e Campos (2000), para desenvolver qualquer algoritmo são 
necessários alguns passos descritos a seguir:
a) Ler atentamente o enunciado, destacando os pontos importantes.
b) Definir os dados de entrada, ou seja, quais dados serão fornecidos.
c) Definir o processamento, ou seja, quais cálculos serão efetuados e quais as restrições 
para esses cálculos. O processamento é responsável pela transformação dos dados de entrada em 
dados de saída.
d) Definir dados de saída, ou seja, quais dados serão gerados depois do processamento.
e) Construir o algoritmo utilizando o método de fluxograma.
f) Testar o algoritmo realizando simulações. 
O fluxograma consiste em analisar o enunciado do problema e escrever, utilizando 
símbolos e gráficos predefinidos. A vantagem desse tipo de organização do algoritmo é que os 
elementos gráficos facilitam o entendimento em relação ao texto. Na tabela a seguir, iremos 
analisar o conjunto de símbolos utilizados no fluxograma.
Tabela 9 - Conjunto de símbolos principais utilizados no fluxograma. Fonte: Pereira (2009, p. 5)
29WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 1
ENSINO A DISTÂNCIA
Exemplos de fluxogramas
a) Faça um fluxograma para mostrar o resultado da multiplicação de dois números:
b) Faça um algoritmo para mostrar o resultado da divisão de dois números:
30WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 1
ENSINO A DISTÂNCIA
c) Faça um algoritmo para calcular a média aritmética entre duas notas de um aluno 
e para mostrar a situação desse aluno, ou seja, se o aluno tiver igual ou maior que a nota 6, 
aprovado, se menor a nota for menor que 6, reprovado.
3131WWW.UNINGA.BR
U N I D A D E
02
SUMÁRIO DA UNIDADE
INTRODUÇÃO ............................................................................................................................................................ 32
1. HISTÓRIA DA LINGUAGEM C .............................................................................................................................. 33
2. DEV C++ ................................................................................................................................................................ 33
3. LINK DEV C++ ...................................................................................................................................................... 34
4. PRIMEIROS PROGRAMAS ................................................................................................................................. 36
4.1 CARACTERES ESPECIAIS ...................................................................................................................................40
4.2 TIPOS DE DADOS BÁSICOS .............................................................................................................................. 41
5. ESTRUTURA DE CONTROLE ............................................................................................................................... 46
5.1 ESTRUTURA SEQUENCIAL................................................................................................................................. 47
5.2 ESTRUTURA CONDICIONAL .............................................................................................................................50
5.3 ESTRUTURA CONDICIONAL - SIMPLES ..........................................................................................................50
5.4 ESTRUTURA CONDICIONAL - COMPOSTA ...................................................................................................... 52
ESTRUTURA DE PROGRAMAÇÃO SEQUENCIAL 
E CONDICIONAL 
PROF. ME. RAFAEL BARBOSA
ENSINO A DISTÂNCIA
DISCIPLINA:
ALGORITMOS E PROGRAMAÇÃO
APLICADA
32WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 2
ENSINO A DISTÂNCIA
INTRODUÇÃO
A linguagem de programação é importante, porque define o relacionamento, a semântica e 
a gramática, o que permite que os programadores se comuniquem efetivamente com as máquinas 
que eles programam.
Uma linguagem de programação serve para várias finalidades:
• Você pode instruir o computador o que fazer, de forma legível por humanos.
• Permite que o programador estruture as instruções em funções, procedimentos etc. Isso 
também permite que o programa seja dividido em “pedaços” que podem ser desenvolvidos por 
um grupo de desenvolvedores.
• Fornece portabilidade - as instruções de baixo nível de um computador serão diferentes 
das de outro computador.
 Os programadores de computador têm uma compreensão completa do modo e do 
porquê dos sistemas informáticos, incluindo as limitações do sistema, e podem estabelecer 
expectativas realistas e trabalhar emtorno dessas limitações para maximizar completamente o 
uso do equipamento e seus acessórios.
Nesta unidade, iremos estudar uma linguagem de programação, a mais comum e a base 
de várias outras linguagens: a famosa linguagem C. 
33WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 2
ENSINO A DISTÂNCIA
1. HISTÓRIA DA LINGUAGEM C
A linguagem de programação C foi concebida no início dos anos 70 por Dennis M. 
Ritchie, um funcionário da Bell Labs (AT&T). Nos anos 60, Ritchie trabalhou com vários 
outros funcionários da Bell Labs em um projeto chamado Multics. O objetivo do projeto era 
desenvolver um sistema operacional para um computador grande, que pudesse ser usado por mil 
usuários. Em 1969, a Bell Labs retirou-se do projeto, porque não poderia produzir um sistema 
economicamente viável. Assim, os funcionários da Bell Labs tiveram que procurar outro projeto 
para trabalhar (principalmente Dennis e Thompson). 
Thompson começou a trabalhar no desenvolvimento de um novo sistema de arquivos. 
Ele descreveu uma versão do novo sistema para o DEC PDP-7, um computador produzido pela 
Digital Equipment Corporation, que custava na época 70 mil dólares, e tinha arquitetura de 18 
bits, bastante poderoso para a época. Desenvolveu o sistema utilizando a linguagem assembler. 
Depois de algum tempo, começaram a fazer melhorias e adicionar expansões, que culminou 
no jogo Space Travel, bastante popular e que exigia muito do processador para gerar gráficos e 
ilustração dos planetas. 
Depois do sistema completo, a equipe chamou-o de UNIX (uma referência sarcástica do 
sistema fracassado Multics). Detalhe, o programa todo estava escrito em código assembly.
Após alguns anos, o UNIX contava com um “intérprete” para a linguagem B, linguagem 
criada por Martin Richards, derivada do nome BCPL, Basic Combined Programming Language 
(Linguagem de Programação Básica Combinada). Antes da linguagem B, para criar um código 
demandava muitas páginas, com a linguagem B o mesmo código poderia ser escrito em poucas 
linhas. Todavia ao programar utilizando a linguagem BCPL, ninguém conseguia representar 
dados, ou seja, isso incapacitava o uso de estruturas. Diante dessa necessidade, Dennis M. Ritchie 
junto com sua equipe (em 1971-1973) transformaram a linguagem B em C, mantendo maior 
parte da sintaxe e adicionaram os tipos de dados, deixando a linguagem mais funcional.
Na época, Dennis Ritchie viu o potencial da linguagem de programação C e junto com 
sua equipe reescreveram o sistema operacional UNIX em um DEC PDP-11 e mais tarde, um livro 
sobre a linguagem de programação em C, clássico, chamado “The C Programming Language, 1 st 
edition”. No livro se encontra o famoso programa “Hello, World”.
Durante muitos anos, o livro de Dennis Ritchie (principal autor) era considerado padrão. 
Entretanto, em 1983, um comitê foi formado pelo American National Standards Institute (ANSI), 
para desenvolver uma definição moderna para a linguagem de programação em C. Algumas 
modificações foram feitas, porém nada que afetasse os programas antigos. Em 1988, o comitê 
define a linguagem C. Posteriormente, a norma foi adotada pela International Standards 
Organization (ISO). 
2. DEV C++
Basicamente o ciclo de desenvolvimento de uma aplicação engloba três fases distintas:
• Desenvolvimento do código fonte: etapa do trabalho realizado pelo programador.
• Compilação do código: verificar se os códigos respeitaram as sintaxes das instruções. 
Este procedimento de compilação é realizado pelo compilador, que detecta situações que não 
podem ser traduzidas pelo computador. Sendo assim o programador deve verificar possíveis 
erros de digitação ou estruturais.
34WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 2
ENSINO A DISTÂNCIA
• Execução do programa: depois de compilado o código, só executar a aplicação.
Para desenvolver programas em linguagem C no sistema operacional Windows, precisamos 
do programa DEV C++, um software gratuito que oferece um ambiente de desenvolvimento de 
aplicações. Nesse programa, muitas funcionalidades são oferecidas para a escrita, compilação, 
debugging (evita que o programa execute de forma inesperada) e execução de programas em C e 
C++ (extensão da linguagem C). 
Utilizaremos uma versão leve e completa, que pode ser instalada em qualquer sistema 
operacional Windows. A seguir, o link para instalação do programa: <https://drive.google.com/
open?id=0B0ccdGtHNUWjd1RUNGE4dC0ta00>.
3. LINK DEV C++ 
Procedimentos de instalação: 
1. Depois do download do programa, abra o “devcpp4.9.9.2_setup”. 
Figura 1 - Instalação do DEC C++, selecionando linguagem. Fonte: o autor.
Para executar os projetos, o programa utiliza os padrões ANSI C, apesar do 
programa ser livre e de código aberto, foi descontinuado oficialmente em 2006, 
porém muitos desenvolvedores continuam o projeto independente, personalizando 
o programa e adicionando outras funcionalidades. 
35WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 2
ENSINO A DISTÂNCIA
2. Após aceitar o termo, selecione o tipo de instalação “Full”.
Figura 2 - Instalação do DEV C++, instalando os componentes. Fonte: o autor.
3. Selecione a pasta do diretório de preferência, ou deixe padrão de acordo com a Figura 
a seguir.
Figura 3 - Instalação do DEV C++, selecionando a pasta de destino. Fonte: o autor.
36WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 2
ENSINO A DISTÂNCIA
4. Depois de instalado, execute o programa para verificar se está tudo correto
Figura 4 - Ambiente do software DEV C++. Fonte: o autor.
4. PRIMEIROS PROGRAMAS
Com o DEV C++ aberto, siga o procedimento a seguir:
Figura 5 - Como criar o primeiro programa em C. Fonte: o autor.
37WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 2
ENSINO A DISTÂNCIA
Escreva o código abaixo:
Figura 6 - Primeiro programa em C (Hello World). Fonte: o autor.
Compile o programa e execute:
Figura 7 - Compilando e executando o programa, se preferir apenas aperte a tecla F9. Fonte: o autor.
38WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 2
ENSINO A DISTÂNCIA
Salve o programa:
 
Figura 8 - Salvando o primeiro programa. Fonte: o autor.
Figura 9 - Programa Hello World. Fonte: o autor.
Caso você digite errado alguma linha, irá aparecer um “log” abaixo do ambiente de 
programação, veja na Figura 10.
39WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 2
ENSINO A DISTÂNCIA
Figura 10 - Mensagem de erro do compilador, o erro foi a falta de (;), no final da linha 7. Fonte: o autor.
O erro mais comum é esquecer o (;), no final da linha da função, mas você pode ter 
percebido que a linha #include <stdio.h> não tem (;), isso porque a extensão (.h) não é linguagem 
C, mas sim uma diretiva que indica ao compilador adicionar um processo de compilação, no caso 
um cabeçalho padrão que vem da expressão inglesa (standard input-output header), que significa 
“cabeçalho padrão de entrada/saída”.
Veja mais detalhes do algoritmo que desenvolvemos:
#include <stdio.h> → Inclui funções de entrada e saída
main ( ) → O programa começa aqui
{ → Início do bloco de instruções
printf (“Hello World”); → Escrever a string (sequência de caracteres) usando a 
função printf
} → Fim do bloco de instruções (e fim do programa)
40WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 2
ENSINO A DISTÂNCIA
A função printf mostra todos os caracteres, desde que estejam com aspas (“”). E como 
representar a mudança de linha (ENTER)?
Uma nova linha (New Line) em C é representada por \n. Tente desenvolver um programa 
assim:
#include <stdio.h>
main ( )
{
printf (“Hello \n”);
printf (“World”);
} 
4.1 Caracteres Especiais
O símbolo \ é utilizado para retirar o significado especial de caractere, ou em outroscasos 
como \n, serve para representar um comando. Veja a tabela:
\7 Bell (sinal sonoro do computador)
\a Bell (sinal sonoro do computador)
\n Nova linha
\\ Caractere \ (representação \ )
\’ Caractere ‘ (aspas simples)
\” Caractere “ (aspas)
\? Caractere ? (ponto de interrogação)
Tabela 1 - Caracteres e comandos. Fonte: o autor.
Geralmente, se você pesquisar na internet alguns algoritmos, verá que o programador 
faz “comentários” sobre o seu programa. Evidentemente que os comentários não são dedicados 
para o compilador e sim para o leitor entender o seu código, é a razão para descrever o algoritmo 
daquela forma. Os comentários não interferem no programa, e é representado por /*.
Tente compilar o seguinte:
#include <stdio.h>
main ()
{
printf (“Hello \n”);
/*printf (“World”); /*
}
 
41WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 2
ENSINO A DISTÂNCIA
Você irá perceber que a palavra “World” sumiu, porque o compilador entende que é um 
comentário e não entra no programa final. Para você entender melhor a função dos comentários, 
veja a seguir um exemplo:
#include <stdio.h> /*Inclui funções de entrada e saída*/ 
main () /*O programa começa aqui*/ 
{ /* Início do bloco de instruções */
printf (“Hello World”); /* Escrever a string (sequência de caracteres) usando a função 
printf */
} /* Fim do bloco de instruções (e fim do programa) */
4.2 Tipos de Dados Básicos 
Na programação em C, é necessário conhecer o tipo de dado para só então utilizá-lo. 
Podemos fazer uma analogia com a geladeira. Você não vai colocar uma lata de refrigerante no 
recipiente dos ovos, claro que você vai guardar o produto nos melhores recipientes possíveis. É a 
mesma coisa na linguagem C, com relação aos tipos de dados, que são basicamente quatro (char, 
int, float e double), e serão apresentados detalhadamente em seguida.
Antes de falar sobre os tipos de dados, é bom termos alguns conceitos bem definidos. 
Por exemplo, sempre que desejarmos guardar um valor que, por qualquer razão, não seja fixo, 
devemos fazê-lo utilizando variáveis.
De acordo com Damas (1995), uma variável é nada mais que um nome que damos 
a uma determinada posição de memória para conter um valor de um determinado 
tipo.
42WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 2
ENSINO A DISTÂNCIA
a) Inteiros – int:
Como o nome indica, int é um tipo de variável que armazena valores que pertencem ao 
conjunto dos números inteiros positivos e negativos. EX: -1, 0, 2341234234.
As operações dos inteiros, pode ser visto na Tabela 2 a seguir:
Operação Descrição Exemplo Resultado
+ Soma 25+4 29
- Subtração 25-4 21
* Multiplicação 25*4 100
/ Divisão Inteira 25/4 6,25
% Resto da Divisão 25%4 1
Tabela 2 – Operadores. Fonte: o autor.
É importante ressaltar que qualquer operação entre inteiros o resultado será inteiro. 
Como é feita a declaração do inteiro, veja a seguir:
int num; /*números inteiros*/
Vamos aprender como se escreve os números inteiros em um algoritmo em C:
#include <stdio.h> 
main () 
{ 
int num = 24; 
printf (“O valor de num = %d e o valor seguinte = %d \n”, num,num+1); 
} 
O que vai aparecer em sua tela provavelmente é a seguinte string: 
O valor de um num = 24 e o valor seguinte = 25
Você já deve ter percebido que para representar num dentro da string do printf devemos 
escrever um inteiro de um printf, no formato de escrita utilizando o símbolo %d.
É bom lembrar que a declaração de uma variável tem que ser sempre realizada 
antes de qualquer instrução. Você irá entender logo em seguida. 
43WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 2
ENSINO A DISTÂNCIA
Depois temos que indicar ao printf quais os valores que terá que colocar nos locais 
assinalados por %d.
Por isso, a importância de colocar em ordem as variáveis ou os valores que substituíram 
%d, separados por vírgula. 
Da mesma forma que existe uma função printf para a escrita de valores, existe também 
uma função para leitura de valores - a função scanf.
Teste esse exemplo:
#include <stdio.h>
main()
{
 int num;
 
 printf (“introduza um numero:”);
 scanf (“%d”,&num);
 printf (“O numero introduzido foi %d\n”,num);
}
b) Reais - Float e double
As variáveis declaradas do tipo float ou double são utilizadas para armazenar valores 
numéricos reais. Geralmente é denominado ponto flutuante, porque consegue representar a parte 
fracionária (EX: 0.00003234).
 A diferença entre as declarações float e double é o número de bytes que é reservado para 
armazenamento. O float consegue até 7 dígitos decimais e são necessários 4 bytes de memória. Já 
o double e até 15 dígitos decimais e são necessários 8 bytes.
Para ler qualquer variável é necessário que a função scanf preceda de & (E 
comercial), como no algoritmo anterior.
scanf (“%d”,&num);
44WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 2
ENSINO A DISTÂNCIA
Os números fracionários na declaração devem conter ponto para separar inteiros 
da parte decimal, EX: 12.5 e não 12,5.
Teste essa aplicação: escreva um programa que calcule o perímetro e a área de uma 
circunferência.
#include <stdio.h>
main()
{
float raio, perimetro;
double Pi = 3.1415927, area;
 
 printf (“Introduza o Raio da Circunferencia: “);
 scanf (“%f ”,&raio);
 area = Pi*raio*raio;
 perimetro = 2*Pi*raio;
 
 printf (“Area = %f\n”, area);
 printf (“Perimetro = %f\n”, perimetro);
}
c) Caracteres – char:
Para armazenar caracteres utilizamos o char, porém serve apenas para armazenar UM, e 
somente UM, caractere. 
É importante enfatizar isso porque um dos erros mais comuns de programação em C é 
pensar que o tipo char permite armazenar strings ou conjunto de caracteres numa variável do tipo 
char.
45WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 2
ENSINO A DISTÂNCIA
Escreva o algoritmo a seguir, para testar a variável char.
#include <stdio.h> 
main () 
{ 
char ch;
printf (“Introduza um Caractere: “);
scanf (“%c”, &ch);
printf (“O caractere introduzido foi %c\n”, ch);
} 
Existe uma função chamada getchar que serve para fazer leitura de caracteres sem ter que 
recorrer a função scanf. O interessante é que ela pode ser invocada sem qualquer parâmetro, ou 
seja, a função lê o caractere e mostra o caractere obtido como um resultado, evitando-se assim o 
&. 
Veja como ficaria o programa anterior:
#include <stdio.h> 
main () 
{ 
char ch;
printf (“Introduza um Caractere: “);
ch = getchar ();
printf (“O caractere introduzido foi %c\n”, ch);
} 
 Agora, escreva o algoritmo a seguir e veja algo interessante
note no algoritmo %c, representa a variável char, nomeada como ch. 
46WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 2
ENSINO A DISTÂNCIA
#include <stdio.h>
int main()
{
 char ascii = 82;
 printf(“%c”,ascii);
}
Provavelmente na tela irá aparecer R, agora tente rodar esse programa:
#include <stdio.h>
int main()
{
 char ascii = 83;
 printf(“%c”,ascii);
}
Apareceu S? Se sim, dê uma olhada na tabela ASCII na unidade I, o decimal 83, certamente, 
está associado ao caractere S. E 82 o R. O interessante que você pode fazer códigos ou senhas 
utilizando a tabela ASCII.
Exemplo:
#include <stdio.h>
int main()
{
 printf(“%c%c%c%c%c”,83,69,78,72,65);
}
Veja que palavra irá aparecer.
5. ESTRUTURA DE CONTROLE
Uma estrutura de controle é um bloco de programação que analisa variáveis e escolhe 
uma direção para onde ir, com base em determinados parâmetros. O termo controle de fluxo 
detalha a direção que o programa leva (de que maneira o controle do programa “flui”). O controle 
de fluxo determina como um computador responderá as condições e parâmetros. 
O fluxo de controle é dividido em três categorias:
• Estrutura Sequencial → Realiza um conjunto predeterminado de comandos de forma 
sequencial, ou seja, na ordem que foram declarados.
• Estrutura Condicional → Éuma estrutura que realiza ações dependendo da condição 
imposta (verdadeira ou falsa).
47WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 2
ENSINO A DISTÂNCIA
• Estrutura de Repetição → A estrutura executa sempre em laço infinito. Dependendo do 
algoritmo pode-se criar uma condição para sair do laço.
5.1 Estrutura Sequencial
Como o nome sugere, essa estrutura basicamente realiza um conjunto predeterminado 
de instruções de comandos de cima para baixo, sequencialmente, você pode visualizar olhando 
a Figura 11, a seguir.
Figura 11 - Fluxograma de uma Estrutura Sequencial. Fonte: o autor.
48WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 2
ENSINO A DISTÂNCIA
Escreva o algoritmo a seguir:
#include <stdio.h>
int main()
{
 float num1, num2, sum, sub, mult, div;
 printf(“Digite o primeiro numero: “ );
 scanf(“%f ”, &num1);
 printf(“Digite o segundo numero: “ );
 scanf(“%f ”, &num2);
 //Soma
 
 sum = num1 + num2;
 //Subtração
 sub = num1 - num2;
 //Multiplicaçao
 mult = num1 * num2;
 //Divisão
 div = num1/num2;
 printf(“%.2f + %.2f = %.2f\n”, num1, num2, sum);
 printf(“%.2f - %.2f = %.2f\n”, num1, num2, sub);
 printf(“%.2f * %.2f = %.2f\n”, num1, num2, mult);
 printf(“%.2f / %.2f = %.2f\n”, num1, num2, div);
}
Certamente você verificou alguns detalhes dessa programação, uma nova forma de 
escrever comentários (//), e além de identificar o seguinte comando %.2f, a razão dessa função é 
limitar o número de casas quando calculado o resultado. Percebemos também que o algoritmo 
funciona de forma sequencial, respeitando as instruções. 
Vamos ver outro exemplo, um pouco mais aplicado, no caso para calcular o salário de um 
funcionário:
49WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 2
ENSINO A DISTÂNCIA
#include <stdio.h>
 main( )
 {
 float vlrHora, nroHoras, INSS, vlrINSS, salBruto, salLiquido;
 printf(“Informe o valor por hora trabalhada:\n”);
 scanf(“%f ”, &vlrHora);
 printf(“\nInforme o nro de horas trabalhadas:\n”);
 scanf(“%f ”, &nroHoras);
 printf(“\nInforme o %% de desconto do INSS:\n”);
 scanf(“%f ”, &INSS);
 salBruto = vlrHora * nroHoras;
 vlrINSS = salBruto * (INSS / 100);
 salLiquido = salBruto - vlrINSS;
 printf(“\n\nSalario bruto = R$ %.2f ”, salBruto);
 printf(“\nDesconto INSS = R$ %.2f ”, vlrINSS);
 printf(“\n=============================”);
 printf(“\nSalario liquido = R$ %.2f ”, salLiquido);
}
E como ficaria o algoritmo anterior, caso queira inserir horas extras? Tente escrever o 
algoritmo, utilize o programa DEV C++.
Outro exemplo de algoritmo sequencial:
 
#include <stdio.h>
 main() {
 float litros, kms, vlrLitro, vlrKm, vlrTotal;
 printf(“Informe o valor do litro de combustivel:\n”);
 scanf(“%f ”, &vlrLitro);
 printf(“\nInforme a qtde de litros gastos:\n”);
 scanf(“%f ”, &litros);
 printf(“\nInforme os quilometros percorridos:\n”);
 scanf(“%f ”, &kms);
 vlrTotal = litros * vlrLitro;
 vlrKm = vlrTotal / kms;
 printf(“\n\nValor total gasto = R$ %.2f ”, vlrTotal);
 printf(“\nValor gasto / km = R$ %.2f ”, vlrKm);
}
 
50WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 2
ENSINO A DISTÂNCIA
Caso você queira incrementar o algoritmo para determinar o consumo médio de um 
automóvel, como você desenvolveria o algoritmo anterior?
5.2 Estrutura Condicional
A estrutura de condicional é um tipo de estrutura que realiza uma ação dependendo 
da condição (ou seleção) verdadeira ou falsa. Usamos palavras em inglês para expressar uma 
estrutura condicional com if (SE) e else (SENÃO ou DO CONTRÁRIO). 
5.3 Estrutura Condicional - Simples
 
Basicamente a condicional simples executa um conjunto de instruções se a condição for 
verdadeira, caso seja falsa o bloco de instruções não será executado. 
Figura 12 - Fluxograma da estrutura condicional simples. Fonte: o autor.
51WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 2
ENSINO A DISTÂNCIA
Exemplo de uma estrutura condicional simples:
#include <stdio.h>
#include <stdlib.h>
main() {
// Declarar variáveis
int idade;
// Pedir ao usuário para escrever sua idade
 printf(“Digite sua idade: “);
 scanf(“%d”, &idade);
// Comparar com a idade mínima
if (idade >= 18) {
 printf(“Ja pode ser preso!”);
 }
} 
Você já deve ter percebido que na estrutura condicional existe um bloco de instruções 
para a condição, delimitados por (“{“ e “}”).
if (idade >= 18) {
 printf(“Já pode ser preso!”);
 }
 
Todavia se você digitar a idade <18, o programa deverá ser finalizado, pois não existe 
nenhum bloco de instrução quando não for verdadeiro. Para isso, você deve estruturar uma 
condicional composta como pode ver na subseção seguinte.
Entretanto existe uma forma de você criar mais uma condição para abranger outro grupo 
que seja verdadeira, com a condição (idade < 18). De acordo com o algoritmo a seguir:
#include <stdio.h>
#include <stdlib.h> 
main() {
// Declarar variáveis
int idade;
// Pedir ao usuário para escrever sua idade
 printf(“Digite sua idade: “);
 scanf(“%d”, &idade);
// Comparar com a idade mínima
if (idade >= 18) {
 printf(“Ja pode ser preso!”);
 }
if (idade < 18) {
 printf(“nao pode ser preso!”);
 }
} 
52WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 2
ENSINO A DISTÂNCIA
5.4 Estrutura Condicional - Composta
A estrutura condicional composta executa o bloco de instrução de condição verdadeira 
como de uma condição falsa, de acordo com o fluxograma na Figura 13.
Figura 13 - Fluxograma de uma estrutura condicional composta. Fonte: o autor.
53WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 2
ENSINO A DISTÂNCIA
Exemplo de aplicação de uma estrutura composta.
// Solicitar salário e o valor da prestação de um empréstimo pretendido.
// Se prestação for maior que 20% do salário, imprimir: “Empréstimo não
// pode ser concedido”. Senão, imprimir: “Empréstimo pode ser concedido”.
#include <stdio.h>
main(void) {
 float salario, prestacao, percentual;
 printf(“Informe o salario: R$ “);
 scanf(“%f ”, &salario);
 printf(“Informe o valor da prestacao: R$ “);
 scanf(“%f ”, &prestacao);
 percentual = (prestacao / salario) * 100;
 printf(“\nA prestacao corresponde a %.2f%% do salario.”, percentual);
 if (percentual > 20.0)
 printf(“\nEmprestimo nao pode ser concedido.”);
 else
 printf(“\nEmprestimo pode ser concedido.”);
 return 0;
}
Como no bloco If, else também é delimitado por (“{“ e “}”), porém não precisa colocar 
uma expressão como por exemplo: else (percentual <= 20.0).
Vamos ver outra aplicação?
54WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 2
ENSINO A DISTÂNCIA
#include <stdio.h>
#include <stdlib.h>
int main (void) {
 float n1, n2, n3,n4, media;
 printf(“Informe a 1a. nota:\n”);
 scanf(“%f ”, &n1);
 printf(“\nInforme a 2a. nota:\n”);
 scanf(“%f ”, &n2);
 printf(“\nInforme a 3a. nota:\n”);
 scanf(“%f ”, &n3);
 
 printf(“\nInforme a 4a. nota:\n”);
 scanf(“%f ”, &n4);
 media = (n1 + n2 + n3 +n4) / 4;
 printf(“\nMedia final = %.2f ”, media);
 if (media >= 7.0)
 printf(“ (aluno aprovado).”);
 else
 printf(“ (aluno reprovado).\n”);
}
55WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 2
ENSINO A DISTÂNCIA
Se quisermos implementar o algoritmo para mostrar a recuperação, seria dessa forma:
#include <stdio.h>
#include <stdlib.h>
int main (void) {
 float n1, n2, n3,n4, media;
 printf(“Informe a 1a. nota:\n”);
 scanf(“%f ”, &n1);
 printf(“\nInforme a 2a. nota:\n”);
 scanf(“%f ”, &n2);
 printf(“\nInforme a 3a. nota:\n”);
 scanf(“%f ”, &n3);
 
 printf(“\nInforme a 4a. nota:\n”);
 scanf(“%f ”, &n4);
 media = (n1 + n2 + n3 +n4) / 4;
 printf(“\nMedia final = %.2f ”, media);
 if (media >= 7.0)
 printf(“ (aluno aprovado).”);
 else if ((media >= 5.0) && (media < 7.0))
 printf(“(aluno em recuperacao).”);
 else
 printf(“ (aluno reprovado).\n”);
}
Nesse caso, utilizamos o else if, um recurso interessante para realizar múltiplas condições, 
no entanto, precisa utilizar um operador lógico (&&), o significado desse operador é (E). Para 
você entender melhor:
 else if ((media >= 5.0) E (media < 7.0))
 printf(“ (aluno em recuperacao).”);
Isto significa que o aluno ficará de recuperação com média maior ou igual a cinco e média 
abaixo de 7,0.
Vamos a outro exemplo de aplicação da condição composta com else if.
56WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 2
ENSINO A DISTÂNCIA
#include <stdio.h>
int main(void) {
 int idade;
 printf(“Informe a idade da pessoa:\n”);
 scanf(“%d”, &idade);
 printf(“\n%d = “, idade);
 if (idade < 0)
 printf(“Erro: idade invalida !!!.”);
 else if ((idade >= 0) && (idade <= 21))
 printf(“fase de crescimento”);
 else if ((idade >= 22) && (idade <= 70))
 printf(“ja esta marmanjo”);
 else
 printf(“Idoso.”);
 
 }
Notamos nesse algoritmo que podemos utilizar mais de uma vez a função else if. 
Estrutura Condicional Switch/case
A estrutura condicional switch/case tem uma peculiaridade diferente das estruturas 
if, else e else if. Podemos entender o comando switch/case como uma construção de múltiplas 
possibilidades de seleção e decisão (Figura 14). Essa é uma forma para reduzir a complexidade 
de vários if ou else. Vejamos o exemplo de um algoritmo, escreva esse algoritmo no programa 
DEV C++.
57WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 2
ENSINO A DISTÂNCIA
Figura 14 - Fluxograma switch. Fonte: o autor.
58WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 2
ENSINO A DISTÂNCIA
#include <stdio.h> 
 int main (void) { 
 int valor;
 printf (“Informe o valor:\n”); 
 scanf (“%d”, &valor);
switch ( valor )
 {
 case 1 :
 printf (“Mercurio\n”);
 break;
 
 case 2 :
 printf (“Venus\n”);
 break;
 
 case 3 :
 printf (“Terra\n”);
 break;
 
 case 4 :
 printf (“Marte\n”);
 break;
 
 case 5 :
 printf (“Jupiter\n”);
 break;
 
 case 6 :
 printf (“Saturno\n”);
 break;
 
 case 7 :
 printf (“Urano\n”);
 break;
 
 case 8 :
 printf (“Netuno\n”);
 break;
 
 default :
 printf (“Valor invalido!\n”);
 }
 
}
59WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 2
ENSINO A DISTÂNCIA
Vimos no algoritmo anterior algumas funções que não conhecíamos como 
a break e default:
break (quebrar)→ forçar a saída do switch/case.
default (ausência)→ Se digitar qualquer número que não esteja em uma 
case, a opção default irá atuar.
60WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 2
ENSINO A DISTÂNCIA
Existe a possibilidade de desenvolver o mesmo algoritmo utilizando as funções else if? A 
resposta é sim, entretanto veja como ficou complexo nosso algoritmo a seguir:
#include <stdio.h>
int main (void )
{
 int valor;
 
 printf (“Digite um valor de 1 a 8: “);
 scanf(“%d”, &valor);
 
 if (valor == 1)
 printf (“Mercurio\n”);
 else
 if (valor == 2)
 printf (“Venus\n”);
 else
 if (valor == 3)
 printf (“Terra\n”);
 else
 if (valor == 4)
 printf (“Marte\n”);
 else
 if (valor == 5)
 printf (“Jupiter\n”);
 else
 if (valor == 6)
 printf (“Saturno\n”);
 else
 if (valor == 7)
 printf (“Urano\n”);
 else
 if (valor == 8)
 printf (“Netuno\n”);
 else
 printf (“Valor invalido!\n”);
 
}
 
Por fim, segue o link para ter todos os programas comentados desta unidade:
https://drive.google.com/open?id=142LIdt3PJkuasKilqCZF-HIW684TSCpL
6161WWW.UNINGA.BR
U N I D A D E
03
SUMÁRIO DA UNIDADE
INTRODUÇÃO ............................................................................................................................................................ 63
1. OPERADORES DE ATRIBUIÇÃO ........................................................................................................................... 64
2. ESTRUTURAS DE REPETIÇÃO ............................................................................................................................ 66
2.1 REPETIÇÃO COM TERMINAÇÃO FORÇADA...................................................................................................... 67
2.2 ESTRUTURA DE REPETIÇÃO COM PÓS CONDIÇÃO ....................................................................................... 68
2.3 ESTRUTURA DE REPETIÇÃO CONTADA........................................................................................................... 70
2.4 DESENVOLVIMENTO DE UM ALGORITMO QUE GERE UMA SEQUÊNCIA DE FIBONACCI ..........................71
2.5 VETORES EM C .................................................................................................................................................. 72
3. APLICAÇÃO ........................................................................................................................................................... 75
4. VETORES MULTIDIMENSIONAIS ...................................................................................................................... 76
ESTRUTURA DE PROGRAMAÇÃO: REPETIÇÃO VETORES, 
MATRIZES E TIPOS DE PASSAGEM DE PARÂMETROS 
PROF. ME. RAFAEL BARBOSA
ENSINO A DISTÂNCIA
DISCIPLINA:
ALGORITMOS E PROGRAMAÇÃO
APLICADA
62WWW.UNINGA.BR
4.1 MATRIZES OU VETORES MULTIDIMENSIONAIS ............................................................................................ 80
5. TIPOS DE PASSAGEM DE PARÂMETROS ...........................................................................................................83
5.1 PONTEIROS ......................................................................................................................................................... 85
5.2 PASSAGEM DE FUNÇÃO .................................................................................................................................... 85
6. APLICAÇÃO ........................................................................................................................................................... 86
63WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 3
ENSINO A DISTÂNCIA
INTRODUÇÃO
No capítulo anterior, aprendemos sobre estruturas de sequência e seleção. Sabemos 
que a estrutura de seleção nos permite especificar como o computador reagirá a determinados 
inputs. No entanto ainda há uma limitação no que podemos fazer na programação. Por exemplo, 
e se quisermos exibir números de 1 a 100? Claro que podemos fazer cem linhas de printf (), 
mas e se queremos repetir mil vezes? Teríamos que escrever dez mil declarações para alcançá-
lo e é possível fazê-lo, mas não é uma conveniência e levaria muito tempo para ser concluída. 
Assim, a capacidade de especificar a repetição de instruções compostas é muito importante na 
programação. A repetição da execução de instruções é chamada loop. Looping em um programa 
é o processo de execução de série de instruções repetidamente em um determinado número de 
vezes. Iremos explorar alguns recursos interessantes da linguagem C a seguir.
64WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 3
ENSINO A DISTÂNCIA
1. OPERADORES DE ATRIBUIÇÃO
Existem muitos operadores de atribuição diferentes em C, o “=” não é o único operador 
de atribuição, os seguintes também estão disponíveis, na tabela 1.
Tabela 1 - Operadores Aritméticos de Atribuição. Fonte: Freire (2015).
 
Um tipo de acumulador é uma variável que acumula os valores, quando iniciado o 
programa (1 em 1). Vamos entender melhor essa função quando estudarmos estrutura de 
repetição. 
Já os contadores são um tipo de acumulador que aumenta ou diminuio valor. Veja como 
é feita a operação na tabela 2 a seguir.
Operação Fluxograma Programa em C
Incremento C ← C +1 C++
Decremento C ← C - 1 C--
Tabela 2 - Operadores de Incrementos e Decrementos. Fonte: o autor.
Os operadores “auto-incremento” e “auto-decremento”, ++ e -- quando usando em uma 
expressão, depende se eles vêm antes ou depois da variável, de acordo com a tabela 2, depois veja 
o exemplo 1.
De acordo com Pereira (2010), na forma prefixa, o valor da variável é modificado e depois 
usado; na forma posfixa, o valor da variável é usado e depois modificado. Assim por exemplo, se 
c vale 3, a operação d = ++c armazena 4 em d; enquanto a operação d = c++ armazena 3 em d. 
Mesmo assim ambos os casos, o valor final de c é 4.
65WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 3
ENSINO A DISTÂNCIA
Exemplo 1 - Diferença entre incremento e decremento:
#include <stdio.h>
int main( )
{ int a=1,
 b=1;
 printf(“Valor inicial de a = %d\n”, a);
 printf(“Valor inicial de b = %d\n”, b);
 printf(“\nIncrementando: a++\n”);
 a++;
 printf(“Decrementando: b--\n”);
 b--;
 printf(“\nAgora a = %d\n”, a);
 printf(“Agora b = %d\n”,b);
}
Exemplo 2 - Diferença entre incremento prefixo e pósfixo
#include <stdio.h> 
 
int main() 
{ 
 int a, 
 b=1; 
 
 printf(“b = %d\n”,b); 
 printf(“a = b++\n”); 
 
 a = b++; 
 
 printf(“\nAgora: \na = %d\n”,a); 
 
 printf(“b = %d\n”,b); 
 printf(“\na = ++b\n”); 
 
 a = ++b; 
 
 printf(“\nAgora: a = %d”,a); 
} 
66WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 3
ENSINO A DISTÂNCIA
2. ESTRUTURAS DE REPETIÇÃO
Estrutura While
While permite a repetição de um conjunto de instruções de execução caso uma 
determinada expressão (condição) seja verdadeira. Quando a condição se torna falsa, a repetição 
termina quando a primeira instrução após a estrutura de repetição é executada.
Observe que, como a condição é avaliada antes do comando ser executado, se for falsa o 
comando dentro da repetição não vai ser executado.
Exemplo de utilização do While:
#include <stdio.h> 
 
int main( ){ 
 
 int total = 0, num; 
 
 while( total < 100) { 
 printf( “Total = %d\n”, total ); 
 
 printf( “Entre com um número: “ ); 
 scanf( “%d”, &num ); 
 
 total += num; 
 } 
 
 printf( “Final total = %d\n”, total ); 
}
Exemplo prático da utilização do While:
// Um investidor aplicou R$ 1000,00 com rendimento de 1% ao mês. Quantos meses serão 
necessários 
// para que o capital investido ultrapasse a R$ 2000,00. 
 
#include <stdio.h> 
 
int main() { 
 float capital = 1000.00; 
 int ctMes = 0; 
 
 while (capital <= 2000.00) { 
 capital = capital + (capital * (1 / 1000.00)); 
 ctMes = ctMes + 1; 
 } 
 
 printf(“Em %d meses o capital investido será de R$ %.2f ”, ctMes, capital); 
}
67WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 3
ENSINO A DISTÂNCIA
Como seria o fluxograma de típico do While?
Figura 1 – Fluxograma de While. Fonte: o autor.
2.1 Repetição com Terminação Forçada
Podemos utilizar o comando break para forçar o término de qualquer repetição. Pode ser 
útil em algumas aplicações, nem tanto em linguagem C, mas em outras linguagens sua aplicação 
é interessante. Veremos a seguir uma aplicação em C.
68WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 3
ENSINO A DISTÂNCIA
#include <stdio.h>
 
int main () {
 int a = 10;
 while( a < 20 ) {
 
 printf(“valor: %d\n”, a);
 a++;
 
 if( a > 15) {
 break;
 }
 
 }
 
 return 0;
}
2.2 Estrutura de repetição com pós condição
Segundo Pereira (2010), a estrutura de repetição com pós condição serve para executar 
um comando, repetidamente, até que uma determinada condição se torne falsa. Isso é interessante 
em aplicações que garantam consistência de entrada de dados, além de implementar processos 
orientados por menus.
Veja um exemplo de aplicação:
69WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 3
ENSINO A DISTÂNCIA
#include <stdio.h>
int main ()
{
 int i;
 do
 {
 printf (“\n\nEscolha um time:\n\n”);
 printf (“\t(1)...Corinthians\n”);
 printf (“\t(2)...Palmeiras\n”);
 printf (“\t(3)...Internacional\n\n”);
 scanf(“%d”, &i); 
 } while ((i<1)||(i>3));
 switch (i)
 {
 case 1:
 printf (“\t\tMelhor time\n”);
 break;
 case 2:
 printf (“\t\ttime não é bom\n”);
 break;
 case 3:
 printf (“\t\ttime está na segunda divisao\n”);
 break;
 }
 return(0);
}
Como seria o fluxograma de uma estrutura de repetição com pós condição?
70WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 3
ENSINO A DISTÂNCIA
Figura 2 – Fluxograma de estrutura de repetição com pós condição. Fonte: o autor.
2.3 Estrutura de Repetição Contada
Uma estrutura de repetição contada, segundo Damas (2008), serve para repetir a execução 
de um comando por um determinado número de vezes, para saber quando o total de repetições 
desejadas já foi atingido, ou seja, um for sempre está acompanhado de uma variável contadora 
que armazena quantas vezes o bloco de sentenças deve ser executado.
Um exemplo da tabuada: 
71WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 3
ENSINO A DISTÂNCIA
 #include <stdio.h>
int main(void)
{
int a, b;
for (a = 1; a <= 10; a = a + 1)
{
for (b = 1; b <= 10; b = b + 1)
printf(“%2d x %2d = %3d\n”, b, a, a * b);
printf(“\n”);
} 
Return 0;
}
Aplicação prática:
A sequência de Fibonacci é uma série de números na qual um número é encontrado por 
somar os dois números antes dele. Começando com 0 e 1, a sequência passa a 0, 1, 1, 2, 3, 5, 8, 13, 
21, 34 e assim por diante. Escrito como regra, a expressão é xn = xn-1 + xn-2.
2.4 Desenvolvimento de um algoritmo que gere uma 
sequência de Fibonacci
Figura 3 - Sequência de Fibonacci. Fonte: Domínio Público (2017).
Um vídeo ilustrativo mostrando a sequência de Fibonacci. 
Acesse: <https://www.youtube.com/watch?v=2VuS8JOkr7s>.
72WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 3
ENSINO A DISTÂNCIA
#include <stdio.h> 
 
void main( ) { 
 printf(“Série de Fibonacci\n”); 
 printf(“==================\n”); 
 
 int termo1 = 1, termo2 = 1, novoTermo; 
 
 printf(“ 1o. termo = %d\n”, termo1); 
 printf(“ 2o. termo = %d\n”, termo2);
 
 for (int i=3; i<=20; i++) { 
 novoTermo = termo1 + termo2; 
 printf(“%2do. termo = %d\n”, i, novoTermo); 
 
 termo1 = termo2; 
 termo2 = novoTermo; 
 } 
 
 printf(“==================\n”); 
}
2.5 Vetores em C
De acordo com Pereira (2010), um vetor é um tipo de variável capaz de armazenar uma 
coleção de dados ao mesmo tempo. Ou seja, cada um dos dados armazenados num vetor é 
identificado por um número inteiro, por vezes denominado como índice.
Para indicar uma variável do tipo vetor basta declará-la com o sufixo [n], n pode ser 
qualquer número inteiro positivo.
Exemplo de aplicação de um vetor, para ler um conjunto de elementos 10 pessoas e 
determinar quantas pessoas são maiores de 18 anos:
73WWW.UNINGA.BR
AL
GO
RI
TM
OS
 E
 P
RO
GR
AM
AÇ
ÃO
 A
PL
IC
AD
A 
 | U
NI
DA
DE
 3
ENSINO A DISTÂNCIA
#include <stdio.h>
int main (void) {
 int n = 10; // tamanho do vetor
 int idade[n]; // declarando o vetor para armazenar as idades de um grupo de “n” pessoas
 int i, ct18; // indice (ou posicao) e contador de pessoas com mais de 18 anos
 for (i=0; i<n; i++) {
 printf(“Informe a idade da %2da. pessoa de %d: “, (i+1), n);
 scanf(“%d”, &idade[i]);
 }
 ct18 = 0;
 for (i=0; i<n; i++) {
// contando as idades superiores a 18 anos
 if (idade[i] > 18)
 ct18 = ct18 + 1;
 }
 printf(“\nQuantidade de pessoas com idade superior a 18 anos = %d.”, ct18);
}
A lógica desse programa é bem simples, o intuito é ler os números e guardar em posições 
dentro do vetor. Um vetor

Outros materiais