Buscar

Estrutura de Dados I

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 186 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 186 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 186 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 LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 1
ESTRUTURA DE DADOS I
PROF. CARLOS DANILO LUZ
“A Faculdade Católica Paulista tem por missão exercer uma ação integrada de suas atividades educacionais, visando à 
geração, sistematização e disseminação do conhecimento, 
para formar profissionais empreendedores que promovam 
a transformação e o desenvolvimento social, econômico e 
cultural da comunidade em que está inserida.
Missão da Faculdade Católica Paulista
 Av. Cristo Rei, 305 - Banzato, CEP 17515-200 Marília - São Paulo.
 www.uca.edu.br
Nenhuma parte desta publicação poderá ser reproduzida por qualquer meio ou forma 
sem autorização. Todos os gráficos, tabelas e elementos são creditados à autoria, 
salvo quando indicada a referência, sendo de inteira responsabilidade da autoria a 
emissão de conceitos.
Diretor Geral | Valdir Carrenho Junior
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 3
SUMÁRIO
AULA 01
AULA 02
AULA 03
AULA 04
AULA 05
AULA 06
AULA 07
AULA 08
AULA 09
AULA 10
AULA 11
AULA 12
AULA 13
AULA 14
AULA 15
AULA 16
05
18
37
56
72
82
90
97
108
123
132
141
149
155
163
173
CONCEITOS INICIAIS SOBRE LINGUAGEM DE 
PROGRAMAÇÃO C
ENTRADA E SAÍDA DE DADOS, EXPRESSÕES E 
OPERADORES
INSTRUÇÕES CONDICIONAIS DE DECISÃO
ESTRUTURAS DE REPETIÇÃO, VETORES E MATRIZES
FUNÇÕES E PONTEIROS
LISTAS ENCADEADAS E DUPLAMENTE ENCADEADAS
LISTAS ORDENADAS E CIRCULARES
LISTAS DINÂMICAS
ESTRUTURAS DE PILHAS E FILAS
ÁRVORES BINÁRIA E ESTRITAMENTE BINÁRIA
ÁRVORE BINÁRIA COMPLETA E IMPLEMENTAÇÃO EM 
LINGUAGEM C
BUSCAS EM ÁRVORES BINÁRIAS E MONTAGEM DE 
ÁRVORES BINÁRIAS
TÉCNICAS DE ORDENAÇÃO BUBBLESORT E 
INSERTIONSORT
TÉCNICAS DE ORDENAÇÃO SELECTIONSORT E QUICKSORT
TÉCNICAS DE ORDENAÇÃO SHELLSORT E MERGESORT
TEORIA DOS GRAFOS
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 4
INTRODUÇÃO
Caro(a) aluno(a), seja bem-vindo(a) a este livro que foi elaborado especialmente 
para que você possa conhecer os conceitos básicos e iniciais de lógica de programa-
ção e estrutura de dados. O livro está dividido em diversas aulas, nas quais aprende-
remos os conceitos iniciais da linguagem de programação C, que é uma linguagem 
muito popularizada por ser considerada base para o desenvolvimento das linguagens 
atuais, como C#, JAVA, PHP, entre outras. Todas as unidades apresentam exemplos 
utilizando a linguagem C.
Veremos um breve histórico da linguagem C, suas características e os conceitos 
iniciais sobre programação. Estudaremos como é a estrutura básica de um programa 
em linguagem C, a declaração de variáveis e manipulação de dados através de entrada 
e saída de dados. Conheceremos também os operadores e expressões, entre outros 
conceitos que o(a) ajudarão no desenvolvimento de seus programas em linguagem 
C, através disso, você, aluno(a), terá o conhecimento necessário para desenvolver os 
seus primeiros programas em linguagem C.
Será apresentado a você as estruturas de dados em forma de árvore, que é muito 
utilizada para a organização dos dados na memória por ser de fácil manipulação pelo 
sistema. Iremos estudar também sobre as listas lineares que são um tipo de vetor 
para armazenarmos e recuperamos dados. Veremos ainda as listas encadeadas, du-
plamente encadeadas, circulares e ordenadas. Por fim, será visto o conceito das duas 
estruturas de dados mais importantes, estrutura de FILA e PILHA, conceitos esses 
utilizados para diversos algoritmos de busca e ordenação de dados.
Conheceremos os conceitos sobre ordenação de dados, pois quanto mais organi-
zados e ordenados os elementos, mais rápida será a manipulação deles. Serão com-
preendidos alguns dos algoritmos de ordenação mais comuns como o BubbleSort 
(método bolha), InsertionSort, ShellSort (concha), MergeSort (dividir para conquistar) 
entre outros.
Por fim, vamos estudar sobre a teoria dos grafos, como esta teoria surgiu, a sua 
importância para a área da computação, suas características e representações.
Desejo a você, aluno(a), uma ótima leitura e bons estudos!
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 5
AULA 1
CONCEITOS INICIAIS SOBRE 
LINGUAGEM DE PROGRAMAÇÃO C
Fonte: https://br.freepik.com/fotos-gratis/codigo-de-programacao-com-fundo-laptop_902700.htm
A linguagem C está entre uma das linguagens de programação mais conhecidas 
entre a comunidade de programadores. Inicialmente desenvolvida para criação de sis-
temas operacionais, ao longo dos anos foi ganhando cada vez mais adeptos de sua 
estrutura. Além de sistemas operacionais, a linguagem foi e ainda é muito utilizada 
na criação de sistemas embarcados e jogos eletrônicos. Muitas vezes subestimada 
por ser uma das primeiras linguagens de alto nível, a linguagem C oferece muitos 
recursos e flexibilidade no desenvolvimento de software. Além disso, muito do que 
iremos apresentar nesta unidade pode ser compartilhado com outras linguagens de 
programação, visto que a estrutura apresentada possui características universais de 
programação. Para iniciar nossa abordagem, vamos conhecer um pouco da história 
dessa linguagem e suas primeiras contribuições para o desenvolvimento de software. 
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 6
Neste primeiro momento, vamos apresentar um pouco da história e as caracterís-
ticas básicas da linguagem C. Esta que é uma das primeiras linguagens de programa-
ção e que deu origem a outras linguagens como C++, Java, C#, Objective C. Além de 
influenciar o desenvolvimento de outras linguagens, a linguagem C é uma linguagem 
bastante flexível, sendo facilmente utilizada em qualquer tipo de plataforma. Com 
uma sintaxe simples e estruturada, a linguagem C permite a criação de programas 
extremamente rápidos em tempo de execução.
1.1 Linguagem de programação C
Durante a evolução dos computadores, o desenvolvimento de softwares sempre 
esteve condicionado à capacidade das linguagens de programação. À medida com 
que os computadores foram avançando tecnologicamente, as linguagens de progra-
mação também tiveram avanços significativos que permitiram a criação de softwares 
mais robustos. Dentre as linguagens de programação que permearam os primeiros 
avanços da computação, a linguagem C foi uma das que se popularizou entre a comu-
nidade de programadores. 
A linguagem C foi desenvolvida por Dennis Ritchie no início da década de 70, que 
também era um dos responsáveis pelo desenvolvimento do sistema operacional Unix. 
Inicialmente, a linguagem foi implementada em um computador DEC PDP-11 que uti-
liza o sistema operacional Unix. Vale ressaltar que a linguagem C origina-se a partir do 
processo de desenvolvimento de outras linguagens como a BCPL, desenvolvida por 
Martin Richards e que originou a criação da linguagem B, desenvolvida por Kenneth 
Thompson. Pode-se dizer que a linguagem desenvolvida por Thompson foi a precur-
sora da linguagem C. Estes três indivíduos faziam parte da equipe de desenvolvedores 
da Laboratórios Bell da AT&T, uma empresa de telecomunicações norte americana.
Inicialmente, a proposta da linguagem C era o desenvolvimento de sistemas opera-
cionais e compiladores, assim, uma nova versão do Unix foi totalmente desenvolvida 
utilizando a nova linguagem. Isso fez com que a linguagem C ganhasse cada vez mais 
adeptos pelo mundo, visto a popularidade do sistema Unix. Outro aspecto fundamen-
tal neste processo de disseminação da linguagem C foi por meio de uma publicação 
feita no ano de 1978, denominada The C Programming Language por Kernigham e 
Ritchie. 
O sucesso do livro influenciou diretamente a adesão da linguagem por grande parte 
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 7
da comunidadede programadores. De acordo com Schildt (1997, p. 85), “embora não 
houvesse um padrão, os códigos-fontes escritos em linguagem C, eram altamente 
compatíveis”. Dessa forma, um programa que era escrito em um microcomputador 
era facilmente compilado em outro.
Com a popularidade dos microcomputadores, um grande número de implementa-
ções de C foi criado. Quase que por um milagre, os códigos-fontes aceitos por essas 
implementações eram altamente compatíveis (isto é, um programa escrito com um 
deles podia normalmente ser compilado com sucesso usando-se outro) (SCHILDT, 
1997, p. 3).
No entanto, a partir da década de 80, a linguagem C passou a ser adotada por 
inúmeras empresas no desenvolvimento de aplicações de propósito geral. Esse cres-
cimento fez com que o número de compiladores para a linguagem C também au-
mentasse. Mas, existiam muitas discrepâncias entre eles, justamente por não haver 
um padrão para a linguagem. Somente em 1983, foi estabelecido um padrão para a 
linguagem C, por meio de um comitê organizado pelo American National Standards 
Institute (ANSI). Atualmente, a maioria dos compiladores já adotam o padrão C ANSI.
A linguagem Estruturada C
Uma das características do C é o fato de ser uma linguagem estruturada. Embora 
não apresente rigorosamente os mesmos atributos de outras linguagens estrutura-
das em blocos, ainda assim trata-se de uma linguagem estruturada, que permite a 
compartimentalização do código e seus respectivos dados.
Por meio das sub-rotinas (funções), a linguagem emprega o uso de variáveis lo-
cais, dessa forma, eventuais ações que acontecem dentro de cada sub-rotina não 
ocasionam efeitos inesperados em outras partes do código. O uso de variáveis locais 
torna-se uma grande vantagem em relação às variáveis globais, visto que o uso exces-
sivo de variáveis globais pode resultar em erros de compilação ou até mesmo outras 
situações indesejadas no programa. 
A estrutura apresentada pela linguagem C permite ao programador compartilhar 
funções de maneira fácil e dinâmica, de modo que não é necessário saber exatamen-
te como a função executa uma determinada ação. Basta que o programador saiba 
o que ela faz e, então, chamá-la em um trecho de código que deseja contemplar. O 
uso de funções estabelece a codificação em partes separadas, de acordo com suas 
funcionalidades, permitindo um desenvolvimento modular. Assim como em outras lin-
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 8
guagens, a linguagem C permite o uso de estruturas de repetição e estruturas condi-
cionais (laços), tornando o código mais limpo e eficiente.
1.2 Estrutura básica do arquivo em linguagem C
Agora que já conhecemos um pouco da estrutura que compõe a linguagem C, va-
mos avançar nossos estudos trazendo estes conceitos à prática. A seguir, temos um 
exemplo de código em linguagem C, que apresenta a frase “Olá Mundo!”.
O primeiro passo para iniciarmos nosso programa é incluirmos a biblioteca que fun-
ciona como uma espécie de cabeçalho do programa, ou seja, deve ser declarada no 
início do código. A biblioteca stdio.h é uma das mais conhecidas, pois permite utilizar 
as funções de entrada e saída do programa, neste caso, os comandos printf e scanf. 
No entanto, é óbvio que um programa pode possuir outras bibliotecas, considerando 
suas necessidades específicas. Caso tente utilizar uma determinada função, cuja bi-
blioteca não tenha sido informada, certamente o programa apresentará um erro du-
rante a compilação. Mais adiante veremos outras bibliotecas.
Para declarar uma determinada biblioteca devemos utilizar o comando #include, 
que representa a inclusão da biblioteca. Além disso, é importante destacar que toda 
declaração de biblioteca deve ser informada entre os sinais <>. Segue abaixo o exem-
plo da biblioteca stdio.h:
Além da biblioteca, outro elemento obrigatório em nosso código é a função int main. 
A função main define a estrutura contida dentro dela como sendo a parte principal do 
programa. No padrão ANSI, esse tipo de função retorna um valor do tipo inteiro (int). 
Assim, a declaração da função deve ser feita da seguinte forma:
#include <stdio.h>
#include <stdio.h>
int main(){
}
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 9
Após incluir a biblioteca e declarar a função int main, estamos prontos para apre-
sentar nosso primeiro programa em linguagem C com a expressão “Olá Mundo!”. Se-
gue abaixo o exemplo:
Basicamente, nosso primeiro programa em linguagem C está pronto. No entanto, 
ainda precisamos adicionar o comando de retorno. Para isso utilizamos o comando 
return:
Opcionalmente, podemos atribuir um valor de retorno para o comando. Neste caso, 
foi definido o valor 0 (zero), que representa a execução do programa com sucesso.
Com nosso primeiro programa totalmente finalizado, vamos à compilação e execu-
ção. Para realizar o processo de compilação e execução você poderá utilizar qualquer 
IDE que interprete a linguagem de programação. Se estiver tudo ok, o programa está 
pronto para ser executado:
Resultado do primeiro programa
Fonte: elaborado pelo autor
#include <stdio.h>
int main(){
 printf(“Ola Mundo!!!”);
}
#include <stdio.h>
int main(){
 printf(“Ola Mundo!!!”);
 return (0);
}
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 10
Após realizar esta breve sequência de passos, temos então nosso primeiro código 
em linguagem C executado com sucesso.
1.3 Escrevendo código em linguagem C, primeiros passos
Ao escrever programas em C podemos utilizar IDEs que sejam compatíveis com a 
linguagem. Como a DEVC++ , Eclipse, Netbeans, CodeBlocks entre outros. Estas IDEs 
são ótimas opções, pois apresentam recursos que permitem a marcação de sinta-
xe, numeração de linhas, depuração1, compilação e a execução do programa escrito. 
Também é possível escrever códigos em linguagem C por meio de um simples editor 
de texto, como no Bloco de Notas do Windows. No entanto, sem a mesma gama de 
recursos disponíveis nas ferramentas citadas.
Para escrever um código é importante que o programador adquira um bom conhe-
cimento, no que diz respeito à sintaxe e à semântica que compõem a estrutura da 
linguagem C. Isso ajudará em inúmeras situações durante o desenvolvimento de seus 
programas. Além disso, uma boa prática bastante utilizada em meio à comunidade 
de programadores é o uso de comentários nas linhas de comando que permitem si-
nalizar ou até mesmo explicar de maneira detalhada o que um determinado trecho de 
código faz. Isso auxilia a equipe de desenvolvimento e também outros programadores 
que futuramente darão manutenção ao programa, a se localizarem melhor em meio à 
infinidade de linhas de códigos que estarão presentes no programa. Exemplo:
Outro aspecto importante que deve ser levado em consideração durante a escrita 
de um código é a prática da indentação que permite organizar o código de modo que 
a leitura dele se torne mais fluida.
1 Esclarecimento: Conhecido também como debuging, a depuração é o processo de encontrar 
e/ou reduzir os erros genéricos no código. 
#include <stdio.h>
int main(){
 // este printf deverá imprimir a frase Olá Mundo!!!
 printf(“Ola Mundo!!!”);
 return (0);
}
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 11
Exemplo: Imprimindo uma Linha
Conforme vimos anteriormente em nosso primeiro programa, podemos utilizar co-
mandos específicos para imprimir mensagens no console do DOS. No exemplo apre-
sentado, utilizamos a função printf que permite inserir o texto que desejamos apresen-
tar. A declaração da função printf deve ser feita utilizando parênteses e o texto a ser 
apresentado na tela deve ser escrito entre aspas (duplas). Exemplo:
Com o programa em execução, a mensagem a ser exibida ficará conforme o exem-
plo anteriormente apresentado em nossoprimeiro programa em C, com a frase: Ola 
Mundo. Vale lembrar que, inicialmente, a linguagem C é configurada a partir do idio-
ma inglês, sendo assim, a leitura de textos com acentuação do idioma em português 
requer configuração por meio da função SET LOCALE que veremos mais adiante nas 
próximas unidades. 
A Biblioteca Padrão de C
Nos exemplos que já foram apresentados, pudemos perceber o uso de funções e 
comandos que são responsáveis por realizar ações específicas dentro do programa. 
Isso porque, a linguagem C é caracterizada pela chamada de funções que está presen-
te em sua biblioteca padrão. Esta biblioteca está presente em todos os compiladores 
da linguagem C e é formada por um conjunto mínimo de arquivos de cabeçalho que 
compõem o padrão C ANSI. 
Para Schildt (1997, p. 3), “todo compilador C vem com uma biblioteca C padrão de 
funções que realizam as tarefas necessárias mais comuns, O padrão C ANSI especifi-
ca o conjunto mínimo de funções que estará contido na biblioteca”.
Na tabela a seguir podemos conferir a descrição referente a cada arquivo de cabe-
çalho:
 printf(“Ola Mundo!!!”);
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 12
Biblioteca Descrição
assert.h Auxilia na identificação de erros em versões de depuração de programas.
complex.h Permite o tratamento no que se refere à manipulação de números complexos.
ctype.h Realiza o tratamento de caracteres, como, por exemplo, a conversão de maiúsculas, minúsculas.
errno.h Teste de códigos de erro reportados pelas funções de bibliotecas.
fenv.h Definição de funções para tratamento de exceções em variáveis do tipo ponto flutuante.
float.h Definição de limites e precisão para variáveis do tipo ponto flutuante.
inttypes.h Utilizada para o tratamento de conversão entre variáveis do tipo inteiro.
iso646.h Permite a programação a partir da codificação de caracteres de acordo com a ISO646.
limits.h Define a limitação de recursos
locale.h Permite a formação de acordo com a localização, como moeda, data, acentuação, etc.
math.h Utilizada na manipulação de funções matemáticas.
setjmp.h Permite definir macros (setjmp e longjmp) para saídas não locais e realização do tratamento de exceções.
signal.h Permite receber e realizar o tratamento de sinais específicos.
stdarg.h Utilizada no acesso aos argumentos passados para funções com parâmetro variável.
stdbool.h Tratamento de dados do tipo booleano.
stdint.h Padrões de definição de tipos de dados inteiros.
stddef.h Padrões de definições de tipos.
stdio.h Utilizada para funções de entrada/saída.
stdlib.h Possibilita o uso de funções nas mais diversas operações, como conversão, alocação de memória, controle de processo, funções de busca e ordenação.
string.h Utilizada para funções no tratamento de strings.
tgmath.h Permite implementar facilidades na utilização de funções matemáticas.
time.h Permite o tratamento de tipos de data e hora.
wchar.h Possibilita o tratamento de caracteres para suportar idiomas diversos.
wctype.h Contém funções para classificação de caracteres wide.
Biblioteca C padrão
Fonte: elaborado pelo autor
Basicamente, por se tratar de uma linguagem baseada no uso de funções, em al-
gum momento será inevitável informar a biblioteca correspondente às funções que 
estão sendo chamadas no programa. Caso contrário, o programa certamente não 
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 13
será executado.
1.4 Variáveis e Tipos de Variáveis
Para efetuarmos a manipulação de dados em nossos programas é necessário 
efetuar o armazenamento de determinadas informações e, para isso, utilizamos 
as variáveis. Segundo Lopes e Garcia (2002, p. 25), “uma variável é um espaço na 
memória principal do computador que pode conter diferentes valores e cada ins-
tante de tempo”.
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 certo tipo 
de dado e tendo um nome para referenciar o seu conteúdo. [...] uma variável é um 
espaço de memória que pode contar, a cada tempo, valores diferentes (MIZRAHI, 
2008, p. 13).
Em linguagem C as variáveis mais utilizadas são do tipo: INT, FLOAT e CHAR, 
sendo atribuídos a variáveis numéricas e string (caracteres), em linguagem C, não 
existe o tipo de variável boolean, pois a linguagem considera qualquer valor verda-
deiro, intrinsecamente podemos dizer que todas as variáveis são diferentes de 0. 
Outra particularidade é que variáveis do tipo CHAR armazenam um caractere ou 
um conjunto de caracteres, sendo assim a mesma variável pode armazenar uma 
letra apenas, uma palavra ou frase dependendo de como esta irá ser utilizada no 
programa.
Conforme apresentado, as variáveis são armazenadas na memória do computa-
dor, consequentemente ocupam um determinado valor de bytes; podemos utilizar 
alguns modificadores para determinar o tamanho de armazenamento, estes são: 
unsigned, signed, short e long.
O modificador unsigned utilizamos para declarar como sem sinal, assim dupli-
cando a gama de valores, signed aceita valores positivos e negativos; podemos 
utilizar o short para reduzir a capacidade de armazenamento e o long aumenta a 
capacidade. Vejamos a tabela “Tipos de dados e faixa de valores” a seguir, a qual 
apresenta a faixa de valores e o tamanho aproximado em bytes.
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 14
Tipo Faixa de valores Tamanho em Bytes
char -127 a 127 1
unsigned char 0 a 255 1
signed char -127 a 127 1
int -2.147.483.648 a 2.147.483.647 4
unsigned int 0 a 4.294.967.295 4
signed int -2.147.483.648 a 2.147.483.647 4
short int -32.768 a 32.767 2
unsigned short int 0 a 65.535 2
signed short int -32.768 a 32.767 2
long int -2.147.483.648 a 2.147.483.647 4
signed long int -2.147.483.648 a 2.147.483.647 4
unsigned long int 0 a 4.294.967.295 4
float seis dígitos de precisão 4
double dez dígitos de precisão 8
long double dez dígitos de precisão 10
Tipos de dados e faixa de valores
Fonte: Albano e Albano (2010, adaptado).
A criação ou declaração de uma variável é efetuada no início do programa, no 
caso da linguagem C, logo após da declaração main(), uma variável começa com 
a identificação do seu tipo, após isso, o nome da variável.
 
Sintaxe da declaração de uma variável:
tipo_variavel nome_variavel;
Exemplo de declaração de variável:
int numeros;
float valores;
char caracteres; 
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 15
Vejamos na figura “Estrutura de declaração de variáveis”, a declaração de vari-
ável em linguagem C:
Por vezes, teremos que declarar muitas variáveis do mesmo tipo para utilizar 
no programa, podemos efetuar a declaração na mesma expressão, declarando o 
tipo e, logo em seguida, os nomes das variáveis separadas por vírgula, conforme 
apresentado na figura “Declaração de variáveis do mesmo tipo”, a seguir, em lin-
guagem C. 
Declaração de variáveis do mesmo tipo
Um detalhe importante que devemos atentar é para com os nomes das vari-
áveis, os nomes de referência não podem conter caracteres especiais (acentos, 
%, &, #, dentre outros), espaços e também não podem começar com números, 
vejamos, a seguir, na tabela “Declaração de variáveis de modo incorreto”, algumas 
declarações incorretas em linguagem C.
#include <stdio.h>
main(){
 int numero1; // variável numérica
 int numero2; // variável numérica
 char nome1; // variável srting
 char nome2; // variável string
 /* bloco de código fonte em linguagem C */
}
#include <stdio.h>
int main(){
 int numero1, numero2, numero3; // variável numérica
 char nome1, nome2; // variável string
 /* bloco de código fonte em linguagem C */
}
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 16
Declaraçãoda variável Descrição
float 85telefone; 
int 2nota, 3nota;
char 1end;
char 1lugar, 2lugar;
O nome de referência das variáveis se inicia 
com número.
float número;
int telefone, código;
char endereço;
char município, cidade;
O nome de referência das variáveis contém 
caracteres especiais.
int numero de telefone;
float produto, código do produto;
char nome e sobrenome;
char primeiro nome, número da residência;
O nome de referência contém caracteres es-
peciais e espaços.
Declaração de variáveis de modo incorreto
Fonte: elaborado pelo autor
Devemos também nos atentar no modo de declarar as variáveis, o indicado é se 
utilizar o nome das variáveis sempre em maiúscula ou minúscula, pois em lingua-
gem C se utiliza do conceito de Case Sensitive2; se declararmos o nome de referên-
cia sendo idade, esta será diferente de Idade, IDADE ou iDade. 
Por vezes, temos a percepção de que nosso código pode conter erros, mas na 
verdade, estamos apenas confundindo os nomes das variáveis, pois isso, temos 
que ter atenção sobre os nomes das variáveis declaradas.
Por fim, temos as variáveis reservadas, chamadas como “Palavras reservadas” 
são palavras que não se pode utilizar sendo uma variável criada pelo desenvolve-
dor, toda e qualquer linguagem de programa possui palavras que são de uso exclu-
sivo da linguagem e tem características exclusivas ao serem interpretadas por um 
compilador, vejamos na tabela “Palavras Reservadas”, a seguir, algumas palavras 
reservadas da linguagem C.
2 Esclarecimento: O conceito de case sensitive se baseia na forma de escrita, linguagens que 
usam este conceito fazem diferença nas variáveis, por ex.: Soma e soma, para estas linguagens as 
variáveis são tratadas sendo distintas.
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 17
PALAVRAS RESERVADAS: dessa linguagem são nomes utilizados pelo compilador para re-
presentar comandos de controle do programa, operadores e diretivas.
abstract continue for new switch
assert default if package this
boolean do goto private synchronized
break double implements protected throw
byte else import public throws
case enum instanceof return transient
catch extens int short try
char final interface static void
class finally long strictfp volatile
const float native super while
Palavras reservadas
Fonte: Ascencio e Campos (2010, p. 30).
Conforme já apresentado, as variáveis são os elementos-chave para o funcio-
namento de um software, independente qual seja a linguagem em que ele foi de-
senvolvido. As escolhas pelos nomes e tipos de variáveis podem interferir no bom 
desempenho de um software, por isso que é essencial saber sobre os tipos de 
variáveis e como estas operam.
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 18
AULA 2
ENTRADA E SAÍDA DE DADOS, 
EXPRESSÕES E OPERADORES
Fonte: https://br.freepik.com/fotos-gratis/linguagem-de-programacao-no-local-de-trabalho_902701.htm
Escrever um programa em linguagem C requer a definição de alguns elementos 
essenciais. Conforme mencionado anteriormente, os arquivos de cabeçalho são 
responsáveis por definir o ponto inicial de um programa escrito em linguagem C. 
Sendo assim, essa é uma informação que precisa estar presente nas primeiras 
linhas do programa antes mesmo da função main
2.1 Funções I/O
As operações de entrada e saída são realizadas por funções específicas que 
são responsáveis por garantir a leitura e a impressão dos dados de acordo com 
seu tipo. Essas funções são o scanf e printf, que inclusive vimos exemplificado em 
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 19
nosso primeiro programa em C (“Ola Mundo”). A função scanf permite realizar a 
leitura de dados a partir de uma fonte externa, como, por exemplo, o que é digitado 
no teclado pelo usuário. Já a função printf é responsável por exibir os valores na 
tela.
A função printf pode ser utilizada em sua sintaxe básica ou por meio da utiliza-
ção de argumentos que permitem apresentar textos e valores de variáveis. 
Exemplo:
Sintaxe básica:
printf(“Mensagem que será apresentada na tela para o usuário:”); 
Utilizando argumentos:
printf(“Sua renda mensal é: R$ %f”, renda);
Neste segundo exemplo, o %f define o local onde será escrita a variável do tipo 
float. E o “total” representa a variável apresentada na posição %f.
Já a função scanf possui uma sintaxe um pouco diferente, pois obrigatoriamen-
te requer o uso de argumentos que definem o tipo de dado da variável que será 
lida. A sintaxe básica é dada da seguinte forma:
scanf(“expressão de controle”, lista de argumentos);
Exemplo prático: scanf(“%f”, &renda);
Neste exemplo, nossa lista de argumento é responsável por informar o ende-
reço da variável (renda), para a qual utilizamos o símbolo & como prefixo. Assim 
como no exemplo do printf, o %f representa o tipo de variável que deverá ser lida 
pela função scanf. Mais adiante, veremos sobre os tipos e variáveis que compõem 
a linguagem C. No entanto, para este tópico é importante destacar os tipos bási-
cos de dados, bem como sua respectiva representação. Confira a Tabela “Tipos 
básicos de variáveis”, a seguir.
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 20
Tabela 2: Tipos básicos de variáveis
Fonte: elaborado pelo autor.
 
Certamente, estes tipos de dados são apenas uma breve representação, for-
mando uma composição básica ou tipos primitivos. Mas, boa parte do que iremos 
aprender em linguagem C será contemplado por estes tipos de dados. 
2.2 Operadores Relacionais e Lógicos
Seja qual for a linguagem de programação, ao escrever um código, muitas vezes 
se faz necessário o uso de operadores lógicos e/ou relacionais que permitem reali-
zar comparações de verdadeiro ou falso. Embora ofereçam recursos semelhantes, 
vale ressaltar que se tratam de operadores com funções distintas. 
De acordo com Schildt (1997, p. 74), “no termo operador relacional, relacional 
refere-se às relações que os valores podem ter uns com os outros. No termo ope-
rador lógico, lógico refere-se às maneiras como essas relações podem ser conec-
tadas”. Enquanto os operadores relacionais são utilizados para estabelecer as re-
lações que podem ocorrer entre os valores comparados, os operadores lógicos 
estão diretamente relacionados à maneira como estas relações podem acontecer. 
Operadores Relacionais
Operadores relacionais também são conhecidos como operadores de compara-
ção, pois, possibilitam estabelecer uma relação de comparação entre dois valores 
ou duas variáveis. Também é possível que esta relação de comparação seja feita 
entre um determinado valor e uma variável. Um exemplo simples disso é quando, 
pretende-se saber se o valor da variável Saldo é maior do que o valor 0. Neste 
caso, estamos apenas fazendo uma comparação entre uma variável e um valor. 
Ao escrever o código, essa comparação deve ser apresentada da seguinte forma: 
Saldo > 0
Tipo de dado Representação Formato
caractere char %c
inteiro int %d ou %i
real float %f
cadeia de caracteres char[] %s
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 21
Além do operador de comparação maior (>), visto no exemplo apresentado, exis-
tem outros operadores relacionais ou de comparação que são muito utilizados no 
desenvolvimento de programas em linguagem C. Vejamos a tabela “Operadores 
relacionais”, a seguir.
Operadores relacionais
Fonte: elaborado pelo autor
Ao realizar comparações de valores e/ou variáveis, o resultado obtido precisa 
ser um valor lógico, ou seja, verdadeiro ou falso. Considerando o exemplo do Saldo 
(apresentado acima), se o valor da variável Saldo for maior do que 0 (verdadeiro), 
significa que a conta bancária possui dinheiro disponível. Caso contrário (falso), a 
conta não possui dinheiro disponível.
OperadoresLógicos
Já os operadores lógicos realizam um outro tipo de verificação, mas que tam-
bém está baseada na ideia de verdadeiro ou falso. Em diversas linguagens de pro-
gramação são utilizados três operadores que foram definidos a partir da Álgebra 
Booleana. Vejamos a tabela “Operadores lógicos” a seguir:
Operador Função Descrição
|| disjunção OU lógico (OR)
&& conjunção E lógico (AND)
! negação Negação (NOT)
Operadores lógicos
Fonte: elaborado pelo autor
Operador Função Exemplo
<> Diferente 1 <> 2, X <> Y
== Igual a 1 == 1, X == Y
> Maior que 2 > 1, X > Y
< Menor que 1 < 2, X < Y
>= Maior ou igual a 2 >= 1, X >= Y
<= Menor ou igual a 1 <= 2, X <= Y
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 22
É importante ressaltar que na programação operadores possuem precedência 
sobre outros, assim como ocorre na matemática. Dessa forma, algumas opera-
ções possuem prioridade em relação às demais. Considerando os tipos de ope-
radores que foram vistos neste capítulo referentes à linguagem C, a ordem de 
prioridade entre eles é representada, a seguir, na tabela “Precedência operadores”.
!, != NOT (Negação) 
Maior prioridade
Menor prioridade
&& AND (E lógico)
|| OR (OU lógico)
=, <>, >, <, >=, <= Operadores relacionais
? : Operador ternário
Tabela 6: Precedência operadores
Fonte: elaborado pelo autor
É importante estar atento à ordem de prioridade de cada operador, pois isso 
impacta diretamente no resultado final no código que está sendo escrito. 
Operador Ternário (?)
O operador ternário permite verificar uma determinada condição e em seguida 
retornar um entre dois valores previamente definidos. Este tipo de operador apre-
senta-se como uma alternativa para a estrutura de decisão IF, que veremos mais 
adiante neste capítulo. No entanto, vale ressaltar que não se trata de uma estrutu-
ra de decisão propriamente dita, mas sim de um atalho que pode ser utilizado em 
situações mais simples. Enquanto a estrutura IF utiliza ao menos quatro linhas de 
código na escolha entre duas opções, o operador ternário possui uma estrutura 
linear (inline), na qual a mesma situação pode ser executada em apenas uma linha 
de código. A sintaxe do operador ternário é apresentada abaixo:
condição? primeira_expressão : segunda_expressão;
Enquanto o sinal de interrogação (?) é utilizado para testar a condição desejada, 
o sinal de dois pontos ( : ) é responsável por separar os valores que serão retorna-
dos, caso a condição informada seja verdadeira ou falsa. A “primeira_expressão” 
retorna o valor caso a condição testada seja verdadeira. Caso contrário, o valor 
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 23
retornado será o da “segunda_expressão”, (condição testada for falsa). Vejamos a 
figura “Exemplo operador ternário”.
Exemplo operador ternário
Fonte: elaborado pelo autor
Neste trecho será feito o teste relacional para verificar qual dos dois valores in-
formados é o maior. Caso o valor de “a” seja maior, então a variável “maior” recebe 
o seu valor. Caso contrário será o valor de “b”. 
2.3 Operações Aritméticas
Operadores aritméticos são utilizados para efetuar cálculos em um software, 
por meio destes, obtemos resultados numéricos que podem ser utilizados dentro 
do software, sendo utilizados com variáveis do tipo inteiro (INT) ou real (FLOAT), 
não sendo aplicados em expressões com caracteres. 
As expressões estão diretamente relacionadas ao conceito de fórmula mate-
mática, em que um conjunto de variáveis e constantes relaciona-se por meio de 
operadores (LOPES; GARCIA, 2002).
Vejamos na tabela “Operadores aritméticos” a seguir, os operadores aritméticos 
utilizados na linguagem C, suas representações e forma de uso:
#include <stdio.h>
int main(){
 int a, b, maior;
 
 printf(“Informe o primeiro numero: “);
 scanf(“%d”, &a);
 printf(“Informe o segundo numero: “);
 scanf(“%d”, &b);
 // verificar os valores de a e b com operador ternário
 maior = a > b ? a : b;
 printf(“O valor maior e: %d”, maior);
 return(0);
}
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 24
OPERAÇÃO OPERADOR DESCRIÇÃO
Soma +
Operador utilizado para efetuar a soma de variáveis. Exemplo: 
duas variáveis do tipo inteiro A e B, para efetuar a soma dos 
valores atribuídos destas variáveis vamos utilizar a seguinte ex-
pressão: A + B.
Subtração -
Simboliza a subtração de variáveis. Exemplo: duas variáveis do 
tipo inteiro C e D, para efetuar a subtração dos valores atribuídos 
destas variáveis vamos utilizar a seguinte expressão: C – D.
Multiplicação *
Utilizado para efetuar a multiplicação de variáveis. Exemplo: 
duas variáveis do tipo inteiro C e D, vamos utilizar a seguinte 
expressão: C * D.
Divisão / É operador utilizado para a divisão entre variáveis. Exemplo A / B.
Resto %
Usamos esta expressão quando queremos encontrar o resto da 
divisão entre duas variáveis. Dadas as seguintes variáveis A=3 e 
B=2, usamos A%B, o resultado desta expressão será o número 1. 
Operadores aritméticos
Fonte: elaborado pelo autor
Os mais variados softwares desenvolvidos se utilizam de algumas expressões arit-
méticas apresentadas, pode-se utilizar os operadores de modo simples, sendo A + B 
ou podemos efetuar expressão mais complexas como A + B / C - D, note que utilizados 
diversos operadores na mesma expressão, para exemplificar melhor, observe o código 
fonte abaixo, ilustrado na figura “Código fonte, operadores aritméticos”. 
 Código fonte, operadores aritméticos
#include <stdio.h>
#include <stdlib.h>
main(){
 int A = 55;
 int B = 68;
 int C = 38; 
 int D = 2;
 int resultado1, resultados2;
 resultado1 = A + B;
 printf(“%d”, resultado1);
 printf(“%n”); // utilizamos o \n quando queremos forçar uma quebra de linha
 resultado2 = A + B / C – D; 
 printf(“%d”, resultado2); 
}
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 25
Observe que ao declararmos as variáveis já estamos atribuindo os valores delas, 
geralmente utilizamos esta estratégia quando estamos trabalhando com valores 
fixos no código, mas em algumas situações apenas declaramos as variáveis e atri-
butos, os valores por meio da leitura do que o usuário digita, por meio do scanf(), 
conforme estudado anteriormente. Vejamos, na figura “Programa em execução, 
operadores aritméticos”, o resultado deste código fonte depois de compilado e 
executado.
Programa em execução, operadores aritméticos
Elaborado pelo autor.
 
Devemos atentar para dois pontos muito importantes neste código que acaba-
mos de desenvolver:
1º Ponto: quando trabalhamos com variáveis do tipo int os resultados sempre 
serão valores inteiros como 1, 63, 157, entre outros. Quando precisamos trabalhar 
com valores que se utilizam de separações, como a altura 1.75, aplicamos o tipo 
de variável float.
2º Ponto: note a que o resultado 2 obteve o valor de 54 na expressão A + B / C 
- D, o valor correto seria 1, mas o porquê deste valor 54, então? A resposta é bem 
simples, o computador não efetua o cálculo de modo linear: resultado de A + B 
depois / C e posteriormente - D. O que acontece é que o computador elenca priori-
dades, operadores aritméticos como multiplicação (*) e divisão (/) recebem peso 
maior na expressão do que os operadores de soma (+) e subtração (-). 
Para resolver o problema apontado no segundo ponto basta priorizar o cálculo 
manualmente, atribuindo o que deseja executar primeiro dentro dos parentes, igual 
a cálculos matemáticos convencionais, vejamos, na figura “Código fonte, operado-
res aritméticos com prioridades”, o código fonte com esta atribuição.
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 26
Código fonte, operadores aritméticos com prioridades
Elaborado pelo autor.
Agora, vejamos na figura “Programa em execução,operadores aritméticos com 
prioridades”, o resultado do código compilado e executado.
Programa em execução, operadores aritméticos com prioridades
Fonte: elaborado pelo autor.
 
Com a atribuição da prioridade o resultado da operação aritmética está de acor-
do com o esperado, dependendo do cálculo que desejamos, podemos ter vários 
pontos de prioridades em uma operação, como exemplo (A+B) / (C-D), a leitura 
desta operação será: o resultado de A+B será dividido por C, o resultado é poste-
riormente subtraído por D, desta forma conseguimos obter o resultado esperado 
sem problemas. Observe que o valor apresentado é 1 e não 1,23 este resultado não 
é apresentado, pois a declaração da variável é como inteiro.
#include <stdio.h>
#include <stdlib.h>
main(){
 int A = 55;
 int B = 68;
 int C = 38; 
 int D = 2;
 int resultado1, resultados2;
 resultado1 = A + B;
 printf(“%d”, resultado1);
 printf(“%n”); // utilizamos o \n quando queremos forçar uma quebra de linha
 resultado2 = (A + B) / C – D; 
 printf(“%d”, resultado2); 
}
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 27
2.4 Operadores de Atribuição e Acumuladores
Conforme apresentado no tópico anterior, os operadores aritméticos são de 
grande importância e são utilizados constantemente nos códigos fontes de diver-
sos softwares. 
Outros operadores muito úteis são os de atribuição e acumulação, os quais 
recebem valores e os trata de modo simplificado, por exemplo: X = X + Y, podemos 
atribuir para X += Y, o elemento de atribuição += pega o valor acumulado na variá-
vel X e soma o valor que está contido em Y, esses tipos de operadores são muito 
utilizados, vejamos na tabela “Operadores de atribuição e acumulação”, a seguir, 
outros operadores e suas funções:
Operador Exemplo Descrição
+= A += B Equivale a A = A + B
-= A -= B Equivale a A = A - B
*= A *= B Equivale a A = A * B
/= A /= B Equivale a A = A / B
%= A %= B Equivale a A = A % B
++ C++ Equivale a C = C + 1
C = ++D Equivale a D = D + 1 depois C = D
C = D++ Equivale a C = D depois D = D + 1
-- F-- Equivale a F = F - 1
F = --G Equivale a G = G - 1 depois F = G
F = G-- Equivale a F = G depois G = G - 1
Operadores de atribuição e acumulação
Fonte: adaptado de Ascencio e Campos (2010).
Os operadores de acumulação e atribuição são utilizados para representar de 
maneira sintética uma operação aritmética, para aprimorar nossos estudos, ve-
jamos os mesmos sendo utilizados no código a seguir, conforme ilustra a Figura 
Código fonte, operadores atribuição e acumulação.
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 28
Código fonte, operadores atribuição e acumulação
Vejamos, agora na Figura “Programa em execução, atribuição e acumulação”, o 
resultado do código compilado e executado.
Programa em execução, atribuição e acumulação
Fonte: elaborado pelo autor
O que devemos observar é que o computador lê as informações por ordem de 
entrada, no caso da operação A-- antes da operação D-=A, o valor de A na segunda 
operação não será 55, mas sim 54, pois efetuamos o decremento do valor de 55 
antes, temos que tomar cuidado onde inserir os operadores de atribuição ou acu-
mulação em nossos códigos, pois um simples erro de posicionamento pode gerar 
problemas futuros.
#include <stdio.h>
#include <stdlib.h>
main(){
 int A = 55;
 int B = 68;
 int C = 38; 
 int D = 2;
 int h, i, j, k;
 B+=D;
 D-=A;
 C++;
 A--;
 printf(“%d \n”, B); 
 printf(“%d \n”, D); 
 printf(“%d \n”, C); 
 printf(“%d \n”, A); 
}
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 29
2.5 Exemplos Dirigidos
Imaginamos que uma determinada empresa foi contratada para desenvolver 
um software para uma instituição de ensino, um dos requisitos deste sistema é a 
geração do boletim de notas dos alunos matriculados, em conversa com o diretor 
desta instituição foi informado que a nota final dos alunos que deve constar no 
boletim é a média3 de notas dos quatro bimestres do ano.
Pensando em atender este requisito, elaborou o seguinte código fonte em lin-
guagem C, ilustrado na Figura “Código fonte, média de notas”, a seguir.
Código fonte, média de notas
Fonte: elaborado pelo autor
3 Afirmação: O cálculo da média se dá pela soma dos grupos e depois dividindo pela quantida-
de de grupos. Ex.: (1+2+3+4)/4.
#include <stdio.h>
#include <stdlib.h>
#define bim 4
main(){
 
 float nota1, nota2, nota3 nota4, media;
 printf(“Informe a nota do 1 Bimestre: ”);
 scanf(“%f”, &nota1); 
 printf(“Informe a nota do 2 Bimestre: ”);
 scanf(“%f”, &nota2);
 printf(“Informe a nota do 3 Bimestre: ”);
 scanf(“%f”, &nota3);
 printf(“Informe a nota do 4 Bimestre: ”);
 scanf(“%f”, &nota4);
 media = (nota1 + nota2 + nota3 + nota4) / bim;
 printf(“Media final do aluno: %.1f”, media);
 
}
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 30
No código-fonte apresentado, temos as seguintes composições:
 A definição da quantidade de bimestres utilizando uma constante #define 
bim 4;
 Foram criadas cinco variáveis do tipo real float nota1, nota2 nota3, nota4, 
media;
 É utilizado o comando printf para informar ao usuário o que digitar;
 O comando scanf, conforme vimos, é utilizado para efetuar a entrada de 
dados;
 É atribuído para a variável média o cálculo da média das notas de um alu-
no;
 Por fim, o resultado da média de notas do aluno é apresentado na tela, 
utilizamos a expressão %. 1f para que seja mostrado apenas um número após o 
ponto.
Vejamos na figura “Programa em execução, média de notas”, a seguir, o código-
-fonte após ele ter sido compilado e executado.
Programa em execução, média de notas
Fonte: elaborado pelo autor
 
Podemos observar as entradas de dados para as variáveis, as quais compõem 
o cálculo da média (6.8+7.5+5.5+6.3), como já foi definido a quantidade de bimes-
tres no início do código, basta então pegar o resultado da soma das entradas de 
dados (21.1) e dividir por 4, assim obtendo a média do aluno e a quantidade de 
valores que deve aparecer após o ponto.
 
Recebendo e Imprimindo Caracteres
Todo e qualquer programa desenvolvido com dois princípios básicos, o de re-
ceber dados dos usuários e o de imprimir os caracteres, sejam eles números ou 
letras, na tela para o usuário. Para este procedimento, vamos nos utilizar dos co-
mandos scanf(), para a entrada de dados e printf() para a imprimir os dados.
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 31
Neste exemplo, vamos imaginar que você está testando os seus conhecimen-
tos em linguagem C, e que, gostaria de efetuar um programa que perguntasse para 
um usuário qual o seu primeiro nome, sobrenome, idade e altura, e após todas as 
informações preenchidas, imprimisse na tela os dados digitados. 
Vejamos na figura “Código fonte, recebendo e imprimindo dados”, a seguir, como 
seria o seu código fonte em linguagem C.
Código fonte, recebendo e imprimindo dados
Fonte: elaborado pelo autor
 
Perceba, aluno(a), que neste código-fonte mesclamos vários tipos que irão rece-
ber os dados digitados pelos usuários, isso é muito comum nos sistemas desen-
volvidos, nos quais contamos com diversas declarações de variáveis diferentes. 
#include <stdio.h>
#include <stdlib.h>
main(){
 char nome[50], sobrenome[50];
 int idade;
 float altura;
 printf(“Informe qual o seu primeiro nome: “);
 scanf(“%s”, &nome);
 printf(“Informe qual o seu sobrenome: “);
 scanf(“%s”, &sobrenome);
 printf(“Informe a sua idade: “);
 scanf(“%d”, &idade);
 printf(“Informe sua altura: “);
 scanf(“%f”, &altura);
 system(“cls”); // limpa a tela para a impressão dos dados - Windows
 // system(“clear”); // limpaa tela para a impressão dos dados - linux
 printf(“Nome e sobrenome do usuario: %s %s \n”, nome, sobrenome);
 printf(“Idade do usuario: %d \n”, idade);
 printf(“Altura do usuario: %.2f \n”, altura);
}
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 32
Vejamos na Figura “Programa em execução, recebendo dados”, a seguir, o progra-
ma em execução para a entrada de dados:
Programa em execução, recebendo dados
Fonte: elaborado pelo autor
Após o usuário ter digitado todos os seus dados, a tela é limpa, por meio do sys-
tem(“cls”), sendo retornado apenas os dados impressos na tela, conforme a figura 
“Programa em execução, imprimindo dados”, a seguir. 
 Programa em execução, imprimindo dados
Fonte: elaborado pelo autor
Perceba que os dados de entrada digitados pelo usuário são apagados da tela, 
mas ainda estão armazenados na memória do computador, por isso que consegui-
mos imprimir os caracteres de entrada na tela sem problemas, podemos utilizar 
a função system() para deixar a tela mais limpa, sem uma poluição visual para o 
usuário assim ele pode compreender mais fácil as informações que estão sendo 
impressas na tela. 
Cálculo de IMC
Imaginamos que você é um programador recém-contratado em uma empresa 
de desenvolvimento de software, e o seu primeiro programa a ser desenvolvido em 
linguagem C é o sistema de acompanhamento de cálculo de IMC de uma acade-
mia, vejamos a seguir os requisitos apresentados pelos stakeholders4.
4 Esclarecimento: Stakeholders são partes interessadas, no contexto, podemos afirmar serem 
os donos do projeto. É um termo utilizado em diversas áreas como gestão de projetos, comunicação 
social, desenvolvimento de software, engenheiro de requisito, dentre outras áreas.
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 33
Requisitos do sistema
 O sistema deve armazenar e mostrar na tela o nome e a idade do aluno.
 Efetuar o cálculo de IMC do 1º e 2º mês, com base nos dados forneci-
dos pelo professor na academia.
 No final, deve-se mostrar na tela, de modo limpo, apenas os dados do 
aluno, seguido dos dados dos cálculos de IMC e a diferença entre os dois pri-
meiros meses.
 Também é muito importante apresentar a quantidade de meses que o 
aluno terá um acompanhamento junto ao professor da academia.
Após analisar dos requisitos levantados foi se desenvolvido o seguinte 
código fonte, apresentado no Quadro Código fonte, sistema de cálculo de IMC, 
a seguir.
#include<stdio.h>
#include<stdlib.h>
#include<locale.h>
#define plano 4
int main() {
 setlocale(LC_ALL, “Portuguese”);
 float peso1, altura1, IMC1;
 float peso2, altura2, IMC2;
 float diferenca;
 char nome[50];
 int idade;
 
 printf(“Digite o nome do aluno: “);
 scanf(“%s”, &nome);
 
 printf(“Digite a idade do aluno: “);
 scanf(“%d”, &idade);
 system(“cls”); // limpa a tela para a impressão dos dados Windows
 //system(“clear”); // limpa a tela para a impressão dos dados linux 
 
 printf(“Digite os dados para o cálculo de IMC do 1º Mês\n\n”);
 printf(“Digite o peso: “);
 scanf(“%f”, &peso1);
 
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 34
Código fonte, sistema de cálculo de IMC
Fonte: elaborado pelo autor
 
Podemos observar que o código-fonte desenvolvido traz todos os elementos 
que estudamos nesta unidade, conforme já apresentado em tópicos anteriores é 
comum nos sistemas desenvolvidos termos várias funções e entradas de dados 
em um sistema, onde contamos com diversas declarações de variáveis diferentes. 
Vejamos um passo a passo até a execução final do programa.
 printf(“Digite a altura: “);
 scanf(“%f”, &altura1); 
 IMC1 = peso1 / (altura1*altura1);
 system(“cls”); // limpa a tela para a impressão dos dados Windows
 //system(“clear”); // limpa a tela para a impressão dos dados linux 
 
 printf(“Digite os dados para o cálculo de IMC do 2º Mês\n\n”);
 printf(“Digite o peso: “);
 scanf(“%f”, &peso2);
 
 printf(“Digite a altura: “);
 scanf(“%f”, &altura2);
 
 IMC2 = peso2 / (altura2*altura2);
 
 system(“cls”); // limpa a tela para a impressão dos dados Windows
 //system(“clear”); // limpa a tela para a impressão dos dados linux
 
 diferenca = IMC1 - IMC2;
 
 printf(“Nome do aluno: %s \n”, nome);
 printf(“Idade do aluno: %d \n”, idade); 
 printf(“-----------------------------\n”);
 printf(“IMC do 1º Mês: %.2f \n”, IMC1); 
 printf(“IMC do 2º Mês: %.2f \n”, IMC2); 
 printf(“-----------------------------\n”);
 printf(“Diferença entre o IMC do 1º e 2º Mês: %.2f \n”, diferenca); 
 printf(“Quantidade de acompanhamento com base no plano contratado: %d 
\n”, plano); 
}
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 35
1º Passo - Dados de entrada do aluno, ilustrado na figura “Programa em execu-
ção, sistema de cálculo de IMC”.
Programa em execução, sistema de cálculo de IMC
Fonte: elaborado pelo autor
2º Passo - Dados para cálculo de IMC do 1º mês, ilustrado na Figura Programa 
em execução, sistema de cálculo de IMC.
Figura: Programa em execução, sistema de cálculo de IMC
Fonte: elaborado pelo autor
3º Passo - Dados para cálculo de IMC do 1º mês, ilustrado na figura “Programa 
em execução, sistema de cálculo de IMC”.
Programa em execução, sistema de cálculo de IMC
Fonte: elaborado pelo autor
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 36
4º Passo - Resultado final, ilustrado na figura “Programa em execução, sistema 
de cálculo de IMC”.
Programa em execução, sistema de cálculo de IMC
Fonte: elaborado pleo autor
Conforme os dados de entrada são digitados pelo usuário, este são apagados 
da tela, mas continuam na memória do computador, após o preenchimento de 
todos os dados e os cálculos efetuados, imprimimos na tela o que foi requisitado 
pelos stakeholders do projeto.
Podemos dizer que ao término de seu primeiro programa desenvolvido em lin-
guagem C é possível compreender os diversos elementos que irão lhe ajudar a de-
senvolver os seus primeiros algoritmos e além de enriquecer o seu conhecimento 
sobre a linguagem C. 
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 37
AULA 3
INSTRUÇÕES CONDICIONAIS
DE DECISÃO 
Fonte: https://pixabay.com/pt/photos/decis%c3%a3o-dist%c3%a2ncia-lista-jun%c3%a7%c3%a3o-5291766/
Em determinados momentos devemos tomar decisões a partir de perguntas 
ou situações geradas, tais como: qual a carreira profissional devo seguir? Devo 
ou não viajar? Caso o tempo esteja virado para chuva, vou trabalhar de moto ou 
carro?
Em um software isso também acontece, se determinadas situações ou variá-
veis apresentarem certos acontecimentos, o software poderá tratar determinados 
blocos de códigos, chamamos isso de desvio condicional, em que, caso a situação 
for favorável ou não se executar um trecho de código estabelecido, efetuamos 
este processo por meio das expressões if e if-else. 
Em nosso livro, estudamos a linguagem C, entretanto, toda e qualquer lingua-
gem de programação possui estas expressões de desvio condicional, para auxiliar 
https://pixabay.com/pt/photos/decis%c3%a3o-dist%c3%a2ncia-lista-jun%c3%a7%c3%a3o-5291766/
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 38
seus usuários em suas tarefas ou tomada de decisões.
3.1 Instrução Condicional Simples
A estrutura condicional if é utilizada quando se trata de seleções simples, do 
tipo SE - ENTÃO, a qual é testada antes de executar um trecho de código, de modo 
bem simples podemos dizer que se a condição for atendida, um bloco de instru-
ções/códigos será executado, caso contrário não se executa nada.
Segundo Forbellone e Eberspacher (2005, p.33),
[...] uma estrutura de seleçãosimples permite a escolha de um grupo 
de ações (bloco) a ser executado quando determinadas condições, 
representadas por expressões lógicas ou relacionais, são ou não 
satisfeitas.
Para melhor compreensão, vejamos a figura “Diagrama de execução da função 
SE – ENTÃO”, a seguir:
 
Diagrama de execução da função SE - ENTÃO 
Fonte: Forbellone e Eberspacher (2005, p. 34).
A expressão lógica ou condição a ser se refere a uma condição que deve ser 
retornar como verdadeiro. Para lhe ajudar a entender, vamos imaginar que temos 
duas variáveis de entrada A e B e os seus valores respectivos são 1 e 2, vejamos 
possíveis condições:
A > B = caso a condição seja verdadeira o bloco será executado
A > B = caso a condição seja falsa o bloco não será executado.
No caso de nosso exemplo, a condição de A maior que B não será atendida 
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 39
(falsa), pois 1 não é maior que 2 tendo um retorno falso para expressão. Para 
compor a expressão condicional, podemos utilizar qualquer um dos operadores 
relacionais. Em linguagem C a forma de escrever a função if no código fonte é da 
seguinte forma, observe a figura “Comando condicional simples”, a seguir.
Comando condicional simples
Fonte: elaborado pelo autor
Observe que a condição a ser validada está entre os parênteses ( ) e o bloco 
de execução está entre chaves { }, conforme podemos notar no diagrama, caso 
a condição for atendida, todo o conjunto de código que estiver entre chaves será 
executado, caso não for atendida a condição, será ignorado. Vejamos um exemplo 
prático se baseando do algoritmo de média de notas do aluno:
Estrutura de declaração da função if
#include <stdio.h>
#include <stdlib.h>
#define bim 4
mai(){
 float nota1, nota2, nota3, nota4, media;
 printf(“Informe a nota do 1 Bimestre: “);
 scanf(“%f”, &nota1);
 printf(“Informe a nota do 2 Bimestre: “);
 scanf(“%f”, &nota2);
 printf(“Informe a nota do 3 Bimestre: “);
 scanf(“%f”, &nota3);
 printf(“Informe a nota do 4 Bimestre: “);
 scanf(“%f”, &nota4);
 media=(nota1+nota2+nota3+nota4)/bim;
 printf(“Media final do Aluno: %.1f \n”, media);
 if(media >= 7.0){ // expressão condicional a ser testada
 printf(“Aluno Aprovado :)”);
 }
}
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 40
Ao executar este algoritmo, podemos obter duas situações mediante à ex-
pressão condicional a ser testada, caso a média de notas do aluno for maior 
ou igual a 7, irá apresentar na tela a frase “Aluno Aprovado :)”, caso for menor, 
o trecho é ignorado, vejamos o algoritmo em execução na figura “Retorno da 
expressão condicional verdadeira” e na figura “Retorno da expressão condicio-
nal falsa”.
Retorno da expressão condicional verdadeira
 Fonte: elaborado pelo autor
Retorno da expressão condicional falsa
Fonte: elaborado pelo autor
Perceba que no exemplo apresentado estamos validando apenas uma expressão 
(media >= 7), mas podemos utilizar expressões e operadores lógicos em conjunto 
para validar a expressão condicional da função if, para isso vamos utilizar o conceito 
da tabela verdade. Imagine que no algoritmo de média de notas que acabamos para o 
aluno ser aprovado ele tenha que atender os critérios:
1º Objeto A (media >= 7)
2º Objeto B (nota4 > 6)
Agora, para que o aluno seja aprovado, ele tem que atender às duas condições, 
neste caso, ambas devem retornar como verdadeiro (operador lógico &&), acompanhe 
o teste de mesa na tabela “Verdade condição &&”, a seguir:
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 41
TABELA VERDADE
Objeto A Objeto B A e B Condição do aluno
Verdadeiro Verdadeiro Verdadeiro Aprovado
Verdadeiro Falso Falso Reprovado
Falso Verdadeiro Falso Reprovado
Falso Falso Falso Reprovado
Tabela verdade condição &&
Fonte: elaborado pelo autor
Mas se a nossa expressão condicional fosse apresentada em vez de &&, ambas as 
expressões verdadeiras, fosse utilizado OU (operador lógico II), uma ou outra expres-
são verdadeira, vejamos, a seguir, na tabela “Verdade condição II”.
TABELA VERDADE
Objeto A Objeto B A ou B Condição do aluno
Verdadeiro Verdadeiro Verdadeiro Aprovado
Verdadeiro Falso Verdadeiro Aprovado
Falso Verdadeiro Verdadeiro Aprovado
Falso Falso Falso Reprovado
Tabela verdade condição II
Fonte: elaborado pelo autor
 A estrutura do algoritmo irá ficar a mesma, apenas será inserida outra expres-
são condicional para a tomada de decisão, junto com um operador lógico, podemos 
também ter no mesmo código várias funções IF, efetuando outros testes com outras 
expressões condicionais, vejamos o exemplo, a seguir:
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 42
Função If com operadores lógicos
Fonte: elaborado pelo autor
Veja que no mesmo algoritmo temos duas funções IF, cada função tem expressões 
condicionais e operadores lógicos, vejamos o algoritmo em execução na figura “Re-
torno do algoritmo atendendo apenas a segunda função IF” e na figura “Retorno do 
algoritmo atendendo apenas a primeira função IF”.
#include <stdio.h>
#include <stdlib.h>
#define bim 4
mai(){
 float nota1, nota2, nota3, nota4, media;
 printf(“Informe a nota do 1 Bimestre: “);
 scanf(“%f”, &nota1);
 printf(“Informe a nota do 2 Bimestre: “);
 scanf(“%f”, &nota2);
 printf(“Informe a nota do 3 Bimestre: “);
 scanf(“%f”, &nota3);
 printf(“Informe a nota do 4 Bimestre: “);
 scanf(“%f”, &nota4);
 media=(nota1+nota2+nota3+nota4)/bim;
 printf(“Media final do Aluno: %.1f \n”, media);
 if(media >= 7.0 && nota4 >=6){ // expressão condicional a ser testada 
com operador lógico &&
 printf(“Aluno Aprovado :) \n”);
 }
 if(nota2 > nota1 || nota4 > nota3){ // expressão condicional a ser testada 
com operador lógico ||
 printf(“Entre os bimestres o aluno aumentou a sua nota.”);
 }
}
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 43
Retorno do algoritmo atendendo apenas a segunda função IF
Fonte: elaborado pelo autor
Retorno do algoritmo atendendo apenas a primeira função IF
Fonte: elaborado pelo autor
3.2 Instrução Condicional Composta
Podemos notar que no tópico anterior a estrutura condicional IF atende em cená-
rios diferentes, entretanto nota-se que o resultado da estrutura ID trata apenas con-
dições verdadeiras e não casos de retornos falsos, não apresentando nenhum tipo 
de mensagem caso as condições retornassem como “falso”, nestes casos podemos 
utilizar o desvio condicional composto o SE – SENÃO. Vejamos um exemplo em pseu-
docódigo, ilustrado na figura “Representação textual, sobre desvio condicional com-
posto”, a seguir.
Representação textual, sobre desvio condicional composto
Fonte: elaborado pleo autor
Em linguagem C, este tipo de função é expressada sendo IF - ELSE, função está 
muito utilizada, pois, desta forma, o usuário não fica sem resposta, ou em outros ca-
sos, se pode executar outro trecho de código, como se fosse um plano de contingên-
cia. O Plano de Contingência é o planejamento preventivo e alternativo para atuação 
durante um evento que afete as atividades normais da organização. 
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 44
Segundo Forbellone e Eberspacher (2005, p.35),
[...] quando tivermos situações em que duas alternativas dependem 
de uma mesma condição, uma de condição verdadeira e outra de a 
condição falsa, usamos a estrutura de seleção composta. Supondo 
que um conjunto de ações dependa da avaliação verdadeiro e uma 
única ação primitiva dependa da avaliação falso. 
Para melhor compreensão, vejamos o diagrama a seguir, ilustrado na Figura Dia-
grama de execução da função SE - SENÃO.
Diagrama de execução da função SE - SENÃO
Fonte: Forbellone e Eberspacher (2005, p.36)
O pseudocódigo apresentado executa a expressão condicional sobrea nota de um 
aluno, se for maior ou igual a 7, tornando-se assim uma condição verdadeira, será 
impresso na tela “Aprovado”, em caso da condição retornar falsa, será impresso “Re-
provado”. Vejamos a estrutura do trecho de código em linguagem C, apresentado na 
figura “Código de exemplo expressão condicional composta”.
Código de exemplo expressão condicional composta
Fonte: elaborado pelo autor
Para compreender como funciona a estrutura de IF - ELSE, vamos utilizar o mesmo 
algoritmo com a função IF e complementar com a estrutura ELSE. Vejamos o código 
fonte a seguir na figura “Função If - else com operadores lógicos”.
 
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 45
Função If - else com operadores lógicos
Fonte: elaborado pelo autor 
 
Com base no código fonte apresentado, agora temos duas opções de respostas 
caso o aluno tenha sido aprovado ou reprovado, isso também se reflete sobre as no-
#include <stdio.h>
#include <stdlib.h>
#define bim 4
mai(){
 float nota1, nota2, nota3, nota4, media;
 printf(“Informe a nota do 1 Bimestre: “);
 scanf(“%f”, &nota1);
 printf(“Informe a nota do 2 Bimestre: “);
 scanf(“%f”, &nota2);
 printf(“Informe a nota do 3 Bimestre: “);
 scanf(“%f”, &nota3);
 printf(“Informe a nota do 4 Bimestre: “);
 scanf(“%f”, &nota4);
 media=(nota1+nota2+nota3+nota4)/bim;
 printf(“Media final do Aluno: %.1f \n”, media);
 // estrutura IF - ELSE
 if(media >= 7.0 && nota4 >=6){ // expressão condicional a ser testada 
com operador lógico &&
 printf(“Aluno Aprovado :) \n”);
 }else{
 printf(“Aluno Reprovado :( \n”);
 }
 // estrutura IF - ELSE
 if(nota2 > nota1 || nota4 > nota3){ // expressão condicional a ser testada 
com operador lógico ||
 printf(“Entre os bimestres o aluno aumentou a sua nota.”);
 }else{
 Printf(“O aluno nao aumentou a sua nota dentre os bimestres”);
 }
}
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 46
tas do aluno entre os bimestres. Vejamos o algoritmo em execução, a seguir, na figura 
“Retorno do algoritmo com a estrutura IF – ELSE”.
 
Retorno do algoritmo com a estrutura IF - ELSE
Fonte: elaborado pelo autor
Observe que agora temos uma resposta para cada desvio condicional, na primei-
ra estrutura, como a média das notas do aluno foi maior que 7 e também a nota do 
quarto bimestre foi maior que 6, a mensagem que apareceu foi “Aluno Aprovado”, caso 
uma das duas expressões não fosse atendida, o bloco de código presente no else 
seria executado, neste caso, a informação impressa na tela seria “Aluno Reprovado”. 
Entretanto, na segunda estrutura de desvio condicional composto, devemos notar 
que mesmo com a expressão “nota2 > nota1” ter retornado falsa, já que as notas 
foram 8 para o primeiro e 7 no segundo, ainda assim foi impresso na tela “Entre os 
bimestres o aluno aumentou a sua nota”, isso aconteceu porque estamos utilizando 
o operador lógico OU ( || ), como a segunda expressão retornou como verdadeira, se-
guindo o exemplo da tabela verdade apresentada, o bloco executado foi o do IF.
A estrutura de decisão é muito útil no desenvolvimento de um programa, pois ao 
utilizá-la, sendo simples ou composta, podemos deixar o programa final mais auto-
matizado, com base nas informações disponibilizadas pelo usuário ou por meio do 
comportamento de variáveis do programa.
3.3 Instrução de IFs Aninhados
Conforme visto, as estruturas IF e IF-ELSE são de grande importância e muito úteis 
em um programa, mas, por vezes, a partir de uma decisão precisamos associar outra 
tomada de decisão, vejamos um exemplo descrito de modo literal:
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 47
SE vou viajar = sim ENTÃO
 SE tanque = vazio ENTÃO
 Ir ao posto
 SENÃO
 Ir para a rodovia
SENÃO
 Guardar o carro
Compreende-se, então, que temos dois IFs, um dentro de outro, em que a resposta 
final é associada às expressões condicionais de ambos, esta estrutura é chamada de 
IFs aninhados. 
Um if aninhado é um comando if que é o objeto de outro if ou else. IFs aninhados 
são muito comuns em programação. Em C, um comando else sempre se refere ao co-
mando if mais próximo, que está dentro do mesmo bloco de else e não está associado 
a outro if [..] O padrão C ANSI especifica que pelo menos 15 níveis de aninhamentos 
devem ser suportados. Na prática, a maioria dos compiladores permite substancial-
mente mais (SCHILDT, 1997 p. 64).
Para melhor interpretar o conceito de IFs aninhados, observe o trecho de código a 
seguir, na figura “Trecho de código com IFs aninhados”.
Figura: Trecho de código com IFs Aninhados
Fonte: Schildt (1997, p. 64)
É possível notar que no bloco de execução do primeiro IF(i), temos outras duas es-
truturas IF(j) e IF(k) - ELSE, poderíamos ter outros IFs no bloco de execução do ELSE 
também se fosse o caso. Podemos melhorar o nosso algoritmo de média de notas 
do aluno, caso ele tenha sido aprovado e suas notas entre os bimestres forem boas, 
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 48
vejamos este algoritmo com IFs aninhados.
Algoritmo com IFs aninhados
Fonte: elaborado pelo autor
#include <stdio.h>
#include <stdlib.h>
#define bim 4
mai(){
 float nota1, nota2, nota3, nota4, media;
 printf(“Informe a nota do 1 Bimestre: “);
 scanf(“%f”, &nota1);
 printf(“Informe a nota do 2 Bimestre: “);
 scanf(“%f”, &nota2);
 printf(“Informe a nota do 3 Bimestre: “);
 scanf(“%f”, &nota3);
 printf(“Informe a nota do 4 Bimestre: “);
 scanf(“%f”, &nota4);
 media=(nota1+nota2+nota3+nota4)/bim;
 printf(“Media final do Aluno: %.1f \n”, media);
 // estrutura IF - ELSE
 if(media >= 7.0 && nota4 >=6){ // expressão condicional a ser testada 
com operador lógico &&
 if(nota4 >= 9){ // IF Aninhado
 printf(“Aluno Aprovado, notas acima da media :) \n”);
 }else{
 printf(“Aluno Aprovado :) “)
 }
 }else{
 printf(“Aluno Reprovado :( \n”);
 }
 // estrutura IF - ELSE
 if(nota2 > nota1 || nota4 > nota3){ // expressão condicional a ser testada 
com operador lógico ||
 if(nota4 >= 9){ // IF Aninhado
 printf(“Entre os bimestres o aluno aumentou a sua nota, 
parabens pelo empenho.”); 
 }else{ 
 printf(“Entre os bimestres o aluno aumentou a sua nota.”);
 }
 }else{
 Printf(“O aluno nao aumentou a sua nota dentre os bimestres”);
 }
}
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 49
Agora, caso o aluno seja aprovado, efetuamos uma nova validação: caso a nota do 
quarto bimestre deste aluno for maior ou igual a nove, a mensagem será “Aluno Apro-
vado, notas acima da média :)”, caso não, será apresentado apenas “Aluno Aprovado”. 
A estrutura de IFs aninhados também foi implementada na condição de notas entre os 
bimestres, vejamos agora o algoritmo em execução 
Retorno do algoritmo com a estrutura de IFs aninhados
Fonte: elaborado pelo autor
O resultado que foi apresentado na tela está ligado diretamente com as estruturas de 
desvio condicional IF e IF - ELSE podemos aplicar o conceito de IFs aninhados também 
com IF - ELSE, assim iremos gerar uma cascata, cada vez vamos criando novos níveis e 
blocos de código, mas devemos tomar cuidado ao usar IFs aninhados para não nos perder 
no raciocínio entre estes deixando o código-fonte extremamente confuso. 
3.4 Instrução Condicional Múltipla Escolha
As estruturas condicionais IF e IF - ELSE são úteis em casos de tomadas de deci-
sões simples, nos quais temos apenas dois desvios a serem tomados, com base nas 
expressões ou operadores lógicos. Entretanto, podemos nos deparar com situações 
em que temos diversos caminhos a serem seguidos, podemos chamar isto de seleção 
múltipla ou estrutura condicional de múltipla escolha.
[...] C tem um comando interno de seleção múltipla, switch, que 
testa sucessivamente o valor de uma expressão contra uma lista 
de constantes internas ou de caractere.Quando o valor coincide, os 
comandos associados àquela constante são executados (SCHILDT, 
1997, p. 70) [...]
 
Podemos dizer que a estrutura de seleção switch é uma evolução das estruturas 
condicionais simples e compostas, pois, por meio desta, podemos ter um leque de 
opções e desvios. 
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 50
3.4.1 Estrutura do switch
A estrutura de seleção múltipla switch deixa os algoritmos mais dinâmicos, pois po-
demos testar diversas condições a partir de uma variável. Vamos pensar no seguinte ce-
nário: um sistema de cadastro de indicação de filmes de uma locadora devemos fazer o 
cadastro dos itens seguindo as classificações indicativas que são regulamentações sobre 
as idades indicadas para consumir cada obra. Elas são feitas pela Secretaria Nacional de 
Justiça (SNJ), do Ministério da Justiça brasileiro. 
Ao desenvolvermos um algoritmo que efetue a leitura do dado informado, podemos ter 
diversas opções para a indicação, podemos utilizar a estrutura switch em conjunto com 
a expressão case, assim podemos compreender sendo uma lista com a validação dos 
desvios. 
A execução da estrutura switch compara todos os cases até encontrar um desvio con-
dicional satisfatório, assim executando seu bloco de código, após iniciar a sequência de 
códigos, chamamos o comando break, o qual veremos com mais detalhes no próximo 
tópico.
Caso nenhum dos itens do switch seja atendido, a estrutura default é acionada, este 
item é identificado sendo a saída padrão, caso nenhum dos case atenda à necessidade, 
neste momento, o bloco de código a ser executado será apenas o default. Vejamos, a se-
guir, na figura “Composição do SWITCH CASE textual”, os comandos em linguagem C:
Composição do SWITCH CASE textual
Fonte: elaborado pelo autor
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 51
Mesmo sendo uma estrutura mais poderosa que as de IF - ELSE, devemos atentar 
para alguns pontos importantes. Segundo Schildt (1997 p. 70-71), estes itens são:
1. O comando switch difere do comando if porque switch só pode testar igualda-
de, enquanto if pode avaliar uma expressão lógica ou relacional.
2. Duas constantes cases no mesmo switch não podem ter valores idênticos. 
Obviamente, um comando switch, incluído em outro switch mais externo, pode ter as 
mesmas constantes case.
3. Se constantes de caractere são usadas em um comando switch, elas são 
automaticamente convertidas para seus valores inteiros.
Para compreendermos melhor, vamos relembrar o cenário anteriormente apresen-
tado, no qual estamos desenvolvendo um sistema de cadastro de indicação de filmes 
com base na informação gerada do usuário e a classificação indicativa. Vejamos o 
código-fonte em C, a seguir:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
main (){
 setlocale(LC_ALL, “Portuguese”);
 int classificacao;
 printf(“-----------------------\n”);
 printf(“0 = Livre \n1 = 10 anos \n”);
 printf(“2 = 12 anos \n3 = 14 anos \n”);
 printf(“4 = 16 anos \n5 = 18 anos \n”);
 printf(“9 = Sem Classificação \n”);
 printf(“-----------------------\n”);
 printf(“Digite a classificação indicativa do filme: “);
 scanf(“%d”, &classificacao);
 switch (classificacao){
 case 0 :
 printf(“\n Classificação livre: desenho animados.\n”);
 break;
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 52
Algoritmo de classificação de filmes
Fonte: elaborado pelo autor 
No algoritmo apresentado será exibida na tela a classificação indicada, conforme 
os dados informados pelo usuário, a estrutura será percorrida até encontrar uma con-
dição satisfatória ou será apresentada a mensagem que consta no desvio default. 
Vejamos este algoritmo em execução na figura “Retorno do algoritmo de adivinhe 
o número oculto”.
 case 1 :
 printf(“\n Classificação 10: presença de armas, medo e ten-
são.\n”);
 break;
 case 2 :
 printf(“\n Classificação 12: violência, lesão corporal, des-
crição de violência.\n”);
 break;
 case 3 :
 printf(“\n Classificação 14: morte, vulgaridade, drogas ilíci-
tas.\n”);
 break;
 case 4 :
 printf(“\n Classificação 16: tortura, mutilação, violência, 
morte.\n”);
 break;
 case 5 :
 printf(“\n Classificação 18: violência de forte impacto, 
crueldade.\n”);
 break;
 default:
 printf(“\n Sem classificação.\n”);
 }
 return(0);
}
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 53
Retorno do algoritmo de adivinhe o número oculto
Fonte: elaborado pelo autor 
Ao executar o algoritmo, digitamos o número 2, que equivale à classificação de 12 
anos, quando a estrutura processada é comparada ao primeiro case, como este não é 
o número 2 e passado para o segundo case este também não corresponde ao número 
2, já o terceiro case corresponde com o que foi digitado, neste momento, o que estiver 
associado a ele será executado, com base em nosso algoritmo a informação exibi-
da em tela terá sido “Classificação 12…”; compreender esta estrutura é interessante, 
porque funciona praticamente com a operação lógica de comparação, igualdade de 
elementos, não sendo aplicada quando trabalhamos com outros operadores lógicos 
como os de maior que, menor que, maior ou igual, dentre outros.
 
3.4.2 Comando break
O comando break é implementado em diversas estruturas, uma destas é a switch - 
case que acabamos de ver, podemos utilizar o comando break ou o comando continue, 
para representar a parada ou o andamento da execução do bloco de códigos a serem 
executados.
Os comandos break e continue são usados para alterar o fluxo de contro-
le. O comando break, quando executado em uma estrutura while, for, do...
while ou switch causa uma saída imediata dessa estrutura. A execução do 
programa continua com a próxima instrução. Os usos comuns do comando 
break são para escapar mais cedo de um loop ou para pular o restante de 
uma estrutura switch. (DEITEL; DEITEL, 2011, p. 94)
Sobre as estruturas mencionadas, while - for - do...while, estas são consideradas 
como estruturas de repetição ou laço de repetição para compreendermos o quão im-
portante é o uso do comando break na estrutura switch, vejamos o código, a seguir, 
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 54
sem o uso do comando break:
Algoritmo de classificação de filmes
Fonte: elaborado pelo autor
 
Este algoritmo é bem simples, ele requisita para o usuário escolher uma opera-
ção aritmética, após isso, executamos a estrutura switch - case, observe que neste 
código-fonte desenvolvido em linguagem C não utilizamos o comando break após a 
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
main (){
 setlocale(LC_ALL, “Portuguese”);
 char operacao;
 printf(“Escolha uma oeração [ + - * / ]:”);
 scanf(“%c”, &operacao);
 switch (operacao){
 case ‘+’ :
 printf(“\n Adição.\n”);
 break;
 case ‘-’ :
 printf(“\nSubtração”);
 break;
 case ‘*’ :
 printf(“\nMultitplicação”);
 break;
 case ‘/’ :
 printf(“\nDivisão”);
 break;
 default:
 printf(“\nNenhuma operação válida”);
 }
 return(0);}
ALGORITMOS E LÓGICA DE 
PROGRAMAÇÃO I
ESPECIALISTA JOSÉ HENRIQUE HONJOYA
FACULDADE CATÓLICA PAULISTA | 55
comparação de cada case, neste caso, vejamos este algoritmo em execução na figura 
“Retorno do algoritmo sem o comando break”.
 
Retorno do algoritmo sem o comando break
Fonte: elaborado pelo autor
 
Ao executar o algoritmo e digitarmos o sinal de adição a estrutura switch é proces-
sada, note que mesmo tendo um caminho de desvio compatível, todos os cases foram 
acessados e impressos na tela. O comando break é necessário nesta e em outras es-
truturas para dar a saída da estrutura e não executar o bloco de códigos errados, com 
base nisto, vemos que é sempre necessário utilizar o comando break na estrutura de 
seleção múltipla.

Outros materiais