Operadores da linguagem

Teoria Completa

Introdução

Fala aí, aqui é o Guga do Responde Aí! Tudo bem com você?

Nos tópicos anteriores nós fomos introduzidos aos operadores da linguagem C, nesse tópico nós iremos conversar de forma mais aprofundada sobre esse mesmo assunto.

Beleza, para começar, como são utilizados os operadores na linguagem C? Os operandos são sempre números?

Nós iremos descobrir as respostas dessas e outras perguntas ao decorrer desse tópico, então vamos nessa!

Operadores aritméticos

Que os operadores aritméticos são utilizados para realizar operações matemáticas básicas nós já sabemos, mas como eles são escritos dentro de um código?

Para responder essa pergunta, nada melhor do que um exemplo! No exemplo abaixo nós escolheremos o operador de soma, mas fique ciente que a utilização apresentada é análoga para todos os outros operadores aritméticos binários.

Exemplo: suponha que você tenha que declarar uma variável x inteira que seja inicializada com o valor 10 , além da variável inteira você deve declarar outra variável y , do tipo ponto flutuante, que será inicializada, após o processamento de x , com o valor da primeira variável mais 0,0725 .

A primeira coisa que nós iremos fazer é declarar e inicializar a variável inteira, que nesse exemplo terá a denominação x e a variável que será inicializada posteriormente, nesse exemplo denominada como y :

Agora, temos que inicializar a variável de tipo ponto flutuante, mas antes observe a seguinte análise:

Nós sabemos o valor inicial com que x foi declarado, porém nós não podemos simplesmente inicializar y com o valor igual a 10,0725 . Isso acontece, pois a variável x sofrerá alterações antes do programa efetivamente utilizar y .

Logo, o valor com que y será inicializado é igual ao valor de x naquele estágio do programa mais 0,0725 :

Você viu como o operador de soma foi útil nesse caso? Agora ficou fácil, pois podemos elaborar a forma geral de utilização dos operadores aritméticos:

Onde:

  • resultado é a variável que irá armazenar o resultado da operação;
  • operando1 e operando2 podem ser variáveis, constantes que estão definidas (#define), constantes que não estão definidas (números utilizados diretamente como é o caso do 0,0725 ) e até mesmo expressões aritméticas (veremos em tópicos posteriores);
  • deve ser substituído por um dos operadores aritméticos binários vistos.
  • Mas onde se encaixam os operadores aritméticos unários?

    Eles são utilizados para incrementar ou decrementar o valor do dado armazenado por uma variável em uma unidade.

    Vale lembrar que tudo aquilo que pode ser feito com um operador unário, também pode ser realizado através de um operador binário:

    Operadores relacionais

    Os operadores relacionais são utilizados para realizar comparações entre variáveis, constantes que estão definidas e constantes que não estão definidas. Basicamente, um operador relacional se trata de um comparador capaz de verificar se a relação por ele estabelecida é verdadeira ou falsa.

    Como o retorno de uma comparação relacional é booleano, ou seja, só pode assumir 2 valores, nos casos em que a relação é verdadeira o retorno é o valor 1 , já nos casos em que a relação é falsa, o retorno é o valor 0 .

    Exemplo: observe o programa a seguir.

    Qual será o resultado da impressão realizada na linha 08 do programa?

    O valor impresso será 1 , pois x é igual a 10 e 10 é menor que 15 . Logo, o valor atribuído a r e s u l t a d o na linha 07 do programa é 1 uma vez que a relação é verdadeira, sendo esse o valor que será impresso na linha de código posterior.

    Vale lembrar que a utilização é análoga para os outros operadores relacionais e que se caso a relação fosse falsa, como é o caso da comparação maior que entre os operandos x e 15 ( 10 > 15 ), o valor de atribuição e posteriormente impressão seria 0 .

    Lembrete: como feito no exemplo acima, não é comum utilizar o valor do retorno de uma comparação relacional. Isso acontece, pois na grande maioria dos casos, as comparações utilizando operadores relacionais são parâmetros de estruturas condicionais ou de estruturas que necessitam de condições de parada, essas que veremos futuramente.

    Com isso, podemos elaborar a forma geral de utilização dos operadores relacionais em sua forma mais comum:

    Onde:

  • operando1 e operando2 podem ser variáveis, constantes que estão definidas, constantes que não estão definidas e até mesmo expressões relacionais (veremos em tópicos posteriores);
  • deve ser substituído por um dos operadores relacionais vistos.

Operadores lógicos

Os operadores lógicos são responsáveis por unir duas ou mais comparações relacionais e, de acordo com uma tabela verdade, gerar um resultado booleano.

Isso ainda está meio complicado, né? Então, dá uma olhada no exemplo a seguir.

Exemplo: suponha que em uma de suas disciplinas existam dois elementos avaliativos, um trabalho que aborda o conteúdo de todo o semestre e uma prova final. Caso a sua nota no trabalho seja maior ou igual a 8 e a nota da sua prova final seja maior ou igual a 6 , você será aprovado na disciplina. Querendo antecipar a sua aprovação, você decidiu desenvolver um programa que verifica se você passou ou não na disciplina.

Para que o programa possa verificar se você passou, ele deve utilizar um operador lógico && em que os operandos serão duas comparações relacionais ( n o t a P r o v a ≥ 6 e n o t a T r a b a l h o ≥ 8 ):

Por que isso dá certo? Pois a tabela verdade do operador lógico E (&&) é:

Onde:

  • P é o resultado do primeiro operando (comparação relacional);
  • Q é o resultado do segundo operando (comparação relacional);
  • P   & &   Q é o resultado da comparação lógica como um todo.

Sendo assim, você só passará na matéria quando P e Q forem verdadeiros, em outras palavras, quando a nota da prova final for maior ou igual a 6 e a nota do trabalho for maior ou igual a 8 .

Lembrete: verdadeiro é análogo a 1 , já falso é análogo a 0 . O computador só trabalha com números, porém visualizar como verdadeiro e falso é mais fácil para nós humanos (tipo booleano).

Ficou bem mais simples, não acha? Agora, nós só precisaremos lembrar das tabelas verdade dos operadores lógicos e fazer as assimilações com os resultados das comparações relacionais presentes como operandos!

Abaixo estão as tabelas verdade dos outros dois principais operadores lógicos.

Tabela verdade do operador lógico OU (||):

Mas até aqui todos os operadores lógicos eram binários, existe algum operador lógico unário?

SIM!!

Tabela verdade do operador lógico NÃO (!):

Por se tratar de um operador lógico unário, a sua tabela verdade acaba ficando reduzida uma vez que só existe um operando.

Agora que você já sabe quem são os operadores da linguagem C e como utilizá-los, está na hora de resolvermos alguns exercícios de fixação, você não acha?

Sem preguiça, Jedi! Te encontro ali na outra página.

Expandir

Exercício Resolvido #1

Elaboração própria.

Em relação aos operadores lógicos, complete a seguinte tabela verdade:

MOSTRAR SOLUÇÃO COMPLETA

Passo 1

O operador lógico NÃO é muito simples, nós não precisamos atribuir significado ao operando P , pois independente do valor que ele assuma, o valor de ! P será o oposto.

Como assim?

Se P for falso, como é o caso representado pela primeira linha de valores booleanos da tabela verdade, então ! P é verdadeiro.

Passo 2

Se P for verdadeiro, como é o caso representado na segunda linha de valores booleanos da tabela verdade, então ! P é falso.

É só isso! Nós acabamos de completar a tabela verdade do operador lógico NÃO, simples né?

Resposta

Exercício Resolvido #2

Elaboração própria.

Em relação aos operadores lógicos, complete a seguinte tabela verdade:

MOSTRAR SOLUÇÃO COMPLETA

Passo 1

Para completarmos essa tabela verdade de maneira simples, precisamos atribuir significados tanto para P quanto para Q . Dessa forma, imagine que P representa a capa de proteção de um jogo e Q o C.D em que esse jogo está armazenado.

Agora, suponha que você está em uma loja de jogos prestes a comprar o maior lançamento do ano.

A primeira situação que pode acontecer é você pedir o lançamento e ele não estar mais disponível na loja, isso significa que tanto P quanto Q são falsos.

Nessa situação, nós conseguimos comprar o jogo? Ou melhor, nós temos a capa E o C.D do jogo?

A resposta é não! Por esse motivo a condição é falsa.

Passo 2

A segunda linha de valores booleanos representa a situação em que a loja possui o lançamento, porém apesar do C.D estar funcionando perfeitamente a capa do jogo está danificada.

Você como um grande colecionador, aceitará uma capa danificada E o C.D do jogo?

A resposta é não! Por esse motivo a condição novamente é falsa.

Passo 3

A terceira linha de valores booleanos representa a situação em que a loja possui o lançamento, porém apesar da capa protetora estar em boas condições o C.D está riscado.

Como você quer jogar o game no primeiro dia de lançamento, aceitará uma capa em boas condições E um C.D riscado?

A resposta é novamente não! Por esse motivo a condição é falsa.

Passo 4

A última linha de valores booleanos representa a situação em que a loja possui o lançamento em perfeito estado, ou seja, a capa protetora e o C.D estão intactos.

Por fim, você aceitará uma capa protetora E um C.D em perfeitas condições?

Claro que sim! Por esse motivo a condição é verdadeira.

Nós acabamos de terminar a tabela verdade do operador lógico E, a exclusividade dessa tabela é que P && Q só será verdadeiro se tanto P quanto Q forem verdadeiros.

Resposta

Exercício Resolvido #3

Elaboração própria.

Em relação aos operadores lógicos, complete a seguinte tabela verdade:

MOSTRAR SOLUÇÃO COMPLETA

Passo 1

Preencher uma tabela verdade é muito simples, nós só temos que arranjar alguns significados para ela, imagine que P representa um carro e Q representa uma moto.

Analisando a primeira linha de valores booleanos da tabela verdade, observamos que tanto P quanto Q são falsos, isso significa que no nosso exemplo não temos um carro e não temos uma moto.

Para verificar P || Q , devemos nos perguntar se temos um carro OU uma moto?

A resposta é não! Por isso essa condição é falsa.

Passo 2

Analisando a segunda linha de valores booleanos da tabela verdade, observamos que P = F e Q = V , isso significa que no nosso exemplo não temos um carro, mas temos uma moto.

Para verificar P || Q , devemos nos perguntar se temos um carro OU uma moto?

A resposta é sim! Dessa forma, a condição verdadeira.

Passo 3

Analisando a terceira linha de valores booleanos da tabela verdade, observamos exatamente o inverso do passo anterior, isso significa que no nosso exemplo temos um carro, mas não temos uma moto.

Portanto, assim como antes, nós temos um carro OU uma moto?

A resposta é sim! Por isso essa condição também é verdadeira.

Passo 4