LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C...

44
09/01/2018 1 LINGUAGEM C: V ARIÁVEIS E EXPRESSÕES Prof. André Backes LINGUAGENS DE PROGRAMAÇÃO Linguagem de Máquina Computador entende apenas pulsos elétricos Presença ou não de pulso 1 ou 0 Tudo no computador deve ser descrito em termos de 1’s ou 0’s (binário) Difícil para humanos ler ou escrever 00011110 = 30

Transcript of LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C...

Page 1: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

1

LINGUAGEM C:

VARIÁVEIS E EXPRESSÕES Prof. André Backes

LINGUAGENS DE PROGRAMAÇÃO

Linguagem de Máquina

Computador entende apenas pulsos elétricos

Presença ou não de pulso

1 ou 0

Tudo no computador deve ser descrito em termos

de 1’s ou 0’s (binário)

Difícil para humanos ler ou escrever

00011110 = 30

Page 2: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

2

LINGUAGENS DE PROGRAMAÇÃO

Linguagem Assembly

Uso de mnemônicos

Conjunto de 0’s e 1’s é agora representado por um

código

10011011 -> ADD

Linguagem Assembly - Problemas

Requer programação especial (Assembly)

Conjunto de instruções varia com o computador

(processador)

Ainda é muito difícil programar

LINGUAGENS DE PROGRAMAÇÃO

Linguagens de Alto Nível

Programas são escritos utilizando uma linguagem

parecida com a linguagem humana

Independente da arquitetura do computador

Mais fácil programar

Uso de compiladores

Page 3: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

3

LINGUAGENS DE PROGRAMAÇÃO

Primórdios

Uso da computação para cálculos de fórmulas

Fórmulas eram traduzidas para linguagem de máquinas

Por que não escrever programas parecidos com as

fórmulas que se deseja computar?

LINGUAGENS DE PROGRAMAÇÃO

FORTRAN (FORmula TRANsform)

Em 1950, um grupo de programadores da IBM

liderados por John Backus produz a versão inicial da

linguagem;

Primeira linguagem de alto nível;

Várias outras linguagens de alto nível foram

criadas

Algol-60, Cobol, Pascal, etc

Page 4: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

4

LINGUAGEM C

Uma das mais bem sucedidas foi uma linguagem

chamada C

Criada em 1972 nos laboratórios por Dennis Ritchie

Revisada e padronizada pela ANSI em 1989

ANSI: American National Standards Institute

Mais utilizada

Novas revisões (dependem do compilador)

C99, padrão ISO/IEC 9899:1999

C11, padrão ISO/IEC 9899:2011 (mais atual)

PRIMEIRO PROGRAMA EM C

Page 5: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

5

PRIMEIRO PROGRAMA EM C

Início

Fim

PRIMEIRO PROGRAMA EM C

Page 6: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

6

PRIMEIRO PROGRAMA EM C

Por que escrevemos programas?

Temos dados ou informações que precisam ser

processados;

Esse processamento pode ser algum cálculo ou

pesquisa sobre os dados de entrada;

Desse processamento, esperamos obter alguns

resultados (Saídas);

COMENTÁRIOS

Permitem adicionar uma descrição sobre o programa.

São ignorados pelo compilador.

Page 7: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

7

VARIÁVEIS

Matemática

é uma entidade capaz de representar um valor ou

expressão;

pode representar um número ou um conjunto de

números

f(x) = x2

VARIÁVEIS

Computação

Posição de memória que armazena uma informação

Pode ser modificada pelo programa

Deve ser definida antes de ser usada

Page 8: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

8

DECLARAÇÃO DE VARIÁVEIS

Precisamos informar ao programa quais dados

queremos armazenar

Precisamos também informar o que são esses

dados (qual o tipo de dado)

Um nome de uma pessoa

Uma cadeia de caracteres (“André” - 5 caracteres)

O valor da temperatura atual

Um valor numérico (com casas decimais)

A quantidade de alunos em uma sala de aula

Um valor numérico (número inteiro positivo ou zero)

Se um assento de uma aeronave está ocupado

Um valor lógico (ocupado: verdadeiro / desocupado: falso)

VARIÁVEIS

Declaração de variáveis em C

<tipo de dado> nome-da-variável;

Propriedades

Nome

Pode ter um ou mais caracteres

Nem tudo pode ser usado como nome

Tipo

Conjunto de valores aceitos

Escopo

global ou local

Page 9: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

9

VARIÁVEIS

Nome

Deve iniciar com letras ou underscore ( _ );

Caracteres devem ser letras, números ou underscores;

Palavras chaves não podem ser usadas como nomes;

Letras maiúsculas e minúsculas são consideradas

diferentes

VARIÁVEIS

Nome

Não utilizar espaços nos nomes

Exemplo: nome do aluno, temperatura do sensor,

Não utilizar acentos ou símbolos

Exemplos: garça, tripé, o,Θ

Não inicializar o nome da variável com números

Exemplos: 1A, 52, 5ª

Underscore pode ser usado

Exemplo: nome_do_aluno : caracter

Não pode haver duas variáveis com o mesmo nome

Page 10: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

10

VARIÁVEIS

Lista de palavras chaves (ANSI-C)

auto break case char const continue do double

else for int union static default void return

enum goto long unsigned struct extern while sizeof

float if short volatile switch register typeof signed

typedef

VARIÁVEIS

Lista de palavras chaves (C11)

auto break case char const continue do

else for int union static default void

enum goto long unsigned struct extern while

float if typedef volatile switch register typeof

double return sizeof signed short _Atomic _Imaginary

_Generic inline _Static_assert _Alignas _Bool _Alignof _Complex

_Noreturn restrict _Thread_local

Page 11: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

11

VARIÁVEIS

Quais nomes de variáveis estão corretos:

Contador

contador1

comp!

.var

Teste_123

_teste

int

int1

1contador

-x

Teste-123

x&

VARIÁVEIS

Corretos:

Contador, contador1,Teste_123, _teste, int1

Errados

comp!, .var, int, 1contador, -x, Teste-123, x&

Page 12: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

12

VARIÁVEIS

Tipo

Define os valores que ela pode assumir e as operações

que podem ser realizadas com ela

Exemplo

tipo int recebe apenas valores inteiros

tipo float armazena apenas valores reais

TIPOS BÁSICOS EM C

char: um byte que armazena o código de um caractere

do conjunto de caracteres local

caracteres sempre ficam entre ‘aspas simples’!

int: um inteiro cujo tamanho depende do processador,

tipicamente 16 ou 32 bits

Page 13: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

13

TIPOS BÁSICOS EM C

Números reais

Tipos: float, double e long double

A parte decimal usa ponto e não vírgula!

float: um número real com precisão simples

double: um número real com precisão dupla

Números muito grandes ou muito pequenos

TIPOS BÁSICOS EM C

Números reais

Pode-se escrever números reais usando notação científica

equivale à 3,295x10-9

Page 14: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

14

MODIFICADORES DE TIPOS

São aplicados antes dos tipos básicos (com a

exceção do tipo void), e permitem alterar o

significado do tipo:

signed: determina que uma variável declarada dos

tipos char ou int poderá ter valores positivos ou

negativos

unsigned: determina que uma variável declarada dos

tipos char ou int somente poderá ter valores positivos e

o valor zero

MODIFICADORES DE TIPOS

São aplicados antes dos tipos básicos (com a

exceção do tipo void), e permitem alterar o

significado do tipo:

short: determina que uma variável do tipo int terá

apenas 16 bits (inteiro pequeno)

long: determina que uma variável do tipo int terá 32

bits (inteiro grande) e que o tipo double possua maior

precisão

Page 15: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

15

TAMANHO DOS TIPOS

ATRIBUIÇÃO

Operador de Atribuição: =

nome_da_variável = expressão, valor ou constante;

Ex.:

A linguagem C suporta múltiplas atribuições

x = y = z = 0;

Page 16: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

16

COMANDO DE SAÍDA

printf()

print formatted

Comando que realiza a impressão dos dados do

programa na tela

O texto a ser escrito deve ser sempre definido entre

“aspas duplas”

printf(“Texto”);

COMANDO DE SAÍDA

printf()

Quando queremos escrever dados formatados na tela

usamos a forma geral da função, a qual possui os tipos

de saída.

Eles especificam o formato de saída dos dados que

serão escritos pela função printf().

printf(“%tipo_de_saida”,expressão);

printf(“%tipo1 %tipo2”,valor1, valor2);

Page 17: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

17

COMANDO DE SAÍDA

printf()

Especificadores de formato de tipos de saída

Alguns tipos de saída

%c Escrita de um caractere (char)

%d ou %i Escrita de números inteiros (int)

%u Escrita de números inteiros sem sinal (unsigned)

%f Escrita de números reais (float ou double)

%s Escrita de vários caracteres (string)

%p Escrita de um endereço de memória

COMANDO DE SAÍDA

printf()

Podemos também misturar o texto a ser mostrado com

os especificadores de formato.

printf(“Texto %tipo_de_saida texto ”,expressão);

Page 18: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

18

COMANDO DE SAÍDA

printf()

Exemplos

COMANDO DE ENTRADA

scanf()

Comando que realiza a leitura dos dados da entrada

padrão (no caso o teclado)

Forma geral:

scanf(“tipo de entrada”, lista de variáveis);

scanf(“%tipo_de_entrada,&variável);

Page 19: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

19

COMANDO DE ENTRADA

scanf()

O tipo de entrada deve ser sempre definido entre

“aspas duplas”

Na linguagem C, é necessário colocar o símbolo &

antes do nome de cada variável a ser lida pelo

comando scanf().

O símbolo & indica qual é o endereço da variável que vai

receber os dados lidos

COMANDO DE ENTRADA

scanf()

Especificadores de formato do tipo de entrada

Alguns tipos de entrada

%c Leitura de um caractere (char)

%d ou %i Leitura de números inteiros (int ou char)

%f Leitura de números reais (float)

%lf Leitura de números reais (double)

%s Leitura de vários caracteres (string)

Page 20: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

20

COMANDO DE ENTRADA

scanf()

Podemos ler mais de um valor em um único comando

Quando digitar vários valores, separar com espaço, TAB, ou

Enter

scanf(“%tipo1%tipo2,&var1,&var2);

COMANDO DE ENTRADA

scanf()

Page 21: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

21

COMANDO DE ENTRADA

getchar()

Comando que realiza a leitura de um único caractere

ESCOPO DE VARIÁVEIS

Escopo

Define onde e quando a variável pode ser usada.

Escopo global

Fora de qualquer definição de função

Tempo de vida é o tempo de execução do programa

Escopo local

Bloco ou função

Page 22: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

22

ESCOPO DE VARIÁVEIS

Escopo local

Bloco: visível apenas no interior de um bloco de comandos

Função: declarada na lista de parâmetros da função ou definida dentro da função

ESCOPO DE VARIÁVEIS

Page 23: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

23

CONSTANTES

Como uma variável, uma constante também

armazena um valor na memória do computador.

Entretanto, esse valor não pode ser alterado: é

constante.

Para constantes é obrigatória a atribuição do valor.

CONSTANTES

Usando #define

Você deverá incluir a diretiva de pré-processador

#define antes de início do código:

Ela informa ao compilador que ele deve procurar todas

as ocorrências da palavra definida e substituir pelo valor

quando o programa for compilado

Cuidado: não colocar “;”

Page 24: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

24

CONSTANTES

Usando const

Usando const, a declaração não precisa estar no início

do código

A declaração é igual a de uma variável inicializada

Basicamente, criamos uma variável que não pode ter

seu valor alterado.

SEQUÊNCIAS DE ESCAPE

São constantes

predefinidas

Elas permitem o envio de

caracteres de controle

não gráficos para

dispositivos de saída

Page 25: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

25

SEQUÊNCIAS DE ESCAPE

Exemplo

Saída Hello World

Hello

World

Hello \ World

"Hello World"

TIPOS BOOLEANOS EM C

Um tipo booleano pode assumir dois valores:

verdadeiro ou falso (true ou false)

Na linguagem ANSI-C não existe o tipo de dado

booleano, apenas a partir do padrão C99. Para

armazenar esse tipo de informação, usa-se uma

variável do tipo int (número inteiro)

Valor 0 significa falso

Números + ou – : verdadeiro

Exemplos:

Page 26: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

26

OPERADORES

Os operadores são usados para desenvolver

diferentes tipos de operações. Com eles podemos:

Realizar operações matemáticas com suas variáveis.

Realizar operações de comparação entre suas

variáveis.

Realizar operações lógicas entre suas variáveis.

Realizar operações em nível de bits com suas variáveis

OPERADORES ARITMÉTICOS

São aqueles que operam sobre números (valores,

variáveis, constantes ou chamadas de funções)

e/ou expressões e têm como resultados valores

numéricos

Note que os operadores aritméticos são sempre usados

em conjunto com o operador de atribuição.

Operador Significado Exemplo

+ Adição de dois valores z = x + y

- Subtração de dois valores z = x – y

* Multiplicação de dois valores z = x * y

/ Quociente de dois valores z = x / y

% Resto de uma divisão z = x % y

Page 27: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

27

OPERADORES ARITMÉTICOS

Podemos devolver o resultado para uma outra

variável ou para um outro comando ou função que

espere receber um valor do mesmo tipo do

resultado da operação, no caso, a função printf()

OPERADORES ARITMÉTICOS

IMPORTANTE

As operações de multiplicação, divisão e resto são

executadas antes das operações de adição e

subtração. Para forçar uma operação a ser executada

antes das demais, ela é colocada entre parênteses

z = x * y + 10;

z = x * (y + 10);

O operador de subtração também pode ser utilizado

para inverter o sinal de um número

x = −y;

Neste caso, a variável x receberá o valor de y

multiplicado por −1, ou seja,

x = (−1) * y;

Page 28: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

28

OPERADORES ARITMÉTICOS

IMPORTANTE

Em uma operação utilizando o operador de quociente /,

se o numerador e o denominador forem números

inteiros, por padrão o compilador retornará apenas a

parte inteira da divisão

OPERADORES RELACIONAIS

São aqueles que verificam a magnitude (qual é

maior ou menor) e/ou igualdade entre dois valores

e/ou expressões.

Os operadores relacionais são operadores de

comparação de valores

Retorna verdadeiro (1) ou falso (0)

Operador Significado Exemplo

> Maior do que X > 5

>= Maior ou igual a X >= Y

< Menor do que X < 5

<= Menor ou igual a X <= Z

== Igual a X == 0

!= Diferente de X != Y

Page 29: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

29

IMPORTANTE

Símbolo de atribuição = é diferente, muito diferente,

do operador relacional de igualdade ==

IMPORTANTE

Símbolo de atribuição = é diferente, muito diferente,

do operador relacional de igualdade ==

Por que sempre entra na condição?

Ao fazer Nota = 60 (“Nota recebe 60”) estamos

atribuindo um valor inteiro à variável Nota.

O valor atribuído 60 é diferente de Zero. Como em

C os booleanos são números inteiros, então vendo

Nota como booleano, essa assume true, uma vez

que é diferente de zero

Page 30: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

30

OPERADORES LÓGICOS

Certas situações não podem ser modeladas

utilizando apenas os operadores aritméticos e/ou

relacionais

Um exemplo bastante simples disso é saber se

determinada variável x está dentro de uma faixa de

valores.

Por exemplo, a expressão matemática

0 < x < 10

indica que o valor de x deve ser maior do que 0 (zero) e

também menor do que 10

OPERADORES LÓGICOS

Os operadores lógicos permitem representar

situações lógicas unindo duas ou mais expressões

relacionais simples em uma composta

Retorna verdadeiro (1) ou falso (0)

Exemplo

A expressão 0 < x < 10

Equivale a (x > 0) && (x < 10)

Operador Significado Exemplo

&& Operador E (x > 0) && (x < 10)

|| Operador OU (a == ‘F’) || (b != 32)

! Operador NEGAÇÃO !(x == 10)

Page 31: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

31

OPERADORES LÓGICOS

Tabela verdade

Os termos a e b representam o resultado de duas

expressões relacionais

a b !a !b a && b a || b

0 0 1 1 0 0

0 1 1 0 0 1

1 0 0 1 0 1

1 1 0 0 1 1

OPERADORES LÓGICOS

Exemplos

Page 32: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

32

OPERADORES DE PRÉ E PÓS-

INCREMENTO/DECREMENTO

Esses operadores podem ser utilizados sempre

que for necessário somar uma unidade

(incremento) ou subtrair uma unidade (decremento)

a determinado valor

Operador Significado Exemplo Resultado

++ incremento ++x ou x++ x = x + 1

-- decremento --x ou x-- x = x - 1

OPERADORES DE PRÉ E PÓS-

INCREMENTO/DECREMENTO

Qual a diferença em usar antes ou depois da

variável?

Essa diferença de sintaxe no uso do operador não

tem importância se o operador for usado sozinho

Porém, se esse operador for utilizado dentro de uma

expressão aritmética, a diferença entre os dois

operadores será evidente

Operador Significado Resultado

++x pré-incremento soma +1 à variável x antes de utilizar seu valor

x++ pós-incremento soma +1 à variável x depois de utilizar seu valor

--x pré-decremento subtrai −1 da variável x antes de utilizar seu valor

x-- pós-decremento subtrai −1 da variável x depois de utilizar seu valor

Page 33: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

33

OPERADORES DE PRÉ E PÓS-

INCREMENTO/DECREMENTO

Essa diferença de sintaxe no uso do operador não

tem importância se o operador for usado sozinho

Porém, se utilizado dentro de uma expressão

aritmética, a diferença entre os dois operadores será

evidente

OPERADORES DE ATRIBUIÇÃO SIMPLIFICADA

Muitos operadores são sempre usados em

conjunto com o operador de atribuição.

Para tornar essa tarefa mais simples, a linguagem C

permite simplificar algumas expressões

Operador Significado Exemplo

+= Soma e atribui x += y igual a x = x + y

-= Subtrai e atribui x -= y igual a x = x – y

*= Multiplica e atribui x *= y igual a x = x * y

/= Divide e atribui o quociente x /= y igual a x = x / y

%= Divide e atribui o resto x %= y igual a x = x % y

Page 34: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

34

OPERADORES DE ATRIBUIÇÃO SIMPLIFICADA

Sem operador Com operador

OPERADORES

Exercício

Diga o resultado das variáveis x, y e z depois da seguinte sequência de operações:

Page 35: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

35

OPERADORES

Exercício

Diga o resultado das variáveis x, y e z depois da seguinte sequência de operações:

OPERADORES

Exercício

Diga se as seguintes expressões serão verdadeiras ou

falsas:

Page 36: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

36

CONVERSÕES DE TIPOS NA ATRIBUIÇÃO

Atribuição entre tipos diferentes

O compilador converte automaticamente o valor do lado direto para o tipo do lado esquerdo do operador de atribuição “=” Pode haver perda de informação

MODELADORES (CASTS)

Um modelador é aplicado a uma expressão

Força o resultado da expressão a ser de um tipo

especificado.

(tipo) expressão

Exemplo

Page 37: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

37

PRECEDÊNCIA

DOS

OPERADORES

NOVOS TIPOS EM C

O tipo long long int

No padrão C99 existe agora um novo tipo inteiro, o

long long int, o qual define um inteiro de 64 bits.

Como os demais tipos, este pode ser com ou sem sinal

(unsigned long long int).

Foram adicionados também novos especificadores de

tipos (“%lld” e “%llu”) para uso com as funções printf()

e scanf()

Page 38: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

38

NOVOS TIPOS EM C

O tipo complexo

No padrão C99 podemos usar a palavra-chave

_Complex (ou a macro complex) para modificar

qualquer tipo de ponto-flutuante (float, double e long

double) para que ele se comporte como um par de

números de tal modo que defina um número complexo

As macros _Complex_I e I representam a parte

imaginária do número complexo

NOVOS TIPOS EM C

O tipo complexo

Além disso, a biblioteca complex.h fornece funções

para diversas operações sobre números complexos

Trabalhando com números complexos

Page 39: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

39

NOVOS TIPOS EM C

O tipo booleano

O tipo booleano _Bool foi adicionado à linguagem C

padrão 99, assim como à biblioteca stdbool.h por

motivos de compatibilidade (nela é definida a macro

bool, que pode ser usada no lugar de _Bool).

Uma variável definida sob esse novo tipo de dado

suporta apenas dois valores: true (verdadeiro) com

valor igual a 1 e false (falso) com valor igual a 0

NOVOS TIPOS EM C

Novos tipos inteiros

Tipos inteiros básicos podem variar em diferentes

sistemas

Com o propósito de melhorar a portabilidade de

programas, o padrão C99 suporta vários novos tipos

inteiros

Eles estão disponíveis nas bibliotecas inttypes.h e

stdint.h.

Page 40: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

40

NOVOS TIPOS EM C

Novos tipos inteiros

Tipos inteiros de largura exata

Garantem possuir N bits em todos os sistemas: int8_t,

int16_t, int32_t e int64_t.

Tipos inteiros de largura mínima

Garantem possuir pelo menos N bits em todos os sistemas:

int_least8_t, int_least16_t, int_least32_t e int_least64_t.

NOVOS TIPOS EM C

Novos tipos inteiros

Tipos inteiros rápidos

São os tipos inteiros mais rápidos disponíveis no sistema e

que possuem pelo menos N bits: int_fast8_t, int_fast16_t,

int_fast32_t e int_fast64_t.

A versão unsigned desses tipos é obtida

acrescentando o prefixo u ao nome do tipo

Page 41: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

41

LEITURA E ESCRITA DOS NOVOS TIPOS

Devemos tomar um cuidado extra na hora de ler e

escrever os novos tipos inteiros.

Os tipos de saída/entrada padrão do int (%d, %i, %u)

não funcionam para esses novos tipos inteiros.

Devemos usar as macro pré-definidas para cada tipo.

Além disso, as novas macros de leitura e escrita não

possuem o símbolo de % dentro delas. É tarefa do

programador acrescentar o símbolo de % a respectiva

macro usada

LEITURA E ESCRITA DOS NOVOS TIPOS

Macros para escrita

Tipos de inteiro e respectivos tipos de saída

Imprime um

intN_t

N = 8, 16, 32

ou 64

int_leastN_t

N = 8, 16, 32 ou

64

int_fastN_t

N = 8, 16, 32

ou 64

inteiro decimal

com sinal

PRIdN

PRIiN

PRIdLEASTN

PRIiLEASTN

PRIdFASTN

PRIiFASTN

inteiro decimal

sem sinal PRIuN PRIuLEASTN PRIuFASTN

Page 42: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

42

Tipos de inteiro e respectivos tipos de entrada

Lê um

intN_t

N = 8, 16, 32

ou 64

int_leastN_t

N = 8, 16, 32 ou

64

int_fastN_t

N = 8, 16, 32

ou 64

inteiro decimal

com sinal

SCNdN

SCNiN

SCNdLEASTN

SCNiLEASTN

SCNdFASTN

SCNiFASTN

inteiro decimal

sem sinal SCNuN SCNuLEASTN SCNuFASTN

LEITURA E ESCRITA DOS NOVOS TIPOS

Macros para leitura

LEITURA E ESCRITA DOS NOVOS TIPOS

Exemplos

Page 43: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

43

VALORES INFINITY E NAN

O padrão C99 segue o padrão IEEE 754 para

ponto flutuante.

Isso significa que podemos representar os valores

infinito positivo (+∞) ou negativo (–∞) e NaN (não

um é número), definidos na biblioteca math.h

INFINITY: macro que representa o infinito positivo. É

produzido por operações matemáticas como (1.0/0.0).

NAN: macro que representa o valor de que não um é

número. É produzido por operações matemáticas como

−1.

VALORES INFINITY E NAN

Os valores INFINITY e NAN também suportam

operações de comparação entre si

No entanto, é recomendado utilizar a sua

respectiva função macro para testes

isfinite() para testar se um valor é infinito ou não

isnan() para testar se um valor não um é número

Page 44: LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C não existe o tipo de dado booleano, apenas a partir do padrão C99. Para armazenar

09/01/2018

44

VALORES INFINITY E NAN

SAÍDA

Resultado: nan

Resultado: inf

Resultado: -inf

Valor infinito

MATERIAL COMPLEMENTAR

Vídeo aulas

Aula 01: Introdução

Aula 02: Declaração de Variáveis

Aula 03: printf

Aula 04: scanf

Aula 05: Operadores de Atribuição

Aula 06: Constantes

Aula 07: Operadores Aritméticos

Aula 08: Comentários

Aula 09: Pré e Pós Incremento

Aula 10: Atribuição Simplificada

Aula 11: Operadores Relacionais

Aula 12: Operadores Lógicos