LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C...
Transcript of LINGUAGEM C: VARIÁVEIS E EXPRESSÕES - …backes/gsi002/Aula03-C_Basico.pdf · Na linguagem ANSI-C...
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
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
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
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
09/01/2018
5
PRIMEIRO PROGRAMA EM C
Início
Fim
PRIMEIRO PROGRAMA EM C
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.
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
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
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
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
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&
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
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
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
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;
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);
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);
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);
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)
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()
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
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
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 “;”
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
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:
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
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;
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
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
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)
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
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
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
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:
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:
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
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()
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
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.
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
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
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
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
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