[CAPÍTULO 1] - [CAPÍTULO 2] - [CAPÍTULO 3]
[PARTE 1] - [PARTE 2] - [PARTE 3] - [PARTE 4] - [PARTE 5] - [PARTE 6] - [PARTE 7] - [PARTE 8]
[PARTE 1] - [PARTE 2] - [PARTE 3] - [PARTE 4] - [PARTE 5] - [PARTE 6] - [PARTE 7] - [PARTE 8]
Declarações: Identificadores e Tipos de Dados Básicos
Objetivos:
Na primeira aula, vimos uma visão geral da linguagem C, e que um programa em C pode ser visto como uma seqüência de DECLARAÇÕES. De maneira geral, uma DECLARAÇÃO introduz um novo nome - um IDENTIFICADOR - e associa a este uma interpretação. Tome como exemplo o seguinte trecho de código:double x;
void p(float b, int e) {
short int i;
x = b;
}
int main() {
p(3.1415, 5);
printf("%f",x);
return 0;
}
Na linha 1, vemos uma DECLARAÇÃO de VARIÁVEL GLOBAL. Nas linhas 3 a 8, temos uma DECLARAÇÃO de FUNÇÃO que, por sua vez, é formada por uma DECLARAÇÃO de PARÂMETROS (linha 3), uma DECLARAÇÃO de VARIÁVEL LOCAL (linha 4) e uma seqûência de comandos (linhas 5-7).
Em cada uma dessas DECLARAÇÕES um novo IDENTIFICADOR é introduzido com uma interpretação particular! Na declaração da linha 1, o IDENTIFICADOR introduzido é
x
e sua interpretação é VARIÁVEL GLOBAL do TIPO BÁSICO double
. Na declaração das linhas 3 a 8, o IDENTIFICADOR é p
e sua interpretação é FUNÇÃO que recebe como PARÂMETROS um valor do TIPO BÁSICO float
e um valor do TIPO BÁSICO int
; tem uma VARIÁVEL LOCAL do TIPO BÁSICO short int
, executa os comandos das linhas 6-7 e ao final nada retorna ( TIPO BÁSICO void
).Note que, nesses exemplos, a interpretação dada a um IDENTIFICADOR está ligada de maneira íntima com um TIPO de DADOS BÁSICO.
Nesta aula, nosso objetivo é mostrar através de exemplos o que é um IDENTIFICADOR válido e quais são os TIPOS de DADOS BÁSICOS - os dois ingredientes fundamentais de toda DECLARAÇÃO em um programa C.
IDENTIFICADORES:
Em C, um IDENTIFICADOR é uma seqüência de LETRAS ou DÍGITOS onde:- O primeiro caracter deve ser uma LETRA (
'a',...,'z','A',...,'Z','_'
)- O caracter
'_'
é contado como uma LETRA
- O caracter
- LETRAS maiúsculas (e.g.,
'A'
) são consideradas diferentes de letras minúsculas (e.g.,'a'
)- isto implica que o IDENTIFICADOR
aux
é diferente deAux
que é diferente deAUX
- isto implica que o IDENTIFICADOR
- PALAVRAS RESERVADAS tais como
if
,else
,char
,int
, ... não podem ser usadas como IDENTIFICADORES.
Pelo padrão C ANSI, um IDENTIFICADOR pode ter qualquer tamanho.
Observações:
- Para IDENTIFICADORES INTERNOS (i.e., nomes restritos a uma única UNIDADE de COMPILAÇÃO), pelo menos os primeiros 31 caracteres são significativos; algumas implementações podem utilizar um conjunto maior de caracteres significativos.
- Já os IDENTIFICADORES EXTERNOS (i.e., nomes de de VARIÁVEIS GLOBAIS e FUNÇÕES compartilhados entre várias UNIDADES de COMPILAÇÃO) são mais restritos: as implementações podem considerar em casos extremos apenas 6 caracteres como significativos, e podem ignorar as distinções entre letras maiúsculas e minúsculas.
Atividade 1: Validando Indentificadores :
Vamos escrever um programa em C (id.c
) que dado uma palavra (cadeia de caracteres) imprima na tela é um identificador!
ou não é um identificador!
caso a palavra obedeça ou não a definição de identificador dada acima.DICA - comece o programa assim:
char str[80]; /* armazena uma cadeia de até 79 caracteres */
int main() {
printf("Digite uma palavra: ");
scanf("%s", str); /* le do usário uma cadeia de caracteres */
...
}
TIPOS DE DADOS BÁSICOS:
Há cinco tipos de dados básicos em C:-
char
: um único byte, capaz de conter um caracter no conjunto de caracteres local; -
int
: um inteiro, normalmente refletindo o tamanho natural dos inteiros da máquina hospedeira; -
float
: ponto flutuante em precisão simples; -
double
: ponto flutuante em dupla precisão; -
void
: conjunto vazio de valores.
Modificadores:
Excetovoid
, os tipos de dados básicos podem ter vários MODIFICADORES precedendo-os. Um MODIFICADOR é usado para alterar o significado de um tipo básico para adaptá-lo à necessidade de diversas situações.São MODIFICADORES de tipos:
long
short
signed
unsigned
-
short
oulong
- referem-se a diferentes tipos de inteiros:- A palavra
int
pode ser omitida e normalmente o é!-
short
=short int
-
long
=long int
-
- Obs.:
- Alguns compiladores permitem
long long int
! (Fora do Padrão ANSI)
- Alguns compiladores permitem
-
long
pode também ser aplicado adouble
de tal modo que:-
float
≤double
≤long double
-
- A palavra
-
signed
ouunsigned
- podem ser aplicados achar
, ou ashort
oulong
(int
).- Equivalencias
-
char
=signed char
ouchar
=unsigned char
, a depender da máquina hospedeira; -
signed int
=int
=signed
-
signed long
=long
-
signed short
=short
-
unsigned int
=unsigned
-
- Obs.:
- Alguns compiladores podem permitir
unsigned double
! (Fora do Padrão ANSI)
- Alguns compiladores podem permitir
- Equivalencias
Tamanho e Faixa de Valores:
O tamanho e faixa de valores dos tipos básicos de dados variam de acordo com:- tipo do processador
- implementação do compilador
Atividade 2: Explorando <limits.h>:
Nos arquivos de cabeçalho <limits.h>
e <float.h>
encontram-se definidas constantes simbólicas para a faixa de valores e tamanho em bytes dos tipos de dados básicos e modificados da linguagem C, conforme foram implementados em um dado compilador/máquina. Nesta atividade, o seu objetivo é escrever um programa
tipos.c
que inclua os arquivos de cabeçalho <limits.h>
e <float.h>
e imprima - para os tipos mostrados na tabela 2.1 - as seguintes informações :TIPO VALOR_MIN VALOR_MAX TAMANHO em BYTES
char -128 127 1
unsigned char 0 255 1
signed char -128 127 1
...
Como ponto de partida, você pode iniciar o seu programa assim:
#include <limits.h>
#include <float.h>
char c;
unsigned char uc;
signed char sc;
int i;
...
int main(void) {
printf("TIPO\t\t\tVALOR_MIN\t\tVALOR_MAX\tTAMANHO em BYTES\n");
printf("char\t\t\t%i\t\t\t%i\t\t%i\n", CHAR_MIN, CHAR_MAX, sizeof c);
printf("unsigned char\t\t%i\t\t\t%i\t\t%i\n", 0, UCHAR_MAX, sizeof uc);
printf("signed char\t\t%i\t\t\t%i\t\t%i\n", SCHAR_MIN, SCHAR_MAX, sizeof sc);
...
}
#include <float.h>
char c;
unsigned char uc;
signed char sc;
int i;
...
int main(void) {
printf("TIPO\t\t\tVALOR_MIN\t\tVALOR_MAX\tTAMANHO em BYTES\n");
printf("char\t\t\t%i\t\t\t%i\t\t%i\n", CHAR_MIN, CHAR_MAX, sizeof c);
printf("unsigned char\t\t%i\t\t\t%i\t\t%i\n", 0, UCHAR_MAX, sizeof uc);
printf("signed char\t\t%i\t\t\t%i\t\t%i\n", SCHAR_MIN, SCHAR_MAX, sizeof sc);
...
}
Leitura Recomendada:
- CCT capítulo 2
- K&R capítulos 2
- Seebach, "Everything You Ever Wanted to Know about C Types"
- http://pt.wikipedia.org/wiki/Tipo_de_dado
Para detalhes sobre representacao de caracteres:
Para detalhes sobre representação de números:
- inteiros (
int
) - ponto flutuante (
float
,double
)
- Jones, Derek M. (2008) "The New C Standard: An Economic and Cultural Commentary."
Exercícios:
- Faça por completo a atividade 1
- Faça por completo a atividade 2
- Utilizando os TIPOS inteiros em C, escreva programas para:
- Dado um número inteiro positivo n, calcular a soma dos n primeiros números naturais.
- Dado um número inteiro positivo n, imprimir os n primeiros naturais ímpares.
- Exemplo: Para n=4 a saída deverá ser 1,3,5,7.
- Dados n e dois números inteiros positivos i e j diferentes de 0, imprimir em ordem crescente os n primeiros naturais que são múltiplos de i ou de j e ou de ambos.
- Exemplo: Para n = 6 , i = 2 e j = 3 a saída deverá ser : 0,2,3,4,6,8.
- Dizemos que um número natural é triangular se ele é produto de três números naturais consecutivos. Exemplo: 120 é triangular, pois 4.5.6 = 120. Dado um inteiro não-negativo n, verificar se n é triangular.
- Dado um inteiro positivo p, verificar se p é primo.
- Dados três números naturais, verificar se eles formam os lados de um triângulo retângulo.
- Utilizando os TIPOS ponto flutuante em C, faça programas para os seguintes enunciados:
- Um programa que leia uma temperatura em graus celsius e a converta para fahrenheit.
- Uma pessoa aplicou um capital de x complexos (1) a juros mensais de z durante 1 ano. Deseja-se um programa que determine o montante de cada mês durante este período.
- Dados números reais a, b e c, calcular as raízes de uma equação do 2o grau da forma ax^2 + b^x + c = 0.
- Utilizando o TIPO
char
, re-escreva os programas anteriores para ao final perguntar ao usário:deseja processar outro valor? [s/n]
. Se o usuário digitar's'
ou'S'
o programa deve continuar processando uma nova entrada; caso contrário deve terminar.
- [CCT] Schildt, H. (1996) C, completo e total: 3a Ed.. São Paulo, Makron.
- LP, UFMA; Coutinho, Lucian. Linguagem de programação para ciencia da computação da ufma.http://www.deinf.ufma.br/~lrc/2009.1/LP/
- [K&R] KERNIGHAN, B. e RITCHIE, D. (1990) C, a linguagem de programação: padrão ANSI. Rio de Janeiro: Campus.
- DEITEL, H. M. (1999) Como programar em C. Rio de Janeiro: LTC.
- Módulo Consultoria e Informática (1989) Linguagem C: programação e aplicações. Rio de Janeiro: LTC.
Coloque aqui o seu email