Académique Documents
Professionnel Documents
Culture Documents
Voc pode:
copiar, distribuir, exibir e executar a obra criar obras derivadas fazer uso comercial da obra
Roteiro
Metodologia das Aulas Histria da Linguagem C Caractersticas da Linguagem C Sistemas de Tipos Variveis e Operadores Estruturas de Controle Funes Entrada e Sada
Allan Lima http://allanlima.wordpress.com
Histria da Linguagem C
Surgiu no incio dos anos 70 Criada inicialmente para o UNIX Criadores:
Dennis Ritchie (direita) Kenneth Thompson (esquerda)
www.viphostsystem.com
Histria da Linguagem C
Ampla popularizao nos anos 80 Muitas arquiteturas e compiladores Problemas com a incompatibilidade Padronizao de 82 a 89 (C ANSI) At hoje existem problemas entre os diversos compiladores e sistemas operacionais
Caractersticas
Paradigma Procedural Flexvel Alta performance Poucas restries tima iterao com:
Sistemas Operacionais Dispositivos de Hardware Outras Linguagens
Allan Lima http://allanlima.wordpress.com
Um compilador de C
Cdigo Fonte
Cdigo Executvel
Allan Lima http://allanlima.wordpress.com
Palavras Reservadas
auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, register, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigned, void, volatile, while Obs.: C case sensitive
Tipos
So as formas que utilizamos para representar dados C possui 5 tipos bsicos:
char, int, float, double e void
E 4 modificadores bsicos:
signed, unsigned, long e short Os 4 podem ser aplicados ao int long pode ser aplicado ao double signed e unsigned aplicados ao char
Allan Lima http://allanlima.wordpress.com
Tipos
Modificadores de acesso:
const: a varivel no pode ter o seu valor alterado volatile: a varivel pode ter o seu valor modificado fora do controle do programa
Classes de Armazenamento:
auto: indica que uma varivel local (opcional), tambm usada na declarao de nested functions extern: varivel declarada em outro arquivo register: armazena, se possvel, a varivel em um registrador na prpria CPU.
Allan Lima http://allanlima.wordpress.com
Tipos
Classes de Armazenamento (Cont.):
static: no permite que um mdulo externo possa alterar nem ver uma varivel global, tambm usado para manter o valor de uma varivel local em uma funo de uma chamada para outra.
Tipos
O tamanho do inteiro depende da arquitetura do sistema:
Sistemas de 32 bits Sistemas de 64 bits inteiro de 32 bits inteiro de 64 bits
Restries:
short int e int devem ter pelo menos 16 bits long int com no mnimo 32 bits short int <= int <= long int
Variveis
Declarao:
tipo nome = inicializao;
Escopo da variveis:
globais: podem ser usadas em qualquer lugar do programa locais: podem ser usadas apenas na funo onde foi declarada
Exemplo
int a, b = 10; // Variveis globais void f(char c) { double d = 10.0; // Varivel local int i = a; // Varivel local // ... } int main() { int i = b; // Varivel local return 0; }
Allan Lima http://allanlima.wordpress.com
Exemplos
exemploRegister.c exemploStatic.c exemploAuto.c
Variveis
Restries
O nome das variveis deve comear com uma letra ou um sublinhado _ Os demais caracteres podem ser letras, nmeros ou sublinhado O nome da varivel no pode ser igual a uma palavra reservada e aos nomes das funes Tamanho mximo para o nome de uma varivel:
32 caracteres
Allan Lima http://allanlima.wordpress.com
Constantes
So valores que so mantidos fixos pelo compilador Tambm podem ser:
Octais - 0NUMERO_OCTAL Hexadecimais - 0xNUMERO_HEXADECIMAL
Exemplos:
\n (caractere), C++ (string), 10 (inteiro), 15.0 (float), 0xEF (239 em decimal), 03212 (1674 em decimal)
Allan Lima http://allanlima.wordpress.com
A execuo de um programa
Um programa possui trs tipos de memria
Memria de instrues: guarda o cdigo do programa a ser executado. Memria de dados: guarda as variveis locais, constantes, etc.
A execuo de um programa
A memria de dados pode ser dividida em duas partes:
Pilha: guarda variveis locais no estticas e parmetros de funes. Memria esttica: guarda variveis e constantes globais alm de variveis estticas locais. Heap: guarda as variveis alocadas em tempo de execuo, ou seja, alocadas dinamicamente.
Allan Lima http://allanlima.wordpress.com
A execuo de um programa
Stack de B Memria livre Heap de B Memria Esttica B Programa B Stack de A Memria livre Heap de A Memria Esttica A Programa A Sistema Operacional
Allan Lima http://allanlima.wordpress.com
Operadores Aritmticos
Operador + * / % ++ -Ao Soma Subtrao ou troca de sinal Multiplicao Diviso Resto da diviso inteira Incremento Decremento
Exerccio
Qual o valor das variveis x, y e z aps o seguinte trecho de cdigo:
int x, y, z; x = y = 10; z= ++x; x= -x; y++; x = x + y - (z--);
Resultado x = -11 y = 11 z = 10
Operadores Relacionais
Operador > >= < <= == != Relao Maior que Maior que ou igual a Menor que Menor que ou igual a Igual a Diferente de
Operadores Lgicos
Operador && || !
Exerccio
Qual o valor das variveis aps a execuo do seguinte trecho de cdigo:
int x = 2, y = 4; int a, b, c, d, e, f; a = x & y; b = x | y; c = x ^ y; d = ~x; e = x << 3; f = x >> 1;
Allan Lima http://allanlima.wordpress.com
Tabela de Precedncias
, = += -= *= /= ? || && | ^ & == != << = >> = << >> + * / % ! ~ ++ -. * & () [] ->
Precedncia
Allan Lima http://allanlima.wordpress.com
Casts
Sintaxe:
(tipo) expresso
Controladores de Fluxo
C possui 7 controladores de fluxo bsicos:
if ? switch for while do-while goto
if
if (condio) { declarao } if (condio) { declarao1 } else { declarao2 } if (condio1) { declarao1 } else if (condio2) { declarao2 } else { declarao3 }
Allan Lima http://allanlima.wordpress.com
Exemplo
int a = 2; if (2) { a = 4; } else if (0) { a = 0; } if (a) { a = -a; }
Allan Lima http://allanlima.wordpress.com
?
condio ? expresso1 : exepresso2; Equivalente a:
if (condio) { expresso1 } else { expresso2 }
O operador ? restrito, mas pode simplificar expresses grandes Uma expresso diferente de uma declarao
Allan Lima http://allanlima.wordpress.com
Exemplo
int a = 9, b = -4; b = a>b ? a : b;
switch
switch (varivel) { case (constante1): declarao1; [break;] // ... case (constanteN): declaraoN; [break;] default: declaraoDefault; }
Exemplo
switch (a) { case (1): // ... break; case (2): // ... break; default: // ... }
Allan Lima http://allanlima.wordpress.com
for
for (inicializao; condio; incremento) { declarao; } Exemplo:
int i; // o i no pode ser declarado no for int a = 0; for (i = 0; i < 100; i++) { a = a + 14; }
Allan Lima http://allanlima.wordpress.com
while
while (condio) { declarao; } Executa a declarao zero ou mais vezes Exemplo: int i = 0; int a = 0; while (i < 100) { a = a + 14; i++; }
Allan Lima http://allanlima.wordpress.com
do-while
do { declarao; } while (condio); Executa a declarao pelo menos uma vez, j que a verificao da condio feita apenas no final de cada iterao do loop
Allan Lima http://allanlima.wordpress.com
Exemplo
int i = 0; // o i no pode ser declarado no do-while do { int a = 0; a = a + 14; i++; } while (i < 0);
continue
O continue usado para fazer um loop pular para a prxima iterao Exemplo:
while (1) { i++; if (i % 2 == 0) { continue; } a = a + 14; }
Allan Lima http://allanlima.wordpress.com
goto
O goto pode ser usado para dar um salto incondicional no fluxo do programa Exemplo:
int a = 0; inicio: a++; if (a < 10) { goto inicio; }
Allan Lima http://allanlima.wordpress.com
Funes
Sintaxe:
tipoDeRetorno nomeDaFuno(declaraoDosParmetros) { corpoDaFuno; } declaraoDosParmetros = tipo1 nome1,..., tipoN nomeN
Funes que no possuem retorno so void O retorno de uma funo feito atravs do comando return
Exemplos
int dobro(int a) { return 2 * a; } int main() { int c; c = 8; c = dobro(c); return 0; }
Allan Lima http://allanlima.wordpress.com
Exemplos
int a; scanf(%d, &a); // l a printf(%d, a); // escreve a char c; scanf(%c, &c); // l c printf(%c, c); // escreve c float f; scanf(%f, &f); // l f printf(%f, f); // escreve f
Questes
Analise as proposies abaixo:
a) O compilador gera um programa executvel. b) Linker transforma cdigo objeto em cdigo executvel. c) C ANSI define que o tamanho dos tipos constante, ou seja, no varia de compilador para compilador. d) Os principais tipo de dados de C ANSI so int, float, boolean, char e double. e) Classe de armazenamento alteram a forma como as variveis so alocadas na memria.
Allan Lima http://allanlima.wordpress.com
Questes
f) O nome de uma varivel deve comear com caracteres que podem ser letras, nmeros ou sublinhado. g) Constates octais comeam com o um 0 e constantes hexadecimais com um 0x. h) Todos os operadores lgicos so aplicados bit a bit i) C ANSI no permite a declarao de variveis em qualquer parte do cdigo. j) O comando break utilizado para se parar um loop k) O comando continue utilizado para se parar uma funo. l) O comando goto utilizado para se realizar um salto condicional no programa.
Allan Lima http://allanlima.wordpress.com
Gabarito
a b c d e f F V F F V F g h i j k l V F V V F F
Exerccios
1)Implemente um programa que l 10 inteiros do teclado ou para quando dois inteiros consecutivos sejam digitados. Aps a leitura o programa dever imprimir o maior, o menor, a mdia e a soma dos nmeros digitados.
Exerccios
2)Modifique a sua resposta para o exerccio anterior trocando os loops (for, while, dowhile) para goto
Desafio
Escreva uma funo chamada showBits que recebe um inteiro como parmetro e imprime todos os seus bits
Idia de David Barbosa Feitosa
Referncias
Matos, P. A. & Carvalho, G. H. P. - A Linguagem de Programao C The C Programming Language
http://www.engin.umd.umich.edu/CIS/course.des/cis400/c/c.html
Curso de C da UFMG
http://ead1.eee.ufmg.br/cursos/C/