Mathematics">
Nothing Special   »   [go: up one dir, main page]

03 Variaveis e Tipos de Dados

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 49

Variáveis e

Tipos de Dados
Prof. Ítalo Fernando Scotá Cunha
cunha@dcc.ufmg.br
Nosso primeiro programa

#include <stdio.h>

int main(void) {
printf("Programacao rlz!\n");
return 0;
}
Nosso primeiro programa

main é a função
onde o programa
começa execução.
#include <stdio.h>

int main(void) {
printf("Programacao rlz!\n");
return 0;
}
Nosso primeiro programa

main é a função
onde o programa
começa execução.
#include <stdio.h>

int main(void) {
printf("Programacao rlz!\n");
return 0;
}

A função print
imprime texto na
saída do programa.
Nosso primeiro programa

main é a função
onde o programa
começa execução.
#include <stdio.h>

int main(void) {
printf("Programacao rlz!\n");
return 0;
}

A função print
O comando return imprime texto na
termina a função saída do programa.
atual (main).
Nosso primeiro programa
include é uma diretiva
que permite a utilização
de funções externas em
main é a função
um programa (print).
onde o programa
começa execução.
#include <stdio.h>

int main(void) {
printf("Programacao rlz!\n");
return 0;
}

A função print
O comando return imprime texto na
termina a função saída do programa.
atual (main).
Incluindo bibliotecas com #include
• Uma biblioteca contém um conjunto de
funções relacionadas
• Permitem reutilização de código: não
precisamos fazer tudo do zero
• É sempre uma boa ideia procurar bibliotecas
existentes em vez de reinventar a roda
Incluindo bibliotecas com #include
#include <kungfu.h>
Incluindo bibliotecas com #include
#include <math.h>
Bibliotecas comuns em C
Cabeçalho Funções
stdio.h Entrada e saída (print, scanf, fgets, fopen, fclose)
stdlib.h Interação com o sistema (system, exit, malloc, free)
math.h Funções matemáticas (sqrt, sin, cos, atan, log)
string.h Manipulação de texto (strcmp, strcpy, memset, atof, atoi)
time.h Manipulação de tempo e datas (time, clock, strftime)
Executando nosso primeiro
programa
#include <stdio.h>

int main(void) {
printf("Programacao rlz!\n");
return 0;
}

hello.c
a.out ou
Compilador a.exe
Executando nosso primeiro
programa #include <stdio.h>
int main(void) {
printf("Programacao rlz!\n");
return 0;
}
Variáveis
• Dados ocupam posição de memória
• Em programas nos referimos ao valor em uma
posição de memória por uma variável
• No computador simplificado utilizamos a posição para
indicar a variável (por exemplo 5A e 5B)
• Em C precisamos definir variáveis
Declaração de uma variável
• Declaração: Define o tipo e o nome da variável
Sintaxe: tipo nome;
int marchas;
Exemplos:
float entre_eixos;
Declaração de uma variável
• Declaração: Define o tipo e o nome da variável
Sintaxe: tipo nome;
int marchas;
Exemplos:
float entre_eixos;

• C tem 4 tipos primitivos de dados:


Classe Tipos Exemplos
Inteiros char, short, int, long, unsigned 1, -2, 100, -2000
Caractere char ‘a’, ‘b’, ‘Z’, ‘9’
Ponto flutuante float, double, long double 1.2, 3.1415, -2.0
Ponteiro
Atribuição de uma variável
• Atribuição: Armazena um valor em uma variável
Sintaxe: nome_variavel = expressao;
Exemplos: int i;
float f;
char c;
i = 10;
f = 3.1415;
c = ‘a’;
c = 33;
Inicialização de uma variável
• Inicialização: Combina declaração e atribuição
Sintaxe: tipo nome_variavel = expressao;
Exemplos: int i = 10;
float f = 3.1415;
char c = ‘a’;
Inicialização de uma variável
• Inicialização: Combina declaração e atribuição
Sintaxe: tipo nome_variavel = expressao;
Exemplos: int i = 10;
float f = 3.1415;
char c = ‘a’;

Sempre inicialize variáveis


antes de acessá-las!
Imprimindo variáveis
printf(“formato”, v1, v2, v3, ...);

#include <stdio.h>
int main(void) { %d para imprimir int
int dia = 12;
int mes = 9;
int ano = 2022; %lf para imprimir double
double temp = 28.5;
printf(“hoje é %d/%d/%d\n”,
dia, mes, ano);
printf(“está fazendo %lf graus\n”, temp);
return 0;
}
Exemplos
• declara_imprime
Tipos de dados
• Tipos inteiros
• Utilizados frequentemente
• Em C, tipos inteiros tem número finito de bits
• Quantidade de bits determina o maior e o menor valor que
pode ser representado
• Tamanho dos inteiros depende do processador e sistema
operacional
Variáveis inteiras
• Tamanhos típicos de tipos inteiros
Tipo Bits Intervalo
char 8 [-128, 127]
unsigned char 8 [0, 255]
short 16 [-32768, 32767]
unsigned short 16 [0, 65535]
int 32 [-2 147 483 648, 2 147 483 647]
unsigned int 32 [0, 4 294 967 295]
long 64 [-(263), 263-1]
unsigned long 64 [0, 18 446 744 073 709 551 615]
long long 128 [-(2127), 2127-1]
unsigned long long 128 [0, 2128-1]
Exemplo
• tamanho_tipos
• limites_tipos
Representação de números
inteiros sem sinal (unsigned)
• Inteiros sem sinal são representados em binário
• O i-ésimo bit vale 2i
• 13 = 8 + 4 + 1 = 23 + 22 + 20 = 0000 1101 = 0x0d
• 44 = 32 + 8 + 4 = 25 + 23 + 22 = 0010 1100 = 0x2c
• 64 = 64 = 25 = 0100 0000 = 0x40

• Maior inteiro em 8 bits?


• 0xFF = 1111 1111 = 128 + 64 + 32 + ... + 1 = 255
Representação de números
inteiros com sinal
• Inteiros com sinal são representados em
complemento de dois
• Representação eficiente que facilita operações
aritméticas
• Em complemento de dois
• Inteiros negativos têm o primeiro bit igual a 1
• Inteiros positivos têm o primeiro bit igual a zero
• Maior inteiro com sinal em 8 bits?
• 0x7F = 0111 1111 = 64 + 32 + ... + 1 = 127
Complemento de dois
• Para calcular a representação de um número
negativo em complemento de dois
1. Inverta os bits da representação positiva
2. Some 1
43 = 0010 1011 = 32 + 8 + 2 + 1
-43 = 1101 0100 + 1 = 11010101

1 = 0000 0001
-1 = 1111 1110 + 1 = 1111 1111

12 = 0000 1100
-12 = 1111 0011 + 1 = 1111 0100
Variáveis inteiras
• Tamanhos típicos de tipos inteiros
• Escolher o tipo int é recomendado
• Suficiente para maior parte dos casos de uso
• Recomendo utilizar números sem sinal (unsigned) apenas caso
você tenha uma razão específica
Variáveis inteiras
• Tamanhos típicos de tipos inteiros
• Escolher o tipo int é recomendado
• Suficiente para maior parte dos casos de uso
• Recomendo utilizar números sem sinal (unsigned) apenas caso
você tenha uma razão específica
• Cuidado ao utilizar números sem sinal (unsigned)
unsigned int x = 10 - 11;
x?
Variáveis inteiras
• Tamanhos típicos de tipos inteiros
• Escolher o tipo int é recomendado
• Suficiente para maior parte dos casos de uso
• Recomendo utilizar números sem sinal (unsigned) apenas caso
você tenha uma razão específica
• Cuidado ao utilizar números sem sinal (unsigned)
unsigned int x = 10 - 11;
x?
x é -1  0xFFFFFFFF  4294967295
Exemplo
• unsigned_wrap
Variáveis de caractere
• Um variável de caractere (char) pode ser
interpretada como um inteiro ou como uma letra
• O mapeamento entre inteiro e letra é dado pela
tabela ASCII
• ‘A’  65
• ‘a’  97
• ‘1’  49
• ‘?’  63
Variáveis de caractere
• Um variável de caractere (char) pode ser
interpretada como um inteiro ou como uma letra
• O mapeamento entre inteiro e letra é dado pela
tabela ASCII
• ‘A’  65
• ‘a’  97
• ‘1’  49
• ‘?’  63
• ‘😎’  Não existe na tabela ASCII
Variáveis de caractere
• Um variável de caractere (char) pode ser
interpretada como um inteiro ou como uma letra
• O mapeamento entre inteiro e letra é dado pela
tabela ASCII
• ‘A’  65
• ‘a’  97
• ‘1’  49
• ‘?’  63
• ‘😎’  Não existe na tabela ASCII
• ‘漢’  Não existe na tabela ASCII
• ‘ç’  Não existe na tabela ASCII
Exemplo
• char_int
Variáveis de ponto flutuante
• Variáveis de ponto flutuante são aproximações de
números reais, limitados pelo processador
Variáveis de ponto flutuante
• Variáveis de ponto flutuante são aproximações de
números reais, limitados pelo processador
• Ponto flutuante não é um ponto que flutua no ar
• Ponto fixo: 130,25
• Ponto flutuante: 1,3025 x 102
• O ponto flutua de forma a termos sempre um
número à frente da vírgula
• “Vírgula flutuante”
Representação de números ponto
flutuante: Padrão IEEE-754
• Representação complexa em três partes:
• Sinal (1 bit)
• Mantissa
• Expoente
Representação de números ponto
flutuante: Padrão IEEE-754
• Representação complexa em três partes:
• Sinal (1 bit)
• Mantissa
• Expoente
Propriedade/Tipo float double
Tamanho total 32 bits 64 bits
Mantissa 23 bits 52 bits
Expoente 8 bits 11 bits
Mínimo -3.4 x 1038 -1.7 x 10308
Máximo 3.4 x 1038 1.7 x 10308
Precisão aproximada 7 dígitos 16 dígitos
Representação de números ponto
flutuante: Padrão IEEE-754
• Representação complexa em três partes:
• Sinal (1 bit)
• Mantissa
Com o tanto
• Expoente de memória
Propriedade/Tipo float double que temos
atualmente,
Tamanho total 32 bits 64 bits vai de double!
Mantissa 23 bits 52 bits
Expoente 8 bits 11 bits
Mínimo -3.4 x 1038 -1.7 x 10308
Máximo 3.4 x 1038 1.7 x 10308
Precisão aproximada 7 dígitos 16 dígitos
Variáveis de ponto flutuante
contém valores aproximados
• Sempre considere que os valores são aproximados
Variáveis de ponto flutuante
contém valores aproximados
• Sempre considere que os valores são aproximados
• Variáveis ponto flutuante não são equivalentes a
variáveis inteiras
• 1 ≠ 1.0
Variáveis de ponto flutuante
contém valores aproximados
• Sempre considere que os valores são aproximados
• Variáveis ponto flutuante não são equivalentes a
variáveis inteiras
• 1 ≠ 1.0
• Operações com variáveis ponto flutuante são
sempre aproximadas
• 0.1 + 0.2 ≠ 0.3
Exemplo
• precisao_float
Conversão entre tipos
• C faz conversão automática entre variáveis
• Tome cuidado com as conversões automáticas!
• Conversão entre tipos inteiros
• Cuidado ao converter com mais bits para uma variável
com menos bits!
• Cuidado ao converter variáveis com sinal para variáveis
sem sinal!
• Conversão entre inteiros e ponto flutuante
• float = int: Aproxima o valor do inteiro no float
• int = float: Descarta a parta fracionária
• Truncamento; não é arredondamento!
Exemplo
• conversao_tipos
Identificadores e palavras
reservadas
• Nomes válidos para variáveis
• Letras, números e underscore
• Não podem começar com número
Identificadores e palavras
reservadas
• Nomes válidos para variáveis
• Letras, números e underscore
• Não podem começar com número
• Palavras reservadas não podem ser nome
auto double int struct
break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while
inline restrict
Identificadores e palavras
reservadas
• Nomes válidos para variáveis
• Letras, números e underscore
• Não podem começar com número
• Palavras reservadas não podem ser nome
auto double int struct
break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while
inline restrict
Tarefa: Instalar e configurar um
compilador de C
• Opções complexas, não recomendadas:
• Linux ou WSL2
• VS Code + MinGW
• Code::Blocks
• Baixe a versão com MinGW embutido
• codeblocks-XXXXmingw-setup.exe

Você também pode gostar