Declaração de Variáveis

[Pages:29]Declara??o de Vari?veis

No cap?tulo anterior aprendemos que as vari?veis servem como nomes simb?licos que indicam unidades de armazenamento em um programa escrito em C. Uma vari?vel possui um r?tulo e um conte?do (ou valor). Agora, introduzimos o tipo de um dado, que ? a terceira caracter?stica da vari?vel. Ainda existe o atributo de escopo, que ? o tempo de vida da vari?vel, conforme ser? estudado num cap?tulo posterior.

A vari?vel ? caracterizada por:

? Nome (r?tulo) ? Tipo (dom?nio) ? Valor (conte?do) ? Escopo (tempo de vida)

Tipos de Vari?veis

O tipo determina o dom?nio, i.e. o conjunto de valores v?lidos, de uma vari?vel e determina tamb?m as opera??es permitidas sobre a mesma. As opera??es dispon?veis dependem de cada tipo. Na linguagem C, existem tr?s fam?lias de tipos de vari?veis: escalar, agregado e void. A fam?lia de escalares ? formada por um grande n?mero de tipos.

Tipos

void Escalar

Agregados

Caractere Inteiro Enumerado Real Apontador Figura 1 - Tipos de Dados

Os tipos escalares t?m a capacidade de armazenar um ?nico valor, que pode ser um n?mero (inteiro ou fracion?rio), um caractere (que ? um nome mais gen?rico para "s?mbolo"), um enumerador ou uma refer?ncia (ou apontador). Com exce??o do apontador e do enumerador, estes tipos ser?o estudados neste cap?tulo.

Os tipos agregados s?o constru??es mais elaboradas, formadas pela composi??o de dois ou mais valores de um mesmo tipo (por exemplo, listas, vetores, matrizes, tabelas) ou de tipos diferentes (por exemplo, estruturas e uni?es). Tipos agregados, apontadores e enumera??es s?o estudados num cap?tulo mais ? frente.

Por fim, existe o tipo void, que ? um caso especial. Ele indica que n?o existe um tipo associado ao objeto correspondente ou o seu tipo ? desconhecido. A rigor, n?o faz sentido declarar vari?veis do tipo void . Ele ser? utilizado mais para o final do curso na declara??o de fun??es e apontadores.

Declara??o de Vari?veis

Em um c?digo escrito em C, todas as vari?veis que ser?o utilizadas durante o programa precisam ser declaradas antes de seu primeiro uso no algoritmo. ? atrav?s do tipo que o

2/3/2011 11:12 Copyright@2005-2009 Arnaldo V. Moura, Daniel F. Ferber

1

compilador sabe quanta mem?ria deve ser reservada para uma determinada vari?vel (quantas c?lulas de mem?ria s?o necess?rias para armazenar o conte?do da vari?vel). A declara??o informa o nome da vari?vel, o seu tipo e, opcionalmente, seu valor inicial. Com esta informa??o, o compilador destina automaticamente um n?mero suficiente de c?lulas de mem?ria, ou bytes, para armazenar esta vari?vel.

A declara??o de uma vari?vel segue um dos dois modelos abaixo:

tipo nome = valor;

ou:

tipo nome;

O primeiro caso ? a forma preferida para declara??o de vari?veis. Ela informa, em uma ?nica declara??o, as tr?s caracter?sticas da vari?vel: r?tulo (nome), tipo (dom?nio de valores) e valor (conte?do). A segunda declara??o ? menos espec?fica. Ela cria uma vari?vel apenas com um nome e um tipo, mas sem um valor definido. Evidentemente, antes que o algoritmo utilize esta vari?vel em algum c?lculo, o programador dever? atribuir um valor ? mesma em algum ponto anterior do c?digo fonte.

Exemplo Um programa deve calcular a m?dia de um aluno em duas provas e em uma avalia??o de laborat?rio. O programa precisar? declarar as vari?veis de forma semelhante ao exemplo a seguir:

float nota_prova_a = 8.0; float nota_prova_b = 6.0; float nota_laboratorio = 10.0; float media;

S?o declaradas quatro vari?veis: nota_prova_a, nota_prova_b, nota_laborat?rio e media. Todas elas s?o declaradas como sendo do tipo float, que ser? estudado neste cap?tulo. Somente as primeiras tr?s recebem um valor na sua declara??o. A vari?vel media ? declarada com valor indefinido, j? que seu valor depender? dos valores das tr?s vari?veis anteriores. O programa deve ser constru?do de maneira que, mais tarde, atribua um valor para a vari?vel media.

Valor inicial das vari?veis Se a declara??o j? apresenta um valor inicial para a vari?vel, o compilador o atribui ? vari?vel antes de iniciar a execu??o do algoritmo. Caso contr?rio, a vari?vel conter? um valor arbitr?rio, imposs?vel de se prever qual ser?, quando a execu??o do programa inicia. N?o existe um "valor padr?o" na linguagem C para vari?veis que n?o recebem um valor inicial j? na sua declara??o.

2/3/2011 11:12 Copyright@2005-2009 Arnaldo V. Moura, Daniel F. Ferber

2

? interessante entender o que acontece no computador como conseq??ncia da declara??o de uma vari?vel. Durante a execu??o do programa, a vari?vel estar? associada com posi??es reais de mem?ria, que s?o um recurso compartilhado entre todos os programas em execu??o no computador. Quando declaramos uma vari?vel em um programa, ela ser? associada com uma (ou mais) c?lula de mem?ria dispon?vel logo antes de iniciar a execu??o do programa, i.e., a vari?vel n?o est? associada a nenhum outro dado de nenhum outro programa que esteja executando no momento. Durante toda a execu??o do nosso programa, o computador garante que apenas nosso programa pode acessar e modificar o conte?do dessa c?lula de mem?ria. Por?m, provavelmente em algum momento antes do in?cio do nosso programa, esta c?lula foi utilizada por um outro programa que j? terminou sua execu??o e deixou l? armazenado um valor qualquer. Note que, se a vari?vel for declarada sem atribui??o de valor inicial, a c?lula correspondente mant?m o valor que j? estava na mem?ria quando nosso programa inicia sua execu??o, e que pode ser qualquer valor, imprevis?vel, deixado pelo outro programa. Se esquecermos de atribuir um valor ? uma vari?vel antes de usar seu conte?do pela primeira vez no programa, ent?o o valor l? encontrado ser? algo que certamente n?o desejamos usar em nosso algoritmo. Se usarmos esse valor arbitr?rio ? certo que produziremos resultados err?neos. Esquecer de atribuir um valor ?s vari?veis antes de usar seu conte?do pela primeira vez ? uma causa comum de erros obscuros em C.

Declara??o m?ltipla Caso desejemos declarar v?rias vari?veis, todas do mesmo tipo, podemos list?-las em uma mesma linha, separando os nomes por v?rgulas.

tipo nome1, nome2, nome3, ...;

Isso economiza alguns toques de digita??o. Mesmo declarando em uma mesma linha, (algumas) vari?veis podem ser inicializadas com valores.

tipo nome1 = valor, nome2, nome3 = valor3, ...;

Exemplo O exemplo anterior poderia ser declarado assim:

float nota_prova_a = 8.0, nota_prova_b = 6.0; float nota_laboratorio = 10.0; float media;

A forma de declara??o de vari?veis ? totalmente livre, e o programador deve utilizar aquela que deixe seu c?digo mais leg?vel.

2/3/2011 11:12 Copyright@2005-2009 Arnaldo V. Moura, Daniel F. Ferber

3

Identificadores

Existem regras espec?ficas que devem ser seguidas ao se escolher o nome de vari?veis. Em C, os nomes (ou r?tulos) das vari?veis s?o denominados identificadores. As seguintes regras devem ser observadas ao se escolher um identificador para nomear uma vari?vel:

? O identificador deve ser formado por uma seq??ncia de caracteres, os quais podem ser as letras mai?sculas ou min?sculas do alfabeto (a-z, A-Z), os d?gitos num?ricos (0-9), ou s?mbolo de sublinhado ( _ ).

? Letras acentuadas n?o s?o permitidas. ? O identificador n?o pode come?ar com um d?gito num?rico. ? O identificador n?o pode ser uma das palavras reservadas da linguagem C (listadas

mais adiante).

Exemplos Identificadores que podem ser utilizados como nome de vari?veis: contador, resto_divisao, media, nota1, nota2, PESO

Mai?sculas/Min?sculas O compilador distingue letras mai?sculas de min?sculas. Se dois identificadores diferenciam-se apenas pelo uso de mai?sculas e min?sculas, ent?o o compilador C os tratar? como duas vari?veis diferentes. Por exemplo, media e Media s?o identificadores distintos. Esta ? uma causa freq?ente de erros.

Comprimento N?o existe limite para o comprimento m?ximo de um identificador. No entanto, a linguagem C padr?o utiliza apenas os primeiros 31 s?mbolos para diferenciar os identificadores. Atualmente, a maioria dos compiladores modernos s?o mais flex?veis. Por exemplo, o compilador C da Microsoft trabalha com identificadores de at? 247 s?mbolos.

Palavras reservadas da linguagem C (no padr?o ANSI) Algumas palavras n?o podem ser utilizadas como identificadores, pois s?o pr?prias da linguagem C. S?o elas: auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, inline, int, long, register, restrict, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigned, void, volatile, while, _Bool, _Complex, _Imaginary

N?o ? necess?rio decor?-las. Normalmente, um editor de c?digo C apresenta as palavras reservadas em cor diferente, de forma que podemos saber imediatamente, por inspe??o, se uma palavra ? reservada ou se ? um identificador.

Palavras reservadas na linguagem C (padr?o Microsoft) Al?m das palavras reservadas pela linguagem C (padr?o ANSI), o compilador C da Microsoft reserva os seguintes identificadores:

2/3/2011 11:12 Copyright@2005-2009 Arnaldo V. Moura, Daniel F. Ferber

4

__asm, __based, __cdecl, __declspec, dllexport, dllimport, __except, __fastcall, __finally, __inline, __int16, __int32, __int64, __int8, __leave, naked, __stdcall, thread, __try

Recomenda??es A maioria dos programadores costuma seguir algumas conven??es ao atribuir nomes ?s vari?veis para tornar o c?digo fonte mais uniforme. Tratam-se de boas pr?ticas que melhoram substancialmente a legibilidade do c?digo C. Cabe ao programador seguir estas recomenda??es ou n?o. Sugerimos:

? Utilizar sempre substantivos, evitar verbos. ? Quando o nome da vari?vel ? formado pela jun??o de duas palavras, usar o s?mbolo

de sublinhado (_) entre as duas palavras consecutivas. ? Evitar identificadores que come?am com o s?mbolo de sublinhado. Estes nomes s?o

reservados para o compilador criar suas pr?prias vari?veis, quando houver necessidade.

Tipos Inteiros

Inteiro

O primeiro tipo que vamos estudar na linguagem C int short long long long ? usado para designar n?meros inteiros. Eles Figura 2 - Tipos Inteiros caracterizam, portanto, vari?veis cujo dom?nio ser? um intervalo dos n?meros inteiros. Estas vari?veis poder?o conter n?meros positivos ou negativos, desde que obrigatoriamente inteiros. N?o ? poss?vel armazenar n?meros com d?gitos decimais em vari?veis designadas como sendo do tipo inteiro. Devemos alertar, desde j?, que a linguagem n?o suporta todos os inteiros. Isto ?, vamos ver que existem limites para os valores absolutos que podem ser armazenados nas vari?veis de tipos inteiros em C. O programador deve garantir que seu programa n?o extravasa esses valores, caso contrario resultados err?neos podem ser obtidos pelo programa.

O tipo inteiro comporta v?rias variantes. A diferen?a entre estas variantes est? na quantidade de mem?ria que ? reservada para a vari?vel e, portanto, est?o diretamente relacionadas aos valores m?ximo e m?nimo que elas poder?o armazenar. A escolha do tipo para uma vari?vel envolve um compromisso entre a amplitude dos n?meros que ela poder? armazenar e o quanto de mem?ria desejamos reservar para ela.

Os principais tipos inteiros s?o:

short short int

short int long int long long int

N?meros muito pequenos

N?meros pequenos N?meros grandes N?meros muito grandes

2/3/2011 11:12 Copyright@2005-2009 Arnaldo V. Moura, Daniel F. Ferber

5

A linguagem C tamb?m define um tipo, denominado int (note a aus?ncia de short ou long) que corresponde ao tipo inteiro que o processador consegue tratar com maior efici?ncia. Freq?entemente, chamamos int de tipo inteiro padr?o da arquitetura do processador.

Exemplos Declara??o de vari?veis para armazenar n?meros pequenos:

short int numero_pequeno; short int contador = 4;

Declara??o de vari?veis para armazenar n?meros grandes:

long int quantidade_pecas; long int numero_repeticoes = 3000000000;

Declara??o de vari?veis para armazenar n?meros de tamanho padr?o para a arquitetura do processador:

int contador; int limite_tentativas = 100;

Intervalos de tipos inteiros O que ? um inteiro grande ou um inteiro pequeno? O tamanho do intervalo v?lido associado a cada um desta tr?s variantes do tipo inteiro depende da arquitetura do computador, e tamb?m do compilador. N?o existe uma padroniza??o entre os compiladores C para esses valores. Para escolher o tipo de n?mero inteiro mais adequado para o seu programa, o programador precisa estudar seu algoritmo para saber qual o valor m?nimo e m?ximo que cada vari?vel, designada para conter n?meros inteiros, poder? assumir durante a execu??o do programa. Em seguida, ? necess?rio consultar a documenta??o do compilador, na qual encontra-se uma tabela com os valores m?nimos e m?ximos de cada um destes tipos. O tipo desta vari?vel deve ser aquele que comporta todo o intervalo de valores, do m?ximo ao m?nimo, que poder?o ser utilizados ou gerados pelo algoritmo. A tabela a seguir apresenta os intervalos do dom?nio de cada um dos tipos de n?meros inteiros, utilizando como refer?ncia a arquitetura Intel Pentium com compilador C da Microsoft.

Tipo

int short short int short int long int long long int

Descri??o Tamanho padr?o N?meros muito pequenos N?meros pequenos N?meros grandes N?meros muito grandes

Tamanho 4 bytes 1 byte 2 bytes 4 bytes 8 bytes

Intervalo - 2.147.483.648 at? 2.147.483.647 -256 at? 257 -32.768 at? 32.767 - 2.147.483.648 at? 2.147.483.647 - 9,223?1015 at? 9,223?1015

Observa??o 1: Esta tabela refere-se ao compilador C da Microsoft e para uma arquitetura Intel Pentium. Outras implementa??es de compiladores C podem utilizar uma conven??o diferente para tamanhos e intervalos definidos por estes tipos!

2/3/2011 11:12 Copyright@2005-2009 Arnaldo V. Moura, Daniel F. Ferber

6

Observa??o 2: Especificamente para o compilador C da Microsoft, o tipo inteiro padr?o e o n?mero grande s?o equivalentes (respectivamente int e long int). Em outras palavras o n?mero grande (long int) ? justamente o tipo que o processador consegue tratar com maior efici?ncia.

Discuss?o sobre a escolha dos tipos Para declarar vari?veis de valor inteiro, a linguagem C disp?e de quatro tipos diferentes (int, short int, long int e long long int). A escolha do tipo mais adequado envolve um compromisso entre:

? O valor m?nimo e m?ximo que a vari?vel poder? representar (short int limita-se a n?meros pequenos).

? A quantidade de mem?ria ocupada (short int ocupa pouca mem?ria e long long int ocupa mais mem?ria).

? A efici?ncia de processamento (int ? eficiente enquanto short int e long long int poder?o implicar em alguma perda de efici?ncia).

A necessidade de distinguir entre tantos tipos inteiros fazia muito sentido nos computadores antigos, que tinham baixa capacidade de processamento e pouca disponibilidade de mem?ria. Neles, a economia de mem?ria e de processamento era uma quest?o importante para tornar vi?vel a execu??o do algoritmo. Os computadores atuais possuem uma quantidade de mem?ria t?o grande que, na pr?tica, pode ser considerada infinita para a maioria dos programas. A preocupa??o de se utilizar o tipo short int para economizar mem?ria perdeu muito de seu sentido pr?tico. A tecnologia dos processadores tamb?m evoluiu a ponto de realizar opera??es com a mesma efici?ncia para praticamente todos os tipos de n?meros inteiros, independente se eles s?o short int, long int ou long long int.

Exceto em aplica??es onde o processamento ou o uso de mem?ria s?o requisitos cr?ticos de projeto, recomendamos utilizar sempre o tipo int para declarar vari?veis cujo conte?do ser? um n?mero inteiro.

Escrever texto na tela

Escrever texto Para escrever texto no monitor do computador utilizamos o comando printf. O texto ? informado entre aspas duplas e entre par?nteses ap?s o printf, conforme o exemplo abaixo:

printf("mensagem");

Quando desejamos que a mensagem do pr?ximo printf comece no in?cio da pr?xima linha, a mensagem atual deve terminar com \n:

2/3/2011 11:12 Copyright@2005-2009 Arnaldo V. Moura, Daniel F. Ferber

7

printf("mensagem\n");

Na verdade, a instru??o printf n?o ? primitiva na linguagem C. Ela ? um comando mais complexo cuja descri??o b?sica est? no arquivo stdio.h , e que devemos incluir como diretiva para o compilador, sempre que nosso programa usar o printf. Programadores mais experientes j? criaram o c?digo para o comando printf e o disponibilizaram para uso em outros programas escritos em C. Assim, n?o precisamos nos preocupar com as idiossincrasias de sa?da de dados relativas ao computador para o qual estamos escrevendo nosso c?digo C.

Escrever conte?do de vari?veis Durante a execu??o do programa, a ?nica forma para se conhecer o valor de uma vari?vel ? escrever seu conte?do na tela. Para escrever o conte?do das vari?veis, o comando printf funciona de forma semelhante. Agora, a mensagem deve conter indicadores a serem substitu?das pelo conte?do das vari?veis, cujos nomes devem ser passadas como os demais par?metros no comando printf, conforme o exemplo abaixo:

printf("mensagem com indica??es", variavel, variavel, ...);

Na mensagem entre aspas duplas, um indicador ? um c?digo iniciado por % (porcentagem). Para cada indicador que ocorre na mensagem deve haver a correspondente vari?vel passada como par?metro ap?s a mensagem, e na mesma ordem em que os indicadores aparecem na mensagem. Quando h? um indicador, o comando printf consulta o valor da vari?vel correspondente, formata-o usando a representa??o apropriada, especificada no indicador, e substitui o indicador pelo valor formatado ao imprimir a mensagem na tela. Para cada tipo de vari?vel (int, short int, long int, etc), existe um c?digo apropriado para o indicador. Por exemplo, o indicador %d ? substitu?do pelo conte?do de uma vari?vel de tipo int.

Exemplos Vamos supor que o programa declarou as seguintes vari?veis:

int quantidade = 10; int nota1 = 6; int nota2 = 7;

Alguns exemplos t?picos de printf poderiam ser:

printf("N?mero de ?tens comprados: %d\n", quantidade); printf("Voc? comprou %d itens.\n", quantidade); printf("O aluno tirou %d na primeira prova e %d na segunda.\n", nota1, nota2);

O resultado na tela seria o seguinte:

2/3/2011 11:12 Copyright@2005-2009 Arnaldo V. Moura, Daniel F. Ferber

8

................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download