Vous êtes sur la page 1sur 56

Programa Expresso de Capacitao - Mdulo C

Aula 1 Apresentao e Conceitos Bsicos

Allan Lima http://allanlima.wordpress.com

Voc pode:
copiar, distribuir, exibir e executar a obra criar obras derivadas fazer uso comercial da obra

Sob as seguintes condies:


Atribuio. Voc deve dar crdito ao autor original, da forma especificada pelo autor ou licenciante. Compartilhamento pela mesma Licena. Se voc alterar, transformar, ou criar outra obra com base nesta, voc somente poder distribuir a obra resultante sob uma licena idntica a esta. Para cada novo uso ou distribuio, voc deve deixar claro para outros os termos da licena desta obra. Qualquer uma destas condies podem ser renunciadas, desde que Voc obtenha permisso do autor.

Veja aqui a licena completa

Allan Lima http://allanlima.wordpress.com

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

Metodologia das Aulas


8 aulas
Exerccios no final de cada aula Anlise de cdigos como exemplos Resoluo de Questes

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)

Baseada na Linguagem B Verso inicial bastante simples

www.viphostsystem.com

Allan Lima http://allanlima.wordpress.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

Allan Lima http://allanlima.wordpress.com

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

Pr-Processador Cdigo Fonte Pr-processado Compilador Cdigo Objeto Linker

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

Allan Lima http://allanlima.wordpress.com

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.

Allan Lima http://allanlima.wordpress.com

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

Allan Lima http://allanlima.wordpress.com

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

Allan Lima http://allanlima.wordpress.com

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

Allan Lima http://allanlima.wordpress.com

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

Constantes de Barra Invertida


Cdigo \b \f \t \n \ \ \0 \\ \a \N \xN Significado Retrocesso (backspace) Alimentao de Formulrio (form feed) Tabulao Horizontal (tab) Nova Linha Aspas Apostrofo Nulo Barra Invertida Sinal Sonoro (Beep) Constante Octal (N o valor da constante) Constante Hexadecimal (N o valor da constante)
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.

Allan Lima http://allanlima.wordpress.com

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

Allan Lima http://allanlima.wordpress.com

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

Allan Lima http://allanlima.wordpress.com

Operadores Relacionais
Operador > >= < <= == != Relao Maior que Maior que ou igual a Menor que Menor que ou igual a Igual a Diferente de

Allan Lima http://allanlima.wordpress.com

Operadores Lgicos

Operador && || !

Funo AND OR NOT

Allan Lima http://allanlima.wordpress.com

Operadores Lgicos Bit a Bit


Operador & | ^ ~ >> << Ao AND Lgico OR Lgico XOR (OR exclusivo) NOT Shift Rigth Shift Left
Allan Lima http://allanlima.wordpress.com

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

Resultado a=0 b=6 c=6 d = -3 e = 16 f=1

Tabela de Precedncias
, = += -= *= /= ? || && | ^ & == != << = >> = << >> + * / % ! ~ ++ -. * & () [] ->

Precedncia
Allan Lima http://allanlima.wordpress.com

Casts
Sintaxe:
(tipo) expresso

Exemplo: long a = 10, b = 4; double f = (double) a/b; // f = 2.5

Allan Lima http://allanlima.wordpress.com

Controladores de Fluxo
C possui 7 controladores de fluxo bsicos:
if ? switch for while do-while goto

Allan Lima http://allanlima.wordpress.com

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;

Allan Lima http://allanlima.wordpress.com

switch
switch (varivel) { case (constante1): declarao1; [break;] // ... case (constanteN): declaraoN; [break;] default: declaraoDefault; }

Obs.: muito importante saber exatamente quando usar ou no o break

Allan Lima http://allanlima.wordpress.com

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);

Allan Lima http://allanlima.wordpress.com

break e continue e goto


O break usado para interromper o switch ou um loop Exemplo:
while (1) { a = a + 14; i++; if (i > 99) { break; } }
Allan Lima http://allanlima.wordpress.com

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

Allan Lima http://allanlima.wordpress.com

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

Entrada e Sada de Dados


A funo scanf utilizada para a leitura dados do dispositivo de entrada padro A funo printf utilizada para a escrita de dados do dispositivo de sada padro

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

Obs.: Cuidado para no esquecer do & no uso da funo scanf

Allan Lima http://allanlima.wordpress.com

Tabela de Formato para E/S


Tipo [signed | unsigned] char [signed] int unsigned int [signed] short int unsigned short int [signed] long int unsigned long int float double long double Formato para escrita e leitura %c %i ou %d %u %hu %hi %li %lu %f %lf %Lf
Allan Lima http://allanlima.wordpress.com

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

Allan Lima http://allanlima.wordpress.com

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.

Allan Lima http://allanlima.wordpress.com

Exerccios
2)Modifique a sua resposta para o exerccio anterior trocando os loops (for, while, dowhile) para goto

Allan Lima http://allanlima.wordpress.com

Desafio
Escreva uma funo chamada showBits que recebe um inteiro como parmetro e imprime todos os seus bits
Idia de David Barbosa Feitosa

Allan Lima http://allanlima.wordpress.com

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/

Lammert Bies, ASCII character map


http://www.lammertbies.nl/comm/info/ascii-characters.html

Slides de Gustavo(ghpc@cin.ufpe.br) do curso de C/C++ mpatrol


http://www.cbmamiga.demon.co.uk/mpatrol/mpatrol_toc.html#SEC_Con tents

Aulas da cadeira de infra-estrutura de software


www.cin.ufpe.br/~if677

Allan Lima http://allanlima.wordpress.com

Vous aimerez peut-être aussi