Académique Documents
Professionnel Documents
Culture Documents
Belo Horizonte - MG
Setembro de 2006
1.
2.
Nota: ................................................................................................................................... 1
Caractersticas da Linguagem C ......................................................................................... 2
2.1.
Caracteres Vlidos ...................................................................................................... 2
2.2.
Caracteres Especiais ................................................................................................... 2
2.3.
Operadores Aritmticos .............................................................................................. 2
2.4.
Operadores de Atribuio Aritmtica ......................................................................... 3
2.5.
Operadores Incrementais ............................................................................................ 4
2.6.
Operadores Relacionais e Lgicos.............................................................................. 4
2.6.1.
Operadores Relacionais: ..................................................................................... 4
2.6.2.
Operadores Lgicos ............................................................................................ 5
2.7.
Operador Condicional................................................................................................. 5
2.8.
Tipos de Dados ........................................................................................................... 6
2.8.1.
Comuns:.............................................................................................................. 6
2.8.2.
Modificados:....................................................................................................... 6
2.9.
Palavras Reservadas.................................................................................................... 6
2.10.
Comentrios ............................................................................................................ 7
2.11.
Constantes ............................................................................................................... 7
2.11.1. Constantes inteiras .............................................................................................. 7
2.11.2. Constantes de ponto flutuante............................................................................. 9
2.11.3. Constantes caracteres .......................................................................................... 9
2.11.4. Constantes string................................................................................................. 9
2.11.5. Constantes Definidas pelo Programador .......................................................... 10
2.12.
Variveis ............................................................................................................... 10
3. Bibliotecas Disponveis .................................................................................................... 11
4. Comandos Mais Utilizados ............................................................................................... 11
4.1.1.
printf() ............................................................................................................... 11
4.1.2.
scanf() ............................................................................................................... 13
4.1.3.
getchar()............................................................................................................ 14
4.1.4.
putchar()............................................................................................................ 15
4.1.5.
getch(), getche()................................................................................................ 15
4.1.6.
cprintf() ............................................................................................................. 15
4.1.7.
sound(), delay(), nosound()............................................................................... 16
4.1.8.
clrscr(), clreol() ................................................................................................. 17
5. Estruturas de Controle ...................................................................................................... 17
5.1.
Condio de controle ................................................................................................ 17
5.2.
do...while .................................................................................................................. 18
5.3.
while ......................................................................................................................... 18
5.4.
for.............................................................................................................................. 19
5.5.
if...else....................................................................................................................... 20
5.5.1.
Deciso com um bloco: .................................................................................... 20
5.5.2.
Deciso entre dois blocos: ................................................................................ 20
5.5.3.
Deciso de mltiplos blocos:............................................................................ 21
5.6.
switch...case .............................................................................................................. 22
5.7.
Comandos: break, continue, goto e a funo exit() .................................................. 23
5.7.1.
break ................................................................................................................. 23
5.7.2.
continue ............................................................................................................. 24
5.7.3.
goto ................................................................................................................... 25
5.7.4.
exit().................................................................................................................. 26
6. Vetor ................................................................................................................................. 26
7.
8.
Matriz................................................................................................................................ 28
Ponteiros ........................................................................................................................... 30
8.1.1.
Declarao de ponteiros.................................................................................... 30
8.1.2.
Operadores & e * .............................................................................................. 31
8.1.3.
Operaes elementares com ponteiros.............................................................. 32
8.1.4.
Alocao Dinmica de Memria ...................................................................... 34
8.1.5.
Ponteiros para Funes ..................................................................................... 35
8.1.6.
Passando uma Funo como Argumento de Outra Funo .............................. 37
9. Tabela ASCII .................................................................................................................... 39
10.
Bibliografia ................................................................................................................... 45
1. Nota:
Este trabalho um resumo, com pequenas modificaes, da bibliografia
aqui referenciada.
eddiesaliba2@yahoo.com
ICQ-45923544
2. Caractersticas da Linguagem C
Importante: A linguagem C case-sensitive (sensvel a caixa), ou seja, uma palavra
escrita em maiscula diferente de uma palavra escrita em minscula.
Exemplo:
Valor ? valor ? VALOR ? valoR ? VaLoR ? vALOr ? vaLor e assim por
diante...
Seqncia de escape
Valor ASCII
nulo (null)
\0
00
campainha (bell)
\a
07
retrocesso (backspace)
\b
08
tabulao horizontal
\t
09
\n
10
tabulao vertical
\v
11
\f
12
\r
13
aspas (")
\"
34
apostrofo (')
\'
39
interrogao (?)
\?
63
\\
92
ICQ-45923544
Operao
adio.
subtrao.
multiplicao
diviso
var += 5;
var = var + 5;
var -= 5;
var = var 5;
var *= 5;
var = var * 5;
var /= 5;
var = var / 5;
var %= 5;
var = var % 5;
var = var + 1;
++var;
var = var + 1;
var--;
var = var 1;
--var;
var = var 1;
Observe que existem duas sintaxes possveis para os operadores. Pode-se colocar o
operador esquerda ou direita da varivel. Nos dois casos o valor da varivel ser
incrementado (ou decrementado) de uma unidade. Porm se o operador for colocado
esquerda da varivel, o valor da varivel ser incrementado (ou decrementado) antes que a
varivel seja usada em alguma outra operao. Caso o operador seja colocado direita da
varivel, o valor da varivel ser incrementado (ou decrementado) depois que a varivel for
usada em alguma outra operao.
Significado
>
maior que
<
menor que
eddiesaliba2@yahoo.com
ICQ-45923544
>=
<=
==
igual a
!=
Equivalentes em Pascal
AND
OR
NOT
ICQ-45923544
Tamanho
Intervalo
Uso
char
1 byte
-128 a 127
int
2 bytes
-32768 a 32767
float
4 bytes
3.4e-38 a 3.4e38
double
8 bytes
1.7e-308 a 1.7e308
2.8.2. Modificados:
Tipo
Tamanho (bytes)
Intervalo
unsigned char
0 a 255
unsigned int
0 a 65 535
long int
-2.147.483.648 a 2.147.483.647
0 a 4.294.967.295
long double
10
3.4e-4932 a 1.1e4932
auto
break
case
cdecl
char
class
const
continue
_cs
default
delete
do
double
_ds
else
enum
_es
extern
_export
far
_fastcall
float
for
friend
goto
huge
if
inline
int
interrupt
_loadds
long
near
new
operator
pascal
private
protected
public
register
return
_saveregs
_seg
short
signed
sizeof
_ss
static
struct
switch
template
this
typedef
union
unsigned
virtual
void
volatile
while
eddiesaliba2@yahoo.com
ICQ-45923544
2.10.
Comentrios
2.11.
Constantes
-45
26338
-7575
1010
(ponto)
1,2
(vrgula)
045
eddiesaliba2@yahoo.com
ICQ-45923544
212-22-33
(caracter ilegal: -)
0x3
0x4f5a
0x2FFE
OxABCD
0xAaFf
(ponto)
0x1,e
(vrgula)
0x ff
(espao)
FFEE
0Xfg34
(caracter ilegal: g)
045
071
07575
01010
(ponto)
01,2
(vrgula)
eddiesaliba2@yahoo.com
ICQ-45923544
125.65
.93
1.23e-9
-1.e2
10.6e18
-.853E+67
+3.14e+2
31.4e1
.314E+3
314e0
&
ICQ-45923544
2.12.
Variveis
ICQ-45923544
10
main(){
float raio, area;
/* declarao de variveis */
raio = 2.5;
rea = 3.14 * raio * raio;
}
3. Bibliotecas Disponveis
alloc.h
assert.h
bcd.h
bios.h
complex.h
conio.h
ctype.h
dir.h
dirent.h
dos.h
errno.h
fcntl.h
float.h
fstream.h
generic.h
graphics.h
io.h
iomanip.h
iostream.h
limits.h
locale.h
malloc.h
math.h
mem.h
process.h
setjmp.h
share.h
signal.h
stdarg.h
stddef.h
stdio.h
stdiostr.h
stdlib.h
stream.h
string.h
strstrea.h
sys\stat.h
sys\timeb.h
sys\types.h
time.h
values.h
4.1.1. printf()
Biblioteca: stdio.h
Declarao: int printf (const char* st_contr [, lista_arg]);
A funo printf() (print formated) imprime dados da lista de argumentos lista_arg
formatados de acordo com a string de controle st_contr. Esta funo retorna um valor inteiro
representando o nmero de caracteres impressos.
eddiesaliba2@yahoo.com
ICQ-45923544
11
A string de controle, st_contr, uma mscara que especifica (formata) o que ser
impresso e de que maneira ser impresso.
Exemplo : Abaixo as instrues de sada formatadas e os respectivos resultados.
Instruo
Sada
printf(Ola, Mundo!);
Ola, Mundo!
printf(linha 1 \nlinha 2 );
linha 1
linha 2
printf(Tenho %d anos.,idade);
Tenho 29 anos.
Instruo:
printf(Total: %f.2 \nDinheiro: %f.2 \nTroco: %f.2,tot,din,din-tot);
Sada:
Total: 12.30
Dinheiro: 15.00
Troco: 2.70
Depois do sinal %, seguem-se alguns modificadores, cuja sintaxe a seguinte:
% [flag] [tamanho] [.preciso] tipo
[flag] justificao de sada: (Opcional)
-
justificao esquerda.
<espao>
ICQ-45923544
12
d inteiro decimal
o inteiro octal
x inteiro hexadecimal
f ponto flutuante: [-]dddd.dddd.
e ponto flutuante com expoente: [-]d.dddde[+/-]ddd
c
caracter simples
string
4.1.2. scanf()
Biblioteca: stdio.h
Declarao: int scanf(const char* st_contr [, end_var, ...]);
A funo scanf() (scan formated) permite a entrada de dados numricos, caracteres e
'strings' e sua respectiva atribuio a variveis cujos endereos so end_var. Esta funo
dita de entrada formatada pois os dados de entrada so formatados pela string de controle
st_contr.
O uso da funo scanf() semelhante ao da funo printf(). A funo l da
entrada padro (em geral, teclado) uma lista de valores que sero formatados pela string de
controle e armazenados nos endereos das variveis da lista. A string de controle formada
por um conjunto de especificadores de formato, cuja sintaxe a seguinte:
% [*] [tamanho] tipo
eddiesaliba2@yahoo.com
ICQ-45923544
13
4.1.3. getchar()
Biblioteca: stdio.h
Declarao: int getchar(void);
A funo getchar() (get character) l um caracter individual da entrada padro (em
geral, o teclado). Se ocorrer um erro ou uma condio de 'fim-de-arquivo' durante a leitura, a
funo retorna o valor da constante simblica EOF (end of file) definida na biblioteca stdio.h.
Esta funo permite uma forma eficiente de deteco de finais de arquivos.
eddiesaliba2@yahoo.com
ICQ-45923544
14
4.1.4. putchar()
Biblioteca: stdio.h
Declarao: int putchar(int c);
Esta funo putchar() (put character) imprime um caracter individual c na sada
padro (em geral o monitor de vdeo).
int getch(void);
int getche(void);
Estas funes fazem a leitura dos cdigos de teclado. Estes cdigos podem representar
tecla s de caracteres (A, y, *, 8, etc.), teclas de comandos ( [enter], [delete], [Page Up], [F1],
etc.) ou combinao de teclas ([Alt] + [A], [Shift] + [F1], [Ctrl] + [Page Down], etc.).
Ao ser executada, a funo getch() (get character) aguarda que uma tecla (ou
combinao de teclas) seja pressionada, recebe do teclado o cdigo correspondente e retorna
este valor. A funo getche() (get character and echoe) tambm escreve na tela, quando
possvel, o caracter correspondente.
4.1.6. cprintf()
Biblioteca: conio.h
Declarao: int cprintf (const char* st_contr [, lista_arg]);
Esta funo cprintf() (color print formated) permite a sada de dados usando cores.
O uso da funo cprintf() semelhante printf(). Para que a sada seja colorida
necessrio definir as cores de fundo e de letra para a impresso antes do uso da funo.
Cores (Modo Texto)
Cor
Constante
Preto
BLACK
Azul
BLUE
eddiesaliba2@yahoo.com
Valor
Fundo
Letra
ok
ok
ok
ok
ICQ-45923544
15
Verde
GREEN
ok
ok
Cian
CYAN
ok
ok
Vermelho
RED
ok
ok
Magenta
MAGENTA
ok
ok
Marrom
BROWN
ok
ok
Cinza Claro
LIGHTGRAY
ok
ok
Cinza Escuro
DARKGRAY
--
ok
Azul Claro
LIGHTBLUE
--
ok
Verde Claro
LIGHTGREEN
10
--
ok
Cian Claro
LIGHTCYAN
11
--
ok
Vermelho Claro
LIGHTRED
12
--
ok
Magenta Claro
LIGHTMAGENTA
13
--
ok
Amarelo
YELLOW
14
--
ok
Branco
WHITE
15
--
ok
Piscante
BLINK
128
--
ok
eddiesaliba2@yahoo.com
ICQ-45923544
16
Biblioteca: dos.h
Declaraes: void sound(unsigned freq);
void delay(unsigned tempo);
void nosound(void);
A funo sound() ativa o alto-falante do PC com uma freqncia freq (Hz). A funo
delay() realiza uma pausa (aguarda intervalo de tempo), a durao determinada em
milisegundos. A funo nosound() desativa o alto-falante.
5. Estruturas de Controle
5.1.
Condio de controle
Em todas as estruturas, existe pelo menos uma expresso que faz o controle de qual
bloco de instrues ser executado ou quantas vezes ele ser executado: o que chamamos
de condio de controle. Uma condio de controle uma expresso lgica ou aritmtica
cujo resultado pode ser considerado verdadeiro ou falso.
Exemplo: Observe nas condies abaixo, considere as variveis:
int i = 0, j = 3;
condio
valor numrico
(i == 0)
verdadeiro
(i > j)
falso
eddiesaliba2@yahoo.com
significado lgico
ICQ-45923544
17
(i)
falso
(j)
verdadeiro
5.2. do...while
Esta uma estrutura bsica de repetio condicional. Permite a execuo de um bloco
de instrues repetidamente. Sua sintaxe a seguinte:
Sintaxe:
do{
bloco de instrues
}while(condio);
Esta estrutura faz com que o bloco de instrues seja executado pelo menos uma vez.
Aps a execuo do bloco, a condio testada. Se a condio verdadeira o bloco
executado outra vez, caso contrrio a repetio terminada.
Exemplo: No trecho abaixo, a leitura de um nmero feita dentro de um lao de
repetio condicional. A leitura repetida caso o nmero lido seja negativo.
do{
puts("Digite um nmero positivo:");
scanf("%f",&num);
}while(num <= 0.0);
5.3. while
A estrutura de repetio condicional while semelhante a estrutura do...while. Sua
sintaxe a seguinte:
Sintaxe:
while(condio){
bloco de instrues
}
eddiesaliba2@yahoo.com
ICQ-45923544
18
Esta estrutura faz com que a condio seja testada antes de executar o bloco de
instrues. Se a condio verdadeira o bloco executado uma vez e a condio avaliada
novamente. Caso a condio seja falsa a repetio terminada sem a execuo do bloco.
Observe que nesta estrutura, ao contrrio da estrutura do...while, o bloco de instrues pode
no ser executado nenhuma vez, basta que a condio seja inicialmente falsa.
Exemplo: No trecho abaixo, calcula-se a preciso () do processador aritmtico do PC.
A varivel eps tem seu valor dividido por 2 enquanto o processador conseguir distinguir
entre 1 e 1+. Aps a execuo do lao, o valor de eps contm a preciso da mquina.
eps = 1.0;
while(1.0 + eps > 1.0){
eps /= 2.0;
}
Exemplo2: No trecho abaixo o programa imprimira na tela os algarismos de 1 a 10.
cont = 1;
while(cont < 11){
printf (Nmero: %d, cont);
cont++;
}
5.4.
for
eddiesaliba2@yahoo.com
ICQ-45923544
19
condio falsa termina-se o lao. Esta condio , em geral, uma expresso lgica que
determina o ltimo valor do contador. Por exemplo: i <= 100 ou cont > 0.
Exemplo: No trecho abaixo, o contador i inicializado com o valor 1. O bloco repetido
enquanto a condio i <= 10 for verdadeira. O contador incrementado com a
instruo i++. Esta estrutura, deste modo, imprime os nmeros 1, 2, ..., 9, 10.
for(i=1; i<=10; i++){
printf("Nmero: %d", i);
}
5.5.
if...else
5.5.1.
if(condio){
bloco de intrues
}
Se a condio verdadeira, o bloco executado. Caso contrrio, o bloco no
executado.
Exemplo: No trecho abaixo, se o valor lido for maior que 10, ento o seu valor
redefinido como 10.
printf("Digite o nmero de repeties: (mximo 10)";
scanf("%d",&iter);
if(iter > 10){
iter = 10;
}
5.5.2.
if(condio){
bloco de instrues 1;
eddiesaliba2@yahoo.com
ICQ-45923544
20
}else{
bloco de instrues 2;
}
Se a condio for verdadeira o bloco de instrues 1 executado. Caso
contrrio, o bloco de instrues 2 executado.
Exemplo: No trecho abaixo, se o valor de raiz*raiz for maior que num o valor de raiz
ser atribudo a max, caso contrario, ser atribudo a min.
if(raiz*raiz > num){
max = raiz;
}
else{
min = raiz;
}
5.5.3.
if(condio 1){
bloco de instrues 1;
}
else {
if(condio N){
bloco de instrues N;
}
else {
bloco de instrues P
}
}
Se a condio 1 for verdadeira o bloco de instrues 1 executado. Caso
contrrio, a condio 2 testada. Se a condio 2 for verdadeira o bloco de instrues
2 executado. Caso contrrio, a condio 3 testada e assim sucessivamente. Se nenhuma
condio verdadeira, o bloco de instrues P executado. Observe que apenas um
dos blocos executado.
eddiesaliba2@yahoo.com
ICQ-45923544
21
5.6. switch...case
A estrutura switch..case uma estrutura de deciso que permite a execuo de um
conjunto de instrues a partir pontos diferentes conforme o resultado de uma expresso
inteira de controle. O resultado desta expresso comparado ao valor de cada um dos rtulos,
e as instrues so executadas a partir desde rtulo.
eddiesaliba2@yahoo.com
ICQ-45923544
22
O valor de expresso avaliado e o fluxo lgico ser desviado para o conjunto cujo
rtulo igual ao resultado da expresso e todas as instrues abaixo deste rtulo sero
executadas. Caso o resultado da expresso for diferente de todos os valores dos rtulos ento
conjunto de instrues d executado. Os rtulos devem ser expresses constantes
inteiras diferentes entre si. O rtulo default opcional.
Esta estrutura particularmente til quando se tem um conjunto de instrues que se
deve executar em ordem, porm se pode comear em pontos diferentes.
Exemplo: O trecho abaixo ilustra o uso da instruo switch em um menu de seleo.
Neste exemplo, o programa iniciar o processo de usinagem de uma pea em um ponto
qualquer dependendo do valor lido.
int selecao;
printf("Digite estgio de usinagem:");
scanf("%d",&selecao);
switch(selecao){
case 1:
// desbaste grosso...
break;
case 2:
// desbaste fino...
break;
case 3:
// acabamento...
break;
case 4:
// polimento...
}
5.7.1.
eddiesaliba2@yahoo.com
break
ICQ-45923544
23
Esta instruo serve para terminar a execuo das instrues de um lao de repetio
(for, do...while, while) ou para terminar um conjunto switch...case.
Quando em um lao de repetio, esta instruo fora a interrupo do lao
independentemente da condio de controle.
Exemplo: No trecho abaixo um lao de repetio l valores para o clculo de uma
mdia. O lao possui uma condio de controle sempre verdadeira o que, em princpio,
um erro: lao infinito. Porm, a sada do lao se d pela instruo break que
executada quando um valor negativo lido.
printf("digite valores:");
do{
printf("valor:");
scanf("%f", &val);
if(val < 0){
break;
// sada do lao
}
num++;
soma += val;
}while(1);
// sempre verdadeiro
printf("mdia: %f",soma/num);
5.7.2.
continue
ICQ-45923544
24
do{
printf ("valor:");
scanf ("%f", &val);
if(val < 0){
continue;
// se val negativo...
// ...salta para...
}
num++;
soma += val;
// no so executadas!
// ...fim do lao
printf("mdia: %f",soma/num);
5.7.3. goto
Esta instruo chamada de desvio de fluxo. A instruo desvia o programa para um
rtulo (posio identificada) no programa. So raros os casos onde a instruo goto
necessria, no entanto, h certas circunstncias, onde usada com prudncia, ela pode ser til.
Sintaxe:
goto rtulo;
...
rtulo:
...
Exemplo: No trecho abaixo revemos um lao de repetio que l valores para o clculo
de uma mdia. Foram usadas duas instrues goto.
printf ("digite valores:");
inicio:
// rtulo
printf ("valor:");
scanf("%f",&val);
if(val < 0){
goto fim;
// se val negativo...
// ...salta para fim
}
num++;
soma += val;
// no so executadas!
eddiesaliba2@yahoo.com
ICQ-45923544
25
goto inicio;
fim:
// rtulo
printf("mdia: %f",soma/num);
5.7.4. exit()
Esta funo (no instruo) exit(), da biblioteca stdlib.h, uma funo que
termina a execuo de um programa. Normalmente um programa terminado quando se
executa a ltima sua instruo, porm pode-se terminar a execuo do programa a qualquer
momento com o uso desta funo.
A funo exit() tem a seguinte declarao: void exit(int status). Onde o
argumento da funo um valor inteiro que ser passado para o Sistema Operacional:
(varivel de sistema errorlevel no DOS).
Exemplo: No trecho abaixo revemos um lao de repetio l valores para o clculo de
uma mdia. Foi usado a funo exit para terminar a execuo do programa.
printf("digite valores:");
do{
printf ("valor:");
scanf("%f",&val);
if(val < 0.0){
// se val negativo...
printf("mdia: %f",soma/num);
// imprime resultado
exit(0);
// termina programa
}
num++;
soma += val;
}while(1);
6. Vetor
Em muitas aplicaes queremos trabalhar com conjuntos de dados que so
semelhantes em tipo. Por exemplo o conjunto das alturas dos alunos de uma turma, ou um
conjunto de seus nomes. Nestes casos, seria conveniente poder colocar estas informaes sob
um mesmo conjunto, e poder referenciar cada dado individual deste conjunto por um nmero
ndice. Em programao, este tipo de estrutura de dados chamada de vetor (ou array, em
ingls) ou, de maneira mais formal estruturas de dados homogneas.
Exemplo: A maneira mais simples de entender um vetor atravs da visualizao de
um lista, de elementos com um nome coletivo e um ndice de referncia aos valores da
lista.
eddiesaliba2@yahoo.com
ICQ-45923544
26
nota
8.4
6.9
4.5
4.6
7.2
eddiesaliba2@yahoo.com
ICQ-45923544
27
onde:
lista de valores uma lista, separada por vrgulas, dos valores de cada elemento do
vetor.
Exemplo: Veja as inicializaes seguintes. Observe que a inicializao de nota gera o
vetor do exemplo do incio desta seo.
int dia[7] = {12,30,14,7,13,15,6};
float nota[5] = {8.4,6.9,4.5,4.6,7.2};
char vogal[5] = {'a, e, i, o, u'};
Opcionalmente, podemos inicializar os elementos do vetor enumerando-os um a um.
Exemplo:
int cor_menu[4] = {BLUE,YELLOW,GREEN,GRAY};
ou
int cor_menu[4];
cor_menu[0] = BLUE;
cor_menu[1] = YELLOW;
cor_menu[2] = GREEN;
cor_menu[3] = GRAY;
Importante: Na linguagem C, devemos ter cuidado com os limites de um vetor. Embora
na sua declarao, tenhamos definido o tamanho de um vetor, o C no faz nenhum
teste de verificao de acesso a um elemento dentro do vetor ou no.
Por exemplo: Se declaramos um vetor como int valor[5], teoricamente s tem sentido
usarmos os elementos valor[0], ..., valor[4]. Porm, o C no acusa erro se usarmos
valor[12] em algum lugar do programa. Estes testes de limite devem ser feitos
logicamente dentro do programa.
7. Matriz
Vetores podem ter mais de uma dimenso, isto , mais de um ndice de referncia.
Podemos ter vetores de duas, trs, ou mais dimenses. Podemos entender um vetor de duas
dimenses (por exemplo) associando-o aos dados de um tabela.
Exemplo: Um vetor bidimensional pode ser visualizado atravs de uma tabela.
nota
0
8.4
7.4
5.7
eddiesaliba2@yahoo.com
ICQ-45923544
28
6.9
2.7
4.9
4.5
6.4
8.6
4.6
8.9
6.3
7.2
3.6
7.7
ICQ-45923544
29
8. Ponteiros
Toda informao (dado armazenado em varivel simples ou vetor) que manipulamos
em um programa est armazenado na memria do computador. Cada informao
representada por um certo conjunto de bytes (Ver captulo 2). Por exemplo: caracter (char): 1
byte, inteiro (int): 2 bytes, etc.
Cada um destes conjuntos de bytes, que chamaremos de bloco, tem um nome e um
endereo de localizao especifica na memria.
Exemplo: Observe a instruo abaixo:
int num = 17;
Ao interpretarmos esta instruo, o processador pode especificar:
Nome da informao: num
Tipo de informao: int
Tamanho do bloco (nmero de bytes ocupados pela informao): 2
Valor da informao: 17
Endereo da informao (localizao do primeiro byte): 8F6F:FFF2 (hexadecimal)
Em geral, interessa ao programador apenas os nomes simblicos que representam as
informaes, pois com estes nomes que so realizadas as operaes do seu algoritmo.
Porm, ao processador interessa os endereos dos blocos de informao pois com estes
endereos que vai trabalhar.
Ponteiros so variveis que contm endereos. Neste sentido, estas variveis apontam
para algum determinado endereo da memria.
8.1.1.
Declarao de ponteiros.
Quando declaramos um ponteiro, devemos declar-lo com o mesmo tipo (int, char, etc.)
do bloco a ser apontado. Por exemplo, se queremos que um ponteiro aponte para uma varivel
int (bloco de 2 bytes) devemos declar-lo como int tambm.
A sintaxe da declarao de um ponteiro a seguinte:
tipo_ptr *nome_ptr_1;
ou
tipo_ptr* nome_ptr_1, nome_ptr_2, ...;
eddiesaliba2@yahoo.com
ICQ-45923544
30
onde:
tipo_ptr : o tipo de bloco para o qual o ponteiro apontar.
* : um operador que indica que nome_ptr um ponteiro.
nome_ptr_1, nome_ptr_2,...: so os nomes dos ponteiros.
8.1.2.
Operadores & e *
eddiesaliba2@yahoo.com
ICQ-45923544
31
Estamos nos referindo ao endereo do bloco ocupado pela varivel num. A instruo
significa: "leia o buffer do teclado, transforme o valor lido em um valor inteiro (2 bytes) e o
armazene no bloco localizado no endereo da varivel num".
Exemplo: Para se atribuir a um ponteiro o endereo de uma varivel escreve-se:
int *p, val=5;
p = &val;
// atribuio
Observe que o ponteiro p deve ser declarado anteriormente com o mesmo tipo da
varivel para a qual ele deve apontar.
O operador contedo (*) determina o contedo (valor) do dado armazenado no
endereo de um bloco apontado por um ponteiro. Por exemplo, *p determina contedo do bloco
apontado pelo ponteiro p. De forma resumida: o operador (*) determina o contedo de um
endereo.
Exemplo: Para se atribuir a uma varivel o contedo de um endereo escreve-se:
int *p = 0x3f8, val;
val = *p;
// atribuio
8.1.3.
// p recebe o endereo de s
...
Um ponteiro pode receber o valor de outro ponteiro, isto , pode receber o endereo
apontado por outro ponteiro, desde que os ponteiros sejam de mesmo tipo.
eddiesaliba2@yahoo.com
ICQ-45923544
32
p2 = (float)0x0FF6; // casting
...
A um ponteiro pode ser atribudo o valor nulo usando a constante simblica NULL
(declarada na biblioteca stdlib.h). Um ponteiro com valor NULL no aponta para
lugar nenhum! Algumas funes a utilizam para registrar uma atribuio ilegal ou
sem sucesso (ver funo malloc() adiante).
Exemplo:
#include <stdlib.h>
...
char *p;
p = NULL;
...
Uma quantidade inteira pode ser adicionada ou subtrada de um ponteiro. A adio
de um inteiro n a um ponteiro p far com que ele aponte para o endereo do n-simo
bloco seguinte.
type conversion ou typecasting refere-se a mudana do tipo de uma entidade em outra. Isto feito para obter
vantagens e flexibilidade nas caractersticas de algumas hierarquias. (Disponvel em: <
http://en.wikipedia.org/wiki/Typecast_(programming)> Acesso em: 15 set. 2006)
eddiesaliba2@yahoo.com
ICQ-45923544
33
8.1.4.
ICQ-45923544
34
// declarao do ponteiro
8.1.5.
eddiesaliba2@yahoo.com
ICQ-45923544
35
ICQ-45923544
36
8.1.6.
Exemplo:
float soma(float a,float b){
...
}
Na funo receptora:
i) Declarar o ponteiro que recebe a funo passada na lista de argumentos:
tipo nome_r(..., tipo (*pt)(lista), ...){
Exemplo:
eddiesaliba2@yahoo.com
ICQ-45923544
37
Exemplo:
valor = (*p)(x,y);
Na funo principal:
i) Passar o nome da funo chamada para a funo receptora:
var = nome_g(... , nome_p , ...);
Exemplo:
g = grad(x,y,soma);
eddiesaliba2@yahoo.com
ICQ-45923544
38
9. Tabela ASCII
As tabelas mostradas neste apndice representam os 256 cdigos usados nos
computadores da famlia IBM. Esta tabela refere-se ao American Standard Code for Information
Interchange (cdigo padro americano para troca de informaes), que um conjunto de
nmeros representando caracteres ou instrues de controle usados para troca de informaes
entre computadores entre si, entre perifricos (teclado, monitor, impressora) e outros
dispositivos. Estes cdigos tem tamanho de 1 byte com valores de 00h a FFh (0 a 255
decimal). Podemos dividir estes cdigos em trs conjuntos: controle, padro e estendido.
Os primeiros 32 cdigos de 00h at 1Fh (0 a 31 decimal), formam o conjunto de
controle ASCII. Estes cdigos so usados para controlar dispositivos, por exemplo uma
impressora ou o monitor de vdeo. O cdigo 0Ch (form feed) recebido por ima impressora gera
um avano de uma pgina. O cdigo 0Dh (carriage return) enviado pelo teclado quando a
tecla ENTER pressionada. Embora exista um padro, alguns poucos dispositivos tratam
diferentemente estes cdigos e necessrio consultar o manual para saber exatamente como
o equipamento lida com o cdigo. Em alguns casos o cdigo tambm pode representar um
caracter imprimvel. Por exemplo o cdigo 01h representa o caracter J (happy face).
Os 96 cdigos seguintes de 20h a 7Fh (32 a 127 decimal) formam o conjunto padro
ASCII. Todos os computadores lidam da mesma forma com estes cdigos. Eles representam
os caracteres usados na manipulao de textos: cdigos-fonte, documentos, mensagens de
correio eletrnico, etc. So constitudos das letras do alfabeto latino (minsculo e maisculo) e
alguns smbolos usuais.
Os restantes 128 cdigos de 80h at FFh (128 a 255 decimal) formam o conjunto
estendido ASCII. Estes cdigos tambm representam caracteres imprimveis porem cada
fabricante decide como e quais smbolos usar. Nesta parte do cdigo esto definidas os
caracteres especiais: , , , ...
eddiesaliba2@yahoo.com
ICQ-45923544
39
eddiesaliba2@yahoo.com
Dec.
Hex.
Controle
00h
NUL
(Null)
01h
SOH
(Start of Heading)
02h
STX
(Start of Text)
03h
ETX
(End of
04h
EOT
(End of Transmision)
05h
ENQ
(Enquiry)
06h
ACK
(Acknowledge)
07h
BEL
(Bell)
08h
BS
(Backspace)
09h
HT
(Horizontal Tab)
10
0Ah
LF
11
0Bh
VT
(Vertical Tab)
12
0Ch
FF
(Form Feed)
13
0Dh
CR
(Carriage Return)
14
0Eh
SO
(Shift Out)
15
0Fh
SI
(Shift In)
16
10h
DLE
17
11h
DC1
(Device control 1)
18
12h
DC2
(Device control 2)
19
13h
DC3
(Device control 3)
20
14h
DC4
(Device control 4)
21
15h
NAK
(Negative Acknowledge)
22
16h
SYN
(Synchronous Idle)
23
17h
ETB
24
18h
CAN
(Cancel)
25
19h
EM
(End of Media)
26
1Ah
SUB
(Substitute)
27
1Bh
ESC
(Escape)
28
1Ch
FS
(File Separator)
29
1Dh
GS
(Group Separator)
30
1Eh
RS
(Record Separator)
31
1Fh
US
(Unit Separator)
Text)
(Line Feed)
ICQ-45923544
40
Caracter
Dec.
Hex.
64
40h
96
60h
<espao>
32
20h
65
41h
97
61h
33
21h
66
42h
98
62h
"
34
22h
67
43h
99
63h
35
23h
Caracter
Dec.
Hex.
100
64h
36
24h
68
44h
101
65h
37
25h
69
45h
102
66h
&
38
26h
70
46h
103
67h
'
39
27h
71
47h
Caracter
Dec.
Hex.
40
28h
72
48h
104
68h
41
29h
73
49h
105
69h
42
2Ah
74
4Ah
106
6Ah
43
2Bh
75
4Bh
107
6Bh
44
2Ch
76
4Ch
108
6Ch
45
2Dh
77
4Dh
109
6Dh
46
2Eh
78
4Eh
110
6Eh
47
2Fh
79
4Fh
111
6Fh
48
30h
80
50h
112
70h
49
31h
81
51h
113
71h
50
32h
82
52h
114
72h
51
33h
83
53h
115
73h
52
34h
84
54h
116
74h
53
35h
85
55h
117
75h
54
36h
86
56h
118
76h
55
37h
87
57h
119
77h
56
38h
88
58h
120
78h
57
39h
89
59h
121
79h
58
3Ah
90
5Ah
122
7Ah
59
3Bh
91
5Bh
123
7Bh
<
60
3Ch
92
5Ch
124
7Ch
61
3Dh
93
5Dh
125
7Dh
>
62
3Eh
94
5Eh
126
7Eh
63
3Fh
95
5Fh
<delete>
127
7Fh
eddiesaliba2@yahoo.com
ICQ-45923544
41
128
80h
161
A1h
194
C2h
129
81h
162
A2h
195
C3h
130
82h
163
A3h
196
C4h
131
83h
164
A4h
197
C5h
132
84h
165
A5h
198
C6h
133
85h
166
A6h
199
C7h
134
86h
167
A7h
200
C8h
135
87h
168
A8h
201
C9h
136
88h
169
A9h
202
CAh
137
89h
170
AAh
203
CBh
138
8Ah
171
ABh
204
CCh
139
8Bh
172
ACh
205
CDh
Caracter
Dec.
Hex.
173
ADh
206
CEh
140
8Ch
174
AEh
207
CFh
141
8Dh
175
AFh
208
DOh
142
8Eh
176
B0h
209
D1h
143
8Fh
Caracter
Dec.
Hex.
210
D2h
144
90h
177
B1h
211
D3h
145
91h
178
B2h
212
D4h
146
92h
179
B3h
213
D5h
147
93h
180
B4h
Caracter
Dec.
Hex.
148
94h
181
B5h
214
D6h
149
95h
182
B6h
215
D7h
150
96h
183
B7h
216
D8h
151
97h
184
B8h
217
D9h
152
98h
185
B9h
218
DAh
153
99h
186
BAh
219
DBh
154
9Ah
187
BBh
220
DCh
155
9Bh
188
BCh
221
DDh
156
9Ch
189
BDh
222
DEh
157
9Dh
190
BEh
223
DFh
158
9Eh
191
BFh
224
E0h
159
9Fh
192
C0h
225
E1h
160
A0h
193
C1h
226
E2h
eddiesaliba2@yahoo.com
ICQ-45923544
42
227
E3h
228
E4h
229
E5h
230
E6h
231
E7h
232
E8h
233
E9h
234
EAh
235
EBh
236
ECh
237
EDh
238
EEh
239
EFh
240
F0h
241
F1h
242
F2h
243
F3h
244
F4h
245
F5h
246
F6h
247
F7h
248
F8h
249
F9h
250
FAh
Caracter
Dec.
Hex.
251
FBh
252
FCh
253
FDh
254
FEh
255
FFh
eddiesaliba2@yahoo.com
ICQ-45923544
43
196 194
218 +
205 203
+ 191
179
201 +
+ 187
185
186
195 +
180
204
197
192 +
206
+ 217
200 +
193
202
209
210
+ 188
213 +
+ 184
214 +
+ 183
198
181
199
182
216
212 +
215
+ 190
211 +
207
+ 189
208
eddiesaliba@yahoo.com
ICQ-45923544
44
10.
Bibliografia
eddiesaliba@yahoo.com
ICQ-45923544
45