Escolar Documentos
Profissional Documentos
Cultura Documentos
// Funes
char a, b, c;
c = 0x41;
a = 10;
// comentrio 1
b = a + 5;
/* comentrio */
c += b;
}
TIPOS DE DADOS
________________________________________________________________________________
A linguagem C dispes basicamente de 03 tipos de dados:
Nulos: (void)
TIPOS DE DADOS
________________________________________________________________________________
A linguagem C, prev ainda o uso de modificadores de tipo:
TIPOS DE DADOS
________________________________________________________________________________
O padro ANSI considera que um tipo de base sempre signed (com sinal), a no ser que seja expressamente
declarado como unsigned (sem sinal).
A exceo o tipo char, deixado em aberto pela norma ANSI.
Em muitos compiladores, o tipo char , por padro, unsigned, a no ser que seja declarado como signed.
TIPOS DE DADOS
________________________________________________________________________________
TIPOS E SUBTIPOS BSICOS
TIPO
SUBTIPO
FAIXA DE VALORES
TAMANHO (Bytes)
0 a 255
Signed char
-128 a 127
0 a 65.535
-32.768 a 32.767
0 a 4.294.967.295
-2.147.483.648 a 2.147.483.647
Float
Double
Inteiros
Reais
TIPOS DE DADOS
________________________________________________________________________________
programa.
O identificador (nome) da varivel pode ter qualquer tamanho ( normalmente so reconhecidos os 31 primeiros
caracteres) e deve obedecer s seguintes regras:
-
O identificador deve conter somente letras, nmeros e o caractere sublinhado _. Isso significa que no
permitido utilizar smbolos ou acentos nos identificadores.
Letras maisculas e minsculas so diferentes em linguagem C (isso significa que o identificador TESTE
diferente do identificador teste)
Um identificador no pode ser igual a uma palavra reservada ou um nome de funo definida no programa.
TIPOS DE DADOS
________________________________________________________________________________
EXEMPLO 2:
int teste;
float _resultado;
EXERCICOS DE FIXAO
TIPOS DE DADOS
________________________________________________________________________________
EXERCICOS DE FIXAO
2) Tomando como referncia o EXEMPLO 2 mostre a faixa de valores possveis e o tamanho necessrio a ser
alocado para cada varivel.
a) int teste
b) unsigned int minha_variavel
c) char primeiro, segundo
d) float _resultado
#include "utility.h"
#include "ansi_c.h"
void main(void)
{
_1 = sizeof(teste1); printf("\nchar = %u\n",_1);
_2 = sizeof(teste2); printf("\nshort int = %u\n",_2);
char teste1;
short int teste2;
int teste3;
long int teste4;
float teste5;
double teste6;
a) char
b) short int
c) int
d) long int
e) float
f)
double
Alm dos modificadores de tipo j comentados, a linguagem C dispe de outros com caractersticas mais
especficas:
auto: especifica uma varivel automtica ou local. Esse especificador j no mais utilizado, pois todas as
variveis declaradas dentro de uma funo ou bloco de programa so consideradas locais, independente do
seu uso.
const: utilizado para declarar uma constante (varivel cujo valor no pode ser alterado pelo programa). Tais
variveis podem ser armazenadas na memria FLASH.
extern: utilizado para fazer referncias a variveis globais declaradas em outros mdulos do programa.
register: solicita ao compilador que tente armazenar a varivel em um registrador da CPU, em vez de uma
posio da memria RAM. Isso permite um incremento na velocidade de acesso varivel, porm esse
especificador somente pode ser utilizado para variveis locais ou parmetros formais de uma funo.
-
static: utilizado para declarar variveis permanentes, ou seja, que n so destrudas aps a sada da funo
ou bloco do programa em que foram declaradas: o seu contedo permanece inalterado e na prxima chamada
da funo, ou execuo do bloco de comandos, o seu valor continuar o mesmo da ltima chamada. Esse
especificador normalmente utilizado com variveis locais. No caso da declarao de uma varivel global, ela
somente ser acessvel de dentro do mdulo (listagem) do programa em que foi declarada. Uma varivel
declarada como static sempre inicializada com zero pelo compilador.
volatile: especifica uma varivel que pode ser alterada, por eventos externos sem conhecimento do
compilador. Esse tipo de especificador deve ser utilizado para variveis que possam ser alteradas pelo
hardware do sistema.
de tipo, e consiste num conjunto de regras aplicadas pelo compilador com o intuito de que todos os elementos da
expresso sejam convertidos no mesmo tipo. Seguem abaixo as regras:
Numa expresso contendo 02 operandos de tipos diferentes, o tipo de menor tamanho convertido no tipo de
maior tamanho. A ordem dos tipos, para efeitos de promoo de tipo (do menor para o maior): char, short,
int, long, float, double.
Numa expresso contendo um tipo unsigned e outro signed, o signed convertido em unsigned.
possvel tambm forar uma converso de tipo (typecast), utilizando o especificador do tipo desejado entre
parnteses antes da varivel ou expresso que se deseja converter.
OPERADORES E EXPRESSES EM C
________________________________________________________________________________
EXERCICO DE FIXAO
1) Escreva um cdigo utilizando a rotina principal main respeitando a estruturao aprendida para configurar
uma varivel de 8 bits chamada REG_1 do tipo char , para que os bits das posies 4 e 5 sejam setados e os
demais permaneam zerados, respeitando as seguintes condies:
OPERADORES E EXPRESSES EM C
________________________________________________________________________________
EXERCICO DE FIXAO
2) Acrescente ao cdigo anterior o comando printf para mostrar na tela os valores referentes as operaes
efetuadas. Justifique os resultados mostrados na tela.
Enumeraes
Ponteiros
Matrizes
Estruturas
Unies
Definies de tipos
Enumeraes
Enumerao um conjunto de constantes inteiras utilizado para especificar quais valores que uma varivel pode
assumir.
A declarao de uma enumerao feita geralmente da seguinte forma:
enum nome_da_enumerao
{
lista_de_identificadores
} variavel_enumerada
Enumeraes
Enumeraes
Exemplo:
int main ()
{
enum direcao_terra
{
norte,
leste,
sul,
oeste,
};
enum direcao_terra minha_direcao;
minha_direcao = oeste;
return 0;
}
Enumeraes
Exemplo:
int main()
{
int a;
enum planetas
{
Mercurio,
Vnus,
Terra,
Marte,
Jupter,
Saturno
};
}
Ponteiros
Os ponteiros, ou apontadores, esto entre os grandes destaques que tornam a linguagem C mais poderosa e
consistem simplesmente em variveis que armazenam endereos de memria onde , normalmente, encontramse as variveis.
Os operadores & e * so utilizados para as operaes bsicas dos ponteiros, onde:
& retorna o endereo de uma varivel.
* Retorna o contedo de um endereo especificado.
Ponteiros
possvel declara variveis para guardar ponteiros, neste caso declara-se a varivel normalmente, mas
utilizando o operador * antes do seu nome, conforme exemplo abaixo:
char A;
Ponteiros
possvel tambm utilizar os operadores de adio, subtrao, incremento e decremento com variveis ponteiro,
no entanto o programador deve ter em mente que como um ponteiro deve sempre apontar para uma varivel do
tipo para o qual foi declarado, as operaes sero sempre realizadas levando em conta o tamanho em bytes
ocupado pelo tipo apontado pelo ponteiro, por exemplo: se um ponteiro para um ehar que aponta para o
endereo x incrementado, o seu contedo passar a ser x+ 1. Se o ponteiro fosse para um int, o incremento
resultaria no endereo x+2. Se o ponteiro fosse para um double, o incremento resultaria no endereo x-i-S. Isso
tudo porque um char ocupa um byte na memria, enquanto um int ocupa dois e um double ocupa normalmente
oito bytes.
EXEMPLO:
#include <stdio.h>
int main()
{
int a, b;
a = 5;
b = 10;
printf ("%d %d\n", a, b);
swap (a, b);
printf ("%d %d\n", a, b);
return 0;
}
int main ()
{
int a, b;
a = 5;
b = 10;
printf ("\n\nEles valem %d, %d\n", a, b);
swap (&a, &b);
printf ("\n\nEles agora valem %d, %d\n", a, b);
return 0;
}
int main()
{
int m, n;
m = operacao(7, 5, soma);
n = operacao(20, m, menos);
printf("%d\n", n);
return 0;
}
no
precisamos
escrever
Matrizes
Matrizes
Exemplo:
unsigned int matriz2 [10]; // declara uma matriz unidimensional de 10 elementos do tipo unsigned int chamada "matriz2
float matriz3 [5] [5];
// declara uma matriz bidimensional de 5 elementos em cada dimenso, do tipo float chamada "matriz3"
Matrizes
* Repare que para fazer referncia a um elemento da matriz, utilizado o identificador da matriz seguido do
nmero do elemento dentro dos colchetes.
Exemplo:
char nota_1;
nota_1 = notas[0];
Estruturas
struct data
{
tipo campo1;
char dia;
tipo campo2;
char mes;
...
char ano;
} veriaveis_estrutura;
} calendario;
Estruturas
struct data
{
int dia;
int mes;
int ano;
} calendario;
calendario.dia = 6;
calendario.mes = 1;
calendario.ano = 1987;
Estruturas
Exemplo:
struct data
calendario.dia = 6;
calendario.mes = 1;
int dia;
calendario.ano = 1987;
int mes;
int ano;
};
aniversario.dia = 6;
aniversario.mes = 1;
aniversario.ano = 1987;
Unies so um tipo especial de dado no qual as variveis declaradas residem num mesmo endereo de memria.
O compilador aloca memria para a varivel cujo tipo ocupe o maior espao na memria e em seguida, as
demais variveis pertencentes unio so alocadas no mesmo espao.
O compilador alinha as variveis pertencentes a uma unio pelos seus dgitos mais significativos (modelo little
endian).
Exemplo:
union
{
unsigned long int var32;
unsigned int var16;
unsigned char var8;
} tipos;
Exemplo:
tipos.var32 = 0x12345678;
tipos.var16 = 0x1234;
tipos.var8 = 0x12;
Outra caracterstica interessante da linguagem C, mas que no consiste realmente em um novo tipo de dado, o
comando typedef.
Ele permite criar novos identificadores para tipos de dados j existentes.
Isso facilita a legibilidade de alguns programas e tambm permite tornar alguns tipos de programas escritos para
outras plataformas mais facilmente portveis.
fracionario teste; // declara uma varivel chamada teste do tipo fracionario (float)
caractere teste;
numero a, b;
Condicionais
So comandos que permitem executar cdigo associando a uma condio ser verdadeira ou falsa.
Salto ou desvio
Utilizados para provocar o desvio do fluxo do programa.
TIPOS
COMANDOS
CONDICIONAL
if
switch
ITERAO, LAO,
REPETIO
for
while
SALTO OU DESVIO
do
SINTAXE:
if(condio)
{
comando_caso_verdadeiro;
}
else
{
comando_caso_falso;
}
char estado_portas;
estado_portas = P1IN;
Exemplo:
{
P1OUT &= ~(0x01);
}
Exemplo:
switch (estado_porta)
{
case 0x01:
P1OUT |= 0x01;
break;
case 0x02:
P1OUT |= 0x02;
break;
case constante_n:
P1OUT |= 0x02;
break;
default:
P1OUT = 0x00;
break;
}
SINTAXE:
Exemplo:
Int vetor[10]
for(i=0; i < 10; i++)
{
int soma=0;
soma = soma + vetor[i];
}
// soma += vetor[i];
* Opcionalmente, possvel utilizar a clusula break para provocar o encerramento prematuro do lao.
Tambm possvel utilizar a clusula continue para provocar o encerramento da iterao atual do lao e o
incio de uma nova iterao.
SINTAXE:
while (condio)
{
comando1;
comando2;
...
}
Exemplos:
while(i1)
{
P1OUT |= 0x40;
}
LOOP INFINITO
* Assim como no for, tambm possvel utilizar a clusula break para encerrar prematuramente um lao
while sem necessitar que a condio seja verdadeira, ou a clusula
encerramento da iterao atual e inicio da seguinte.
SINTAXE:
do
{
comando1;
comando2;
...
} while (condio);
* Aqui tambm as clusulas break e continue podem ser utilizadas para encerrar o comando ou a iterao
prematuramente.
Exemplos:
do
{
do
{
P1OUT |= 0x40;
} while(iP1IN & 0x01);
P1OUT |= 0x40;
} while(i1);
LOOP INFINITO
SINTAXE:
tipo_retorno nome_funo(lista de parmetros)
{
lista_comandos;
}
Na chamada por valor, o valor do parmetro da funo passado como argumento para ela.
Na chamada por referncia, o endereo da varivel que contm o parmetro passado como argumento para
ela.
possvel utilizar cada um ou ambos os modelos em uma mesma funo, mas o programador deve sempre levar
em conta a forma como a funo foi declarada, pois a chamada da funo deve utilizar a mesma forma da
declarao dela.
do
{
do
{
P1OUT |= 0x40;
} while(iP1IN & 0x01);
P1OUT |= 0x40;
} while(iP1IN & 0x01);
SINTAXE - PROTOTIPAGEM:
tipo_retorno nome_funo(lista de parmetros);
SINTAXE - DECLARAO:
tipo_retorno nome_funo(lista de parmetros)
{
lista_comandos;
}
Exemplo:
int subtrai(int a, int b);
void maini(void)
{
int c;
int aux;
c = a b;
return c;
}
aux = subtrai(5,2);
}