Buscar

Aula 11 - Tipos primitivos de dados Arquivo

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 89 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 89 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 89 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tipos primitivos de dados
Aula 11
Prof. Renan Albuquerque Marks
Faculdade de Computação
Universidade Federal de Mato Grosso do Sul
Algoritmos e Programação I
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 1 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Conteúdo da aula
1 Introdução
2 Tipos inteiros
3 Números com ponto flutuante
4 Caracteres
5 Tipos de dados definidos pelo programador
6 Operador sizeof
7 Exercícios
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 2 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Introdução
I a linguagem C suporta fundamentalmente dois tipos de dados
numéricos: inteiros e ponto flutuante
I além desses, temos também o tipo caractere, que é um número
inteiro em um intervalo finito mais restrito que o dos tipos inteiros
I veremos os especificadores desses tipos, seus especificadores de
conversão para entrada e saída de dados, as conversões entre valores
de tipos distintos, além de definir nossos próprios tipos
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 3 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Introdução
I a linguagem C suporta fundamentalmente dois tipos de dados
numéricos: inteiros e ponto flutuante
I além desses, temos também o tipo caractere, que é um número
inteiro em um intervalo finito mais restrito que o dos tipos inteiros
I veremos os especificadores desses tipos, seus especificadores de
conversão para entrada e saída de dados, as conversões entre valores
de tipos distintos, além de definir nossos próprios tipos
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 3 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Introdução
I a linguagem C suporta fundamentalmente dois tipos de dados
numéricos: inteiros e ponto flutuante
I além desses, temos também o tipo caractere, que é um número
inteiro em um intervalo finito mais restrito que o dos tipos inteiros
I veremos os especificadores desses tipos, seus especificadores de
conversão para entrada e saída de dados, as conversões entre valores
de tipos distintos, além de definir nossos próprios tipos
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 3 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tipos inteiros
I o tipo int é chamado de tipo inteiro com sinal
I na linguagem C temos palavras reservadas chamadas de
especificadores de tipos, do inglês type specifiers, sendo eles (para
números inteiros): signed , unsigned , short e long :
short int
unsigned short int
int
unsigned int
long int
unsigned long int
I a ordem que os especificadores ocorrem não tem influência sobre o
resultado final
I em alguns casos a linguagem C permite que a palavra reservada int
seja omitida
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 4 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tipos inteiros
I o tipo int é chamado de tipo inteiro com sinal
I na linguagem C temos palavras reservadas chamadas de
especificadores de tipos, do inglês type specifiers, sendo eles (para
números inteiros): signed , unsigned , short e long :
short int
unsigned short int
int
unsigned int
long int
unsigned long int
I a ordem que os especificadores ocorrem não tem influência sobre o
resultado final
I em alguns casos a linguagem C permite que a palavra reservada int
seja omitida
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 4 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tipos inteiros
I o tipo int é chamado de tipo inteiro com sinal
I na linguagem C temos palavras reservadas chamadas de
especificadores de tipos, do inglês type specifiers, sendo eles (para
números inteiros): signed , unsigned , short e long :
short int
unsigned short int
int
unsigned int
long int
unsigned long int
I a ordem que os especificadores ocorrem não tem influência sobre o
resultado final
I em alguns casos a linguagem C permite que a palavra reservada int
seja omitida
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 4 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tipos inteiros
I o tipo int é chamado de tipo inteiro com sinal
I na linguagem C temos palavras reservadas chamadas de
especificadores de tipos, do inglês type specifiers, sendo eles (para
números inteiros): signed , unsigned , short e long :
short int
unsigned short int
int
unsigned int
long int
unsigned long int
I a ordem que os especificadores ocorrem não tem influência sobre o
resultado final
I em alguns casos a linguagem C permite que a palavra reservada int
seja omitida
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 4 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tipos inteiros
I o tipo int é chamado de tipo inteiro com sinal
I na linguagem C temos palavras reservadas chamadas de
especificadores de tipos, do inglês type specifiers, sendo eles (para
números inteiros): signed , unsigned , short e long :
short int
unsigned short int
int
unsigned int
long int
unsigned long int
I a ordem que os especificadores ocorrem não tem influência sobre o
resultado final
I em alguns casos a linguagem C permite que a palavra reservada int
seja omitida
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 4 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tipos inteiros
Em máquinas de 64 bits (com compiladores 64 bits):
Tipo Menor valor Maior valor
short int −32.768 32.767
unsigned short int 0 65.535
int −2.147.483.648 2.147.483.647
unsigned int 0 4.294.967.294
long int −9.223.372.036.854.775.808 9.223.372.036.854.775.807
unsigned long int 0 18.446.744.073.709.551.615
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 5 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tipos inteiros
Em máquinas de 64 bits (com compiladores 64 bits):
Tipo Menor valor Maior valor
short int −32.768 32.767
unsigned short int 0 65.535
int −2.147.483.648 2.147.483.647
unsigned int 0 4.294.967.294
long int −9.223.372.036.854.775.808 9.223.372.036.854.775.807
unsigned long int 0 18.446.744.073.709.551.615
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 5 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
..
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tipos inteiros
I podemos escrever constantes numéricas inteiras nas bases:
I decimal: 75 -264 32767
I octal: 075 0367 07777
I hexadecimal: 0xf 0x8aff 0X12Acf
I podemos misturar notações: 117 + 077 + 0xf0 resulta em 420 na
base decimal.
I números sempre são armazenados na memória na base binária!
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 6 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tipos inteiros
I podemos escrever constantes numéricas inteiras nas bases:
I decimal: 75 -264 32767
I octal: 075 0367 07777
I hexadecimal: 0xf 0x8aff 0X12Acf
I podemos misturar notações: 117 + 077 + 0xf0 resulta em 420 na
base decimal.
I números sempre são armazenados na memória na base binária!
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 6 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tipos inteiros
I podemos escrever constantes numéricas inteiras nas bases:
I decimal: 75 -264 32767
I octal: 075 0367 07777
I hexadecimal: 0xf 0x8aff 0X12Acf
I podemos misturar notações: 117 + 077 + 0xf0 resulta em 420 na
base decimal.
I números sempre são armazenados na memória na base binária!
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 6 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tipos inteiros
I podemos escrever constantes numéricas inteiras nas bases:
I decimal: 75 -264 32767
I octal: 075 0367 07777
I hexadecimal: 0xf 0x8aff 0X12Acf
I podemos misturar notações: 117 + 077 + 0xf0 resulta em 420 na
base decimal.
I números sempre são armazenados na memória na base binária!
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 6 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tipos inteiros
I podemos escrever constantes numéricas inteiras nas bases:
I decimal: 75 -264 32767
I octal: 075 0367 07777
I hexadecimal: 0xf 0x8aff 0X12Acf
I podemos misturar notações: 117 + 077 + 0xf0 resulta em 420 na
base decimal.
I números sempre são armazenados na memória na base binária!
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 6 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tipos inteiros
I por padrão, o compilador tenta armazenar uma constante inteira na
base decimal nessa ordem:
int → long int → unsigned long int
I para constantes nas bases octal ou hexadecimal:
int → unsigned int → long int → unsigned long int
I podemos obrigar que o compilador trate constantes como:
I unsigned : 22u 072U 0xa09DU
I long : 22L 055l 0xffffL
I unsigned long int : 22ul 07777UL 0xFFFFAALU
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 7 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tipos inteiros
I por padrão, o compilador tenta armazenar uma constante inteira na
base decimal nessa ordem:
int → long int → unsigned long int
I para constantes nas bases octal ou hexadecimal:
int → unsigned int → long int → unsigned long int
I podemos obrigar que o compilador trate constantes como:
I unsigned : 22u 072U 0xa09DU
I long : 22L 055l 0xffffL
I unsigned long int : 22ul 07777UL 0xFFFFAALU
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 7 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tipos inteiros
I por padrão, o compilador tenta armazenar uma constante inteira na
base decimal nessa ordem:
int → long int → unsigned long int
I para constantes nas bases octal ou hexadecimal:
int → unsigned int → long int → unsigned long int
I podemos obrigar que o compilador trate constantes como:
I unsigned : 22u 072U 0xa09DU
I long : 22L 055l 0xffffL
I unsigned long int : 22ul 07777UL 0xFFFFAALU
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 7 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tipos inteiros
Considerando que a função printf tem o seguinte formato:
printf(cadeia, expressão 1, expressão 2, . . .);
onde cadeia é a cadeia de caracteres de formatação, podemos utilizar
as seguintes especificações de conversão:
Especificador e tipo Especificador de conversão
short int %hd ou %hi
unsigned short int %hu
int %d ou %i
unsigned int %u
long int %ld ou %li
unsigned long int %lu
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 8 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tipos inteiros
I forma geral de um especificador de conversão na da função printf :
%[flags][comprimento][.precisão][hl]conversor
I onde as flags podem ser:
Flag Significado
- Valor alinhado à esquerda
+ Valor precedido por + ou -
espaço Valor positivo precedido por espaço
0 Número preenchido com zeros à esquerda
I podemos ainda utilizar os conversores o , x ou X com os
modificadores de tamanho h ou l .
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 9 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tipos inteiros
I forma geral de um especificador de conversão na da função printf :
%[flags][comprimento][.precisão][hl]conversor
I onde as flags podem ser:
Flag Significado
- Valor alinhado à esquerda
+ Valor precedido por + ou -
espaço Valor positivo precedido por espaço
0 Número preenchido com zeros à esquerda
I podemos ainda utilizar os conversores o , x ou X com os
modificadores de tamanho h ou l .
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 9 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tipos inteiros
I forma geral de um especificador de conversão na da função printf :
%[flags][comprimento][.precisão][hl]conversor
I onde as flags podem ser:
Flag Significado
- Valor alinhado à esquerda
+ Valor precedido por + ou -
espaço Valor positivo precedido por espaço
0 Número preenchido com zeros à esquerda
I podemos ainda utilizar os conversores o , x ou X com os
modificadores de tamanho h ou l .
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 9 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tipos inteiros
#include <stdio.h>
int main(void)
{
short int i1 = 159;
unsigned short int i2 = 630u;
int i3 = -991023;
unsigned int i4 = 98979U;
long int i5 = 8393202L;
unsigned long int i6 = 34268298UL;
printf("%hd %d %ho\n", i1, i1, i1);
printf("%hu %i %hx\n", i2, i2, i2);
printf("%+d % d %09d\n", i3, i3, i3);
printf("%X%d %u\n", i4, i4, i4);
printf("%+ld %ld %10ld\n", i5, i5, i5);
printf("%lu %10.8lu %-lu\n", i6, i6, i6);
return 0;
}
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 10 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tipos inteiros
Forma geral de um especificador de conversão na da função scanf :
%[comprimento][hl]especificador
Especificador Significado
d valor a ser lido é um inteiro em notação decimal
i como %d, mas aceita base octal (começando com 0) ou
hexadecimal (começando com 0x ou 0X,), sinal opcional
u valor a ser lido é um inteiro não sinalizado em notação decimal
o valor a ser lido é um inteiro não sinalizado em notação octal e
pode opcionalmente ser precedido por 0
x valor a ser lido é um inteiro não sinalizado em notação hexadecimal
e pode opcionalmente ser precedido por 0x ou 0X
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 11 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tipos inteiros
Forma geral de um especificador de conversão na da função scanf :
%[comprimento][hl]especificador
Especificador Significado
d valor a ser lido é um inteiro em notação decimal
i como %d, mas aceita base octal (começando com 0) ou
hexadecimal (começando com 0x ou 0X,), sinal opcional
u valor a ser lido é um inteiro não sinalizado em notação decimal
o valor a ser lido é um inteiro não sinalizado em notação octal e
pode opcionalmente ser precedido por 0
x valor a ser lido é um inteiro não sinalizado em notação hexadecimal
e pode opcionalmente ser precedido por 0x ou 0X
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 11 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tipos inteiros
I a função scanf finaliza uma leitura sempre que o usuário informa
um branco (whitespace), que pode ser:
I o caractere 32 (espaço ou ' ' )
I o caractere 9 (tabulação horizontal ou '\t' )
I o caractere 10 (tabulação vertical ou '\v' )
I o caractere 11 (retorno de carro/cursor ou '\r' )
I o caractere 12 (mudança de linha ou '\n' )
I o caractere 13 (avanço de página ou '\f' )
I ao executar um scanf("%d%d", &a, &b); , tanto:
4 7 , 47 ou 4 7
resultam nos valores 4 e 7 armazenados nas variáveis a e b ,
respectivamente
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 12 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tipos inteiros
I a função scanf finaliza uma leitura sempre que o usuário informa
um branco (whitespace), que pode ser:
I o caractere 32 (espaço ou ' ' )
I o caractere 9 (tabulação horizontal ou '\t' )
I o caractere 10 (tabulação vertical ou '\v' )
I o caractere 11 (retorno de carro/cursor ou '\r' )
I o caractere 12 (mudança de linha ou '\n' )
I o caractere 13 (avanço de página ou '\f' )
I ao executar um scanf("%d%d", &a, &b); , tanto:
4 7 , 47 ou 4 7
resultam nos valores 4 e 7 armazenados nas variáveis a e b ,
respectivamente
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 12 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Números com ponto flutuante
I temos três tipos de dados numéricos com ponto flutuante:
float Ponto flutuante de precisão simples
double Ponto flutuante de precisão dupla
long double Ponto flutuante de precisão estendida
I pelo padrão 754 da IEEE:
Tipo Menor valor (positivo) Maior valor Precisão
float 1.17549× 10−38 3.40282× 1038 6 dígitos
double 2.22507× 10−308 1.79769× 10308 15 dígitos
I 1 bit de sinal, 8 bits de expoente e 23 bits da mantissa
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 13 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Números com ponto flutuante
I temos três tipos de dados numéricos com ponto flutuante:
float Ponto flutuante de precisão simples
double Ponto flutuante de precisão dupla
long double Ponto flutuante de precisão estendida
I pelo padrão 754 da IEEE:
Tipo Menor valor (positivo) Maior valor Precisão
float 1.17549× 10−38 3.40282× 1038 6 dígitos
double 2.22507× 10−308 1.79769× 10308 15 dígitos
I 1 bit de sinal, 8 bits de expoente e 23 bits da mantissa
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 13 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Números com ponto flutuante
I temos três tipos de dados numéricos com ponto flutuante:
float Ponto flutuante de precisão simples
double Ponto flutuante de precisão dupla
long double Ponto flutuante de precisão estendida
I pelo padrão 754 da IEEE:
Tipo Menor valor (positivo) Maior valor Precisão
float 1.17549× 10−38 3.40282× 1038 6 dígitos
double 2.22507× 10−308 1.79769× 10308 15 dígitos
I 1 bit de sinal, 8 bits de expoente e 23 bits da mantissa
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 13 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Números com ponto flutuante
I constantes podem ser definidas de diversas formas:
391.0 391. 391.0e0 391E0 3.91e+2 .391e3 3910.e-1
I por padrão, o compilador tenta armazenar uma constante com ponto
flutuante na memória com um double
I podemos obrigar que o compilador trate constantes como:
I float : 391.0f 391.0F
I long double : 391.0l 391.0L
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 14 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Números com ponto flutuante
I constantes podem ser definidas de diversas formas:
391.0 391. 391.0e0 391E0 3.91e+2 .391e3 3910.e-1
I por padrão, o compilador tenta armazenar uma constante com ponto
flutuante na memória com um double
I podemos obrigar que o compilador trate constantes como:
I float : 391.0f 391.0F
I long double : 391.0l 391.0L
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 14 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Números com ponto flutuante
I constantes podem ser definidas de diversas formas:
391.0 391. 391.0e0 391E0 3.91e+2 .391e3 3910.e-1
I por padrão, o compilador tenta armazenar uma constante com ponto
flutuante na memória com um double
I podemos obrigar que o compilador trate constantes como:
I float : 391.0f 391.0F
I long double : 391.0l 391.0L
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 14 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Números com ponto flutuante
I forma geral do especificador de conversão na função printf :
%[flags][comprimento][.precisão][lL]conversor
I forma geral do especificador de conversão na função scanf :
%[flags][comprimento][.precisão][L]conversor
I %e : mostra um númerocom ponto flutuante no formato exponencial
ou notação científica
I %f : mostra um número com ponto flutuante no formato com casas
decimais fixas, sem expoente
I %g : mostra o número com ponto flutuante no formato exponencial
ou com casas decimais fixas, dependendo de seu tamanho
I No scanf os especificadores %e , %f e %g são equivalentes:
solicitam um número com ponto flutuante em qualquer formato
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 15 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Números com ponto flutuante
I forma geral do especificador de conversão na função printf :
%[flags][comprimento][.precisão][lL]conversor
I forma geral do especificador de conversão na função scanf :
%[flags][comprimento][.precisão][L]conversor
I %e : mostra um número com ponto flutuante no formato exponencial
ou notação científica
I %f : mostra um número com ponto flutuante no formato com casas
decimais fixas, sem expoente
I %g : mostra o número com ponto flutuante no formato exponencial
ou com casas decimais fixas, dependendo de seu tamanho
I No scanf os especificadores %e , %f e %g são equivalentes:
solicitam um número com ponto flutuante em qualquer formato
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 15 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Números com ponto flutuante
I forma geral do especificador de conversão na função printf :
%[flags][comprimento][.precisão][lL]conversor
I forma geral do especificador de conversão na função scanf :
%[flags][comprimento][.precisão][L]conversor
I %e : mostra um número com ponto flutuante no formato exponencial
ou notação científica
I %f : mostra um número com ponto flutuante no formato com casas
decimais fixas, sem expoente
I %g : mostra o número com ponto flutuante no formato exponencial
ou com casas decimais fixas, dependendo de seu tamanho
I No scanf os especificadores %e , %f e %g são equivalentes:
solicitam um número com ponto flutuante em qualquer formato
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 15 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Números com ponto flutuante
I forma geral do especificador de conversão na função printf :
%[flags][comprimento][.precisão][lL]conversor
I forma geral do especificador de conversão na função scanf :
%[flags][comprimento][.precisão][L]conversor
I %e : mostra um número com ponto flutuante no formato exponencial
ou notação científica
I %f : mostra um número com ponto flutuante no formato com casas
decimais fixas, sem expoente
I %g : mostra o número com ponto flutuante no formato exponencial
ou com casas decimais fixas, dependendo de seu tamanho
I No scanf os especificadores %e , %f e %g são equivalentes:
solicitam um número com ponto flutuante em qualquer formato
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 15 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Números com ponto flutuante
I forma geral do especificador de conversão na função printf :
%[flags][comprimento][.precisão][lL]conversor
I forma geral do especificador de conversão na função scanf :
%[flags][comprimento][.precisão][L]conversor
I %e : mostra um número com ponto flutuante no formato exponencial
ou notação científica
I %f : mostra um número com ponto flutuante no formato com casas
decimais fixas, sem expoente
I %g : mostra o número com ponto flutuante no formato exponencial
ou com casas decimais fixas, dependendo de seu tamanho
I No scanf os especificadores %e , %f e %g são equivalentes:
solicitam um número com ponto flutuante em qualquer formato
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 15 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Números com ponto flutuante
I forma geral do especificador de conversão na função printf :
%[flags][comprimento][.precisão][lL]conversor
I forma geral do especificador de conversão na função scanf :
%[flags][comprimento][.precisão][L]conversor
I %e : mostra um número com ponto flutuante no formato exponencial
ou notação científica
I %f : mostra um número com ponto flutuante no formato com casas
decimais fixas, sem expoente
I %g : mostra o número com ponto flutuante no formato exponencial
ou com casas decimais fixas, dependendo de seu tamanho
I No scanf os especificadores %e , %f e %g são equivalentes:
solicitam um número com ponto flutuante em qualquer formato
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 15 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Caracteres
I variáveis do tipo caractere ocupam 1 byte (8 bits) na memória:
I caractere sem sinal ( unsigned char ): {0, . . . , 255}
I caractere com sinal ( signed char ): {−128, . . . ,−1, 0, 1, . . . , 127}
I para
char c, d, e;
podemos fazer
c = 122;
d = 59;
e = 51;
ou
c = 'z';
d = ';';
e = '3';
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 16 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Caracteres
I variáveis do tipo caractere ocupam 1 byte (8 bits) na memória:
I caractere sem sinal ( unsigned char ): {0, . . . , 255}
I caractere com sinal ( signed char ): {−128, . . . ,−1, 0, 1, . . . , 127}
I para
char c, d, e;
podemos fazer
c = 122;
d = 59;
e = 51;
ou
c = 'z';
d = ';';
e = '3';
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 16 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Caracteres
Alguns caracteres não imprimíveis e imprimíveis:
caractere constante símbolo gráfico
0 '\0' caractere nulo
9 '\t' tabulação horizontal
10 '\n' mudança de linha
11 '\v' tabulação vertical
12 '\f' quebra de página
13 '\r' retorno do carro/cursor
32 ' ' espaço
55 '7' 7
92 '\\' \
97 'a' a
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 17 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Caracteres
I a função scanf trata qualquer branco (whitespace) como se fosse
' ' : '\t' , '\n' , '\v' , '\f' , '\r' e ' '
I na função scanf , o especificador de conversão %c lê um único
caractere, mesmo que este seja um branco
I para desconsiderar espaços em branco antes da leitura de um
caractere, utilizamos qualquer um branco:
scanf(" %c", &c);
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 18 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Caracteres
I a função scanf trata qualquer branco (whitespace) como se fosse
' ' : '\t' , '\n' , '\v' , '\f' , '\r' e ' '
I na função scanf , o especificador de conversão %c lê um único
caractere, mesmo que este seja um branco
I para desconsiderarespaços em branco antes da leitura de um
caractere, utilizamos qualquer um branco:
scanf(" %c", &c);
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 18 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Caracteres
I a função scanf trata qualquer branco (whitespace) como se fosse
' ' : '\t' , '\n' , '\v' , '\f' , '\r' e ' '
I na função scanf , o especificador de conversão %c lê um único
caractere, mesmo que este seja um branco
I para desconsiderar espaços em branco antes da leitura de um
caractere, utilizamos qualquer um branco:
scanf(" %c", &c);
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 18 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Caracteres
#include <stdio.h>
/* Recebe um frase e conta o número de vogais minúsculas */
int main(void)
{
char c;
int conta;
printf("Digite uma frase: ");
conta = 0;
do {
scanf("%c", &c);
if (c == 'a'|| c == 'e'|| c == 'i'|| c == 'o'|| c == 'u')
conta++;
} while (c != '\n');
printf("A frase tem %d vogais minúsculas\n", conta);
return 0;
}
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 19 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Caracteres
I quando a função scanf não consegue “casar” algum caractere lido
de acordo com o esperado, ela para imediatamente
I considere o trecho de código:
int a, b;
float x, y;
scanf("%d%d%f%f", &a, &b, &x, &y);
I suponha que o usuário informou valores da seguinte forma:
-10
2 0.33
27.8e3
I a função scanf enxerga a entrada acima da seguinte maneira:
␣␣␣␣␣␣␣-10•2␣␣␣0.33•␣27.8e3•
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 20 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Caracteres
I quando a função scanf não consegue “casar” algum caractere lido
de acordo com o esperado, ela para imediatamente
I considere o trecho de código:
int a, b;
float x, y;
scanf("%d%d%f%f", &a, &b, &x, &y);
I suponha que o usuário informou valores da seguinte forma:
-10
2 0.33
27.8e3
I a função scanf enxerga a entrada acima da seguinte maneira:
␣␣␣␣␣␣␣-10•2␣␣␣0.33•␣27.8e3•
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 20 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Caracteres
I quando a função scanf não consegue “casar” algum caractere lido
de acordo com o esperado, ela para imediatamente
I considere o trecho de código:
int a, b;
float x, y;
scanf("%d%d%f%f", &a, &b, &x, &y);
I suponha que o usuário informou valores da seguinte forma:
-10
2 0.33
27.8e3
I a função scanf enxerga a entrada acima da seguinte maneira:
␣␣␣␣␣␣␣-10•2␣␣␣0.33•␣27.8e3•
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 20 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Caracteres
I quando a função scanf não consegue “casar” algum caractere lido
de acordo com o esperado, ela para imediatamente
I considere o trecho de código:
int a, b;
float x, y;
scanf("%d%d%f%f", &a, &b, &x, &y);
I suponha que o usuário informou valores da seguinte forma:
-10
2 0.33
27.8e3
I a função scanf enxerga a entrada acima da seguinte maneira:
␣␣␣␣␣␣␣-10•2␣␣␣0.33•␣27.8e3•
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 20 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Caracteres
I considere ainda o trecho de código e valores dados pelo usuário:
int a, b;
float x, y;
scanf("%d%d%f%f", &a, &b, &x, &y);
-10
2 0.33W25
27.8e3
I após a execução do código acima:
I a contém -10
I b contém 2
I x contém 0.33
I y permanece inalterado, contendo o valor anterior à chamada da
função, como lixo de memória, zero, ou um valor previamente
armazenado
I a sequência de caracteres W25•␣27.8e3• permanece pendente de
leitura
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 21 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Caracteres
I considere ainda o trecho de código e valores dados pelo usuário:
int a, b;
float x, y;
scanf("%d%d%f%f", &a, &b, &x, &y);
-10
2 0.33W25
27.8e3
I após a execução do código acima:
I a contém -10
I b contém 2
I x contém 0.33
I y permanece inalterado, contendo o valor anterior à chamada da
função, como lixo de memória, zero, ou um valor previamente
armazenado
I a sequência de caracteres W25•␣27.8e3• permanece pendente de
leitura
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 21 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Caracteres
I considere ainda o trecho de código e valores dados pelo usuário:
int a, b;
float x, y;
scanf("%d%d%f%f", &a, &b, &x, &y);
-10
2 0.33W25
27.8e3
I após a execução do código acima:
I a contém -10
I b contém 2
I x contém 0.33
I y permanece inalterado, contendo o valor anterior à chamada da
função, como lixo de memória, zero, ou um valor previamente
armazenado
I a sequência de caracteres W25•␣27.8e3• permanece pendente de
leitura
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 21 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Caracteres
I considere ainda o trecho de código e valores dados pelo usuário:
int a, b;
float x, y;
scanf("%d%d%f%f", &a, &b, &x, &y);
-10
2 0.33W25
27.8e3
I após a execução do código acima:
I a contém -10
I b contém 2
I x contém 0.33
I y permanece inalterado, contendo o valor anterior à chamada da
função, como lixo de memória, zero, ou um valor previamente
armazenado
I a sequência de caracteres W25•␣27.8e3• permanece pendente de
leitura
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 21 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Caracteres
I considere ainda o trecho de código e valores dados pelo usuário:
int a, b;
float x, y;
scanf("%d%d%f%f", &a, &b, &x, &y);
-10
2 0.33W25
27.8e3
I após a execução do código acima:
I a contém -10
I b contém 2
I x contém 0.33
I y permanece inalterado, contendo o valor anterior à chamada da
função, como lixo de memória, zero, ou um valor previamente
armazenado
I a sequência de caracteres W25•␣27.8e3• permanece pendente de
leitura
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 21 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Caracteres
I considere ainda o trecho de código e valores dados pelo usuário:
int a, b;
float x, y;
scanf("%d%d%f%f",&a, &b, &x, &y);
-10
2 0.33W25
27.8e3
I após a execução do código acima:
I a contém -10
I b contém 2
I x contém 0.33
I y permanece inalterado, contendo o valor anterior à chamada da
função, como lixo de memória, zero, ou um valor previamente
armazenado
I a sequência de caracteres W25•␣27.8e3• permanece pendente de
leitura
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 21 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Caracteres
I considere ainda o trecho de código e valores dados pelo usuário:
int a, b;
float x, y;
scanf("%d%d%f%f", &a, &b, &x, &y);
-10
2 0.33W25
27.8e3
I após a execução do código acima:
I a contém -10
I b contém 2
I x contém 0.33
I y permanece inalterado, contendo o valor anterior à chamada da
função, como lixo de memória, zero, ou um valor previamente
armazenado
I a sequência de caracteres W25•␣27.8e3• permanece pendente de
leitura
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 21 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Caracteres
I suponha que temos uma leitura como abaixo:
scanf("%d/%d", &dia, &mes);
e a seguinte entrada:
␣2/␣33•
a função scanf :
I salta o primeiro espaço e associa %d com 2
I casa / e /
I salta o espaço e associa %d com 33
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 22 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Caracteres
I suponha que temos uma leitura como abaixo:
scanf("%d/%d", &dia, &mes);
e a seguinte entrada:
␣2/␣33•
a função scanf :
I salta o primeiro espaço e associa %d com 2
I casa / e /
I salta o espaço e associa %d com 33
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 22 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Caracteres
I por outro lado, se temos uma leitura como abaixo:
scanf("%d/%d", &dia, &mes);
e a entrada é:
␣2␣/␣33•
a função scanf :
I salta o espaço e associa %d com 2
I tenta casar o caractere / da cadeia de caracteres de formatação com
um espaço ␣ da entrada e como esses caracteres não casam, a função
termina
I o restante ␣/␣33• da entrada permanecerá armazenado na memória
até que uma próxima chamada à função scanf seja realizada.
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 23 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Caracteres
I por outro lado, se temos uma leitura como abaixo:
scanf("%d/%d", &dia, &mes);
e a entrada é:
␣2␣/␣33•
a função scanf :
I salta o espaço e associa %d com 2
I tenta casar o caractere / da cadeia de caracteres de formatação com
um espaço ␣ da entrada e como esses caracteres não casam, a função
termina
I o restante ␣/␣33• da entrada permanecerá armazenado na memória
até que uma próxima chamada à função scanf seja realizada.
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 23 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Caracteres
I se c é uma variável do tipo char , as linhas a seguir:
scanf("%c", &c);
printf("%c", c);
são equivalentes às linhas abaixo:
c = getchar();
putchar(c);
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 24 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Caracteres
I se c é uma variável do tipo char , as linhas a seguir:
scanf("%c", &c);
printf("%c", c);
são equivalentes às linhas abaixo:
c = getchar();
putchar(c);
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 24 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Conversão de tipos
I na linguagem C, há dois tipos de conversão de tipos:
I conversões implícitas
I conversões explícitas
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 25 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Conversão de tipos
I conversões implícitas são realizadas nas seguintes situações:
I quando os operandos em uma expressão não são do mesmo tipo:
float a = 2.5;
a = a + 1;
I quando o tipo do valor resultante da avaliação de uma expressão ao
lado direito de um comando de atribuição não é compatível com o tipo
da variável do lado esquerdo de um comando de atribuição:
int a;
a = 11 / 2.0;
I quando o tipo de um argumento em uma chamada de uma função não
é compatível com o tipo do parâmetro correspondente
I quando o tipo do valor resultante de uma expressão de devolução de
uma função, junto da palavra reservada return , não é compatível
com o tipo da função
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 26 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Conversão de tipos
I conversões implícitas são realizadas nas seguintes situações:
I quando os operandos em uma expressão não são do mesmo tipo:
float a = 2.5;
a = a + 1;
I quando o tipo do valor resultante da avaliação de uma expressão ao
lado direito de um comando de atribuição não é compatível com o tipo
da variável do lado esquerdo de um comando de atribuição:
int a;
a = 11 / 2.0;
I quando o tipo de um argumento em uma chamada de uma função não
é compatível com o tipo do parâmetro correspondente
I quando o tipo do valor resultante de uma expressão de devolução de
uma função, junto da palavra reservada return , não é compatível
com o tipo da função
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 26 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Conversão de tipos
I conversões implícitas são realizadas nas seguintes situações:
I quando os operandos em uma expressão não são do mesmo tipo:
float a = 2.5;
a = a + 1;
I quando o tipo do valor resultante da avaliação de uma expressão ao
lado direito de um comando de atribuição não é compatível com o tipo
da variável do lado esquerdo de um comando de atribuição:
int a;
a = 11 / 2.0;
I quando o tipo de um argumento em uma chamada de uma função não
é compatível com o tipo do parâmetro correspondente
I quando o tipo do valor resultante de uma expressão de devolução de
uma função, junto da palavra reservada return , não é compatível
com o tipo da função
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 26 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Conversão de tipos
I conversões implícitas são realizadas nas seguintes situações:
I quando os operandos em uma expressão não são do mesmo tipo:
float a = 2.5;
a = a + 1;
I quandoo tipo do valor resultante da avaliação de uma expressão ao
lado direito de um comando de atribuição não é compatível com o tipo
da variável do lado esquerdo de um comando de atribuição:
int a;
a = 11 / 2.0;
I quando o tipo de um argumento em uma chamada de uma função não
é compatível com o tipo do parâmetro correspondente
I quando o tipo do valor resultante de uma expressão de devolução de
uma função, junto da palavra reservada return , não é compatível
com o tipo da função
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 26 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Conversão de tipos
I conversões implícitas são realizadas nas seguintes situações:
I quando os operandos em uma expressão não são do mesmo tipo:
float a = 2.5;
a = a + 1;
I quando o tipo do valor resultante da avaliação de uma expressão ao
lado direito de um comando de atribuição não é compatível com o tipo
da variável do lado esquerdo de um comando de atribuição:
int a;
a = 11 / 2.0;
I quando o tipo de um argumento em uma chamada de uma função não
é compatível com o tipo do parâmetro correspondente
I quando o tipo do valor resultante de uma expressão de devolução de
uma função, junto da palavra reservada return , não é compatível
com o tipo da função
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 26 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Conversão de tipos
Regras para conversões implícitas:
I pelo menos um dos operandos é de ponto flutuante: utiliza-se o
menor tipo de ponto flutuante que “acomode” os operandos,
portanto seguindo a ordem:
float → double → long double
I nenhum dos operandos é do tipo ponto flutuante: utiliza-se o
menor tipo que “acomode” os operandos, excluindo-se tipos de
tamanhos menores que int , portanto seguindo a ordem:
int → unsigned int → long int → unsigned long int
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 27 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Conversão de tipos
Regras para conversões implícitas:
I pelo menos um dos operandos é de ponto flutuante: utiliza-se o
menor tipo de ponto flutuante que “acomode” os operandos,
portanto seguindo a ordem:
float → double → long double
I nenhum dos operandos é do tipo ponto flutuante: utiliza-se o
menor tipo que “acomode” os operandos, excluindo-se tipos de
tamanhos menores que int , portanto seguindo a ordem:
int → unsigned int → long int → unsigned long int
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 27 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Conversão de tipos
É preciso ter cuidado com operandos unsigned !
#include <stdio.h>
int main(void)
{
int i = -1;
unsigned int j = 1;
printf("i = %+d i = %u\n", i, (unsigned int) i);
printf("j = %+d j = %u\n", (int) j, j);
if (i < j)
printf("i < j\n");
else
printf("j < i\n");
return 0;
}
i = -1 i = 4294967295
j = +1 j = 1
j < i
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 28 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Conversão de tipos
É preciso ter cuidado com operandos unsigned !
#include <stdio.h>
int main(void)
{
int i = -1;
unsigned int j = 1;
printf("i = %+d i = %u\n", i, (unsigned int) i);
printf("j = %+d j = %u\n", (int) j, j);
if (i < j)
printf("i < j\n");
else
printf("j < i\n");
return 0;
}
i = -1 i = 4294967295
j = +1 j = 1
j < i
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 28 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Conversão de tipos
Conversões explícitas:
I a linguagem C possui operadores de conversão de tipo, ou casts:
(nome-do-tipo) expressão
I por exemplo:
float f, frac;
f = 123.4567f;
frac = f - (int) f;
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 29 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Conversão de tipos
Conversões explícitas:
I a linguagem C possui operadores de conversão de tipo, ou casts:
(nome-do-tipo) expressão
I por exemplo:
float f, frac;
f = 123.4567f;
frac = f - (int) f;
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 29 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tipos de dados definidos pelo programador
I usamos a palavra reservada typedef no seguinte formato geral:
typedef tipo-primitivo tipo-novo;
I por exemplo:
typedef int Logic;
Logic primo, crescente;
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 30 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tipos de dados definidos pelo programador
I usamos a palavra reservada typedef no seguinte formato geral:
typedef tipo-primitivo tipo-novo;
I por exemplo:
typedef int Logic;
Logic primo, crescente;
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 30 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Operador sizeof
I o operador unário sizeof permite que verificar quanto de memória é
necessário para armazenar valores de algum tipo:
sizeof (nome-do-tipo)
#include <stdio.h>
int main(void)
{
printf("Caracteres: %lu\n", sizeof(char));
printf("Inteiros:\n");
printf(" short: %lu\n", sizeof(short int));
printf(" int: %lu\n", sizeof(int));
printf(" long int: %lu\n", sizeof(long int));
printf("Números de ponto flutuante:\n");
printf(" float: %lu\n", sizeof(float));
printf(" double: %lu\n", sizeof(double));
printf(" long double: %lu\n", sizeof(long double));
return 0;
}
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 31 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Operador sizeof
I o operador unário sizeof permite que verificar quanto de memória é
necessário para armazenar valores de algum tipo:
sizeof (nome-do-tipo)
#include <stdio.h>
int main(void)
{
printf("Caracteres: %lu\n", sizeof(char));
printf("Inteiros:\n");
printf(" short: %lu\n", sizeof(short int));
printf(" int: %lu\n", sizeof(int));
printf(" long int: %lu\n", sizeof(long int));
printf("Números de ponto flutuante:\n");
printf(" float: %lu\n", sizeof(float));
printf(" double: %lu\n", sizeof(double));
printf(" long double: %lu\n", sizeof(long double));
return 0;
}
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 31 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Operador sizeof
Caracteres: 1
Inteiros:short: 2
int: 4
long int: 8
Números de ponto flutuante:
float: 4
double: 8
long double: 16
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 32 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Exercícios
Exercícios para treinar os conceitos aprendidos nesta aula. Faça muitos
testes com suas entradas e saídas.
1. Dadas n triplas compostas por um símbolo de operação aritmética
(+,−, ∗ ou /) e dois números reais, calcule o resultado ao efetuar a
operação indicada para os dois números.
Faremos esse exercício usando a estrutura condicional switch , que
compara uma expressão com uma sequência de valores. Essa
estrutura tem o seguinte formato:
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 33 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Exercícios
1.
switch (expressão lógica) {
case constante:
... /* instruções */
break;
case constante:
... /* instruções */
break;
...
default:
... /* instruções */
break;
}
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 34 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Exercícios
#include <stdio.h>
/* Recebe um operador aritmético e dois operandos inteiros e
devolve o resultado da operação sobre os dois operandos */
int main(void)
{
char operador;
int n;
float op1, op2, result;
printf("Informe n: ");
scanf("%d", &n);
for ( ; n > 0; n--) {
printf("Informe a expressão (ex.: 5.3 * 3.1): ");
scanf("%f %c%f", &op1, &operador, &op2);
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 35 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Exercícios
switch (operador) {
case '+':
result = op1 op2;
break;
case '-':
result = op1 - op2;
break;
case '*':
result = op1 * op2;
break;
case '/':
result = op1 / op2;
break;
default:
break;
}
printf("%f %c %f = %f\n", op1, operador, op2, result);
}
return 0;
}
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 36 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Exercícios
2. Um matemático italiano da idade média conseguiu modelar o ritmo
de crescimento da população de coelhos através de uma sequência de
números naturais que passou a ser conhecida como sequência de
Fibonacci. A sequência de Fibonacci é dada pela seguinte sequência
de números:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, . . .
Observe que um elemento arbitrário da sequência é resultante da
soma dos dois elementos imediatamente anteriores. Dessa forma, a
sequência de Fibonacci também pode ser descrita pela seguinte
fórmula de recorrência:
F1 = 1 ,
F2 = 1 ,
Fi = Fi−1 + Fi−2 , para i > 3 .
Escreva um programa que dado n > 1 calcule e exiba Fn.
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 37 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Exercícios
3. Os babilônios descreveram a mais de 4 mil anos um método para
calcular a raiz quadrada de um número. Esse método ficou
posteriormente conhecido como método de Newton. Dado um
número x, o método parte de um chute inicial y para o valor da raiz
quadrada de x e sucessivamente encontra aproximações desse valor
calculando a média aritmética de y e de x/y. O exemplo a seguir
mostra o método em funcionamento para o cálculo da raiz quadrada
de 3, com chute inicial 1:
x y x/y (y+ x/y)/2
3 1 3 2
3 2 1.5 1.75
3 1.75 1.714286 1.732143
3 1.732143 1.731959 1.732051
3 1.732051 1.732051 1.732051
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 38 / 39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Exercícios
3. Escreva um programa que receba um número real positivo x e um
número real ε e calcule a raiz quadrada de x usando o método de
Newton, até que o valor absoluto da diferença entre dois valores
consecutivos de y seja menor que ε. Mostre também na saída a
quantidade de passos realizados para obtenção da raiz de x.
Prof. Renan A. Marks (FACOM) Tipos primitivos de dados Algoritmos e Programação I 39 / 39
	Introdução
	Tipos inteiros
	Números com ponto flutuante
	Caracteres
	Tipos de dados definidos pelo programador
	Operador sizeof
	Exercícios

Continue navegando