Escolar Documentos
Profissional Documentos
Cultura Documentos
Imprimir
CONCEITOS DE PROGRAMAÇÃO
0
121 minutos
seõçatona reV
Aula 1 - Introdução a conceitos de programação
Aula 2 - Introdução à linguagem C
Referências
Aula 1
INTRODUÇÃO
Olá, estudante! Chegamos à unidade em que estudaremos os conceitos de lógica de programação aplicados
a uma linguagem específica de programação: a linguagem C! Essa linguagem é o meio pelo qual os
comandos que indicarmos serão realizados pelo computador para produzir a saída esperada para o
programa. Você já aprendeu que a assertividade de um programa depende de sua construção, isto é, da
escolha correta dos passos que o compõem, e de forma que os comandos sejam executados em uma
sequência lógica. Nesta unidade, estudaremos como a linguagem de programação e um ambiente de
desenvolvimento nos fornecem as estruturas necessárias para realizarmos o processamento lógico das
informações. Te convido para vivenciar essa realidade que é a base de qualquer sistema ou produto digital,
vamos lá?
Uma analogia pode ser feita com a língua nativa, a língua estrangeira, ou ainda uma linguagem mais formal
ou mais descolada, que deriva de uma língua.
Ah, aqui também cabe uma observação interessante, um programa construído com uma linguagem de
programação tem o mesmo significado no mundo todo; outra informação importante é que praticamente
todas as linguagens de programação têm seus comandos escritos em inglês.
Nossa disciplina adota a linguagem C, uma linguagem amplamente utilizada e que é base para diversas
outras linguagens comerciais atualmente, e por meio dos exemplos práticos você verá como ela realiza as
operações necessárias no campo da programação. Em relação à linguagem adotada na nossa disciplina,
saiba que a linguagem C é umas das mais populares, e por suas características de acesso e manipulação de
recursos computacionais como a memória, é muito utilizada em áreas da engenharia, computação e
especialmente na eletrônica, além de também ser utilizada para construir bibliotecas nativas de outras
linguagens de programação.
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&ati… 1/22
12/10/2023, 00:34 wlldd_231_u3_alg_log_pro
Como toda linguagem, a linguagem C possui uma quantidade finita de palavras e símbolos, eles são
chamados de tokens, isso quer dizer que para criarmos um código-fonte devemos escolher tokens que
existam na linguagem. Cada token da linguagem tem um significado no contexto da programação, que
inclusive pode mudar conforme a ordem em que são organizados. Estes tokens podem ser um comando na
linguagem, um operador (relacional, condição ou lógico) ou ainda uma palavra reservada para caracterizar
0
algum identificador.
seõçatona reV
Agora que você já conhece as características de linguagens de programação pode estar se perguntando
como seus tokens são compreendidos pelo computador, certo? Aqui surge a necessidade de abordarmos o
Compilador e o Interpretador, que são os sistemas computacionais capazes de receber um código escrito
em uma linguagem de programação e tornar esse código um programa executável.
Aqui cabe destacar que problemas de lógica não são identificados pelo compilador, ou seja, um programa
que foi construído com os elementos corretos e respeitando as regras da linguagem pode, ainda assim,
apresentar erros de lógica e possíveis erros de execução dependendo das entradas a que foi submetido.
Tanto para elaborar quanto para editar o código-fonte é necessário um software, assim como o compilador
e o interpretador também são um software executável. É possível que um mesmo sistema integre o
software de editor e o compilador, a ele damos o nome de Ambiente Integrado de Desenvolvimento,
também conhecido pela sigla IDE, do inglês Integrated Development Environment. Uma descrição dessa
composição é apresentada pela Figura 1.
• À linguagem C.
COMPILADORES E INTERPRETADORES
Para aprofundar mais nossos conhecimentos sobre as linguagens vamos conhecer mais algumas de suas
características:
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&ati… 2/22
12/10/2023, 00:34 wlldd_231_u3_alg_log_pro
Dizemos que uma linguagem é de alto nível quando o usuário se distancia dos aspectos estruturais do
código, utilizando um alto nível de abstração para executar comandos. Em uma comparação, é como se
estivéssemos localizando um país no globo terrestre, obtendo sua localização, limites e fronteiras, porém
sem maiores detalhes.
0
Já uma linguagem de baixo nível é aquela em que o usuário tem total controle e conhecimento das
estruturas e dados que estão sendo manipulados, o que também faz com que mais detalhes precisem ser
seõçatona reV
adicionados para a construção do programa. Utilizando a mesma comparação anterior, é como se
estivéssemos nos localizando em uma cidade com o GPS, observando as ruas e características das quadras.
Assim como na comunicação que conhecemos na sociedade, em que utilizamos as palavras disponíveis na
linguagem, e respeitamos as regras de construção das frases, no contexto de programação também há
regras a serem respeitadas em todas as linguagens, independentemente do nível em que esteja inserida.
Algumas linguagens como PHP e JavaScript normalmente não necessitam de compilador, e sim de
interpretador, enquanto a linguagem Java costuma depender tanto de compilador quanto de interpretador
e a linguagem C, utilizada na nossa disciplina, utiliza compilador (MANZANO, 2015), e mais adiante vamos
detalhar seu funcionamento prático.
Podemos então definir o compilador como um tradutor de linguagens, em que a linguagem de saída é
sempre de um nível mais baixo que o nível de entrada. O programa de saída costuma ser construído em
binário, linguagem simbólica ou linguagem de máquina, sempre constituído somente por cadeias de 0s e 1s.
Em alguns casos, o erro apontado pelo compilador não o impede de gerar o programa em binário, porém,
em alguns casos, o compilador não consegue gerar o programador executável, sendo preciso localizar o erro
e corrigi-lo, para depois tentar compilar novamente. Essa é uma atuação importante do compilador, pois
evita que um programa com uma construção falha seja executado, pelo contrário, o compilador muitas
vezes aponta para o programador qual foi o erro encontrado.
Cada IDE tem uma forma visual de representar esses possíveis erros, algumas delas até mostram os erros
na construção do programa enquanto o programador digita, ou seja, ainda antes da análise do compilador.
• Essas e outras funcionalidades fazem com que as IDEs sejam vistas como ferramentas que melhoram a
produtividade dos programadores. As IDEs evoluíram muito com o tempo, há uma grande variedade
disponível para linguagens populares como o C, e algumas delas são: Visual Studio, CodeBlocks, DevC,
Eclipse, NetBeans.
E para outras linguagens também podem ser usadas as IDEs citadas acima ou ainda outras tantas existentes
no mercado.
AMBIENTE DE PROGRAMAÇÃO
Estudante, chegamos ao momento em que aplicamos os conceitos aprendidos!
Assim como na nossa língua, para o perfeito entendimento do código realizamos a análise léxica e a
sintática, sendo a primeira sobre a grafia correta ou existência de cada token presente no código-fonte, e a
segunda sobre a forma e a ordem em que os tokens foram inseridos no código-fonte, se há uma
concordância entre si.
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&ati… 3/22
12/10/2023, 00:34 wlldd_231_u3_alg_log_pro
Quando o código não apresenta erros, o compilador então cria um código de máquina “semanticamente
equivalente”, ao código criado pelo programador na linguagem de programação. Neste aspecto novamente
aparece a figura do ambiente de programação como um aliado do programador! Pois algumas IDEs
identificam em tela a estrutura física do código, a posição dos pares de parênteses, chaves e colchetes,
podendo realizar o autopreenchimento do nome de variáveis e ainda outras facilidades como sugestão de
0
melhoria e, consequentemente, menos erros no código. Um destaque de diferentes cores está apresentado
na Figura 2.
seõçatona reV
Figura 2 | Tela de um código sendo editado em uma IDE
Assim como existem variações entre ferramentas, existem IDEs mais amigáveis, mais robustas, mais
profissionais, mais leves e com mais ou menos recursos ao programadores, sendo que algumas são
gratuitas e outras são pagas. A escolha da IDE também dependerá da linguagem de programação adotada e
do compilador selecionado.
Os programadores podem (e devem!) configurar e customizar a IDE que escolheram para trabalhar, pois
além de realizar as atividades básicas de programação, ela acaba oferecendo outros recursos desejáveis
para o programador. A grande maioria das IDEs oferecem identificador de erros por meio de uma análise
léxica no próprio editor e no instante em que o programador digita, sem a necessidade de compilar o
código.
Esses e outros recursos são essenciais no dia a dia do programador para que ele ganhe em produtividade,
principalmente quando o tamanho dos projetos cresce consideravelmente.
Neste contexto, inicialmente a IDE parece ser muito complexa para programas simples, mas como ela é uma
ferramenta profissional, foi desenvolvida para organizar pacotes de software que precisam ter a referência
de bibliotecas, classes, scripts e outros códigos.
Importante destacar que a IDE é uma ferramenta, e embora seja certeza que você precisará de uma IDE
para construir e compilar seus códigos, você deve se concentrar em aprender a programar em uma
linguagem pelo menos, e então se adaptar à IDE será uma consequência! Nesta unidade serão apresentados
os códigos-fonte para que você acompanhe a disciplina, entenda a composição do código e a construção de
cada comando, para que, assim, você possa desenvolver seus próprios códigos.
Essa disciplina requer a leitura do material e a resolução de exercícios do material, e é indicado que você
programe “mão na massa” para também desenvolver seu raciocínio lógico e sua capacidade de resolver
problemas computacionais.
VÍDEO RESUMO
Olá, estudante! Conhecemos os conceitos de linguagem de programação, compiladores e ambientes de
desenvolvimento, e como eles se relacionam. Agora vamos aprofundar mais na parte prática quanto à
interface de desenvolvimento.
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&ati… 4/22
12/10/2023, 00:34 wlldd_231_u3_alg_log_pro
Neste vídeo, você conhecerá o funcionamento da IDE CodeBlocks, e alguns dos principais passos para
conferir se a instalação está 100%! Vamos lá?
0
Saiba mais
seõçatona reV
O que fazer quando se faz necessário utilizar um outro computador para as tarefas da disciplina? Bem,
deixar de realizá-las não é uma opção!! Então eu trouxe para você uma opção de editor e compilador
online, o JDoodle!
Aproveite para salvar o link como uma opção a mais de estudo e ferramenta para praticar os exercícios
da disciplina caso você não esteja com outro Ambiente Integrado de Desenvolvimento local
devidamente instalado.
Aula 2
INTRODUÇÃO À LINGUAGEM C
Nesta aula você entenderá como manipular dados em C e realizar operações com eles,
sempre respeitando os comandos da linguagem.
29 minutos
INTRODUÇÃO
Olá, estudante! Agora que você já conhece a linguagem de programação da nossa disciplina e já sabe a
necessidade de adotar um ambiente de desenvolvimento, nesta aula, vamos conhecer com detalhes cada
estrutura do programa em linguagem C. Assim como uma receita seus ingredientes com unidades e ordens
pré-definidas, os algoritmos também têm campos para declaração do que será necessário para aquele
código-fonte, isso consiste em um padrão no qual o programa deve ser construído para que gere um código
de máquina válido ao ser interpretado pelo compilador. Nesta aula você entenderá como manipular dados
em C e realizar operações com eles, sempre respeitando os comandos da linguagem. Não deixe de realizar
os exercícios propostos, eles são essenciais para seu aprendizado! Vamos juntos conhecer esses comandos?
CONSTRUINDO UM PROGRAMA EM C
Vamos começar identificando quais as estruturas básicas de um programa em linguagem C, começando
com um exemplo na Figura 1. A linha 1 é o cabeçalho do programa, e entre as linhas 2 e 4 está o Programa
principal, identificado como main.
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&ati… 5/22
12/10/2023, 00:34 wlldd_231_u3_alg_log_pro
Em seguida fica localizado o programa principal, sempre identificado por main(), e tendo delimitando os
comandos de seu trecho com os tokens { e }, que na Figura 1 estão entre as linhas 3 e 6. Observe que, ao ser
executado, este programa sempre executa o comando printf(), que é um comando de saída para mostrar
informações na tela, e a informação é sempre a mesma frase que está entre as aspas: “Meu primeiro
programa!!”.
0
Ele não recebe nenhuma entrada ou interação que dependa do usuário, mas as aplicações se tornam muito
seõçatona reV
mais diversas quando permitimos que o usuário interaja com o programa! Essa interação é feita por meio de
comandos de entrada, e o mais comum na linguagem C é o scanf(), que permite ler números ou letras do
teclado.
Quando o programa lê uma informação, ele precisa armazená-la em algum local apropriado da memória, e
depois recuperá-la. Isso é possível se o programador previamente reservar uma região da memória e dar a
ela um nome (identificador) para que possa ser acessada sempre que necessário. Então, no código, sempre
que for preciso utilizar essa informação, chamamos o identificador dela.
Imagine se na necessidade de alterar a informação a gente precisasse reservar uma outra região de
memória, e tentar usar o mesmo identificador? Seria um desperdício de espaço e uma confusão, não é
mesmo?
É por isso que esse espaço reservado recebe o nome de variável, pois sempre que for necessário substituir
seu conteúdo nós informamos o nome do identificador e o novo valor. Utilizando um raciocínio semelhante,
chegamos à definição de constante, uma região de memória reservada, com um nome identificador, porém
que não pode ter seu conteúdo alterado ao longo do programa.
Assim, as informações manipuladas pelo computador que estão em uma região específica de memória ou
são uma variável ou uma constante. Ambas as configurações constituem o que chamamos de dados. Os
dados têm um determinado tipo e tamanho, inclusive isso influencia no espaço ocupado na memória.
Todas as ações que realizamos com os dados são por meio dos operadores, e na linguagem C os operadores
podem ser:
• Relacionais: para comparar se dois valores são iguais, diferentes ou se um é maior que o outro.
• Lógicos: para combinar um ou mais operadores relacionais em uma lógica de multifatores de entrada.
Isso quer dizer que tudo que o programa precisar processar será construído com base nos 3 tipos de
operadores disponíveis na linguagem e respeitando as limitações quanto ao tipo de dados e as construções
dos comandos.
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&ati… 6/22
12/10/2023, 00:34 wlldd_231_u3_alg_log_pro
1.#include<stdio.h>
0
2.int x;
seõçatona reV
3.int y;
4.int main() {
5. scanf("%i", &x);
6. y = 2 * x;
8 }
Neste programa, se a entrada for 3, a saída é 6, já se for 4, a saída é 8, e assim por diante, e percebemos isso
ao analisar a linha de código (y = 2 * x), que contém os operadores aritméticos como conhecemos.
Nas linhas 2 e 3 declaramos duas variáveis do tipo inteiro e sabemos que é do tipo inteiro pelo uso da
palavra reservada int. Se precisássemos de outro tipo de variável, iríamos usar outra palavra reservada para
declará-la. E x e y foram os nomes dados às variáveis, ou seja, seu identificador.
Podemos (e devemos!) utilizar identificadores que contextualizem melhor seu papel no programa, como
demonstrado no código a seguir:
1;#include<stdio.h>
2.int valor;
3.int dobro;
4.int main() {
5. scanf(\"%i\", &valor);
6. dobro = 2 * valor;
8. }
• Não pode ser uma palavra reservada da linguagem C, ou seja, uma palavra que já tem uma funcionalidade
atribuída na linguagem.
Já que mencionamos as regras dos identificadores, vamos conhecer outros tipos de dados presentes na
linguagem C, alguns deles estão descritos na Tabela 1.
Tamanho
Menor valor Maior valor Exemplo de
Tipo de dado em Usado para
representado representado aplicação
memória
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&ati… 7/22
12/10/2023, 00:34 wlldd_231_u3_alg_log_pro
Contagem de
int 16 bits - 32.768 32.767 Inteiros em geral
números inteiros
Contagem de
unsigned short
16 bits 0 65.535 Inteiros em geral números naturais
0
int
(não negativos)
seõçatona reV
Grandes quantidades
long int 32 bits - 2.147.483.648 2.147.483.647 Inteiros grandes
de inteiros
Ponto flutuante
Valores com precisão
float 32 bits - 3.4028235e38 3.4028235e38 (notação de 10-38 a 1038
exponencial)
Caracteres especiais,
char 8 bits - - Símbolos
letras ou números
• “%i” significa que irá ler um número do tipo inteiro, para outros tipos é necessário usar outra construção.
• O conteúdo das aspas será mostrado na íntegra, exceto quando houver o símbolo %, que representa um
código de escape.
• Para mostrar o conteúdo de uma variável do tipo inteiro utilizamos %i e %d, para outros tipos é necessário
usar outra construção.
• Após o fechamento das aspas, deve vir uma vírgula e o nome da variável de interesse;
• Se for necessário mostrar mais uma variável, adiciona-se mais uma vírgula e a outra variável.
1. Assim como em toda operação matemática, o resultado obtido não necessariamente depende de como
os operadores aparecem na linha do comando, e sim de acordo com a regra de precedência de operadores,
que é a ordem em que são executados.
2. As construções dos comandos dependem do tipo de dado que será manipulado, então, para utilizar os
comandos scanf() e printf() em dados do tipo não inteiros, utilizamos após o sinal % as seguintes
construções sintáticas:
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&ati… 8/22
12/10/2023, 00:34 wlldd_231_u3_alg_log_pro
- %f para o tipo float, com a opção de determinar a quantidade de casas antes e após a vírgula, como
descrito no código a seguir:
1.#include<stdio.h>
0
2.float pi;
seõçatona reV
3.int main() {
4. pi = 3.14159265359;
6. }
Agora vamos conhecer os operadores relacionais da linguagem C, em que dois termos são comparados
por meio do operador, sendo que os termos podem ser variáveis, constantes ou números fixados no código.
Os operadores relacionais estão apresentados na Tabela 2, com seu respectivo significado de teste.
A saída de uma relação testada pode ser falsa ou verdadeira, na linguagem C usa-se o valor “0” (zero) como
indicativo falso deste teste, e 1 ou qualquer outro valor diferente de zero é considerado verdadeiro. Duas
comparações estão sendo apresentadas no código a seguir, sendo a primeira comparando se doze é igual a
zero, com resultado falso (como esperado, mostrando 0 na tela!), e a segunda em que comparamos se a
variável chamada número é menor que o número 12, e como seu conteúdo é 10, o resultado é verdadeiro,
mostrando 1 na tela.
1.#include <stdio.h>
2.#include <stdlib.h>
3.int numero;
5.int main()
6.{
7. numero = 10;
12. return 0;
13.}
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&ati… 9/22
12/10/2023, 00:34 wlldd_231_u3_alg_log_pro
Esses operadores relacionais que produzem como saída “falso” ou “verdadeiro” ficam ainda mais
interessantes quando usados de forma combinada, por meio dos operadores lógicos! Assim como na
matemática esses operadores relacionam 2 condições em sua tabela verdade, e tanto sua entrada como sua
saída são valores lógicos, ou seja, verdadeiro ou falso.
0
Os operadores lógicos estão apresentados na Tabela 3, com seu respectivo significado na lógica booleana.
seõçatona reV
Token na linguagem C Operador matemático Significado
Com esses recursos, nós conseguimos construir programas para diversas aplicações matemáticas!
VÍDEO RESUMO
Estudante, nesta aula, conhecemos como manipular dados em linguagem C, por meio de variáveis e
constantes, também estudamos como funcionam os comandos de entrada e saída de dados e sua
importância para tornar o programa mais dinâmico. Estudamos também os operadores aritméticos,
relacionais e lógicos, que são estruturas essenciais para construirmos programas mais profissionais. Venha
comigo no próximo vídeo para executarmos um programa que abrange todos estes conteúdos!
Saiba mais
Para melhor entendimento dos operadores lógicos é importante que você conheça a tabela verdade
dos operadores, um conceito matemático e de muita aplicação na computação.
Acesse a Calculadora Online (Tabela-Verdade) para treinar seus conhecimentos em lógica booleana.
Aula 3
INTRODUÇÃO
Olá, estudante! Nesta aula, você deverá observar os sistemas que utiliza, como o gerenciador de e-mails, o
editor de texto e o aplicativo do banco. Esses sistemas interagem com você e respondem de acordo com as
suas ações, por meio de condições que foram previamente implementadas. Isso só é possível porque, a
cada opção que você pode acionar no sistema, há uma programação que determina qual caminho o
programa deve seguir ou o que ele deve fazer. Neste contexto, você está convidado a conhecer como
construímos essas opções e os possíveis caminhos do programa. Vamos nessa? Lembre-se de reforçar os
conceitos estudados com os exercícios da aula!
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 10/22
12/10/2023, 00:34 wlldd_231_u3_alg_log_pro
0
condicionais, mais precisamente nos desvios condicionais.
seõçatona reV
À primeira vista, o código tem seu mesmo aspecto textual e em sequência tradicional, mas ele pode, a cada
comando, ter seu curso alterado de acordo com a interação do usuário. Quando pensamos em programas
que interagem de acordo com nossas entradas, estamos lidando com o contexto dessas estruturas
condicionais, e como o próprio nome diz, a forma de sua execução depende de uma condicional.
Na prática, essas estruturas organizam o código de forma que as entradas fornecidas pelo usuário sirvam
como decisores lógicos quanto aos próximos passos de execução do programa.
A lógica das estruturas condicionais é muito parecida com o nosso raciocínio ao resolver desafios do dia a
dia. Por exemplo: se abrimos um e-mail para lê-lo, o gerenciador remove a notificação de nova mensagem,
assim como ele exibirá uma mensagem de erro se for identificado que estamos sem internet. O comando
para essa lógica é o if(), pois if, em inglês, significa “se”.
Esse conjunto de verificação e reação é chamado de estrutura condicional e é composto por uma verificação
acerca de uma condição e uma reação a ser executada se essa condição for satisfeita. Tal condição pode ser
a relação de um ou mais eventos, e a reação pode ser a execução de um conjunto de comandos ou de um
único comando.
Inclusive, a reação a ser executada pode ser outra estrutura condicional, consistindo em uma estrutura
dentro de outra, chamada de estrutura condicional encadeada. Por serem muito versáteis, essas estruturas
permitem inúmeras combinações.
Adicionalmente, pode haver um senão acompanhando a lógica do se. Por exemplo: se a bateria estiver com
a carga abaixo de 15%, mostre o ícone em vermelho; senão, mostre o valor da carga. Na linguagem C, o
comando equivalente ao senão é o else, e veremos mais adiante os exemplos de sua implementação.
Muitas vezes, são tantas as possibilidades do programa que uma estrutura condicional poderia tornar
confusa sua legibilidade. Nessas circunstâncias, utilizamos a seleção de casos, a qual é muito útil quando o
usuário tem diversas opções, sendo por isso também chamada de estrutura de controle com múltipla
escolha. Na linguagem C, o comando para essa seleção é o switch.
Assim como as estruturas condicionais são a base para organizar desvios no programa, elas também servem
como estruturas de controle de repetição, devido ao mesmo princípio. A linguagem C tem dois recursos
diferentes para essa finalidade: o for e o while, sendo que ambos também avaliam condições para controlar
as repetições.
Sendo assim, a condição será testada na execução do comando, e somente se ela for verdadeira o programa
acessará o trecho especial do código. Em uma linguagem bem desprendida, podemos dizer que o programa
“entrou” no if. A demonstração da sintaxe e da construção do comando da estrutura condicional simples if
pode ser vista no código a seguir:
1.#include<stdio.h>
2.int main() {
3. float temperatura;
5. scanf(\"%f\", &temperatura);
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 11/22
12/10/2023, 00:34 wlldd_231_u3_alg_log_pro
6. if (temperatura < 5)
7. {
0
9. printf(\"Prepare o agasalho!! \n\");
10. }
seõçatona reV
11. printf(\"A temperatura digitada foi: %f\", temperatura);
12. }
Na instrução if, a condição testada fica entre parênteses. No exemplo, temos um único teste sendo
executado no programa, e quando ele é verdadeiro o programa entra no bloco de código e mostra na tela as
duas frases: “Teste verdadeiro” e “Prepare o agasalho!!”. Quando a condição é falsa, o programa sai da linha
de verificação do comando if e vai para o final do código, que exibe na tela: “A temperatura digitada foi:”, ou
seja, a linha localizada imediatamente após a estrutura condicional do if.
Já no código a seguir está apresentada uma estrutura condicional composta. Neste caso, o programa tem
somente duas opções de execução: o bloco referente ao if, quando a condição testada é verdadeira, ou o
bloco referente ao else, quando a condição testada é falsa. Ou seja, ele mostrará “saldo negativo” somente
se o teste do comando if der verdadeiro, ou saltará, ignorando o bloco do if, e entrará no bloco do else,
mostrando “saldo positivo”. Após executar o bloco do if ou do else, ele sempre irá para a linha que mostra
“Fim do programa”. Veja o código com instrução if e else a seguir:
1.#include<stdio.h>
2.int main() {
4. if (saldo < 0)
6. else
8. printf(\"Fim do programa.\");
9.}
E se quisermos deixar o programa ainda mais elaborado, podemos utilizar a estrutura condicional
composta, a qual é apresentada no código a seguir. Observe que o if que testa se o saldo é igual a zero só é
acessado pelo programa quando a condição do primeiro teste for falsa, ou seja, quando não é um número
negativo. Observe também que a segunda estrutura condicional, dentro do primeiro else, representa um
único comando, e embora tenha sido escrita em quatro linhas, ela não precisa de delimitadores de chaves {
} em sua sintaxe. Veja o código com instrução if encadeada, a seguir:
1. #include<stdio.h>
2. int main() {
4. if (saldo < 0)
6. else
7. if (saldo == 0)
9. else
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 12/22
12/10/2023, 00:34 wlldd_231_u3_alg_log_pro
12.}
Observe nesse código com a instrução if encadeada que temos um ótimo exemplo de como utilizar recursos
de indentação, que consiste no deslocamento padrão do início do código na linha para caracterizar em que
0
nível ele está. Embora a indentação auxilie na leitura humana do código, quando se faz necessário utilizar
muitas estruturas condicionais encadeadas é recomendado empregar seleção de casos, como no código a
seõçatona reV
seguir. Veja o código com seleção de casos, a seguir:
1. #include<stdio.h>
2. int main() {
3. int opcaoDigitada;
4. printf(\"Digite um numero:\");
5. scanf(\"%d\", &opcaoDigitada);
6. switch (opcaoDigitada)
7. {
15. }
16. }
Observe que dentro de cada “case” há uma única instrução “printf;” entretanto, também poderia haver um
bloco de comandos, e ele seria delimitado por chaves. É importante observar que qualquer outra tecla ou
valor digitado e lido no “scanf”, que não estivesse nas opções, cairia no caso da linha 14: Invalido.
Se este último código tivesse sido escrito somente com condicionais, certamente o programa ficaria bem
menos elegante. Antes que você pense que isso pode ser bobagem, imagine realizar a manutenção em um
código escrito por outra pessoa (ou por você mesmo) há um tempo. A forma de elaborar o código facilitará
ou dificultará o trabalho e o entendimento no futuro.
Na linguagem C, utilizamos o comando while() – o termo while significa “enquanto”, em inglês –, e sua
construção é muito similar à do comando if, mas com algumas diferenças. A principal delas é que, quando a
condição é verdadeira, além de o programa entrar naquele trecho de código, ele continuamente repete o
ciclo de executar os comandos e checar novamente essa condição, parando de executar os comandos
desse trecho quando a condição for falsa.
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 13/22
12/10/2023, 00:34 wlldd_231_u3_alg_log_pro
1. #include<stdio.h>
2. int main() {
3. int senhaDigitada;
0
4. int senhaCadastrada = 1923;
seõçatona reV
6. scanf(\"%d\", &senhaDigitada);
8. {
11. }
13.}
Observe o comando de leitura da senha: se quisermos deixar o programa mais compacto, poderemos
utilizar o comando do { } while. Neste tipo de comando, a instrução (ou o conjunto de instruções) é
executada e depois se realiza a verificação da condição. O código a seguir apresenta essa construção. Veja o
código com do while, a seguir:
1. #include<stdio.h>
2. int main() {
3. int senhaDigitada;
5. do
6. {
8. scanf(\"%d\", &senhaDigitada);
9. }
12. }
Quando você estiver construindo seus programas, identificará quais são o comando e a construção mais
adequados para o problema a ser resolvido. Em resumo (MANZANO, 2015):
• O comando while é chamado de laço pré-teste, pois realiza o teste lógico no início do laço, verificando se é
possível executar o trecho de instruções subordinadas a ele.
• O comando do while é chamado de laço pós-teste. Ele sempre executa o bloco subordinado ao laço pelo
menos uma vez, e então realiza o teste lógico para decidir se continua no looping ou se sai dele.
Tanto o comando while quanto o do while permitem que sejam criados laços iterativos e interativos:
Como a condição de parada é o teste lógico dar falso, ao construir os comandos o programador precisa
estabelecer o controle dessa parada, ou seja, quando o programa deve sair do loop. Porém, há casos em
que há a necessidade de manter o programa em um loop infinito, como um código que monitora
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 14/22
12/10/2023, 00:34 wlldd_231_u3_alg_log_pro
constantemente um processo industrial ou uma cancela de pedágio, por exemplo. Para casos assim, é
comum encontrar a seguinte construção: while (1), pois 1 é sempre verdadeiro e o programa ficará
permanentemente neste loop.
A linguagem C ainda oferece uma terceira opção para execuções sequenciais: o comando for (para, em
0
português). Podemos ler o comando da seguinte maneira: “para i variando de 0 a 10, de um em um, faça tal
ação”. Uma característica dessa construção é que, normalmente, ela é utilizada para laços com um número
seõçatona reV
finito e conhecido de execuções, como processar dados de uma lista ou um conjunto de números.
1.#include<stdio.h>
2.int main() {
3. int i, resultado;
5. {
6. resultado = i * 2;
8. }
9.}
VÍDEO RESUMO
Estudante, nesta aula conhecemos como utilizar condições para controlar os desvios e as repetições dos
nossos programas. Você viu como o uso dos operadores lógicos e relacionais é a base para toda a
construção das lógicas e o controle da execução do programa. A partir de estruturas condicionais como if e
else, podemos criar desvios, e com os comandos while, do while e for conseguimos estruturar repetições de
trechos específicos do código, sujeitos à parada por intervenção do usuário ou não, a depender da forma
que são construídos. Vamos agora estudar mais alguns aspectos de implementação do nosso conteúdo?
Saiba mais
Como saber se seu programa está executando passo a passo de forma correta? Ou então, quando ele
apresenta uma resposta incorreta, como saber em que momento o algoritmo se perdeu, para que
possa ser estudada uma estratégia de correção? Na nossa aula, que aborda os desvios e os laços, vimos
que é essencial poder “entrar” na execução do programa e acompanhar passo a passo cada linha
executada.
A melhor alternativa para isso é debugar seu código. A maioria dos ambientes de desenvolvimento
integrado (IDEs) possui esse recurso.
Como você sabe, cada IDE tem sua interface e seu posicionamento de botões. Então, para conseguir
acessar o recurso na sua versão instalada, você deve realizar uma pesquisa no Google contendo o
nome do IDE que você está utilizando, além dos termos “debugar” e “watches”.
Na maioria dos IDEs instalados localmente, você deve posicionar o mouse em linhas estratégicas, que
contenham as operações de interesse, e dar um clique duplo na linha ou clique com botão direito. O
objetivo é inserir um ponto de interrupção (ou breakpoint), simbolizado por um círculo colorido,
naquela linha.
Ao executar o programa, ele parará em todos os pontos criados e mostrará os conteúdos de memória e
os últimos cálculos realizados.
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 15/22
12/10/2023, 00:34 wlldd_231_u3_alg_log_pro
Outra possibilidade é utilizar o IDE OnlineGBD, que também permite o debug online. Neste caso, basta
clicar uma vez ao lado esquerdo do número da linha para adicionar o breakpoint, e realizar um click
duplo para removê-lo.
0
seõçatona reV
Fonte: elaborada pela autora.
Aula 4
OPERADORES NA LINGUAGEM C
Nesta aula, veremos como as operações de atribuição podem ser versáteis e nos fornecer
mais opções de implementação quando complementadas com os operadores aritméticos.
27 minutos
INTRODUÇÃO
Olá, estudante! Nesta aula, veremos como as operações de atribuição podem ser versáteis e nos fornecer
mais opções de implementação quando complementadas com os operadores aritméticos. Você deve ter
percebido que quanto mais recursos uma linguagem possui, melhores ficam o entendimento e a legibilidade
do código-fonte, mais opções de comando o programador possui à sua disposição e há mais o que
aprender. Muitas vezes, uma sutil alteração no sinal ou na escolha dos tipos e operadores pode produzir
resultados totalmente diferentes, e consequentemente impactar a execução do programa. Venha conosco
nesta aula para aprender as variações desses comandos e não ter problemas em seu código-fonte!
Isso quer dizer que, caso não conheçamos as particularidades da linguagem, podemos correr o risco de
escrever um programa que apresente uma execução diferente daquela que esperávamos. Essas
particularidades são decisões internas que o compilador está programado para tomar e que nem sempre
estão explícitas no código ou no nosso pensamento lógico.
Vamos tomar como ponto de partida a atribuição simples e, então, seguiremos estudando suas variações. O
operador de atribuição, que tem seu símbolo representado por um único sinal de igual (=), é utilizado para
inserir no termo à sua esquerda o resultado processado da operação à sua direita. Por exemplo: “resultado
= 2 * valor”.
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 16/22
12/10/2023, 00:34 wlldd_231_u3_alg_log_pro
Embora essa construção seja a mais simples que existe quando se trata de atribuição, pode ocorrer de o
programador definir as variáveis “resultado” e “valor” em tipos diferentes, e o compilador precisar decidir
sobre como processar o resultado, se apresenta um erro, se aceita a construção ou se realiza uma
conversão durante essa atribuição. A conversão em tempo de execução junto com a atribuição é chamada
de conversão de tipos em atribuições, e estudaremos suas variedades ao longo desta aula.
0
Além desse tipo básico de atribuição, a linguagem C também permite outros, como as atribuições múltiplas,
seõçatona reV
em que é possível atribuir o mesmo valor para múltiplas variáveis em um mesmo comando, como mostrado
no código a seguir:
1.#include <stdio.h>
2.int main()
3.{
4. int x, y, z;
5. x = y = z = 0;
6.}
Devido a outro recurso interessante e bastante utilizado nos programas profissionais, as operações de
atribuição também podem conter elementos aritméticos na sua construção, os quais são chamados de
operadores aritméticos, como o incremento e o decremento, ambos apresentados no código a seguir:
1.#include <stdio.h>
2.int main()
3.{
4. int x, y;
5. x = y = 10;
8.
10.}
Observe que, ao utilizar “x++”, o programador consegue o mesmo resultado que teria se usasse “x = x+1”,
porém com uma escrita mais compacta. E quando usadas em conjunto com um comando de atribuição,
tanto a operação de incremento quando a de decremento possuem dois tipos de construção, como pode
ser visto no exemplo do código a seguir:
1.#include <stdio.h>
2.int main()
3.{
4. int x, A, B;
5. x = 10;
8.
9. x = 10;
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 17/22
12/10/2023, 00:34 wlldd_231_u3_alg_log_pro
12.}
Existe uma diferença sutil entre as sintaxes “++x” e “x++”, e como estão sendo utilizadas junto com uma
atribuição, a forma com que são construídos os comandos interfere muito em seu significado para o
programa. No primeiro caso, é realizado o incremento na variável x, e ao atribuir esse valor para a variável A,
0
seu conteúdo já está incrementado, ou seja, ambas passam a valer 11. Já no segundo caso, o conteúdo de x,
que é 10, primeiro é atribuído a B, e depois a variável x é incrementada para 11. Assim, B tem conteúdo igual
seõçatona reV
a 10 e x é igual a 11.
Estudante, você percebeu que a linguagem C permite uma ampla variedade nessas construções? Isso
proporciona a você mais opções e recursos, mas ao mesmo tempo exige maior entendimento de suas
regras.
• Unários: realizam uma modificação (ou não) em relação a apenas uma variável, como o sinal de menos.
Exemplo: -x; -10.
• Binários: relacionam-se com os conteúdos de dois valores para retornar um terceiro valor como resultado,
como o operador soma ou, ainda, o de atribuição. Exemplo: a + b; x = 10.
• Ternários: relacionam-se com três conteúdos, sendo usados para substituir as sentenças “if then else”.
Assim como existe a notação de incremento e decremento nessa construção mais compacta, também
existem opções compactas para implementar outras operações na linguagem C. Vamos conhecer as
principais delas na Tabela 1.
1.#include <stdio.h>
2.int main()
3.{
4. int saida;
5. saida = 6;
7.
8. saida = 6;
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 18/22
12/10/2023, 00:34 wlldd_231_u3_alg_log_pro
10.
11. saida = 6;
0
13.
14. saida = 6;
seõçatona reV
15. printf(\"saida adicao = %d \n\", saida += 2);
16.
17. saida = 6;
19.}
Observe que a cada comando precisamos atribuir novamente o valor inicial 6 na variável saida, pois o
comando de atribuição aritmética realiza tanto a operação aritmética quanto a atribuição na variável,
atualizando seu valor. Por manipular dois operandos, os operadores da Tabela 1 são considerados binários.
Outra classe interessante dos operadores é sua aplicação com valores binários. Para demonstrá-los,
considere:
A operação AND bit a bit entre X e Y se refere a realizar a operação AND (operador lógico) entre todos os bits
do número, um a um, e escrever o valor correspondente. Para o exemplo, X & Y resulta em: 0000 0010, ou
seja, 2. Cabe destacar que a operação lógica && realizada em valores decimais produz um resultado
diferente da operação AND bit a bit, representada pelo símbolo unitário &.
O operador &= realiza o AND bit a bit entre as variáveis que compõem o comando e atribui esse valor ao
operando da esquerda.
Seguindo o mesmo raciocínio, considere também os outros operadores específicos para representações em
binário, apresentados na Tabela 2.
&= Atribuição AND bit a bit Realizar a operação AND nos valores
1.#include <stdio.h>
2.int main()
3.{
4. // 3 = 0b0111;
5. int x;
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 19/22
12/10/2023, 00:34 wlldd_231_u3_alg_log_pro
0
9.
seõçatona reV
11. x <<= 3; // será 0b01001000, ou seja, 72.
13.}
O operador de deslocamento atua deslocando todos os bits do número à esquerda ou à direita, sendo que,
conforme os bits são deslocados para um dado sentido, zeros são usados para preencher as lacunas. No
exemplo apresentado no código, a variável binária x teve seus bits deslocados em três posições para a
esquerda, e como esse novo número foi atribuído a ela, deixou de ser o número 0b00001001 (9 em decimal)
para ser 0b01001000 (72 em decimal).
Uma curiosidade a respeito de números binários é que cada deslocamento para a esquerda é equivalente a
multiplicar o número por 2. Sua aplicação se dá principalmente na programação de microcontroladores ou
drivers que necessitam de controle do hardware.
O maior desafio na utilização desses operadores é que a escrita deles é muito similar às operações
matemáticas tradicionais. Ao analisá-la, o programador precisa ter o mesmo entendimento que o
compilador terá ao realizar o build do código, pois muitas vezes podemos cair em ambiguidades permitidas
pela linguagem. Na dúvida, devemos fazer o debug do código, a fim de verificar por meio dos testes de mesa
se a execução do nosso programa está ocorrendo conforme esperado.
Por exemplo: recebemos 13 camisetas para serem distribuídas para 5 pessoas. Como não faria sentido
cortar as camisetas, teríamos que 13 (int) dividido por 5 (int) é igual a 2 (int) com resto 3 (int).
Com os operadores, essas sentenças seriam escritas como: 13 / 5 = 2 para a divisão com inteiros e 13 % 5 = 3
para o cálculo da operação resto, também chamada de restante ou módulo.
1.#include <stdio.h>
2.int main()
3.{
4. float resultado;
5. int x, y;
6.
7. x = 13; y = 5;
9.
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 20/22
12/10/2023, 00:34 wlldd_231_u3_alg_log_pro
12.
0
15.}
Observe que, mesmo tentando inserir um valor do tipo real nas variáveis x e y, o resultado apresentado na
seõçatona reV
divisão não é 2.6, pois x e y foram declarados como inteiros e nas linhas de atribuição eles já perdem a
precisão de 13.0 e 5.0, sendo tratados como inteiros 13 e 5.
Avaliando o mesmo código-fonte, porém com x e y do tipo float, percebemos que a divisão é feita como
esperado, mas o código apresenta um erro de compilação na linha do último printf, pois o operador % não
pode ser utilizado com variáveis de tipo float, já que o compilador tentaria realizar a divisão com diversas
casas após a vírgula, tantas quantas fossem necessárias, conforme a quantidade de dígitos do tipo da
variável escolhida, e, portanto, a divisão não apresentaria resto.
Tipos diferentes podem incorrer em truncamento ou perda de precisão, como detalhado a seguir:
• A perda de precisão é a representação de um número com menos casas decimais do que ele possui, o que
também ignora parte dos dígitos.
Ao mesmo tempo, a linguagem C permite que o programador “adeque” tipos de variáveis para contornar
problemas de tipos que poderiam ocorrer em tempo de execução, como o truncamento ou a perda de
precisão. A realização dessa modificação pelo programador recebe o nome de casting. Damas (2016)
descreve que o casting se dá quando queremos modificar o tipo de uma variável ou expressão, alterando-o
para um tipo maior ou para um tipo mais baixo, e que podemos indicar o tipo ao qual queremos “promover”
esse valor colocando o tipo pretendido entre parênteses antes do valor.
1.#include <stdio.h>
2.int main()
3.{
4. float result;
6.
7. valor = 10;
8. div = 4;
9.
12.
15.
19.
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 21/22
12/10/2023, 00:34 wlldd_231_u3_alg_log_pro
Observe que esse código indica a solução para o problema do código anterior, que não apresentava a saída
em número real.
Neste último código também vemos outro recurso interessante, que é o comentário no código. Tudo o que
0
está escrito na mesma linha após o // é ignorado pelo compilador. Então, tal recurso é usado para que o
programador possa registrar comentários que auxiliem na leitura e no entendimento do código, embora as
seõçatona reV
boas práticas de programação digam que um código bem escrito, com padrão na nomenclatura de variáveis,
não necessita de comentários.
VÍDEO RESUMO
Estudante, aprendemos nesta aula como o programa pode apresentar respostas inesperadas ou
incompletas se não definirmos os tipos de variáveis corretamente. Vimos que o compilador segue à risca os
tipos que definimos, mas também permite alguns recursos que alteram o tipo da variável mesmo em tempo
de execução, realizando uma conversão explícita. Quanto aos exemplos, eles não acabaram, então
acompanhe o vídeo para estudarmos como funciona a conversão de tipos implícita.
Saiba mais
A manipulação de caracteres e inteiros pode ocasionar dificuldades na legibilidade do código,
principalmente pelas conversões implícitas que a linguagem C permite na execução dos programas.
Para essas construções específicas, Luís Damas organizou uma subseção em sua obra, com alguns
exemplos detalhadamente descritos.
O livro Linguagem C está na nossa biblioteca virtual, e o capítulo que aborda esse assunto está na
subseção Situações em que inteiros e caracteres não se devem misturar, na página 43.
REFERÊNCIAS
1 minutos
Aula 1
MANZANO, J. A. N. G. Linguagem C: Acompanhada de uma xícara de café. São Paulo: Érica, 2015.
Aula 2
MANZANO, J. A. N. G. Linguagem C: Acompanhada de uma xícara de café. São Paulo: Érica, 2015.
Aula 3
MANZANO, J. A. N. G. Linguagem C: acompanhada de uma xícara de café. São Paulo: Érica, 2015.
Aula 4
DAMAS, L. Linguagem C. 10. ed. Rio de Janeiro: LTC, 2016.
MANZANO, J. A. N. G. Linguagem C: acompanhada de uma xícara de café. São Paulo: Érica, 2015.
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 22/22