Você está na página 1de 29

12/10/2023, 00:51 wlldd_231_u3_alg_log_pro

CONCEITOS DE

0
PROGRAMAÇÃO

seõçatona reV
121 minutos

 Aula 1 - Introdução a conceitos de programação


 Aula 2 - Introdução à linguagem C
 Aula 3 - Estruturas condicionais em linguagem C
 Aula 4 - Operadores na linguagem C
 Referências

Aula 1

INTRODUÇÃO A CONCEITOS DE PROGRAMAÇÃO


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!
33 minutos

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á?

CONCEITOS BÁSICOS DE LINGUAGEM DE PROGRAMAÇÃO


Todos os sistemas que utilizamos no nosso dia a dia foram desenvolvidos em alguma
linguagem de programação! Do mais avançado software de engenharia ao jogo mais
popular dos smartphones, todos eles são uma construção de comandos de
programação organizados de forma lógica. As linguagens de programação foram
evoluindo com o tempo, e para cada propósito de aplicação escolhemos a mais
adequada.

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.

https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&ati… 1/29
12/10/2023, 00:51 wlldd_231_u3_alg_log_pro

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.

0
Nossa disciplina adota a linguagem C, uma linguagem amplamente utilizada e que é

seõçatona reV
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.

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 algum identificador.

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.

Os programadores escrevem códigos-fonte com comandos da linguagem de


programação, e o compilador é o responsável por criar um código de significado
equivalente ao código do programador, de forma que o computador processe esse
código e execute os comandos adotados.

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.

Figura 1 | Composição de uma IDE

https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&ati… 2/29
12/10/2023, 00:51 wlldd_231_u3_alg_log_pro

0
seõçatona reV
Fonte: elaborada pela autora.

Até aqui você foi apresentado:

• À linguagem C.

• Ao compilador necessário para transformar o código escrito em C em um programa


executável pelo computador.

• E à IDE, uma ferramenta de software que serve como um ambiente de trabalho.

COMPILADORES E INTERPRETADORES
Para aprofundar mais nossos conhecimentos sobre as linguagens vamos conhecer mais
algumas de suas características:

• Podem ser de mais alto nível: como Python, java e php.

• Podem ser de mais baixo nível: como C e Assembly.

• E ainda existem linguagens que derivam de outras linguagens: como C# e C++.

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.

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 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

https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&ati… 3/29
12/10/2023, 00:51 wlldd_231_u3_alg_log_pro

compilador (MANZANO, 2015), e mais adiante vamos detalhar seu funcionamento


prático.

Primeiramente, vamos entender o contexto e a necessidade de utilizar um compilador: o


computador trabalha com estruturas e objetos binários, ou seja, independentemente se

0
o computador está manipulando um texto, um número, uma imagem ou as instruções

seõçatona reV
de um programa, na prática ele está processando 0s e 1s. Porém, você deve concordar
que seria humanamente inviável para os programadores escreverem programas e
instruções somente com a representação de 0s e 1s.

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.

Ou seja, na prática, a atividade do compilador é similar à de um tradutor que realiza a


dublagem ou a legenda de um filme, quando a frase ou a palavra que está sendo
traduzida se apresenta de maneira errônea, dúbia ou que não permita o entendimento,
esse profissional busca entender o contexto, realiza uma sugestão de adequação ou
mesmo para a execução para elucidar a dúvida. No caso do compilador é muito
parecido, pois quando o programador cria um código que apresenta erros ou falhas em
sua construção, o compilador precisa reconhecer e apontar essa divergência, para que o
programador proceda com a correção.

https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&ati… 4/29
12/10/2023, 00:51 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

0
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

seõçatona reV
melhoria e, consequentemente, menos erros no código. Um destaque de diferentes
cores está apresentado na Figura 2.

Figura 2 | Tela de um código sendo editado em uma IDE

Fonte: captura de tela de Code: Blocks elaborada pela autora.

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á

https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&ati… 5/29
12/10/2023, 00:51 wlldd_231_u3_alg_log_pro

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 é

0
indicado que você programe “mão na massa” para também desenvolver seu raciocínio

seõçatona reV
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.

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á?

 Saiba mais
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
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&ati… 6/29
12/10/2023, 00:51 wlldd_231_u3_alg_log_pro

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.

0
Figura 1 | Estrutura do Programa em Linguagem C

seõçatona reV
Fonte: elaborada pela autora.

Nas primeiras linhas ficam localizados os comandos de pré-processamento, ou pré-


compilação, sempre iniciando com o sinal # (hashtag), esses comandos servem para
inclusão de bibliotecas e definições e formam o cabeçalho do programa. Dependendo
do tipo de estrutura a ser manipulada são adicionadas as bibliotecas necessárias, no
exemplo da Figura 1 foi necessário adicionar somente uma biblioteca, a stdio.h, uma
biblioteca que manipula funções de entrada e saída, e adicionando-a o programador
pode simplesmente chamar o comando scanf e printf dentro do programa principal,
sem a necessidade de conhecer os detalhes internos de operação destes comandos no
sistema operacional.

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!!”.

Ele não recebe nenhuma entrada ou interação que dependa do usuário, mas as
aplicações se tornam muito 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.

https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&ati… 7/29
12/10/2023, 00:51 wlldd_231_u3_alg_log_pro

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.

0
Todas as ações que realizamos com os dados são por meio dos operadores, e na

seõçatona reV
linguagem C os operadores podem ser:

• Aritméticos: para cálculos matemáticos, e estão apresentados na Figura 2.

• 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.

Figura 2 | Operadores aritméticos

Operador Operação Tipo Resultado

+ Manutenção de sinal Unário -

- Inversão de sinal Unário -

% Resto de divisão (módulo) Binário Inteiro

/ Divisão Binário Inteiro ou Real

* Multiplicação Binário Inteiro ou Real

+ Adição Binário Inteiro ou Real

- Subtração Binário Inteiro ou Real

= Atribuição Binário Inteiro, Real ou Lógico

Fonte: adaptado de Manzano (2015), p. 44.

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.

PROGRAMAS PARA MANIPULAR DADOS


Agora que você já conhece os recursos que tornam o programa mais completo, vamos
analisar um exemplo que utiliza uma variável e um comando de leitura e escrita para
calcular e mostrar o dobro de um valor:

1.#include<stdio.h>

2.int x;

3.int y;

4.int main() {

5. scanf("%i", &x);

https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&ati… 8/29
12/10/2023, 00:51 wlldd_231_u3_alg_log_pro

6. y = 2 * x;

7. printf("valor de y: %i", y);

8 }

0
Neste programa, se a entrada for 3, a saída é 6, já se for 4, a saída é 8, e assim por

seõçatona reV
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;

7. printf(\"O dobro é: %i\", dobro);

8. }

Embora essa mudança melhore consideravelmente o entendimento e a legibilidade do


programa, como regra, nem todas as combinações de letras e números são válidas
como identificadores de variáveis e constantes (MANZANO, 2015):

• Máximo de 32 caracteres de letras e números, sem espaço.

• Iniciar com uma letra ou “_” (underline), nunca com um número.

• Não pode ser uma palavra reservada da linguagem C, ou seja, uma palavra que já tem
uma funcionalidade atribuída na linguagem.

• Não pode utilizar outro caractere especial, o único permitido é “_”.

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.

Tabela 1 | Tipos de dados na linguagem C

Tamanh Menor valor Maior valor


Tipo de Exemplo de
o em representad representa Usado para
dado aplicação
memória o do

Inteiros em Contagem de
int 16 bits - 32.768 32.767
geral números inteiros

https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&ati… 9/29
12/10/2023, 00:51 wlldd_231_u3_alg_log_pro

Contagem de
unsigned Inteiros em
16 bits 0 65.535 números naturais
short int geral
(não negativos)

0
Grandes
- 2.147.483.6 Inteiros
long int 32 bits quantidades de

seõçatona reV
2.147.483.648 47 grandes
inteiros

Ponto
Valores com
- 3.4028235e flutuante
float 32 bits precisão de 10-38
3.4028235e38 38 (notação
a 1038
exponencial)

Caracteres
char 8 bits - - Símbolos especiais, letras
ou números

Fonte: adaptada de Manzano (2015).]

O comando scanf() da linha 5 tem duas regras de construção importantes:

• “%i” significa que irá ler um número do tipo inteiro, para outros tipos é necessário usar
outra construção.

• &valor significa que irá armazenar o valor lido na variável valor.

Já o comando printf() da linha 7 tem as seguintes regras:

• 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.

CONSTRUINDO PROGRAMAS MAIS ROBUSTOS


Nós já estudamos que um programa válido é aquele que respeita as regras da
linguagem no quesito léxico e semântico, e que irá gerar um código de máquina que
realize o processamento lógico desejado. Isso nos leva a 2 pontos importantes:

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.

Essa ordem está apresentada na Figura 5.

Figura 5 | Ordem das operações matemáticas

https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 10/29
12/10/2023, 00:51 wlldd_231_u3_alg_log_pro

Fonte: elaborada pela autora.

0
seõçatona reV
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:

- %c para o tipo char;

- %lf para o tipo double;

- %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>

2.float pi;

3.int main() {

4. pi = 3.14159265359;

5. printf(\"PI: %5.2f\", pi);

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.

Tabela 2 | Operadores relacionais na linguagem C

Operador Relação testada

< Primeiro operando menor que o segundo operando

> Primeiro operando maior que o segundo operando

<= Primeiro operando menor ou igual ao segundo operando

>= Primeiro operando maior ou igual ao segundo operando

== Primeiro operando igual ao segundo operando

!= Primeiro operando diferente do segundo operando

Fonte: adaptada de Microsoft (2022).

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

https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 11/29
12/10/2023, 00:51 wlldd_231_u3_alg_log_pro

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>

0
2.#include <stdlib.h>

seõçatona reV
3.int numero;

4.int resultado1, resultado2;

5.int main()

6.{

7. numero = 10;

8. resultado1 = (12 == 0);

9. printf(\"Resultado 1: %i \n\", resultado1);

10. resultado2 = (numero < 12);

11. printf(\"Resultado 2: %i \n\", resultado2);

12. return 0;

13.}

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.

Os operadores lógicos estão apresentados na Tabela 3, com seu respectivo significado


na lógica booleana.

Tabela 3 | Operadores lógicos na linguagem C

Token na
Operador matemático Significado
linguagem C

&& And (E) Conjunção

! Not (NÃO) Negação

|| Or (OU) Disjunção inclusiva

^ Xor (XOR) Disjunção exclusiva

Fonte: elaborada pelo autor.

Com esses recursos, nós conseguimos construir programas para diversas aplicações
matemáticas!

https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 12/29
12/10/2023, 00:51 wlldd_231_u3_alg_log_pro

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

0
também os operadores aritméticos, relacionais e lógicos, que são estruturas essenciais

seõçatona reV
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.

Você pode desenvolver a tabela verdade conforme a necessidade do programa em


desenvolvimento, e se precisar validar ou tirar a prova real de algum operador você
pode acessá-la online!

Acesse a Calculadora Online (Tabela-Verdade) para treinar seus conhecimentos


em lógica booleana.

Aula 3

ESTRUTURAS CONDICIONAIS EM LINGUAGEM C


Você deverá observar os sistemas que utiliza, como o gerenciador de e-mails, o
editor de texto e o aplicativo do banco.
31 minutos

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!

PROGRAMAS COM OPÇÕES


A linguagem C é executada linha a linha, assim como você acompanha este material – e,
se necessário, desvia a sua leitura para uma linha diferente, ou para outra área
específica do programa. Na linguagem de programação, os possíveis caminhos que um
programa pode tomar são organizados nas estruturas condicionais, mais precisamente
nos desvios condicionais.

https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 13/29
12/10/2023, 00:51 wlldd_231_u3_alg_log_pro

À 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

0
próprio nome diz, a forma de sua execução depende de uma condicional.

seõçatona reV
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.

CONHECENDO AS ESTRUTURAS CONDICIONAIS


Um ponto relevante para detalharmos as estruturas condicionais é a sua base de
verificação: uma lógica constituída por operadores lógicos e relacionais. Os operadores
relacionais sempre retornam verdadeiro ou falso, e os operadores lógicos atuam
combinando esses retornos de acordo com a tabela verdade de cada operador.

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

https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 14/29
12/10/2023, 00:51 wlldd_231_u3_alg_log_pro

e da construção do comando da estrutura condicional simples if pode ser vista no código


a seguir:

1.#include<stdio.h>

0
2.int main() {

seõçatona reV
3. float temperatura;

4. printf(\"Digite a temperatura da sua cidade no dia de hoje: \n\");

5. scanf(\"%f\", &temperatura);

6. if (temperatura < 5)

7. {

8. printf(\"Teste verdadeiro \n\");

9. printf(\"Prepare o agasalho!! \n\");

10. }

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() {

3. float saldo = 12.00;

4. if (saldo < 0)

5. printf(\"Saldo negativo \n\");

6. else

7. printf(\"Saldo positivo \n\");

8. printf(\"Fim do programa.\");

9.}

https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 15/29
12/10/2023, 00:51 wlldd_231_u3_alg_log_pro

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

0
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

seõçatona reV
delimitadores de chaves { } em sua sintaxe. Veja o código com instrução if encadeada, a
seguir:

1. #include<stdio.h>

2. int main() {

3. float saldo = -12.00;

4. if (saldo < 0)

5. printf(\"Saldo negativo \n\");

6. else

7. if (saldo == 0)

8. Printf(\"Saldo zerado \n\");

9. else

10. printf(\"Saldo positivo \n\");

11. printf(\"Fim do programa.\");

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 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
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. {

8. case 1: printf(\"Um\"); break;

9. case 2: printf(\"Dois\"); break;

10. case 3: printf(\"Tres\"); break;

11. case 4: printf(\"Quatro\"); break;

https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 16/29
12/10/2023, 00:51 wlldd_231_u3_alg_log_pro

12. case 5: printf(\"Cinco\"); break;

13. case 6: printf(\"Seis\"); break;

14. default: printf(\"Invalido\"); break;

0
15. }

seõçatona reV
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.

PROGRAMAS COM LAÇOS


Muito do propósito dos sistemas computacionais é realizar tarefas e ações repetitivas, e
para isso a linguagem C tem comandos específicos. Em português, chamamos essa
circunstância de laço (loop, em inglês). Na prática, o programa fica executando um
comando ou um conjunto de comandos de forma repetida, em looping, enquanto uma
condição for verdadeira.

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.

Um exemplo prático é o de verificar a autenticação de um usuário pela digitação correta


da senha. Se usássemos só o comando if, realizaríamos a verificação e retornaríamos
indicando se a senha estava correta ou não, porém ainda não teríamos um mecanismo
que repetisse essa verificação até que o usuário digitasse a senha correta. O código-
fonte a seguir resolve o problema da senha. Veja o código com while, a seguir:

1. #include<stdio.h>

2. int main() {

3. int senhaDigitada;

4. int senhaCadastrada = 1923;

5. printf(\"Digite a sua senha: \n\");

6. scanf(\"%d\", &senhaDigitada);

7. while (senhaCadastrada != senhaDigitada)

https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 17/29
12/10/2023, 00:51 wlldd_231_u3_alg_log_pro

8. {

9. printf(\"\nSenha incorreta, por favor digite a sua senha: \n\");

10. scanf(\"%d\", &senhaDigitada);

0
11. }

seõçatona reV
12. printf(\"Fim do programa! \n\n\");

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;

4. int senhaCadastrada = 1923;

5. do

6. {

7. printf(\"\nPor favor digite a sua senha: \n\");

8. scanf(\"%d\", &senhaDigitada);

9. }

10. while (senhaCadastrada != senhaDigitada);

11. printf(\"Fim do programa! \n\n\");

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:

• Iterativo: que se repete.

• Interativo: que interage com o usuário.

https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 18/29
12/10/2023, 00:51 wlldd_231_u3_alg_log_pro

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 constantemente um processo industrial

0
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á

seõçatona reV
permanentemente neste loop.

A linguagem C ainda oferece uma terceira opção para execuções sequenciais: o


comando for (para, em 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 finito e conhecido de
execuções, como processar dados de uma lista ou um conjunto de números.

Um exemplo da utilização do comando for é apresentado no código a seguir.

1.#include<stdio.h>

2.int main() {

3. int i, resultado;

4. for (i = 0; i <= 10; i++)

5. {

6. resultado = i * 2;

7. printf(\"2 x %d = %d \n\", i, resultado);

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.

https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 19/29
12/10/2023, 00:51 wlldd_231_u3_alg_log_pro

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

0
pesquisa no Google contendo o nome do IDE que você está utilizando, além dos

seõçatona reV
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.

Para excluir estes pontos, o processo é o mesmo.

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.

Figura 1 | Tela do OnlineGBD com breakpoint na linha 17

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
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 20/29
12/10/2023, 00:51 wlldd_231_u3_alg_log_pro

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

0
não ter problemas em seu código-fonte!

seõçatona reV
ATRIBUIÇÕES E TIPOS DE DADOS NA EXECUÇÃO
Estudante, você tem visto na criação de programas com a linguagem C que é necessário
realizar uma série de predefinições já no início da construção do código-fonte, como a
definição dos tipos de variáveis. Ao longo do código, uma escolha que também
impactará em como será o funcionamento do programa é a forma com que construímos
os comandos para realizar operações matemáticas, por meio dos operadores
aritméticos, já que a linguagem permite variações com o mesmo símbolo.

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”.

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.

Além desse tipo básico de atribuição, a linguagem C também permite outros, como as
atribuições múltiplas, 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:

https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 21/29
12/10/2023, 00:51 wlldd_231_u3_alg_log_pro

1.#include <stdio.h>

2.int main()

3.{

0
4. int x, y;

seõçatona reV
5. x = y = 10;

6. x++; // o resultado dessa linha é x = 11

7. y--; // o resultado dessa linha é y = 9

8.

9. printf(\"x = %d, e y = %d\", x, y);

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;

6. A = ++x; // incrementa antes de atribuir

7. printf(\"x = %d, e A = %d \n\", x, A);

8.

9. x = 10;

10. B = x++; // atribui e depois incrementa

11. printf(\"x = %d, e B = %d\", x, B);

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, 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 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.

https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 22/29
12/10/2023, 00:51 wlldd_231_u3_alg_log_pro

CONHECENDO AS VARIAÇÕES DAS ATRIBUIÇÕES


Os operadores em C podem ser unários, binários e ternários, e essa classificação está
relacionada a quantos operandos constituem uma sentença correta para o operador.
Vamos conhecer cada um deles com um exemplo:

0
• Unários: realizam uma modificação (ou não) em relação a apenas uma variável, como o

seõçatona reV
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.

Tabela 1 | Operadores de atribuição

Operador Operação executada Equivalente a

*= Atribuição de multiplicação saida = saida * 2

/= Atribuição de divisão saida = saida / 2

%= Atribuição restante saida = saida % 2

+= Atribuição de adição saida = saida + 2

-= Atribuição de subtração saida = saida - 2

Fonte: adaptada de Microsoft (2022, [s. p.]).

Um exemplo desses operadores sendo implementados em um código-fonte é


apresentado a seguir:

1.#include <stdio.h>

2.int main()

3.{

4. int saida;

5. saida = 6;

6. printf(\"saida multiplicacao = %d \n\", saida *= 2);

7.

8. saida = 6;

9. printf(\"saida divisao = %d \n\", saida /= 2);

10.

https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 23/29
12/10/2023, 00:51 wlldd_231_u3_alg_log_pro

11. saida = 6;

12. printf(\"saida restante = %d \n\", saida %= 2);

13.

0
14. saida = 6;

seõçatona reV
15. printf(\"saida adicao = %d \n\", saida += 2);

16.

17. saida = 6;

18. printf(\"saida subtracao = %d \n\", saida -= 2);

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:

• Uma variável X, de valor 18, em binário 0001 0010.

• Uma variável Y, de valor 98, em binário 0110 0010.

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.

Tabela 2 | Operadores de atribuição para binários

Operador Operação executada Equivalente a

<<= Atribuição de shift esquerda Deslocamento de bits para a esquerda

>>= Atribuição de shift direita Deslocamento de bits para a direita

&= Atribuição AND bit a bit Realizar a operação AND nos valores

Atribuição OR exclusivo bit a Realizar a operação OR exclusivo nos


^=
bit valores

Atribuição OR inclusivo bit a


|= Realizar a operação OR inclusivo nos valores
bit

Fonte: adaptada de Microsoft (2022, [s. p.]).


https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 24/29
12/10/2023, 00:51 wlldd_231_u3_alg_log_pro

E uma aplicação em código-fonte resulta no código a seguir.:

1.#include <stdio.h>

2.int main()

0
3.{

seõçatona reV
4. // 3 = 0b0111;

5. int x;

6. x = 0b1001; //valor 9 em decimal

7. x &= 3; // será 0b0001, ou seja, 1.

8. printf(\"saida AND bit a bit = %d \n\", x);

9.

10. x = 0b00001001; //valor 9 em decimal

11. x <<= 3; // será 0b01001000, ou seja, 72.

12. printf(\"saida shift esquerda = %d \n\", x);

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.

APLICANDO CONCEITOS DE CONVERSÕES DE TIPOS


Outro aspecto que também requer a atenção do programador diz respeito ao tipo das
variáveis manipuladas e aos desdobramentos lógicos que podem ocorrer ao longo da
execução do programa. Esse tipo de situação ocorre com a utilização dos operadores
multiplicação (*), divisão (/) e restante (%), pois essas operações costumam interferir no
tipo do operando. Considere que temos os números 13 e 5 para realizar uma divisão.

https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 25/29
12/10/2023, 00:51 wlldd_231_u3_alg_log_pro

Sabemos que 13 dividido por 5 é igual a 2,6. Ao mesmo tempo, quando lidamos com
problemas do dia a dia, podemos ter a necessidade de construir raciocínios mais
específicos.

Por exemplo: recebemos 13 camisetas para serem distribuídas para 5 pessoas. Como

0
não faria sentido cortar as camisetas, teríamos que 13 (int) dividido por 5 (int) é igual a 2

seõçatona reV
(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;

8. printf(\"resultado = %f \n\", resultado = x/y);

9.

10. x = 13.0; y = 5.0;

11. printf(\"resultado = %f \n\", resultado = x/y);

12.

13. x = 13.0; y = 5.0;

14. printf(\"resultado = %f \n\", resultado = x%y);

15.}

Observe que, mesmo tentando inserir um valor do tipo real nas variáveis x e y, o
resultado apresentado na 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:

• O truncamento consiste em salvar a parte inteira de um número, ignorando as casas


decimais.

https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 26/29
12/10/2023, 00:51 wlldd_231_u3_alg_log_pro

• 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

0
execução, como o truncamento ou a perda de precisão. A realização dessa modificação

seõçatona reV
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.

Um exemplo dessa modificação é apresentado no código a seguir:

1.#include <stdio.h>

2.int main()

3.{

4. float result;

5. int valor, div;

6.

7. valor = 10;

8. div = 4;

9.

10. result = valor / div;

11. printf(\"Resultado: %f \n\", result); // resultado truncado

12.

13. result = 1.0 * valor / div;

14. printf(\"Resultado: %f \n\", result); // resultado forçado pelo 1.0 *

15.

16. result = (float) valor / div;

18. printf(\"Resultado: %f \n\", result); // valor convertido em float


(casting)

19.

20. result = valor / (float) div;

21. printf(\"Resultado: %f \n\", result); // div convertido em float


(casting)

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.

https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 27/29
12/10/2023, 00:51 wlldd_231_u3_alg_log_pro

Neste último código também vemos outro recurso interessante, que é o comentário no
código. Tudo o que 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 boas práticas de

0
programação digam que um código bem escrito, com padrão na nomenclatura de
variáveis, não necessita de comentários.

seõçatona reV
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.

MICROSOFT. Operadores relacionais e de igualdade C. Disponível em:


https://learn.microsoft.com/pt-br/cpp/c-language/c-relational-and-equality-operators?
view=msvc-170. Acesso em: 22 nov. 2022.

Aula 3
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… 28/29
12/10/2023, 00:51 wlldd_231_u3_alg_log_pro

Aula 4
DAMAS, L. Linguagem C. 10. ed. Rio de Janeiro: LTC, 2016.

0
MANZANO, J. A. N. G. Linguagem C: acompanhada de uma xícara de café. São Paulo:
Érica, 2015.

seõçatona reV
MICROSOFT. Operadores de atribuição C. 2022. Disponível em:
https://learn.microsoft.com/pt-br/cpp/c-language/c-assignment-operators?view=msvc-
170. Acesso em: 27 nov. 2022.
Imagem de capa: Storyset e ShutterStock.

https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662477&a… 29/29

Você também pode gostar