Você está na página 1de 48

+

Curso de C/C++

Aula 1
Instrutor: Francisco Magalhes Material por: Allan Lima http://allanlima.wordpress.com/

Voc pode:

copiar, distribuir, exibir e executar a obra criar obras derivadas fazer uso comercial da obra 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.

Sob as seguintes condies:


Veja aqui a licena completa

Roteiro

O objetivo do curso
Histria da linguagem C Caractersticas da linguagem C

Sistemas de tipos
Variveis e operadores Estruturas de controle Funes Entrada e Sada

O objetivo do curso

Aprender a programar em C e C++!


Ser que s isso basta? No seria melhor tambm aprender a aprender C e C++???

Entender

bem o funcionamento do programa na memria do computador E principalmente, aprender onde e como encontrar ajuda

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

www.viphostsystem.com

Verso inicial bastante simples

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

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

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.

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:

de 32 bits inteiro de 32 bits Sistemas de 64 bits inteiro de 64 bits


Sistemas

Restries:
short long

int e int devem ter pelo menos 16 bits

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; return 0; } // Varivel local

Exemplos

exemploRegister.c
exemploStatic.c exemploAuto.c

Variveis

Restries

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

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)

Constantes de Barra Invertida

Cdigo \b \f \t \n

Significado Retrocesso (backspace) Alimentao de Formulrio (form feed) Tabulao Horizontal (tab) Nova Linha

\
\ \0

Aspas
Apostrofo Nulo

\\
\a \N \xN

Barra Invertida
Sinal Sonoro (Beep) Constante Octal (N o valor da constante) Constante Hexadecimal (N o valor da constante)

Operadores Aritmticos
Operador Ao Soma Subtrao ou troca de sinal Multiplicao

+ *

/
% ++ --

Diviso
Resto da diviso inteira Incremento Decremento

Exerccios

1)

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


Utilize o DEVCPP para compilar e rodar cdigo do exerccio anterior.

2)

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 &&

Funo AND

||
!

OR
NOT

Operadores Lgicos Bit a Bit

Operador & | ^ ~ >> <<

Ao AND Lgico OR Lgico XOR (OR exclusivo) NOT Shift Rigth Shift Left

Exerccios
3)

Qual o valor das variveis a, b, c, d, e, f 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;

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

Precedncia

Casts
Sintaxe:

(tipo)

expresso

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

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 }

Exemplo
int a = 2;
if (2) { a = 4; } else if (0) { a = 0; } if (a) { a = -a; }

?:

condio ? expresso1 : exepresso2;


Equivalente a:

if (condio) { expresso1 } else { expresso2 }

O operador ? restrito, mas pode simplificar expresses grandes

Uma expresso diferente de uma declarao

Exemplo

int a = 9, b = -4, c; b = (a > b) ? a : b; c = (a > b) ? b : a;

switch
switch (varivel) { case (constante1): declarao1; break; // O break opcional // ... case (constanteN): declaraoN; break; // O break opcional default: declaraoDefault;

Exemplo
switch (a) {
case (1): // ... break; case (2): // ... break; default: // ... }

for
for (comando; condio; comando) {
declarao; }

Exemplo:
// o i no pode ser declarado no for int i; int a = 0;

for (i = 0; i < 100; i++) {


a = a + 14; }

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++; }

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

Exemplo
int i = 0;
int a = 0; do {

a = a + 14;
i++; } while (i < 0);

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

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

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

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 a) { int c; c = 8; c = dobro(c); return 0; }

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

Exemplos
int a;
scanf(%d, &a); // l a printf(%d, a); // escreve a char ch;

scanf(%c, &ch); // l c
printf(%c, ch); // escreve c float num;

scanf(%f, &num); // l f
printf(%f, num); // escreve f

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

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 %hi %hu %li %lu %f %lf %Lf

Exerccios
4)

Escreva um programa que l um inteiro do teclado responde sim se ele um mltiplo de 3 e no caso contrrio

Tome como base a seguinte estrutura de programa:


#include <stdio.h> int main() { return 0; }

5)

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.

6)

Modifique a sua resposta para o exerccio anterior trocando os loops (for, while, do-while) para goto

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/cis4

00/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 Henrique Porto do curso de C/C++

Agradecimentos

Allan Lima e Breno do Vale

Pelo

material cedido para o curso