Vous êtes sur la page 1sur 48

Edwar Saliba Jnior

Guia de Consulta Rpida da


Linguagem C
Verso 1.0

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

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

1. Nota:
Este trabalho um resumo, com pequenas modificaes, da bibliografia
aqui referenciada.

eddiesaliba2@yahoo.com

ICQ-45923544

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

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...

2.1. Caracteres Vlidos


a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1 2 3 4 5 6 7 8 9 0
+ - * / \ = | & ! ? # % ( ) { } [ ] _ . , : < >

2.2. Caracteres Especiais


Controle/Caracter

Seqncia de escape

Valor ASCII

nulo (null)

\0

00

campainha (bell)

\a

07

retrocesso (backspace)

\b

08

tabulao horizontal

\t

09

nova linha (new line)

\n

10

tabulao vertical

\v

11

alimentao de folha (form feed)

\f

12

retorno de carro (carriage return)

\r

13

aspas (")

\"

34

apostrofo (')

\'

39

interrogao (?)

\?

63

barra invertida (\)

\\

92

2.3. Operadores Aritmticos


eddiesaliba2@yahoo.com

ICQ-45923544

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

Existem cinco operadores aritmticos em C. Alm dos operadores aritmticos, existe


ainda o operador % chamado operador de mdulo cujo significado o resto da diviso inteira.
Os smbolos dos operadores aritmticos so:
Operador

Operao

adio.

subtrao.

multiplicao

diviso

mdulo (resto da diviso inteira)

2.4. Operadores de Atribuio Aritmtica


Os smbolos usado so (+=, -=, *=, /= , %=).
A sintaxe da atribuio aritmtica a seguinte onde var a varivel e exp uma
expresso vlida.
var += exp;
var -= exp;
var *= exp;
var /= exp;
var %= exp;
Estas instrues so equivalentes as seguintes:
var = var + exp;
var = var - exp;
var = var * exp;
var = var / exp;
var = var % exp;
Exemplo: Algumas atribuies aritmticas VLIDAS e suas respectivas formas sem o
uso do operador de atribuio aritmtico:

Expresso COM operador aritmtico


eddiesaliba2@yahoo.com

Expresso SEM operador aritmtico


ICQ-45923544

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

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;

2.5. Operadores Incrementais


Na linguagem C existem instrues muito comuns chamadas de operadores de
incremento (++) e decremento (--).
A sintaxe dos operadores incrementais a seguinte:
var++;

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.

2.6. Operadores Relacionais e Lgicos


2.6.1. Operadores Relacionais:
Operadores relacionais verificam a relao de magnitude e igualdade entre dois valores.
So seis os operadores relacionais em linguagem C:
Operador

Significado

>

maior que

<

menor que

eddiesaliba2@yahoo.com

ICQ-45923544

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

>=

maior ou igual a (no menor que)

<=

menor ou igual a (no maior que)

==

igual a

!=

no igual a (diferente de)

2.6.2. Operadores Lgicos


So trs os operadores lgicos na linguagem C:
Operadores em C
&&
||
!

Equivalentes em Pascal
AND
OR
NOT

A sintaxe de uso dos operadores lgicos:


expr_1 && expr_2
expr_1 || expr_2
!expr
onde expr_1, expr_2 e expr so expresses vlidas.

2.7. Operador Condicional


O operador condicional ? : usado para simplificar expresses condicionais.
A sintaxe de uma expresso condicional :
condio ? expresso_1 : expresso_2;
A expresso acima poderia ser escrita tambm da seguinte forma:
if (condio) {
expressao_1
}
else {
expressao_2
}
eddiesaliba2@yahoo.com

ICQ-45923544

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

2.8. Tipos de Dados


2.8.1. Comuns:
Tipo

Tamanho

Intervalo

Uso

char

1 byte

-128 a 127

int

2 bytes

-32768 a 32767

Contador, controle de lao

float

4 bytes

3.4e-38 a 3.4e38

Real (preciso de 7 dgitos)

double

8 bytes

1.7e-308 a 1.7e308

Nmero muito pequeno e caracter ASCII

Cientfico (preciso de 15 dgitos)

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

unsigned long int

0 a 4.294.967.295

long double

10

3.4e-4932 a 1.1e4932

2.9. Palavras Reservadas


asm

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

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

2.10.

Comentrios

Em linguagem C, comentrios podem ser escritos em qualquer lugar do texto para


facilitar a interpretao do algoritmo. Para que o comentrio seja identificado como tal, ele deve
ter um /* antes e um */ depois.
Exemplo:
/* esta uma linha de comentrio em C */
Observao: O C++ permite que comentrios sejam escritos de outra forma: colocando
um // em uma linha, o compilador entender que tudo que estiver direita do smbolo um
comentrio.
Exemplo:
// este um comentrio valido apenas em C++

2.11.

Constantes

A linguagem C possui quatro tipos bsicos de constantes: inteiras, ponto flutuante,


caracteres e strings. As constantes inteiras e de ponto flutuante representam nmeros,
enquanto as de caracteres e strings representam letras e palavras.

2.11.1. Constantes inteiras


Uma constante inteira um nmero de valor inteiro. Nmeros inteiros podem ser
escritos nos formatos:
1. Decimal (base 10):
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Exemplo: Algumas constantes inteiras decimais VLIDAS:
0

-45

26338

-7575

1010

Exemplo: Algumas constantes inteiras decimais INVLIDAS.


1.

(ponto)

1,2

(vrgula)

045

(primeiro dgito 0: no constante decimal)

eddiesaliba2@yahoo.com

ICQ-45923544

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

212-22-33

(caracter ilegal: -)

2. Hexadecimal (base 16):


0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F (a, b, c, d, e)
Exemplo: A seguir so mostrados algumas constantes inteiras hexadecimais VLIDAS.
0x0

0x3

0x4f5a

0x2FFE

OxABCD

0xAaFf

Exemplo: Algumas constantes inteiras hexadecimais INVLIDAS


.
0x3.

(ponto)

0x1,e

(vrgula)

0x ff

(espao)

FFEE

(no comea com 0x: no constante hexadecimal)

0Xfg34

(caracter ilegal: g)

3. Octal (base 8):


0, 1, 2, 3, 4, 5, 6, 7
Observao: Na representao de nmeros octais, o primeiro dgito
deve ser o nmero 0 (zero).
Exemplo: Algumas constantes inteiras decimais VLIDAS:
031

045

071

07575

01010

Exemplo: Algumas constantes inteiras decimais INVLIDAS.


01.

(ponto)

01,2

(vrgula)

0212-22-33 (caracter ilegal: -)

eddiesaliba2@yahoo.com

ICQ-45923544

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

2.11.2. Constantes de ponto flutuante


Um nmero ponto flutuante DEVE ter um ponto decimal que no pode ser substitudo
por uma vrgula. Pode ser escrito em notao cientfica, neste caso o x10 substitudo por e
ou E. Assim sendo, o nmero 1.23e4 representa 1.23 x 104 ou 12300.
Exemplo: Nmeros de ponto flutuante VLIDOS.
0.234

125.65

.93

1.23e-9

-1.e2

10.6e18

-.853E+67

A forma de representao de um nmero real em C bastante flexvel. Por exemplo, o


nmero 314 pode ser representado por qualquer uma das seguintes formas abaixo:
314. 3.14e2

+3.14e+2

31.4e1

.314E+3

314e0

2.11.3. Constantes caracteres


Uma constante caracter uma letra ou smbolo colocado entre ASPAS SIMPLES.
Exemplo: Algumas constantes caracter VLIDAS.
a

&

2.11.4. Constantes string


Uma constante string consiste de um conjunto de caracteres colocados entre ASPAS
DUPLAS. Embora as instrues do C usem apenas os caracteres do conjunto padro ASCII, as
constantes caracter e string podem conter caracteres do conjunto estendido ASCII: , , , , ...
Exemplo: Abaixo seguem algumas constantes strings VLIDAS.
Oba!
Caxias do Sul
A resposta :
Joo Carlos da Silveira
a
isto uma string
eddiesaliba2@yahoo.com

ICQ-45923544

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

2.11.5. Constantes Definidas pelo Programador


O programador pode definir constantes em qualquer programa.
A sintaxe da instruo de definio de uma constante:
#define nome_da_constante valor_da_constante
Onde #define uma diretiva de compilao que diz ao compilador para trocar as
ocorrncias do texto nome_da_constante pelo valor_da_constante.
Exemplo: Algumas constantes.
#define PI 3.14159
#define ON 1
#define OFF 0
#define ENDERECO 0x378

2.12.

Variveis

A sintaxe para declarao de variveis a seguinte:


tipo var_1 [, var_2, ...];
Onde tipo o tipo de dado e var_1 o nome da varivel a ser declarada. Se houver mais de
uma varivel, seus nomes so separados por vrgulas.
Exemplo:
int i;
int x,y,z;
char letra;
float nota_1,nota_2,media;
double num;

Exemplo: Declarao de variveis em um programa:


eddiesaliba2@yahoo.com

ICQ-45923544

10

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

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. Comandos Mais Utilizados


Mostraremos, nas duas sees iniciais as mais importantes funes de entrada e sada de dados
em C: as funes printf() e scanf(). A partir do estudo destas funes possvel escrever um
programa propriamente dito com entrada, processamento e sada de dados.

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

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

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.

converso de sinal (sada sempre com sinal: + ou -)

<espao>

converso de sinal (sadas negativas com sinal, positivas sem sinal)

[tamanho] especificao de tamanho (Opcional)


n pelo menos n dgitos sero impressos (dgitos faltantes sero
completados por brancos).
eddiesaliba2@yahoo.com

ICQ-45923544

12

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

0n pelo menos n dgitos sero impressos (dgitos faltantes sero


completados por zeros).
[.preciso] especificador de preciso, dgitos a direita do ponto decimal.
(Opcional)
(nada) padro: 6 dgitos para reais.
.0

nenhum digito decimal.

.n so impressos n dgitos decimais.


Tipo

caracter de converso de tipo (Requerido)

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

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

* indicador de supresso (Opcional)


<presente> Se o indicador de supresso estiver presente o campo no lido. Este
supressor til quando no queremos ler um campo de dado armazenado
em arquivo.
<ausente> O campo lido normalmente.
Tamanho especificador de tamanho(Opcional)
n Especifica n como o numero mximo de caracteres para leitura do campo.
<ausente> Campo de qualquer tamanho.
Tipo define o tipo de dado a ser lido (Requerido)
d inteiro decimal (int)
f ponto flutuante (float)
o inteiro octal (int)
x inteiro hexadecimal (int)
i inteiro decimal de qualquer formato(int)
u inteiro decimal sem sinal (unsigned int)
s string (char*)
c caracter (char)
A lista de variveis o conjunto de endereos de variveis para os quais sero
passados os dados lidos. Variveis simples devem ser precedidas pelo caracter &. Vetores no
so precedidos pelo caracter &.

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

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

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).

4.1.5. getch(), getche()


Biblioteca: conio.h
Declarao:

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

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

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

Estas definies so feitas pelas funes texcolor() e textbackground() cuja sintaxe :


textcolor(cor_de_letra);
textbackground(cor_de_fundo);
onde cor_de_letra e cor_de_fundo so nmeros inteiros referentes as cores da palheta
padro (16 cores, modo texto). Estes valores de cor so representadas por constantes
simblicas definidas na biblioteca conio.h. Para se usar uma letra piscante deve-se adicionar o
valor 128 ao valor da cor de letra.
Exemplo: O trecho de programa abaixo imprime uma mensagem de alerta em amarelo
piscante sobre fundo vermelho.
#include <conio.h>
...
textbackground(RED);
textcolor(YELLOW + BLINK);
cprintif( Alerta: Vrus Detectado! );
...

4.1.7. sound(), delay(), nosound()

eddiesaliba2@yahoo.com

ICQ-45923544

16

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

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.

4.1.8. clrscr(), clreol()


Biblioteca: conio.h
Declaraes: void clrscr(void);
void clreol(void);
A funo clrscr() (clear screen) limpa a janela de tela e posiciona o cursor na
primeira linha e primeira coluna da janela (canto superior esquerdo da janela). A funo
clreol() (clear to end of line) limpa uma linha desde a posio do cursor at o final da linha
mas no modifica a posio do cursor. Ambas funes preenchem a tela com a cor de fundo
definida pela funo textbacground().

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

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

(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

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

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

A estrutura for muito semelhante as estruturas de repetio vistas anteriormente,


entretanto costuma ser utilizada quando se quer um nmero determinado de ciclos. A
contagem dos ciclos feita por uma varivel chamada de contador.
Sintaxe:
for(inicializao; condio; incremento){
bloco de instruo
}
Esta estrutura executa um nmero determinado de repeties usando um contador de
iteraes. O contador inicializado na expresso de inicializao antes da primeira
iterao. Por exemplo: i = 0; ou cont = 20;. Ento o bloco executado e depois de cada
iterao, o contador incrementado de acordo com a expresso de incremento. Por
exemplo: i++ ou cont -= 2. Ento a expresso de condio avaliada: se a condio for
verdadeira, o bloco de instruo executado novamente e o ciclo recomea, se a

eddiesaliba2@yahoo.com

ICQ-45923544

19

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

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

A estrutura if...else a mais simples estrutura de controle da linguagem C. Esta


estrutura permite executar um entre vrios blocos de instrues. O controle de qual bloco ser
executado ser dado por uma condio (expresso lgica ou numrica).

5.5.1.

Deciso com um bloco:

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.

Deciso entre dois blocos:

if(condio){
bloco de instrues 1;
eddiesaliba2@yahoo.com

ICQ-45923544

20

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

}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.

Deciso de mltiplos blocos:

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

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

Exemplo: No trecho abaixo, uma determinada ao executada se o valor de num for


positivo, negativo ou nulo.
if(num > 0){
a = b;
}
else {
if(num < 0){
a = b + 1;
}
else {
a = b - 1;
}
}

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.

Sintaxe: Esta estrutura possui a seguinte sintaxe:


switch(expresso){
case rtulo_1:
conjunto de instrues 1
case rtulo_2:
conjunto de instrues 2
...
case rtulo_n:
conjunto de instrues 1
[default:
conjunto de instrues d]
}

eddiesaliba2@yahoo.com

ICQ-45923544

22

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

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. Comandos: break, continue, goto e a funo exit()


As instrues vistas anteriormente podem sofrer desvios e interrupes em sua
seqncia lgica normal atravs do uso certas instrues. As instrues que veremos a seguir
devem ser usadas com muita parcimnia, pois fogem da lgica estruturada tm a tendncia de
tornar um programa incompreensvel.

5.7.1.

eddiesaliba2@yahoo.com

break

ICQ-45923544

23

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

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

Esta instruo opera de modo semelhante a instruo break dentro de um lao de


repetio. Quando executada, ela pula as instrues de um lao de repetio sem sair do lao.
Isto , a instruo fora a avaliao da condio de controle do lao.
Exemplo: No trecho abaixo revemos um lao de repetio l valores para o clculo de
uma mdia. Se (val < 0.0) ento o programa salta diretamente para a condio de
controle, sem executar o resto das instrues.
printf("digite valores:");
eddiesaliba2@yahoo.com

ICQ-45923544

24

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

do{
printf ("valor:");
scanf ("%f", &val);
if(val < 0){
continue;

// se val negativo...
// ...salta para...

}
num++;

// se (val < 0) estas instrues

soma += val;

// no so executadas!

}while(val >= 0);

// ...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++;

// se (val < 0.0) estas instrues

soma += val;

// no so executadas!

eddiesaliba2@yahoo.com

ICQ-45923544

25

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

goto inicio;

// salta para 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

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

nota

8.4

6.9

4.5

4.6

7.2

Nesta lista, n representa um nmero de referncia e nota o nome do conjunto. Assim


podemos dizer que a 2a nota 6.9 ou representar nota[1] = 6.9
Declarao e inicializao de vetores
Sintaxe:
tipo nome[tam];
onde:
tipo o tipo dos elementos do vetor: int, float, double ...
nome o nome identificador do vetor.
tam o tamanho do vetor, isto , o nmero de elementos que o vetor pode armazenar.
Exemplo: Veja as declaraes seguintes:
int idade[100]; // declara um vetor chamado 'idade' do tipo
// 'int' que recebe 100 elementos.
float nota[25]; // declara um vetor chamado 'nota' do tipo
// 'float' que pode armazenar 25 nmeros.
char nome[80];

// declara um vetor chamado 'nome' do tipo


// 'char' que pode armazenar 80 caracteres.

Cada elemento do vetor referenciado pelo nome do vetor seguido de um ndice


inteiro. O primeiro elemento do vetor tem ndice 0 e o ltimo tem ndice tam-1.
Assim como podemos inicializar variveis (por exemplo: int j = 3;), podemos
inicializar vetores.
Sintaxe:
tipo nome[tam] = {lista de valores};

eddiesaliba2@yahoo.com

ICQ-45923544

27

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

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

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

6.9

2.7

4.9

4.5

6.4

8.6

4.6

8.9

6.3

7.2

3.6

7.7

Nesta tabela representamos as notas de 5 alunos em 3 provas diferentes (matemtica,


fsica e qumica). O nome nota o nome do conjunto, assim podemos dizer que a nota do 3o
aluno na 2a prova 6.4 ou representar nota[2,1] = 6.4

Declarao e inicializao de Matrizes


A declarao e inicializao de vetores de mais de uma dimenso ou matriz feita de
modo semelhante aos vetores unidimensionais.
Sintaxe:
tipo nome[tam_1][tam_2]...[tam_N]={{lista},{lista},...{lista}};
onde:
tipo o tipo dos elementos do vetor.
nome o nome do vetor.
[tam_1][tam_2]...[tam_N] o tamanho de cada dimenso do vetor.
{{lista},{lista},...{lista}} so as listas de elementos.
Exemplo: veja algumas declaraes e inicializaes de vetores de mais de uma
dimenso. Observe que a inicializao de nota gera a tabela do exemplo do incio desta
seo.
float nota[5][3] = {{8.4, 7.4, 5.7},
{6.9, 2.7, 4.9},
{4.5, 6.4, 8.6},
{4.6, 8.9, 6.3},
{7.2, 3.6, 7.7}};
int tabela[2][3][2] = {{{10, 15}, {20, 25}, {30, 35}},
{{40, 45}, {50, 55}, {60, 65}};
Neste exemplo, nota um vetor duas dimenses ([][]). Este vetor composto de 5
vetores de 3 elementos cada. J tabela vetor de trs dimenses ([][][]). Este vetor
composto de 2 vetores de 3 sub-vetores de 2 elementos cada.
eddiesaliba2@yahoo.com

ICQ-45923544

29

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

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

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

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.

Exemplo: Veja as seguintes instrues:


int *p;
float* s_1, s_2;
A primeira instruo declara um ponteiro chamado p que aponta para um inteiro. Este
ponteiro aponta para o primeiro endereo de um bloco de dois bytes. Sempre necessrio
declarar o tipo do ponteiro. Neste caso dizemos que declaramos um ponteiro tipo int.
A segunda instruo declara dois ponteiros (s_1 e s_2) do tipo float. Observe que o *
est justaposto ao tipo: assim todos os elementos da lista sero declarados ponteiros.

8.1.2.

Operadores & e *

Quando trabalhamos com ponteiros, queremos fazer duas coisas basicamente:


conhecer endereo de uma varivel;
conhecer o contedo de um endereo.
Para realizar estas tarefas a linguagem C nos proporciona dois operadores especiais:
o operador de endereo: &
o operador de contedo: *
O operador de endereo (&) determina o endereo de uma varivel (o primeiro byte do
bloco ocupado pela varivel). Por exemplo, &val determina o endereo do bloco ocupado pela
varivel val. Esta informao no totalmente nova pois j a usamos antes: na funo
scanf().
Exemplo: Quando escrevemos a instruo:
scanf("%d", &num);

eddiesaliba2@yahoo.com

ICQ-45923544

31

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

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;

// declarao de ponteiro e varivel

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;

// declarao de ponteiro e varivel

val = *p;

// atribuio

8.1.3.

Operaes elementares com ponteiros

Ponteiros so variveis especiais e obedecem a regras especiais. Deste modo, existem


uma srie de operaes (aritmticas, lgicas, etc.) envolvendo ponteiros que so permitidas e
outras no. A seguir so destacadas algumas operaes que podem ser executadas com
ponteiros.
A um ponteiro pode ser atribudo o endereo de uma varivel comum.
Exemplo: Observe o trecho abaixo:
...
int *p;
int s;
p = &s;

// 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

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

Exemplo: Observe o trecho abaixo:


...
float *p1, *p2, val;
p1 = &val; // p1 recebe o endereo de val...
p2 = p1;

// ...e p2 recebe o contedo de p2 (endereo de val)

Um ponteiro pode receber um endereo de memria diretamente. Um endereo um


nmero inteiro. Em geral, na forma hexadecimal (0x....). Nesta atribuio devemos,
em geral, forar uma converso de tipo usando typecast1 para o tipo de ponteiro
declarado.

Exemplo: Observe o trecho abaixo:


...
int *p1;
float p2;
p1 = 0x03F8;

// endereo da porta serial COM1

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

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

Exemplo: Observe o trecho abaixo:


...
double *p, *q, var;
p = &var
q = ++p;

// q aponta para o bloco seguinte ao ocupado por var

p = q - 5;// p aponta para o quinto bloco anterior a q


...
Dois ponteiros podem ser comparados (usando-se operadores lgicos) desde que
sejam de mesmo tipo.
Exemplo: Observe o trecho abaixo:
...
if(px == py){ // se px aponta para o mesmo bloco que py ...
if(px > py){

// se px aponta para um bloco posterior a py ...

if(px != py){ // se px aponta para um bloco diferente de py ...


if(px == NULL) // se px nulo...
...

8.1.4.

Alocao Dinmica de Memria

Os elementos de um vetor so armazenados seqencialmente na memria do


computador. Na declarao de um vetor, (por exemplo: int vet[10]) dito ao processador
reservar (alocar) um certo nmero de blocos de memria para armazenamento dos elementos
do vetor. Porm, neste modo de declarao, no se pode alocar um nmero varivel de
elementos.
A linguagem C permite alocar dinamicamente (em tempo de execuo), blocos de
memria usando ponteiros. Dada a ntima relao entre ponteiros e vetores, isto significa que
podemos declarar dinamicamente vetores de tamanho varivel. Isto desejvel caso
queiramos poupar memria.
Para a alocao de memria usamos a funo malloc() (memory allocation) da
biblioteca alloc.h. A funo malloc() reserva, seqencialmente, um certo nmero de
blocos de memria e retorna, para um ponteiro, o endereo do primeiro bloco reservado.
Sintaxe:
pont = (tipo *)malloc(tam);
onde:
eddiesaliba2@yahoo.com

ICQ-45923544

34

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

pont o nome do ponteiro que recebe o endereo do espao de memria alocado.


tipo o tipo do endereo apontado (tipo do ponteiro).
tam o tamanho do espao alocado: numero de bytes.
A sintaxe seguinte, porem, mais clara:
pont = (tipo*)malloc(num*sizeof(tipo));
onde:
num o nmero de elementos que queremos poder armazenar no espao alocado.
Exemplo: Se queremos declarar um vetor chamado vet, tipo int, com num elementos
podemos usar o trecho abaixo:
...
int *vet;

// declarao do ponteiro

vet = (int*)malloc(num*2); // alocao de num blocos de 2 bytes


...
ou ainda
...
int *vet; // declarao do ponteiro
vet = (int*) malloc(num * sizeof(int));
...
Caso no seja possvel alocar o espao requisitado a funo malloc() retorna a
constante simblica NULL.
Para liberar (desalocar) o espao de memria se usa a funo free(), cuja sintaxe a
seguinte:
free(pont);
onde:
pont o nome do ponteiro que contm o endereo inicial do espao de memria reservado.

8.1.5.

eddiesaliba2@yahoo.com

Ponteiros para Funes

ICQ-45923544

35

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

At agora usamos ponteiros para apontar para endereos de memria onde se


encontravam as variveis (dados). Algumas vezes necessrio apontar para funes, isto ,
apontar para o endereo de memria que contem o incio das instrues de uma funo.
Quando assim procedemos, dizemos que usaremos ponteiros para funes.
Um uso de ponteiros para funes passar uma funo como argumento de outra
funo. Mas tambm pode-se usar ponteiros para funes ao invs de funes nas chamadas
normais de funes.
Sintaxe:
tipo_r (*nome_p)(lista);
onde:
tipo_r o tipo de retorno da funo apontada.
nome_p o nome do ponteiro que apontara para a funo.
lista a lista de argumentos da funo.
Exemplo: Suponha que temos uma funo declarada como:
float fun(int a, int b){
...
}
O ponteiro correspondente ser:
float (*pt)(int, int);
Observe que o ponteiro para funo deve ser declarado entre parnteses. Observe
tambm que o ponteiro e a funo retornam o mesmo tipo de dado e que tem os mesmos
argumentos.
Sintaxe:
pont = &funcao;
onde:
pont o nome do ponteiro.
funcao o nome da funo.
Se um ponteiro contm o endereo de uma funo, ele pode ser usado no lugar da
chamada da funo.
Exemplo: O trecho de programa abaixo usa um ponteiro para chamar uma funo:
eddiesaliba2@yahoo.com

ICQ-45923544

36

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

float fun(int a,int b){


...
}
void main(void){
float temp;
float (*pt)(int,int);
pt = &fun;
temp = (*pt)(10,20); // eqivale a: temp = fun(10,20);
...
}

8.1.6.

Passando uma Funo como Argumento de Outra Funo

Outra utilizao de ponteiros para funes na passagem de uma funo como


argumento para outra funo. Para que isso ocorra necessitamos:
Na declarao da funo a ser passada:
i) Nada de especial, apenas a definio normal:
tipo nome_p(lista){
...
}

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

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

float grad(float x, float y, float (*p)(float,float)){


ii) Usar o ponteiro para funes nas chamadas da funo passada:
var = (*pt)(lista);

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

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

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

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

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

(Data Link Escape)

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

(End Transmission Block)

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

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

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

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

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

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

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

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

Entre os caracteres da tabela ASCII estendidos os mais teis esto, talvez, os


caracteres de desenho de quadro em linhas simples e duplas: os caracteres de B3h
at DAh (179 a 218 decimal). Como a visualizao deste conjunto difcil, o desenho
abaixo pode auxiliar nesta tarefa:

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

Figura B.1: Caracteres de desenho de quadro e seus respectivos cdigos ASCII.

eddiesaliba@yahoo.com

ICQ-45923544

44

Guia de Consulta Rpida da Linguagem C


Prof. Edwar Saliba Jnior

10.

Bibliografia

FUNDAMENTOS DE LINGUAGEM C: Tudo que voc precisa saber sobre C para no


passar vergonha!, Centro Tecnolgico de Mecatrnica. Caxias do Sul, RS, 1997.

eddiesaliba@yahoo.com

ICQ-45923544

45

Vous aimerez peut-être aussi