Vous êtes sur la page 1sur 77

18/05/15

curso bsico de C

Fundamentos da
Linguagem C
Prof. Carlos Gonalves
email: cavg@pop.com.br
DEINF - CCET - UFMA
So Lus, MA

Menu
TPICOS

18/05/15

curso bsico de C

Pr-Requisitos
Da aprovao
Bibliografia e recursos
Fundamentos de Linguagens
A Linguagem C
Estruturas de Dados Homogneas
Ponteiros
Anexos
Sobre
2003 Prof. Carlos Gonalves

Requisitos
Disciplina: Introduo Computao (60 h)
Acesso a um computador PC
Conhecimento de ambiente DOS/Windows
Compilador C instalado e rodando
Habilidade no uso de um PC
Livro sobre C ANSI ou equivalente
Cpias das Notas de Aulas e dos Textos do
Professor (vd. website do Prof.)

18/05/15

curso bsico de C

2003 Prof. Carlos Gonalves

Da Aprovao na Disciplina
Freqncia: Presena em 75% da carga
horria
Mdia igual ou acima de 7,0 nos testes feitos
As notas sero assim atribudas:

18/05/15

curso bsico de C

1a. Nota = 0,4 lista + 0,6 prova


2a. Nota = 0,4 lista + 0,6 prova
3a. Nota = 0,5 lista + 0,5 prova

Dedicao: mnimo de 2 h/semana


extraclasse no PC programando e
depurando exerccios da lista dada
2003 Prof. Carlos Gonalves

Datas das Avaliaes

18/05/15

curso bsico de C

1a.

Prova: dd/mmm/2003
2a. Prova: dd/mmm/2003
3a. Prova: dd/mmm/2003
Reposio: dd/mmm/2003
Final: dd/mm/2003!

2003 Prof. Carlos Gonalves

Bibliografia e Recursos: Livros

18/05/15

curso bsico de C

ARAKAKI, Reginaldo et alii. Fundamentos de programao: C tcnicas e aplicaes. Rio de Janeiro: LTC Editora.
KERNIGHAN, Brian e Ritchie, Dennis. C: A linguagem de
programao-Padro ANSI. Ed. Campus: Rio de Janeiro.
SCHILDT, Herbert. C - Completo e Total. So Paulo: Makron Books.
SCHILDT, Herbert. Turbo C - Guia do Usurio. So Paulo: McGrawHill.
GHEZZI, Carlo e Jazayeri, Mehdi. Conceitos de linguagem de
programao. Ed. Campus: Rio de Janeiro.
MARTIN, James & McClure, Clara. Tcnicas estruturadas e CASE.
So Paulo: Makron, McGraw-Hill.
YOURDON, Edward. Administrando tcnicas estruturadas. Rio de
Janeiro: Campus.
BURGESS, Mark e Hale-Evans, Ron. The GNU C Programming
Tutorial. Free Software Foundation, Inc.

2003 Prof. Carlos Gonalves

Bibliografia e Recursos: Internet

18/05/15

curso bsico de C

Sites na Internet
http://www.deinf.ufma.br/~cav ou ainda (para acesso
exterior a UFMA) http://cavg.vila.bol.com.br. Site do
Prof. da disciplina, inclui lista de exerccios, apostilas e
tutoriais, links, e outras informaes atualizadas.
http://www.portalc.nip.net. Site repleto de apostilas,
textos, tutoriais, programas-fontes e at compiladores
para a linguagem C e C++. Fundamental uma visita com
calma a fim de explorar bem o material. Possui links para
outros sites.
http://www.deinf.ufma.br/~cav/c-basico.zip. Link direto
para a apostila de Fundamentos de C, citada ao longo
desta apresentao, hospedada em servidor do
DEINF/UFMA.

2003 Prof. Carlos Gonalves

Objetivos do Curso
Conceituar as linguagens de programao.
Tipos de linguagens: alto e baixo nvel,
genricas e especificas.
Histrico da criao da linguagem e a
descrio das caractersticas mais
importantes da linguagem C.
Aspecto geral de um cdigo-fonte escrito em
C.
Elaborar programas-fontes em C com
pequeno grau de complexidade, compil-los e
depur-los.

18/05/15

curso bsico de C

2003 Prof. Carlos Gonalves

Sobre as Linguagens de
Programao

18/05/15

curso bsico de C

Um programa de computador um
conjunto de instrues que representam um
algoritmo para a resoluo de algum
problema. Estas instrues so escritas
atravs de um conjunto de cdigos
(smbolos e palavras). Este conjunto de
cdigos possui regras de estruturao
lgica e sinttica prpria. Diz-se que este
conjunto de smbolos e regras formam uma
linguagem de programao.
2003 Prof. Carlos Gonalves

18/05/15

curso bsico de C

L.P.: Exemplos de Cdigos:


BASIC
Pseudo-cdigo
leia(num)
para n de 1
at 10 passo 1
faa
tabnum*n
imprima(tab)
fim-para;

BASIC
10 input num
20 for n=1 to 10
step 1
30 let tab=num*n
40 print chr$
(tab)
50 next n

2003 Prof. Carlos Gonalves

10

18/05/15

curso bsico de C

L.P.: Exemplos de Cdigos:


FORTRAN
Pseudo-cdigo
leia(num)
para n de 1
at 10 passo 1
faa
tabnum*n
imprima(tab)
fim-para;

FORTRAN 77
read (num)
do 10 n=1,10
tab=num*n
write(tab)
10 continue

2003 Prof. Carlos Gonalves

11

18/05/15

curso bsico de C

L.P.: Exemplos de Cdigos:


Assembly
Pseudo-cdigo
leia(num)
para n de 1
at 10 passo 1
faa
tabnum*n
imprima(tab)
fim-para;

Assembly (Intel 8088)


MOV CX,0
IN AX,PORTA
MOV DX,AX
LABEL:
INC CX
MOV AX,DX
MUL CX
OUT AX, PORTA
CMP CX,10
JNE LABEL

2003 Prof. Carlos Gonalves

12

18/05/15

curso bsico de C

L.P.: Exemplos de Cdigos: C


Pseudo-cdigo
leia(num)
para n de 1
at 10 passo 1
faa
tabnum*n
imprima(tab)
fim-para;

C
scanf(&num);
for(n=1;n<=10;n+
+){
tab=num*n;
printf(\n %d,
tab);
};

2003 Prof. Carlos Gonalves

13

18/05/15

curso bsico de C

Tipos de Linguagens: Baixo Nvel

Baixo-Nvel: So linguagens voltadas para a


mquina, isto , so escritas usando-se as
instrues do microprocessador do computador.
So genericamente chamadas de linguagens
Assembly ou de montagem.

Vantagens: Os programas so executados com maior


velocidade de processamento e ocupam menor espao na
memria.
Desvantagens: Em geral, programas em Assembly tm
pouca portabilidade, isto , um cdigo gerado para um tipo
de processador no serve para outro. Cdigos Assembly no
so estruturados, tornando a programao bem mais difcil.

2003 Prof. Carlos Gonalves

14

18/05/15

curso bsico de C

Tipos de Linguagens: Alto Nvel

Alto-Nvel: So linguagens voltadas para o ser


humano. Em geral utilizam sintaxe estruturada
tornando seu cdigo mais legvel. Necessitam de
compiladores ou interpretadores para gerar as
instrues do microprocessador.

Vantagens: Por serem compiladas ou interpretadas, tm


maior portabilidade podendo ser executados em vrias
plataformas com pouqussimas modificaes. Em geral, a
programao torna-se mais fcil por causa do maior ou
menor grau de estruturao de suas linguagens.
Desvantagens: Em geral, as rotinas geradas (em linguagem
de mquina) so mais genricas e portanto mais complexas
e por isso so mais lentas e ocupam mais memria.

2003 Prof. Carlos Gonalves

15

Linguagens de A. N. Quanto a
Aplicao
As linguagens de alto nvel podem se
distinguir ainda quanto a sua
aplicao:
Genricas: como C, Pascal e Basic;
Especficas: como Fortran (clculo
matemtico), GPSS (simulao), LISP
(inteligncia artificial) ou CLIPPER
(banco de dados).

18/05/15

curso bsico de C

2003 Prof. Carlos Gonalves

16

A Linguagem C: Consideraes

18/05/15

curso bsico de C

uma linguagem de alto nvel, genrica. Foi


desenvolvida por programadores para
programadores, tendo como meta caractersticas
de flexibilidade e portabilidade. O C uma
linguagem que nasceu juntamente com o advento
da teoria de linguagem estruturada e do
computador pessoal. Assim, tornou-se rapidamente
uma linguagem popular entre os programadores.
O C foi usado para desenvolver o sistema
operacional UNIX, e hoje est sendo usada para
desenvolver novas linguagens, entre elas a
linguagem C++ e Java.
2003 Prof. Carlos Gonalves

17

A Linguagem C: Caractersticas

18/05/15

curso bsico de C

C uma linguagem de alto nvel com uma sintaxe


bastante estruturada e flexvel tornando sua
programao bastante simplificada.
Programas em C so compilados, gerando
programas executveis.
C compartilha recursos tanto de alto quanto de
baixo nvel, pois permite acesso e programao
direta do microprocessador. Com isto, rotinas cuja
dependncia do tempo crtica, podem ser
facilmente implementadas usando instrues em
Assembly. Por esta razo o C a linguagem
preferida dos programadores de aplicativos.
2003 Prof. Carlos Gonalves

18

A Linguagem C: Caractersticas

18/05/15

curso bsico de C

C uma linguagem estruturalmente simples e de


grande portabilidade. O compilador C gera cdigos
mais enxutos e velozes do que muitas outras
linguagens.
Embora estruturalmente simples (poucas funes
intrnsecas) o C no perde funcionalidade pois
permite a incluso de uma farta quantidade de
rotinas do usurio. Os fabricantes de compiladores
fornecem uma ampla variedade de rotinas prcompiladas em bibliotecas.

2003 Prof. Carlos Gonalves

19

Linguagem C: Histrico-1/2

18/05/15

curso bsico de C

1970: Denis Ritchie desenha uma linguagem a


partir do BCPL nos laboratrios da Bell
Telephones, Inc. Chama a linguagem de B.
1978: Brian Kerningham junta-se a Ritchie para
aprimorar a linguagem. A nova verso chama-se C.
Pelas suas caractersticas de portabilidade e
estruturao j se torna popular entre os
programadores.
~1980: A linguagem padronizada pelo American
National Standard Institute: surge o ANSI C.

2003 Prof. Carlos Gonalves

20

Linguagem C: Histrico-2/2

18/05/15

curso bsico de C

~1990: A Borland International Co, fabricante de


compiladores profissionais escolhe o C e o Pascal
como linguagens de trabalho para o seu Integrated
Development Enviroment (Ambiente Integrado de
Desenvolvimento): surge o Turbo Pascal e o
Turbo C para DOS.
~1992: C se torna ponto de concordncia entre
tericos do desenvolvimento da teoria de Object
Oriented Programming (programao orientada a
objetos): surge ento o C++.

2003 Prof. Carlos Gonalves

21

Estrutura dos programas em C

18/05/15

curso bsico de C

Um

cabealho contendo as diretivas


de compilador onde se definem o
valor de constantes simblicas,
declarao de variveis, incluso de
bibliotecas, declarao de rotinas, etc.
Um bloco de instrues principal e
outros blocos de rotinas.
Documentao do programa: so os
comentrios.
2003 Prof. Carlos Gonalves

22

Exemplo: Um Programa em C-1/3


/* *******************************************************************

18/05/15

curso bsico de C

Programa: e0101.cpp
Proposito: Calcula a raiz quadrada de um numero real positivo
maior que 1.0 com precisao PREC (0.00001).
Ultima Revisao: 16/06/97
******************************************************************* */
#define MAX 100

// numero maximo de iteracoes

#define PREC 0.000001


void main(){

// precisao da raiz

// inicia programa principal...

float num

// numero do qual se quer saber a raiz quadrada

float raiz;
float inf, sup;

// aproximacao para raiz de num


// intervalo que contem a raiz procurada

2003 Prof. Carlos Gonalves

23

Exemplo: Um Programa em C-2/3


do{ printf("\n\nDigite um numero real positivo: ");

18/05/15

curso bsico de C

scanf("%f",&num;} while (num <= 1.0); // aceita somente num >1.0


inf = 0.0;
sup = num;

// inicializa intervalo inicial de busca


i = 0;

// inicializa contador

do{ // faca...
i = i + 1;

// incrementa contador

raiz = 0.5 * (inf + sup); // faz estimativa de raiz


if(raiz*raiz > num){
sup = raiz;
}else{
inf = raiz; };

// se chute foi alto...


// baixa limite superior
// ...senao...

// sobe limite inferior

} while( (sup-inf) > PREC && i < MAX); // enquanto intervalo gde

2003 Prof. Carlos Gonalves

24

Exemplo: Um Programa em C-3/3


raiz = 0.5 * (inf + sup);

// estima a raiz

18/05/15

curso bsico de C

printf("Raiz: %f +- %f",raiz,PREC);

// imprime o valor da raiz

}; // fim do programa1

Observaes: Note-se que os comentrios tm duas apresentaes, a


saber:
/* esta e uma linha de comentrio em C */
// este e um comentrio valido apenas em C++

2003 Prof. Carlos Gonalves

25

C: Normas Gerais: Conjunto de


Caracteres Vlidos

18/05/15

curso bsico de C

Um programa-fonte em C um texto no
formatado escrito em um editor de textos usando
um o conjunto padro de caracteres ASCII. A
seguir esto os caracteres utilizados em C:
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
+ - * / \ = | & ! ? # % ( ) { } [ ] _
. , : < >
2003 Prof. Carlos Gonalves

26

C: Normas Gerais (cont.)

18/05/15

curso bsico de C

Formao de identificadores: Ao contrrio de outras


linguagens, C faz distino na capitalizao dos
identificadores de variveis usados em um programa, i.e., os
identificadores soma, Soma e SOMA so distintos para o
compilador 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 e uma linha de comentrio em
C */
// este e um comentrio valido apenas em C++

2003 Prof. Carlos Gonalves

27

C: Normas Gerais (cont.)

18/05/15

curso bsico de C

Diretivas de Compilao : so comandos que so


processados durante a compilao do programa. Estes
comandos so genericamente chamados de diretivas de
compilao e informam ao compilador C quais so as
constantes simblicas usadas no programa e quais
bibliotecas devem ser anexadas ao programa executvel.
A diretiva #include diz ao compilador para incluir na
compilao do programa outros arquivos. Geralmente estes
arquivos contem bibliotecas de funes ou rotinas do usurio.
A diretiva #define diz ao compilador quais so as constantes
simblicas usadas no programa.
Declarao de variveis: as variveis devem ser declaradas no
inicio do programa. Estas variveis podem ser de vrios tipos:
char (literal/string), int (inteiro), float (real de simples
preciso) e outras que sero vistas ainda no cap.02 da apostila.

2003 Prof. Carlos Gonalves

28

C: Normas Gerais (cont.)

18/05/15

curso bsico de C

Entrada e sada de dados: existem vrias


maneiras de fazer a leitura e escrita de
informaes. No exemplo apresentado, printf
uma funo de escrita na tela e scanf uma
funo de leitura de teclado.
Estruturas de controle: A linguagem C permite
uma ampla variedade de estruturas de controle de
fluxo de processamento. Estas estruturas sero
vistas em detalhes nos captulos 4 e 5 da apostila
no website. Duas estruturas bsicas (deciso e
repetio) so muito semelhantes s estruturas
usadas nas pseudo-linguagens algortmicas:
2003 Prof. Carlos Gonalves

29

C: Normas Gerais: Estruturas de


Controle: Deciso (if-else)
Pseudo-linguagem
se condio ento
bloco1
seno
bloco2
fim-se;

18/05/15

curso bsico de C

C
if(condio){
bloco 1;
}else{
bloco 2;
};

Note-se que o (;) um


terminador de
comandos em C.

2003 Prof. Carlos Gonalves

30

C: Normas Gerais: Estrutura de


Controle: Repetio (while)
Pseudo-linguagem
enquanto condio
faa bloco
fim-enquanto;

C
while(condio){
bloco;
};

18/05/15

curso bsico de C

Note-se que enquanto


condio for true (ou
1, ou no zero) o lao
ser feito, s findando
quando condio for
false (ou zero).
2003 Prof. Carlos Gonalves

31

C: Normas Gerais: Estrutura de


Controle: Repetio (for)-1/3
Pseudo-linguagem
para var=vi at vf passo p faa
bloco
fim-para;

18/05/15

curso bsico de C

C
for(inicializao;condio;incremento){
bloco;
};

2003 Prof. Carlos Gonalves

32

C: Normas Gerais: Estrutura de


Controle: Repetio (for)-2/3

18/05/15

curso bsico de C

Significado das expresses no lao for:


inicializao: expresso que inicia a var. de
controle ou a var. testada em condio, e.g.
index=1.
condio: avaliada no comeo de cada ciclo e
o lao s executado se expresso true,
e.g., index<=20.
incremento: esta expr. usada para alterar o
valor da var. de controle. Em C ela pode ser
qualquer coisa. Exemplos: index++, index
*= 20, ou index /= 2.3.
2003 Prof. Carlos Gonalves

33

C: Normas Gerais: Estrutura de


Controle: Repetio (for)-3/3

18/05/15

curso bsico de C

Exemplo de um lao que imprime inteiros


de 1 a 10:
int my_int;
for (my_int = 1; my_int <= 10;
my_int++)
{
printf ("%d ", my_int);
printf("\n");
}
2003 Prof. Carlos Gonalves

34

C: Normas Gerais: A flexibilidade


do lao for-1/2

18/05/15

curso bsico de C

O construto for do C altamente verstil, podendose usar inclusive comandos vazios no cabealho.
Por exemplo, a omisso das partes
inicializao e incremento, cria
essencialmente um lao while.
Exemplo:
int my_int = 1;
for ( ; my_int <= 20; )
{
printf ("%d ", my_int);
my_int++;
}

2003 Prof. Carlos Gonalves

35

C: Normas Gerais: A flexibilidade


do lao for-2/2

18/05/15

curso bsico de C

Pode-se combinar vrios comandos nas partes da


inicializao e do incremento do lao for, usando-se
para isto o operador vrgula (,), o que produz um lao peculiar.
Exemplo:
#include <stdio.h>
int main(){
int up, down;
for (up = 0, down=10; up < down; up++, down--)
{
printf("up = %d, down= %d\n",up,down);
}
return 0;
}

2003 Prof. Carlos Gonalves

36

C: Funes (ou sub-programas)

18/05/15

curso bsico de C

As funes pr-definidas (built-in), so inerentes a


maioria das linguagens e no C temos vrias, tais
como sqrt(), toupper(), getch() ou
putchar().
Estas funes j so providenciadas pelas
bibliotecas-padro do C e so inseridas pelo
compilador quando e onde necessrias.
As funes do usurio permitem ao programador
separar o cdigo por seu propsito e torna esta
seo do cdigo reusvel, i.e., permite que esta
seo possa ser chamada em diferentes contextos.
2003 Prof. Carlos Gonalves

37

C: Funes do Usurio:
Declarao

18/05/15

curso bsico de C

De modo formal, a sintaxe de uma funo a


seguinte:

tipo_de_retorno nome_da_funo(tipo1 arg1,


tipo2 arg2, ...){
[bloco de instrues da funo]
return(valor_retorno);
}
Exemplo de uma funo:
float media2(float a, float b){ // funo
float med;
med = (a + b) / 2.0;
return(med);
}

2003 Prof. Carlos Gonalves

38

C: Funes do Usurio:
Chamada ou Ativao

18/05/15

curso bsico de C

Depois de definirmos um funo, podemos us-la


dentro de um programa qualquer. Dizemos que
estamos fazendo uma chamada ou ativao da
funo.
Exemplo: No exemplo abaixo chamamos a funo
media2() dentro do programa principal:

void main(){
float num1, num2, med;
puts(Digite dois nmeros:);
scanf(%f %f, &num1, &num2);
printf(\nA media dos numeros e %f,
media2(num1,num2));}

2003 Prof. Carlos Gonalves

39

C: Funes do Usurio:
Declarada Antes de main()

18/05/15

curso bsico de C

#include <conio.h>
#include <stdio.h>
float media2(float a, float b){
float med;
med = (a + b) / 2.0;
return(med);}

Funo
declarada e
definida pelo
usurio.

void main(){
float num1, num2, med;
puts("Digite dois numeros: ");
scanf("%f %f", &num1, &num2);
med = media2(num1, num2);
// chamada a funcao
printf("\nA media destes numeros eh %f",med);}

2003 Prof. Carlos Gonalves

40

C: Funes do Usurio:
Declarada Antes de main()-(cont.)

18/05/15

curso bsico de C

A localizao das funes num cdigo C


podem variar. Existem basicamente duas
posies possveis para escrevermos o
corpo de uma funo: antes ou depois do
programa principal. Podemos ainda
escrever uma funo no mesmo arquivo
do programa principal ou em um arquivo
separado. Para maiores detalhes veja
cap.06 da apostila Fundamentos de C,
presente no site do Prof.
2003 Prof. Carlos Gonalves

41

Estruturas de Dados
Homogneas: Vetores
Vetores so coleo de objetos que tm
mesma natureza, i.e., todos seus
elementos possuem um mesmo tipo bsico.
De fato, um vetor pode ser visto
conceitualmente como sendo equivalente a
uma matriz de dimenso 1 x m, onde m.
So chamados ainda de array, em ingls.
Os elementos de um vetor so identificados
pelo nome seguido de ndice entre
colchetes.

18/05/15

curso bsico de C

2003 Prof. Carlos Gonalves

42

Estruturas de Dados
Homogneas: Vetores-(cont.)

18/05/15

curso bsico de C

Tem-se, ento na memria o seguinte


arranjo:
...
li

li+1

li+2

ls-1

ls

li = limite inferior = 0, ls= limite superior,


O nmero de elementos num vetor em C
dado por ls+1, pois o primeiro ndice
sempre 0!
2003 Prof. Carlos Gonalves

43

Estruturas de Dados
Homogneas: Vetores-(cont.)

18/05/15

curso bsico de C

Exemplo: Vetor de notas de uma turma:


notas

7,0

6,7

7,8

...

8,0

6,6

21

22

A sintaxe para a declarao de um vetor a seguinte:


tipo nome[tam];
Exemplo: float notas[22];
Obs.: Como exerccio, implementar em C, o algoritmo
de classificao da bolha visto na transparncia do
Prof.

2003 Prof. Carlos Gonalves

44

Vetores: Iniciao - (cont.)

18/05/15

curso bsico de C

Veja exemplos de declaraes e


inicializaes de vetores a seguir.

int dia[7] = {12,30,14,7,13,15,6};


float notas[5] =
{8.4,6.9,4.5,4.6,7.2};
char vogal[5] = {'a, e, i,
o, u'};

Programa Exemplo: O arquivo e0701.cpp


da apostila contm um programa que
mostra o uso de vetores: declarao,
iniciao, leitura e escrita de elementos...
2003 Prof. Carlos Gonalves

45

Vetores: Observaes

18/05/15

curso bsico de C

Na linguagem C, devemos ter cuidado com os limites


de um vetor/matriz. Embora na sua declarao,
tenhamos definido o tamanho de um vetor/matriz, o
C no faz nenhum teste de verificao de acesso a
um elemento dentro do vetor/matriz.
Por exemplo se declaramos um vetor/matriz 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 limites devem ser feitos logicamente
dentro do programa, pelo programador.

2003 Prof. Carlos Gonalves

46

Matrizes: Conceito e Definio

18/05/15

curso bsico de C

Matrizes

so coleo de objetos que


tm mesma natureza, de forma similar
aos vetores. De fato, uma matriz pode
ser vista conceitualmente como sendo
equivalente a uma matriz
multidimensional, semelhante ao que
ocorre na matemtica. Mais ainda,
pode-se ver uma matriz como uma
coleo de vetores, i.e. um vetor de
vetores.
2003 Prof. Carlos Gonalves

47

Matrizes: Declarao

18/05/15

curso bsico de C

A sintaxe para declarao de vetores


multidimensionais :

tipo nome[tam_1][tam_2]...[tam_N;

onde:

tipo o tipo dos elementos do vetor.


nome o nome (identificador) do vetor.
[tam_1][tam_2]...[tam_N] o tamanho de cada
dimenso do vetor.

Os ndices dos vetores multidimensionais, tambm


comeam em 0. Por exemplo: vet[0][0], o
primeiro elemento do vetor.
2003 Prof. Carlos Gonalves

48

Matrizes: Exemplo de Declarao

18/05/15

curso bsico de C

Seja:
float notas[3][5];
Isto resultar na seguinte estrutura bidimensional
na RAM (teoricamente falando):
notas
0,0

0,1

0,2

0,3

0,4

1,0

1,1

1,2

1,3

1,4

2,0

2,1

2,2

2,3

2,4

2003 Prof. Carlos Gonalves

49

Matrizes: Iniciao imediata

18/05/15

curso bsico de C

Seja: float notas[3][5]=


{{8.4,7.4,5.7,5.6,7.7},
{6.9,2.7,4.9,4.5,8.7},

{4.5,6.4,8.6,6.9,9.1}};
Isto
estrutura
bidimensional:
0,0resultar
0,1 na seguinte
0,2
0,3
0,4
7.4
5.7
5.6
7.7
notas8.4
1,0

1,1

6.9
2,0

1,2

2.7
2,1

4.5

1,3

4.9
2,2

6.4

1,4

4.5
2,3

8.6

8.7
2,4

6.9

9.1

2003 Prof. Carlos Gonalves

50

Vetores: Passagem para as


Funes

18/05/15

curso bsico de C

Sintaxe: Na passagem de vetores para funes


usamos a seguinte sintaxe:

onde:

nome_da_funo(nome_do_vetor)
nome_da_funo o nome da funo que se est
chamando.

nome_do_vetor o nome do vetor que


queremos passar. Indicamos apenas o nome do
vetor, sem ndices!

2003 Prof. Carlos Gonalves

51

Vetores: Passagem para as


Funes (cont.)

Sintaxe: Na declarao de funes que recebem vetores:

18/05/15

curso bsico de C

tipo_funo nome_funo(tipo_vetor nome_vetor[])


{

... }
onde:

tipo_funo o tipo de retorno da funo.


nome_funo o nome da funo.
tipo_vetor o tipo de elementos do vetor.
nome_vetor o nome do vetor. Observe que depois do nome
do vetor temos um ndice vazio [] para indicar que estamos
recebendo um vetor.

Programa Exemplo: O arquivo e0704.cpp na apostila


contm um programa que mostra a passagem de vetores
para funes.

2003 Prof. Carlos Gonalves

52

Matrizes: Passagem para as


Funes

18/05/15

curso bsico de C

A sintaxe para passagem de vetores


multidimensionais para funes semelhante a
passagem de vetores unidimensionais: chamamos
a funo e passamos o nome do vetor, sem
ndices. A nica mudana ocorre na declarao de
funes que recebem vetores:
Sintaxe: Na declarao de funes que recebem
vetores:

tipo_f funo(tipo_v vetor[tam_1][tam_2]...


[tam_n]){...}

Observe que depois do nome do vetor temos os


ndices contendo os tamanhos de cada dimenso
do vetor.

2003 Prof. Carlos Gonalves

53

Matrizes: Passagem para as


Funes (cont.)

18/05/15

curso bsico de C

Exemplo: Observe a declarao da funo:


int max(int vetor[5][7],int N, int
{ // declarao da funo
...}

M)

E a chamada da funo:
void main(){
int valor[5][7]; //declarao do vetor
...
med = media(valor, n); //passagem do
vetor para a funo
... }

2003 Prof. Carlos Gonalves

54

Matrizes: Passagem para as


Funes (cont.)

18/05/15

curso bsico de C

Programa Exemplo: O arquivo


e0706.cpp da apostila contm um
programa que mostra a manipulao de
vetores bidimensionais: leitura de
elementos, escrita, passagem para
funes, etc. Assim como os demais
exemplos deve ser estudado e assimilado
em sua integridade.

2003 Prof. Carlos Gonalves

55

Ponteiros: Definio e Conceito

18/05/15

curso bsico de C

Ponteiros so variveis
que contm
endereos. Neste
sentido, estas
variveis apontam
para algum
determinado endereo
da memria. Em geral,
o ponteiro aponta para
o endereo de alguma
varivel j declarada
no programa.

Endereos

1000

Varivel

1003

1001
1002
1003
1004
1005
Memria

2003 Prof. Carlos Gonalves

56

Ponteiros: Declarao

18/05/15

curso bsico de C

Quando declara-se um ponteiro, deve-se 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.
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.
2003 Prof. Carlos Gonalves

57

Ponteiros: Declarao (cont.)

18/05/15

curso bsico de C

Sintaxe: A sintaxe da declarao de um ponteiro


a seguinte:
tipo_ptr *nome_ptr_1;

ou

tipo_ptr* nome_ptr_1, nome_ptr_2, ...;


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 (os nomes dos ponteiros obedecem as mesmas
regras da seo 2.2.1)

2003 Prof. Carlos Gonalves

58

Ponteiros: Declarao (cont.)

Exemplo: Veja as seguintes instrues:

18/05/15

curso bsico de C

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

2003 Prof. Carlos Gonalves

59

Ponteiros: Operadores & e *

18/05/15

curso bsico de C

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 providencia dois operadores especiais:

o operador de endereo: &


o operador de contedo: *

2003 Prof. Carlos Gonalves

60

Ponteiros: Operador &

18/05/15

curso bsico de C

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 escreve-se a instruo:

scanf("%d", &num);

estamos nos referimos 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".

2003 Prof. Carlos Gonalves

61

Ponteiros: Operador & - Exemplo

18/05/15

curso bsico de C

Exemplo: Para se atribuir a um ponteiro o


endereo de uma varivel escreve-se:

int *p, val=5;


varivel
p = &val;

// declarao de ponteiro e
// atribuio

Observe que o ponteiro p deve ser declarado


anteriormente com o mesmo tipo da varivel para a
qual ele deve apontar.
Obs.: O operador endereo (&) somente pode ser
usado em uma nica varivel. No pode ser usado
em expresses como, por exemplo, &(a+b).
2003 Prof. Carlos Gonalves

62

Ponteiros: Operador * - Exemplo

18/05/15

curso bsico de C

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
ponteiro e varivel
val = *p;
// atribuio

de

Obs.: O operador contedo (*) somente pode ser


usado em variveis ponteiros.

2003 Prof. Carlos Gonalves

63

Ponteiros: Operadores & e *Dicas


Programa Exemplo: O arquivo
e0802.cpp contm um programa que
mostra como se manipulam ponteiros e
variveis. Ainda, como se transportam
informaes entre ponteiros e variveis.
elucidativo ler os tpicos 8.3-Operaes
elementares ponteiros e 8.4-Ponteiros,
endereos e funes da apostila, a fim de
familiarizar-se com os ponteiros.

18/05/15

curso bsico de C

2003 Prof. Carlos Gonalves

64

Ponteiros e Vetores

18/05/15

curso bsico de C

Em C, o nome de um vetor tratado como o


endereo de seu primeiro elemento. Assim ao se
passar o nome de um vetor para uma funo est se
passando o endereo do primeiro elemento de um
conjunto de endereos de memria.
Por exemplo, se vet um vetor, ento vet e
&vet[0] representam o mesmo endereo. E mais,
podemos acessar o endereo de qualquer elemento do
vetor do seguinte modo: &vet[i] e equivalente a
(vet + i). Aqui deve-se ressaltar que (vet + i)
no representa uma adio aritmtica normal mas o
endereo do i-simo elemento do vetor vet (endereo
contado a partir do endereo inicial vet[0]).

2003 Prof. Carlos Gonalves

65

Ponteiros e Vetores (cont.)

18/05/15

curso bsico de C

Do mesmo modo que se pode acessar o endereo


de cada elemento do vetor por ponteiros, tambm
se pode acessar o valor de cada elemento usando
ponteiros. Assim vet[i] equivalente a *(vet +
i). Aqui se usa o operador contedo (*) aplicado
ao endereo do i-simo elemento do vetor vet.
Programa Exemplo: O arquivo e0807.cpp
contm um programa que mostra a equivalncia
entre ponteiros e vetores.

2003 Prof. Carlos Gonalves

66

Ponteiros e Strings
Em C, uma string um vetor
unidimensional de elementos caracteres
ASCII, sendo o ultimo destes elementos o
caracter especial \0.
Sintaxe: As duas maneiras mais comuns de
declararmos uma string so:

18/05/15

curso bsico de C

char nome[tam]; ou,


char *nome;

onde:

nome o nome do vetor de caracteres e,


tam seu tamanho.

2003 Prof. Carlos Gonalves

67

Ponteiros e Strings (cont.)

18/05/15

curso bsico de C

Observe que sendo um vetor, uma string pode ser


declarada tambm como um ponteiro. Alis a
segunda declarao representa justamente isto.
Sabendo isto podemos realizar uma grande
variedade de manipulaes com strings e
caracteres. Existe uma biblioteca padro C
chamada string.h que providencia algumas
funes de manipulao de strings muito teis.
Programa Exemplo: O arquivo e0808.cpp
contm um programa que mostra algumas
operaes usando-se strings (vetores e ponteiros).
2003 Prof. Carlos Gonalves

68

Ponteiros: Sugestes Finais


A fim de complementar as informaes
contidas nesta apresentao, sugere-se a
leitura dos tpicos finais da apostila, 8.6Alocao Dinmica de Memria e 8.7Ponteiros para Funes .
necessrio sedimentar os conhecimentos
adquiridos, pondo-os em prtica num
computador, ao elaborar-se programas para
os exerccios da lista dada (vd. site) e
estudando os programas-exemplos dados
na apostila.

18/05/15

curso bsico de C

2003 Prof. Carlos Gonalves

69

18/05/15

curso bsico de C

Anexos (hide text)

Anexos
Glossrio
Sobre o Autor

2003 Prof. Carlos Gonalves

70

Glossrio: ASCII
Acrnimo de American Standard Code for
Information Interchange. Um esquema de
codificao que atribui valores numricos
s letras, nmeros sinais de pontuao e
alguns smbolos especiais.
O ASCII tem 256 cdigos divididos em dois
conjuntos: bsico e estendido com 128
cdigos cada.
O ASCII permite que computadores e
programas troquem informaes entre si.

18/05/15

curso bsico de C

Voltar

2003 Prof. Carlos Gonalves

71

Glossrio: Meta-Programas

18/05/15

curso bsico de C

Programas-tradutores:

Interpretadores fazem a interpretao de cada


instruo do programa fonte executando-a
dentro de um ambiente de programao: Basic
e AutoLISP so exemplos.
Compiladores fazem a traduo de todas as
instrues do programa fonte gerando um
programa executvel. Estes programas
executveis (*.exe, *.bin) podem ser
executados fora dos ambientes de
programao: C e Pascal so exemplos.
Voltar

2003 Prof. Carlos Gonalves

72

Glossrio: Sintaxe Estruturada e


P. Estruturada

18/05/15

curso bsico de C

Pode-se considerar como precursores da Programao


Estruturada (PE) dois pesquisadores, C. Bohm e G. Jacopini,
que publicaram um paper, primeiro na Itlia e depois na
Communications of the ACM, USA, demonstrando que
qualquer programa poderia ser construdo usando-se apenas
3 estruturas bsicas: seqncia, seleo e iterao.
A expresso programao estruturada foi usada pela 1
vez em 1969 por Edsger Dijkstra no paper Structured
programming, in Software Engineering 1969, Bruxelas:
NATO Scientific Affairs Division. O comando GOTO favorecia
a desorganizao dos programas, alm de obscurecer sua
estrutura, j que aumentava a distncia entre a
representao esttica do programa e seu processo
dinmico, gerando um baixo nvel de semntica.
Voltar

2003 Prof. Carlos Gonalves

73

Glossrio: Objetivos da PE

18/05/15

curso bsico de C

Resolver a crise de software, proporcionando uma disciplina


de programao, pois:
Os programas at ento eram feitos ad hoc, dificultando seu
uso em vrios sistemas de computadores.
Os programas at ento eram feitos ad hoc, dificultando seu
uso em vrios sistemas de computadores.
Os programas at ento eram feitos ad hoc, dificultando seu
uso em vrios sistemas de computadores.
Produo de software era onerosa.
Os testes de programas ocupavam cerca de 50% do projeto de
software.
Os erros so mais crticos nos sistemas atuais, pois o usurio
a partir da dcada de 70, tornou-se menos tolerante a software
com falhas, o que no occorria no incio da era da
computao.

2003 Prof. Carlos Gonalves

74

Nmero de
erros
descobertos
por unidade de
tempo

18/05/15

curso bsico de C

Glossrio: Objetivos da PE
Curva de
deteco de
erros

tempo

Os erros duravam para


sempre em grandes
sistemas, e.g., numa
estatstica da IBM, um de
seus engenheiros informou
que cada nova verso do
OS/360 da IBM possua mil
erros.
A manuteno tornou-se
muito cara, pois cerca de
50%, ou mais, do
oramento das
organizaes iam para
manuteno dos sistemas
existentes.

2003 Prof. Carlos Gonalves

75

Glossrio: Objetivos da PE
Melhorar a confiabilidade dos programas
Aumentar a legibilidade dos programas
Minimizar a complexidade
Simplificar a manuteno
Aumentar a produtividade do programador
Estabelecer uma metodologia de
programao
Reduzir o custo de programao

18/05/15

curso bsico de C

2003 Prof. Carlos Gonalves

76

18/05/15

curso bsico de C

Sobre o autor

Esta apresentao foi


elaborada e desenvolvida
pelo Prof. Carlos
Gonalves (DEINF/UFMA),
a quem pertence todos os
direitos autorais.

Webpage:
www.deinf.ufma.br/~cav;
http://cavg.vila.bol.com.br;
(mirror)

emails:
cavg@bol.com.br;
cavg@pop.com.br;

2003 Prof. Carlos Gonalves

77

Vous aimerez peut-être aussi