Fundamentos da Programação
1.2 – Estruturas de dados Gilson Gonçalves de Lima
11/04/2009
Gilson Gonçalves de Lima
[email protected]
1
Sumário 1 - Introdução 2 - Constantes,Variáveis e Tipos 3 - Ponteiros 4 - Arrays 5 - Estruturas 6 - Referência Bibliográfica
11/04/2009
Gilson Gonçalves de Lima
[email protected]
2
1 - Introdução Nesta aula veremos: como os dados constantes e variáveis são manipulados pela linguagem C. O que são constantes inteiras, reais, caracteres e strings. Quais são as regras de atribuição de nomes a variáveis e quais são os tipos de dados que o C pode manipular. Como são declaradas as variáveis e as constantes simbólicas usadas em um programa. 11/04/2009
Gilson Gonçalves de Lima
[email protected]
3
2 - Constantes, Variáveis e Tipos O C possui quatro tipos básicos de constantes: inteiras, de ponto flutuante, caracteres e strings. Constantes inteiras e de ponto flutuante representam números de um modo geral. Caracteres e strings representam caracteres e agrupamentos de caracteres, respectivamente.
11/04/2009
Gilson Gonçalves de Lima
[email protected]
4
2.1.1 Constantes inteiras Uma constante inteira é um número de valor inteiro. Números inteiros podem ser escritos no formato decimal (base 10), hexadecimal (base 16) ou octal (base 8). Não há suporte para números binários
11/04/2009
Gilson Gonçalves de Lima
[email protected]
5
2.1.2 Constantes de ponto flutuante Números reais (não inteiros) são representados em base 10, por números com um ponto decimal e (opcionalmente) um expoente. Um número de ponto flutuante pode ser escrito em notação científica. Neste caso o x10 é substituído por e ou E. O número 1.23e4 representa 1.23 x 104 ou 12300.
11/04/2009
Gilson Gonçalves de Lima
[email protected]
6
2.1.3 Constantes caracteres Uma constante caractere é uma letra ou símbolo colocado entre aspas simples. Exemplo: Abaixo estão representados algumas constantes caracteres. ’a’ ’b’ ’X’ ’&’ ’{’
11/04/2009
Gilson Gonçalves de Lima
[email protected]
7
2.1.3 Constantes caracteres
Embora sejam visualizados como letras e símbolos as constantes caracteres são armazenadas internamente pelo computador como um número inteiro entre 0 e 255. O caractere ’A’ por exemplo, tem valor 65.
11/04/2009
Gilson Gonçalves de Lima
[email protected]
8
2.1.3 Constantes caracteres
Tabela ASCII
11/04/2009
Gilson Gonçalves de Lima
[email protected]
9
2.1.4 Constantes strings Uma constante string consiste de um conjunto de caracteres colocados entre aspas duplas. Exemplo: “isto é uma string”
11/04/2009
Gilson Gonçalves de Lima
[email protected]
10
2.2.1 Regras de sintaxe Os identificadores (nomes de variável) devem seguir as seguintes regras de construção: Os identificadores devem começar por uma letra (a - z , A - Z) ou um underscore ( _ ). O resto do identificador deve conter apenas letras, underscores ou dígitos (0 - 9). Em C, letras maiúsculas são diferentes de letras minúsculas. Esta propriedade é chamada de case sensitivity. 11/04/2009
Gilson Gonçalves de Lima
[email protected]
11
2.2.2 Palavras reservadas Existem certos nomes que não podem ser usados como identificadores. São chamados de palavras reservadas e são de uso restrito da linguagem C (comandos, estruturas, declarações, etc. Por exemplo: Case, class, public, protected
11/04/2009
Gilson Gonçalves de Lima
[email protected]
12
2.3 Tipos de dados Em C, como na maioria das linguagens, os dados são divididos em tipos: inteiro, real, caractere, etc. Esta divisão se deve basicamente ao número de bytes reservados para cada dado. Cada tipo de dado possui um intervalo de valores permitidos.
11/04/2009
Gilson Gonçalves de Lima
[email protected]
13
2.3.1 Tipos básicos
Abaixo, segue uma lista dos tipos básicos de dados permitidos em C. Os tipos char e int são inteiros e os tipos float e double são de ponto flutuante. Em C++, há também o tipo de dado bool.
11/04/2009
Gilson Gonçalves de Lima
[email protected]
14
2.3.2 Declaração de variáveis Para que se possa usar uma variável em um programa, é necessário fazer uma declaração de variável antes. Deste modo o processador pode alocar (reservar) o espaço necessário na memória para a manipulação destas variáveis. É possível declarar mais de uma variável ao mesmo tempo, basta separá-las por vírgulas (,).
11/04/2009
Gilson Gonçalves de Lima
[email protected]
15
2.3.2 Declaração de variáveis A sintaxe para declaração de variáveis é a seguinte: tipo variavel_1 , variavel_2 , ... ;
Exemplo: Declaração das variáveis: int i; int x,y,z; char letra; float nota_1,nota_2,media; double num;
11/04/2009
Gilson Gonçalves de Lima
[email protected]
16
2.3.2 Declaração de variáveis A declaração de variáveis é feita, em geral, dentro de uma rotina. Por exemplo, a rotina principal main(). Deste modo se diz que se está fazendo uma declaração de variáveis locais. Variáveis locais podem ser referenciadas apenas dentro da rotina dentro na qual foram declaradas, neste caso a rotina main().
11/04/2009
Gilson Gonçalves de Lima
[email protected]
17
2.3.2 Declaração de variáveis Exemplo: void main(){ float raio, area; // declaracao de variáveis raio = 2.5; area = 3.14 * raio * raio; } É possível fazer a declaração de variáveis fora de uma rotina. Neste caso diz-se que se fez a declaração de variáveis globais.
11/04/2009
Gilson Gonçalves de Lima
[email protected]
18
2.3.3 Tipos modificados
Além dos tipos de dados citados acima existem outros tipos de dados ditos modificados. Em C existem três modificadores: long, short e unsigned.
11/04/2009
Gilson Gonçalves de Lima
[email protected]
19
2.3.3 Tipos modificados Tipos de dados (do maior tipo para o menor) long double double float unsigned long int long int unsigned int int unsigned short int short int unsigned char char bool
(sinônimo de unsigned long) (sinônimo de long) (sinônimo de unsigned) (sinônimo de unsigned short) (sinônimo de short)
(false tornas-se 0, true torna-se 1)
11/04/2009
Gilson G. de Lima -
[email protected]
20
2.3.4 Strings Uma string é um conjunto ordenado de caracteres que pode ser armazenado sob forma de um vetor-ponteiro de caracteres. Sintaxe: Para declararmos uma variável para receber um conjunto de caracteres devemos escrever: char* var; Exemplo: No exemplo seguinte a variável nome foi declarada como conjunto de caracteres e em seguida recebe uma string constante. char* nome; nome = “Gilson Gonçalves de Lima";
11/04/2009
Gilson Gonçalves de Lima
[email protected]
21
2.3.5 Inicialização de variáveis. Quando se faz a declaração de uma variável, determinamos que tipo de dado ela vai receber. É possível, em C, declarar uma variável e já armazenar nela um valor inicial. Exemplo: int i = 0, j = 100;
11/04/2009
Gilson Gonçalves de Lima
[email protected]
22
2.3.6 Conversão de tipo (Casting Casting)) Se, por acaso, declaramos uma variável como int e queremos, momentaneamente, que seu conteúdo seja apresentado como float. Este procedimento é chamado de conversão de tipo ou casting. Sintaxe: (tipo) variável Exemplo: observe a conversão de tipo feita no exemplo abaixo: int num; float valor = 13.0; num = (int)valor % 2;
11/04/2009
Gilson Gonçalves de Lima
[email protected]
23
3 - Ponteiros Ponteiros são variáveis que guardam endereços de memória. A sintaxe da declaração de um ponteiro é a seguinte: tipo_ptr *nome_ptr; Ou tipo_ptr* nome_ptr; Exemplo: int *p;
11/04/2009
Gilson Gonçalves de Lima
[email protected]
24
3 - Ponteiros
A linguagem C nos providencia dois operadores especiais: ◦ operador de endereço: & ◦ operador de conteúdo: *
Exemplo: Para se atribuir a um ponteiro o endereço de uma variável escreve-se: int *p, val=5; // declaração de ponteiro e variável p = &val; // atribuição
Exemplo: Para se atribuir a uma variável o conteúdo de um endereço escreve-se: int *p = 0x3f8, val; // declaração de ponteiro e variável val = *p; // atribuição
11/04/2009
Gilson Gonçalves de Lima
[email protected]
25
4 - Arrays Os arrays são estruturas de dados que consistem em itens de dados do mesmo tipo, relacionados entre si. A figura ao lado mostra um array de 12 elementos Inteiros.
11/04/2009
Gilson Gonçalves de Lima
[email protected]
26
4.14.1-Exemplo usando arrays (C++) // Inicializando um array #include
using std::cout; using std::endl; #include using std::setw; int main() { int i, n[ 10 ]; for ( i = 0; i < 10; i++ )
// inicialização
n[ i ] = 0; cout << "Elemento" << setw( 13 ) << "Valor" << endl; for ( i = 0; i < 10; i++ )
// exibir array
cout << setw( 7 ) << i << setw( 13 ) << n[ i ] << endl; return 0; }
11/04/2009
Gilson Gonçalves de Lima [email protected]
27
4.24.2-Pesquisa dentro de um array (C++)
// Pesquisa linear de um array
int pesquisa(int [ ], int, int ); int main() { int tamanhoArray = 100; int a[ tamanhoArray ], chavePesquisa, elemento; for ( int x = 0; x < tamanhoArray; x++ ) a[ x ] = 2 * x; cout << "Enter integer search key:" << endl; cin >> chavePesquisa; elemento = pesquisa( a, chavePesquisa, tamanhoArray );
<< elemento << endl; else cout << "Valor não encontrado" << endl; return 0;
} int pesquisa(int array[ ], int key, int sizeOfArray ) { for ( int n = 0; n < sizeOfArray; n++ ) if ( array[ n ] == key ) return n; return -1; }
if ( elemento != -1 ) cout << "Valor encontrado no elemento”
11/04/2009
Gilson Gonçalves de Lima [email protected]
28
4.34.3-Array multidimensional (C++) // Inicializando arrays multidimensionais #include
cout << "Os Valores no array3 linha por linha sao:" << endl; printArray( array3 ); system("PAUSE"); return 0;
using std::cout; using std::endl; void printArray( int [ ][ 3 ] );
}
int main() { int array1[ 2 ][ 3 ] = { { 1, 2, 3 }, { 4, 5, 6 } }, array2[ 2 ][ 3 ] = { 1, 2, 3, 4, 5 }, array3[ 2 ][ 3 ] = { { 1, 2 }, { 4 } };
void printArray( int a[ ][ 3 ] ) { for ( int i = 0; i < 2; i++ ) { for ( int j = 0; j < 3; j++ ) cout << a[ i ][ j ] << ' ';
cout << "Os Valores no array1 linha por linha sao:" << endl; printArray( array1 );
cout << endl; } }
cout << "Os Valores no array2 linha por linha sao:" << endl; printArray( array2 ); 11/04/2009
Gilson Gonçalves de Lima [email protected]
29
5-Estrutura Estruturas são tipos de dados agregados construídos usando-se elementos de outros tipos. Em Pascal, structs são chamadas de registros. Exemplo: Struct Horario{ int hora; // 0 a 23 int minuto; // 0 a 59 int segundo; // 0 a 59
} 11/04/2009
Gilson Gonçalves de Lima [email protected]
30
5.15.1-Estrutura (C++) struct Horario { int hora;
// definição de estrutura
// 0-23
// Exibir o hora'rio em formato militar
int minuto; // 0-59
void printMilitar( const Horario &t )
int segundo; // 0-59
{ cout << ( t.hora < 10 ? "0" : "" ) << t.hora << ":"
}; void printMilitar( const Horario & ); void printPadrao( const Horario & );
<< ( t.minuto < 10 ? "0" : "" ) << t.minuto; }
int main() {
// Exibir o hora'rio em formato padrão Horario jantarHorario;
// varia'vel do novo tipo Horario
// dar valores va'lidos aos membros
void printPadrao( const Horario &t ) {
jantarHorario.hora = 18;
cout << ( ( t.hora == 0 || t.hora == 12 ) ?
jantarHorario.minuto = 30;
12 : t.hora % 12 )
jantarHorario.segundo = 0;
<< ":" << ( t.minuto < 10 ? "0" : "" ) << t.minuto
cout << "O jantar ocorrera' 'as ";
<< ":" << ( t.segundo < 10 ? "0" : "" ) << t.segundo
printMilitar( jantarHorario );
<< ( t.hora < 12 ? " AM" : " PM" );
cout << " Hora'rio Militar,\nque e' ";
}
printPadrao( jantarHorario ); cout << “no Horario Padrao .\n"; system("PAUSE"); return 0; }
11/04/2009
Gilson Gonçalves de Lima [email protected]
31
6 – Referência Bibliográfica
DEITEL, M., DEITEL,P. C++ Como Programar. 3ª Edição. Bookman.2001.
11/04/2009
Gilson G. de Lima - [email protected]
32