Logo Passei Direto
Buscar

2EDProgramacaoC

User badge image

Enviado por Henrique Borges em

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

SEM0543 – Organização de Dados em 
Computadores
Estruturas de dados
Linguagem C - Introdução
3
Tipos básicos (primitivos) de dados
As linguagens de programação de alto nível, a exemplo da linguagem C, 
definem alguns tipos básicos de dados, que representam, principalmente 
números e caracteres.
Existem poucos tipos básicos em C:
char – um byte, utilizado para representar um caractere (ASCII);
int – 32 bits (ou 16, de acordo com a plataforma), representa um número inteiro;
float – 32 bits, utilizado para ponto flutuante com precisão simples;
double – 64 bits, utilizado para ponto flutuante com precisão dupla.
tipo bit bytes escala
char 8 1 -128 a 127
int 16 2 -32768 a 32767
float 32 4 3.4E-38 a 3.4E+38
double 64 8 1.7E-308 a 1.7E+308
void 0 0 sem valor
4
Tipos básicos (primitivos) de dados
O tipo inteiro pode ter variações de tamanho:
short (ou short int) – inteiro com tamanho mínimo de 16 bits;
long (ou long int) – inteiro com tamanho mínimo de 32 bits.
Os tipos inteiros e o char ainda podem representar dados com, ou 
sem, sinal:
signed – inteiro, ou char, com sinal. 
Ex.: signed char – faixa de valores de -128 a 127
unsigned – inteiro, ou char, sem sinal. 
Ex.: unsigned char – vai de 0 a 255
5
Tipos básicos (primitivos) de dados
O operador sizeof fornece o 
número de bytes de um tipo (ou 
representado pelo nome de 
uma variável declarada como).
Exemplo: exibir em tela a 
quantidade de bytes do tipo 
char:
código significado
%d decimal
%f ponto flutuante
%c caracter simples
%s cadeia de caracter
%e notação científica
%o octal
%u decimal sem sinal
%x hexadecimal
%ld decimal longo
%lf ponto flutuante longo
printf("Tamanho, em bytes, do tipo char %d\n", sizeof(char));
6
Tipos e variáveis
Variáveis guardam a referência (endereço na 
memória) de campos de dados. Para a correta 
interpretação do campo, a variável deve ser 
associada (declarada) a um tipo.
Exemplos: 
declaração de duas variáveis de nomes i e c, e de 
respectivos tipos int e char.
int i;
char c;
Serão reservadas quantidades de memória do 
tamanho de cada tipo declarado. O endereço do 
primeiro byte (referência) de cada área na 
memória é associado ao nome da variável.
7
Programa Exemplo
Escrever um programa na LP C para 
imprimir a tabela de conversão da 
temperatura de graus Fahrenheit para 
graus Celsius, utilizando a seguinte 
fórmula C=(5/9)(F-32)
F C
0 -17.8
20 -6.7
40 4.4
60 15.6
…
300 148.9
ALGORITMO
8
Programa Exemplo
Escrever um programa na LP C para imprimir a 
tabela de conversão da temperatura de graus 
Fahrenheit para graus Celsius, utilizando a 
fórmula C=(5/9)(F-32)
F C
0 -17.8
20 -6.7
40 4.4
60 15.6
…
300 148.9
/*programa para conversao de temperatura*/
#include <stdio.h>
void main() {
int inicio, fim, incr;
float fahr, celsius;
inicio=0;
fim=300;
incr=20;
fahr=(float)inicio; 
while (fahr<=fim) {
celsius=(5./9.*(fahr-32.)); 
printf("%4.0f | %6.1f\n",fahr,celsius);
fahr=fahr+incr;
}
}
9
Vetores (Arrays)
Arrays são conjuntos (arranjos) de elementos de um mesmo tipo. 
Um array tem tamanho fixo e é definido em sua declaração ou 
quando da primeira atribuição de valor à variável do tipo array.
Exemplo: declaração de um array de números inteiros, com 100 
posições na memória.
int a[100];
As 100 posições são alocadas seqüencialmente na memória e 
pode-se utilizar um índice para acesso a cada um de seus 
valores. Exemplos: a[0] indica o primeiro elemento do array, 
enquanto a[99] indica o último.
O tamanho de um array pode ser indicado pelo conjunto de 
elementos atribuídos.
Exemplo: criará um array de 10 posições na memória.
int numeros[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
O seguinte laço fará a exibição dos elementos em tela:
int i;
for (i=0; i<10; i++) printf("numeros[%d]: %d\n", i, numeros[i]);
10
Matrizes
Matrizes, em C, são representadas por arrays com 
mais de uma dimensão.
Exemplo: declaração de uma matriz 4X5, contendo 20 
posições com números inteiros
int m[4][5];
Exemplo: declaração e atribuição de valores para uma 
matriz 2X3
int matriz[2][3] = { {1, 2, 3} , {4, 5, 6} };
11
Ponteiros
Um ponteiro é um tipo de variável especial que armazena o endereço de 
um campo de dados. É declarado com a prefixação do caracter * 
antes do nome da variável (que pode ser um tipo básico ou 
estruturado).
Exemplo: declaração de uma variável ponteiro para um inteiro.
int *p;
O endereço é armazenado na variável e pode ser recuperado, obtendo-
se o valor de p:
printf(“Endereço para onde p aponta: %d\n”, p);
O operador & antes do nome de uma variável fornece o seu endereço 
na memória, sendo assim:
printf("Endereço de p: %d\n", &p);
O operador * antes de um ponteiro indica o campo que aponta:
int i = 10;
p = &i;
printf("Valor do campo apontado por p: %d\n", *p); /*exibirá o valor 10 */
12
Ponteiros (cont.)
Exemplo: seqüência de operações com ponteiro
int x = 1, y = 2, z[10] = {1,2,3,4,5,6,7,8,9,10};
int *ip; /* ip é um ponteiro para int */
ip = &x; /* ip agora aponta para x */
y = *ip; /* y agora é 1 */
*ip = 0; /* x agora é 0 */
ip = &z[0]; /* ip agora aponta para z[0] */
Pode-se percorrer as posições do array z 
incrementando-se o ponteiro ip.
printf("%d", *(++ip)); /* exibirá o elemento z[1] */
13
Ponteiros (cont.)
Ponteiros são especialmente úteis na passagem de 
argumentos por referência entre funções. Dessa 
forma, é possível passar a referência de uma 
variável local de uma função, cujo endereço pode 
ser acessado pela função chamada (evita-se o 
uso de variáveis globais).
Exemplo: função que troca os valores de duas 
variáveis na memória
void troca(int *px, int *py);
Que pode ser chamada no procedimento de origem 
na forma:
troca(&x, &y); / *x e y são as variáveis inteiras em 
questão */
14
Ponteiros (cont.)
Strings em C são representadas como uma 
seqüência de caracteres na memória, terminada 
pelo caractere '\0'. Para declaração de uma 
string, usa-se a referência do endereço do 
primeiro caractere em um ponteiro para char. 
Exemplo:
char *c = “Hello World”;
printf("%s\n", c); /* imprimirá todos os caracteres a 
partir do endereço apontado por c até '\0„ */
15
Passagem de vetores como parâmetro
Faça um procedimento na LP (C) que tenha como 
parâmetros, um vetor, e os índices n, m, e que 
realize a seguinte soma:



m
ni
ivs ][
Construa um programa que utilize o 
procedimento anterior.
16
Passagem de vetores como parâmetro: 
Procedimento na LP C
double sum(a,n,m)
/*somatorio de um vetor v[n..m]*/
double *a;
int n,m; // faixa do vetor
{
int i;
double s=0.;
for (i=n;i<=m;++i)
s+=a[i];
return(s);
}
17
Programa: Solução 1 -Uso de ponteiro constante
#include <stdio.h>
#define NMAX 10
void main()
{
double v[NMAX];
int i;
for (i=0; i<NMAX; ++i) /* inicializacao do vetor */
v[i]=i;
printf("Soma: %g\n",sum(v,0,NMAX-1));
}
18
Programa: Solução 2 - Uso de ponteiro variável
#include <malloc.h>
#include <stdio.h>
#define NMAX 10
void main()
{
double *v;
int i;
v=aloca_dvetor(0,NMAX-1);
for (i=0; i<NMAX; ++i) /* inicializacao do vetor */
v[i]=i;
printf("Soma: %g\n",sum(v,0,NMAX-1));
libera_dvetor(v,0,NMAX-1);
}
19
Funções de Alocação de Vetor
double *aloca_dvetor(n,m)
int n,m;
/*aloca um double vetor na faixa [n..m]*/
{
double *v;
v=(double *)malloc((unsigned)(m-n+1)*sizeof(double));
if(!v)printf("Erro na alocacao do vetor\n");
return v-n;
}
void libera_dvetor(v,n,m)
double *v;
int n,m;
/*desaloca um double vetor alocado com a funcao dvetor.*/
{
free((char*)(v+n));
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Mais conteúdos dessa disciplina

Mais conteúdos dessa disciplina