 |
Aula
3 |
|
2 - Variáveis
Variáveis são uma
forma organizada e simplificada para referenciar posições
de memória do computador onde estão armazenados
dados utilizados pelo programa. Desta forma dados compostos, por
exemplo, por valores numéricos, caracteres, etc podem ser
recuperados por simples referência a nomes definidos pelo
programador. Tais nomes entretanto, não podem ser os nomes
já utilizados internamente pela linguagem C (palavras reservadas)
como as mostradas a seguir:
auto |
default |
float |
register |
struct |
volatile |
break |
do |
for |
return |
switch |
while |
case |
double |
goto |
short |
typedef |
|
char |
else |
if |
signed |
union |
|
const |
enum |
int |
sizeof |
unsigned |
|
continue |
extern |
long |
static |
void |
|
2.1
- Declaração e atribuição de valores
a Variáveis
Cada
variável tem um tipo que define a quantidade de memória
que ela requer, bom como as operações que o programa
pode realizar com os dados. No exemplo a seguir são declaradas
variáveis do tipo int (números inteiros)
e logo em seguida alguns valores são nelas armazenados:
void main (void)
{
int idade; // Variavel do tipo inteiro que guarda idade
int peso; // Variavel do tipo inteiro que guarda o peso
float altura; // Variavel do tipo ponto flutuante guarda altura
idade = 20; // Atribui o valor 20 para a variavel de idade
peso = 70; // Atribui o valor 70 para a variavel de peso
altura = 1,70; // Atribui o valor 1,70 para a altura
}
|
DICA:
Várias variáveis do mesmo tipo podem ser declaradas
na mesma linha:
void main(void)
{
int idade, peso ;
idade = 20;// Atribui o valor 20 para a variavel de idade
peso = 70;// Atribui o valor 70 para a variavel de peso
}
|
DICA:
Durante a declaração das variáveis é
aconselhável a escolha de nomes que facilitem a compreensão
do programa assim como a inserção de algum comentário
que indique qual o significado daquela variável, como mostrado
no quadro anterior. Caracteres compostos por letras, números
e sublinhado são permitidos como integrantes de nomes de
variáveis.
DICA:
A atribuição de valores pode ser feita durante a
própria declaração da variável:
void main(void)
{
int idade = 20 , peso 70;
}
|
2.3
- Tipos de Variáveis
A
linguagem C suporta quatro diferentes tipos básicos de
variáveis:
2.3.1
- Variáveis do Tipo Int
Armazena
valores inteiros no intervalo de -32768 a +32.768. É composta
por 2 bytes, sendo um bit reservado para armazenar o sinal.
Caso
se tente atribuir um valor real a uma variável inteira,
a parte fracionária é ignorada e a parte inteira
é armazenada.
2.3.2
- Variáveis do Tipo Char
Armazena
um caractere (código ASCII), ou valores numéricos
do intervalo -128 a 127. Ocupa um byte de memória. A atribuição
de valores de caracteres deve ser feita utilizando caracteres
de aspas simples, da seguinte forma:
2.3.4
- Variáveis do Tipo Float
Ocupa
quatro bytes de memória dentre os quais 1 bit representa
o sinal, 8 bits representam o expoente e os demais, a mantissa.
Consegue armazenar valores no intervalo de -3.4E-38 a +3.4E+38.
2.3.5
- Variáveis do Tipo Double
Ocupa 8 bytes
de memória (com um bit de sinal). É capaz de armazenar
números com até 15 digitos de precisão do
intervalo de -1.7E-308 a +1.7E+308.
2.4 -
Modificadores de Tipo
A
linguagem C possui um conjunto de modificadores de tipo que alteram
o intervalo de valores que uma variável pode armazenar
ou o modo de como o compilador armazena a variável. Para
modificar um tipo de variável o modificador deve vir declarado
no início da mesma linha da declaração da
variável:
void main(void)
{
unsigned int segundos;
long int indicadores;
unsigned char caractere;
}
|
2.4.1
- O modificador de tipo unsigned
Desativa
o bit de sinal de modo que este possa ser usado para armazenar
valores da variável, causando a duplicação
da faixa de valores positivos comportada pela variável.
Assim, se uma variável do tipo inteira foi declarada como
unsigned ela passa a armazenar valores de 0 (zero) a 65535.
2.4.2
- O modificador de tipo long
Modifica
uma variável inteira para usar 32 bits de memória
de modo que a faixa de valores por ela suportada é modificada
para -2.147.483.648 a +2.147.483.648
3 - Modificadores de Tipo
3.1 - Combinando os Modificadores de tipo unsigned e long
Nos
tópicos anteriores foram mostradas as implicações
da utilização em separado dos modificadores de tipo
unsigned e long. A utilização simultânea
de tais modificadores também é possivel e instrui
o compilador a alocar uma região de memória de 32
bits para valores inteiros da faixa de 0 (zero) a 4.292.967.625
como mostrado a seguir:
void main (void)
{
unsigned
long int valor_muito_grande;
unsigned
long int divida_publica;
}
|
DICA:
Quando
manipulando valores grandes não deve ser incluída
a vírgula. Salvo se manipulando valores reais (ponto flutuante)
onde o símbolo separador é o ponto ".".
void main (void)
{
unsigned
long int valor_muito_grande ;
valor
muito grande = 4877859999348 ;
}
|
3.2
- Múltiplas Operações de Atribuição
O
operador de atribuição de valores em C é
o símbolo "=", como já visto anteriormente.
Em C é possível atribuir o mesmo valor a várias
variáveis ao mesmo tempo. Esta atribuição
é feita da direita para a esquerda na linha de atribuição.
No exemplo a seguir isto é feito. O valor retornado pela
função toupper é atribuído
primeiramente à variável letra e posteriormente
à variável salva_letra.
void main (void)
{
char
salva_letra , letra ;
salva_letra
= letra = toupper(getchar());
}
|
3.3
- Atribuição de valores hexadecimais ou octais
Dependendo
da apliação pode ser necessária a atribuição
de valores hexadecimais (base 16) ou octais (base 8) à
variáveis de programa. No primeiro caso basta preceder
o valor com "0x", já para valores octais
basta preceder o valor com o dígito 0 (zero), como
mostrado a seguir:
void main (void)
{
int
valor_octal = 0227 ;
int
valor_hexadecimal = 0xFF0 ;
}
|
3.4
- Extravasamento de valores em variáveis
Extravasamento
é a ultrapassagem dos limítes de valores que uma
variável pode suportar, causando a atribuição
de valores errôneos e podendo produzir resultados inesperados
ao programa. Nestes casos nenhuma mensagem de erro é retornada
pelo compilador e a sequência de execução
do programa não é interrompida. A atribuição
dos valores é feita, apesar de estes não serem os
desejados. Uma forma de compreender quais valores são atribuídos
em tais circunstâncias é atravéz da análise
da representação binária das variáveis,
como mostrado a seguir:
O
valor máximo de uma variável do tipo int
é 32.767, como visto anteriormente. A representaçaõ
binária deste valor é "0111 1111 1111 1111".
Desta forma, se o valor 1 for adicionado à variável
a faixa de valores permitidos é ultrapassada e o valor
resultante será -32.768, que é o valor mínimo
para uma variável do tipo int, como mostrado a seguir
(lembrando que o valor é negativo porque ao bit mais significativo
é atribuído o valor 1):
32.767
|
0111
|
1111
|
1111
|
1111
|
+ 1
|
0000
|
0000
|
0000
|
0001
|
_____________
|
________________________________________________
|
-32.768
|
1000
|
0000
|
0000
|
0000
|
3.5
- Precisão de variáveis
Do
mesmo modo que com variáveis do tipo int, variáveis
de ponto flutuante também podem sofrer extravasamento.
Entretando, devido a forma em que tais variáveis armazenam
valores na memória as consequências são diferentes.
Neste caso, a precisão da variável pode ser afetada
e se tornar insuficiente.
Como
o número de bits disponíveis para armazenar valores
de uma variável de ponto flutuante é fixo o computador
é incapaz de representar exatamente tais tipos de valores
(com todas as suas casas decimais de precisão). Neste ponto
entra a diferença entra a utilização de variáveis
de precisão simples e de dupla precisão como mostrado
no programa a seguir, onde um mesmo valor é atribuído
a uma variável de dupla precisão e a uma variável
de simples precisão mas, entretanto, o valor armazenado
é diferente.
#include stdio.h
void main (void)
{
float exato = 0.1234567890987654321;
double mais_exato = 1234567890987654321;
printf("Valor de float = %21.19f\n",exato);
printf("Valor de double = %21.19f\n",mais_exato);
}
|
A
saída de tela do programa anterior é a seguinte:
valor de float = 0.123456789043281550
valor de double = 0.1234567890987654380
|
3.6
- Atribuição de Caracteres especiais a variáveis
do tipo char
Existem
algumas situações onde pode ser necessária
a atribuição de caracteres especiais a variáveis
do tipo char, como por exemplo símbolos de aspas duplas,
etc. Isto pode ser feito com a utilização de códigos
de escape utilizando a contra-barra "\"como mostrado
a seguir:
char apostrofe = '\'';
char aspas = '\"'
|
Tabela
de códigos de escape utilizados em C:
\a
|
Aviso sonoro
|
\b
|
retrocesso (backspace)
|
\f
|
avanço de formulário
|
\n
|
nova linha
|
\r
|
Retorno de carro
|
\t
|
tabulação horizontal
|
\v
|
tabulação vertical
|
\\
|
contra-barra
|
\'
|
apóstrofo
|
\"
|
aspas
|
\?
|
interrogação
|
\nnn
|
valor ASCII octal
|
\xnnn
|
valor ASCII hexadecimal
|
3.7 - Exercícios
1) Elabore um programa em C, o qual imprima na tela as seguintes mensagens:
esta eh a linha um
esta eh a linha dois
2) Escreva um programa que imprima na tela:
um dois três
3) Solicite ao usuário uma variável do tipo inteiro, uma fracionária e uma caracter. Imprimá-as
4) Escreva um programa o qual solicite ao usuário um número inteiro (n). Imprima:
n*2
n+2
n-2
n/2
|