Buscar

Tipo Caractere na Linguagem C

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 6 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 6 páginas

Prévia do material em texto

AULA 10
CARACTERES
Nesta aula vamos estudar um novo tipo primitivo de dados, o tipo caractere. O tipo ca-
ractere é um tipo primitivo que podemos trabalhar com um conjunto pequeno e previsível de
valores. Na linguagem C existem dois tipos de caracteres: caractere com sinal e caractere sem
sinal. Esses dois tipos são apenas interpretações diferentes do conjunto de todas as sequências
de 8 bits, sendo que essa diferença é irrelevante na prática. O estudo dos caracteres será esten-
dido, mais útil e melhor compreendido na aula 11, quando veremos as cadeias de caracteres.
Esta aula é completamente baseada nas referências [6, 10].
10.1 Representação gráfica
Na prática, em todas as linguagens de programação de alto nível incluindo a lingua-
gem C, cada caractere é armazenado em um único byte na memória do computador, ou
seja, em 8 bits. Consequentemente, na linguagem C um caractere sem sinal é um nú-
mero do conjunto {0, 1, . . . , 254, 255} e um caractere com sinal é um número do conjunto
{−128, . . . ,−1, 0, 1, . . . , 127}. Ou seja, um caractere é uma sequência de 8 bits, dentre as 256
sequências de 8 bits possíveis.
A impressão de um caractere na saída padrão é a sua representação como um símbolo
gráfico. Por exemplo, o símbolo gráfico do caractere 97 é a . Alguns caracteres têm repre-
sentações gráficas especiais, como o caractere 10 que é representado por uma mudança de
linha.
Os símbolos gráficos dos caracteres 0 a 127 , de 7 bits, foram codificados e padronizados
pelo Código Padrão Americano para Troca de Informações (do inglêsAmerican Standard Code for
Information Interchange). Por conta disso, essa representação gráfica dos caracteres é conhecida
como tabela ASCII. Essa codificação foi desenvolvida em 1960 e tem como base o alfabeto da
língua inglesa. Muitas das codificações de caracteres mais modernas herdaram como base a
tabela ASCII.
As limitações do conjunto de caracteres da proposta da tabela ASCII, e também da tabela
EBCDIC, logo mostraram-se aparentes e outros métodos foram desenvolvidos para estendê-las.
A necessidade de incorporar múltiplos sistemas de escrita, incluindo a família dos caracteres do
leste asiático, exige suporte a um número bem maior de caracteres. Por exemplo, o repertório
completo do UNICODE compreende mais de 100 mil caracteres. Outros repertórios comuns
incluem ISO 8859-1 bastante usado nos alfabetos latinos e, por isso, também conhecido como
ISO Latin1.
100
10 CARACTERES 101
Dos 128 caracteres padronizados da tabela ASCII e de seus símbolos gráficos correspon-
dentes, 33 deles são não-imprimíveis e os restantes 95 são imprimíveis. Os caracteres não-
imprimíveis são caracteres de controle, criados nos primórdios da computação, quando se usa-
vam máquinas teletipo e fitas de papel perfurado, sendo que atualmente grande parte deles
estão obsoletos. Na tabela a seguir, apresentamos alguns desses caracteres não-imprimíveis.
Muitos deles não são mostrados por opção ou por terem caído em desuso.
Bin Dec Significado
0000 0000 00 Nulo
0000 0111 07 Campainha
0000 1001 09 Tabulação horizontal
0000 1010 10 Mudança de linha
0000 1011 11 Tabulação vertical
0000 1100 12 Quebra de página
0000 1101 13 Retorno do carro/cursor
0111 1111 127 Delete
A tabela a seguir mostra os 95 caracteres imprimíveis da tabela ASCII.
Bin Dec Sim Bin Dec Sim Bin Dec Sim
0010 0000 32 0100 0000 64 @ 0110 0000 96 ‘
0010 0001 33 ! 0100 0001 65 A 0110 0001 97 a
0010 0010 34 " 0100 0010 66 B 0110 0010 98 b
0010 0011 35 # 0100 0011 67 C 0110 0011 99 c
0010 0100 36 $ 0100 0100 68 D 0110 0100 100 d
0010 0101 37 % 0100 0101 69 E 0110 0101 101 e
0010 0110 38 & 0100 0110 70 F 0110 0110 102 f
0010 0111 39 ’ 0100 0111 71 G 0110 0111 103 g
0010 1000 40 ( 0100 1000 72 H 0110 1000 104 h
0010 1001 41 ) 0100 1001 73 I 0110 1001 105 i
0010 1010 42 * 0100 1010 74 J 0110 1010 106 j
0010 1011 43 + 0100 1011 75 K 0110 1011 107 k
0010 1100 44 , 0100 1100 76 L 0110 1100 108 l
0010 1101 45 - 0100 1101 77 M 0110 1101 109 m
0010 1110 46 . 0100 1110 78 N 0110 1110 110 n
0010 1111 47 / 0100 1111 79 O 0110 1111 111 o
0011 0000 48 0 0101 0000 80 P 0111 0000 112 p
0011 0001 49 1 0101 0001 81 Q 0111 0001 113 q
0011 0010 50 2 0101 0010 82 R 0111 0010 114 r
0011 0011 51 3 0101 0011 83 S 0111 0011 115 s
0011 0100 52 4 0101 0100 84 T 0111 0100 116 t
0011 0101 53 5 0101 0101 85 U 0111 0101 117 u
0011 0110 54 6 0101 0110 86 V 0111 0110 118 v
0011 0111 55 7 0101 0111 87 W 0111 0111 119 w
0011 1000 56 8 0101 1000 88 X 0111 1000 120 x
0011 1001 57 9 0101 1001 89 Y 0111 1001 121 y
0011 1010 58 : 0101 1010 90 Z 0111 1010 122 z
0011 1011 59 ; 0101 1011 91 [ 0111 1011 123 {
0011 1100 60 < 0101 1100 92 \ 0111 1100 124 |
0011 1101 61 = 0101 1101 93 ] 0111 1101 125 }
0011 1110 62 > 0101 1110 94 ^ 0111 1110 126 ~
0011 1111 63 ? 0101 1111 95 _
FACOM UFMS
10 CARACTERES 102
Os caracteres com sinal, quando dispostos em ordem crescente, apresentam-se de tal forma
que as letras acentuadas precedem as não-acentuadas. Os caracteres sem sinal, ao contrário, em
ordem crescente apresentam-se de forma que as letras não-acentuadas precedem as acentuadas.
Essa é a única diferença entre caracteres com e sem sinal.
10.2 Constantes e variáveis
Uma variável do tipo caractere com sinal pode ser declarada na linguagem C com a palavra
reservada char . Uma variável do tipo caractere sem sinal pode ser declarada com a mesma
palavra reservada char , mas com o especificador de tipo unsigned a precedendo. Especifi-
cadores de tipos básicos serão estudados em detalhes em uma próxima aula. Dessa forma,
char c, d, e;
unsigned char f, g, h;
são declarações válidas de variáveis do tipo caractere.
Uma constante do tipo caractere é um número no intervalo de 0 a 255 ou de−128 a 127. Por
exemplo, para as variáveis c , d e e declaradas acima, podemos fazer
c = 122;
d = 59;
e = 51;
Mais comum e confortavelmente, podemos especificar uma constante do tipo caractere atra-
vés da representação gráfica de um caractere, envolvendo-o por aspas simples. Por exemplo,
’z’ , ’;’ e ’3’ são exemplos de constantes do tipo caractere. Assim, é bem mais cômodo
fazer as atribuições
c = ’z’;
d = ’;’;
e = ’3’;
que, na prática, são idênticas às anteriores.
Alguns caracteres produzem efeitos especiais tais como acionar um som de campainha ou
realizar uma tabulação horizontal. Para representar um caractere como esse na linguagem C
usamos uma sequência de dois caracteres consecutivos iniciada por uma barra invertida. Por
exemplo, ’\n’ é o mesmo que 10 e representa uma mudança de linha. A tabela a seguir
mostra algumas constantes do tipo caractere.
FACOM UFMS
10 CARACTERES 103
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
Na linguagem C, um branco (do inglês whitespace) é definido como sendo um caractere que
é uma tabulação horizontal, uma mudança de linha, uma tabulação vertical, uma quebra de
página, um retorno de carro/cursor e um espaço. Ou seja, os caracteres 9, 10, 11, 12, 13 e 32
são brancos e as constantes correspondentes são ’\t’ , ’\n’ , ’\v’ , ’\f’ , ’\r’ e ’ ’ .
A função scanf trata todos os brancos como se fossem ’ ’ , assim como outras funções da
linguagem C também o fazem.
Para imprimir um caractere na saída padrão com a função printf devemos usar o especi-
ficador de conversão de tipo caractere %c na sequência de caracteres de formatação. Para ler
um caractere a partir da entrada padrão com a função scanf também devemos usar o mesmo
especificador de conversão de tipo caractere %c na sequência de caracteres de formatação. Um
exemplo de uso do tipo básico caractere é mostrado no programa 10.1.
Programa 10.1: Um programa usando o tipo char .
#include <stdio.h>
int main(void)
{
char c;c = ’a’;
printf("%c\n", c);
c = 97;
printf("%c\n", c);
printf("Informe um caractere: ");
scanf("%c", &c);
printf("%c = %d\n", c, c);
return 0;
}
Como vimos até aqui nesta seção, por enquanto não há muita utilidade para constantes
e variáveis do tipo caractere. Mas em breve iremos usá-las para construir um tipo de dados
muito importante chamado de cadeia de caracteres.
FACOM UFMS
10 CARACTERES 104
10.3 Expressões com caracteres
Como caracteres são implementados como números inteiros em um byte, as expressões
envolvendo caracteres herdam todas as propriedades das expressões envolvendo números in-
teiros. Em particular, as operações aritméticas envolvendo variáveis do tipo unsigned char
e char são executadas em aritmética int .
Dessa forma, considere o trecho de código a seguir:
unsigned char x, y, z;
x = 240;
y = 65;
z = x + y;
Na última linha o resultado da expressão x + y é 305 . No entanto, atribuições de núme-
ros inteiros a variáveis do tipo caractere são feitas módulo 256. Por isso, a variável z acima
receberá o valor 49 .
Do mesmo modo, após a execução do trecho de código a seguir:
unsigned char x;
char c;
x = 256;
c = 136;
a variável x conterá o valor 0 e a variável c conterá o valor -120 .
Expressões relacionais podem naturalmente envolver caracteres. No trecho de código a
seguir, algumas expressões lógicas envolvendo caracteres são mostradas:
...
char c;
c = ’a’;
if (’a’ <= c && c <= ’z’)
c = c - ’ ’;
printf("%c = %d\n", c, c);
if (65 <= c && c < 122)
c = c + 1;
printf("%c = %d\n", c, c);
...
Tente verificar a saída gerada pelas duas chamadas da função printf no trecho de código
acima.
FACOM UFMS
10 CARACTERES 105
Exercícios
10.1 Verifique se o programa 10.2 está correto.
Programa 10.2: O que faz este programa?
#include <stdio.h>
int main(void)
{
char c;
for (c = 0; c < 128; c++)
printf(".");
printf("\ntchau!\n");
return 0;
}
10.2 Escreva um programa que imprima todas as letras minúsculas e todas as letras maiúscu-
las do alfabeto.
10.3 Escreva um programa que traduz um número de telefone alfabético de 8 dígitos em um
número de telefone na forma numérica. Suponha que a entrada é sempre dada em carac-
teres maiúsculos.
Exemplo:
Se a entrada é URGENCIA a saída deve ser 87436242 . Se a entrada é
1111FOGO a saída deve ser 11113646 .
Se você não possui um telefone, então as letras que correspondem às teclas são as seguin-
tes: 2=ABC, 3=DEF, 4=GHI, 5=JKL, 6=MNO, 7=PQRS, 8=TUV e 9=WXYZ.
10.4 Scrabble é um jogo de palavras em que os jogadores formam palavras usando pequenos
quadrados que contêm uma letra e um valor. O valor varia de uma letra para outra, ba-
seado na sua raridade. Os valores são os seguintes: AEILNORSTU=1, DG=2, BCMP=3,
FHVWY=4, K=5, JX=8 e QZ=10.
Escreva um programa que receba uma palavra e compute o seu valor, somando os va-
lores de suas letras. Seu programa não deve fazer distinção entre letras maiúsculas e
minúsculas.
Exemplo:
Se a palavra de entrada é programa a saída tem de ser 13 .
10.5 Escreva um programa que receba dois números inteiros a e b e um caractere op, tal que
op pode ser um dos cinco operadores aritméticos disponíveis na linguagem C ( + , - , * ,
/ , % ), realize a operação a op b e mostre o resultado na saída.
FACOM UFMS
	Caracteres
	Representação gráfica
	Constantes e variáveis
	Expressões com caracteres
	Cadeias de caracteres
	Literais
	Vetores de caracteres
	Cadeias de caracteres
	Referências bibliográficas

Outros materiais