Apostila Rapida Linguagem C

download Apostila Rapida Linguagem C

of 69

Transcript of Apostila Rapida Linguagem C

COMPILADORES X INTERPRETADORESPrograma: forma de se comunicar com um computador linguagem mquina qprogramas so traduzidos atravs de outros programas especiais: qcompiladores e interpretadores. Processo:

ESTRUTURA BSICA DE UM PROGRAMA Cqconsiste em uma coleo de funes qforma geral Main ( ) primeira funo a ser executada { incio da funo } fim da funo qobs: para o compilador qMain ( ) { } qMain Main ( ) { }

fonte objeto executvel

( ) { }

So programas idnticos

A FUNO MAIN ( )qtem que existir em algum lugar qmarca o incio da execuo ex: Main( ) { printf (meu primeiro programa); } obs: toda instruo deve ser encerrada por ; printf uma funo, note um ( ) aps o nome novamente: Main ( ) { printf (meu primeiro programa); }

A FUNO PRINTF ( )

qfuno de E / S qno faz parte da definio de C Note que:

quma funo pode receber uma informao (argumento) qprintf( meu primeiro programa) ; meu primeiro programa SINTAXE: printf (expresso de controle, lista de argumentos); ex: Main ( ) { printf (o nmero %d, 2); } cdigo de formatao

MAIS PRINTFMain ( ) { }

Printf (%s est a %d milhes de milhas \ n do sol, vnus, 67);

sada:

vnus est a 67 milhes de milhas do sol

qobs: \ n um cdigo especial que indica uma mudana de linha Main ( ) { printf ( a letra %c, a);

printf ( vem antes de %c, b); } sada: a letra a vem antes de b

CARACTERES DE CONTROLE\n \r \t \b \ \\ nova linha enter tabulao (tab) retrocesso aspas barra CDIGO DE FORMATAO %c %d %e %f %o %s %x caracter decimal notao cientfica ponto flutuante octal cadeia de caracteres (string) hexadecimal

CONSTANTES E VARIVEISConstante: inaltervel objeto que tem valor fixo e

ex: Uso:

c,

8,

primeiro programa

Main ( ) { printf ( o nmero %d, 2); } Main ( ) { printf ( o nmero 2); }

Variveis: qum objeto que pode assumir diferentes valores qespao de memria de um certo tipo de dado associado a um nome para referenciar seu contedo ex: Main ( ) {

int idade; idade = 30; printf ( mnima idade : %d, idade); }

Instruo para reservar uma quantidade de memria para um certo tipo de dado, indicando o nome pelo qual a rea ser referenciad

a

qNa sua forma mais simples: qtipo nome-da-varivel; ou qtipo nome1, nome2, ... nomen; ex: ex 2: ex3: int a; int b; ou int a, b;

char letra; int nmero, idade; main ( ) { int x; float y; x = 3; y = 3 * 4.5; printf ( %d * 4.5 = %f, x, y); }

TIPOS BSICOS

qdeterminar um conjunto de valores e as possveis operaes realizadas sobre os mesmos qinforma a quantidade de memria (bytes) tipo char int float double 1.7e+308 void bytes 1 2 4 8 0 escala -128 a 127 -32.768 a 32.767 3.4e-38 a 3.4e+38 1.7e-308 a sem valor

Modificadores de tipos Long ou Long int Unsigned Char Unsigned int (4 bytes) (0 a 255) (0 a 65.535)

obs: int tem sempre o tamanho da palavra da mquina

ex: inteiros com e sem valor Main ( ) { unsigned int i = j;

int

j = 65.000;

(fde8)

printf ( %d %u, i, j); } sada: -536 65.000

PORQU ? qna forma binria o bit 15 0 se o nmero for positivo e 1 se negativo qLembre-se: qum nmero negativo representado em complemento de dois

INICIALIZANDO VARIVEISqa combinao de uma declarao de variveis com o operador de atribuioMain ( ) { int evento = 5; char corrida = c; float tempo = 27.25; printf ( o melhor tempo da eliminatria % c, corrida); printf ( \ n do evento %d foi % f, evento, tempo); }

NOMES DE VARIVEISqquantos caracteres quiser (32) qcomece com letras ou sublinhado: qseguidos de letras, nmeros ou sublinhados obs: qC sensvel ao caso: qpeso Peso pEso

qno podemos definir um identificador com o mesmo nome que uma palavra chave Palavras Chave: auto if static do extern default int while long do if etc

EXPLORANDO A FUNO PRINTFTamanho de campos: q possvel estabelecer o tamanho mnimo para a impresso de um campo Main ( ) { printf (os alunos so %2d \ n, 350); printf (os alunos so %4d \ n, 350); printf (os alunos so %5d \ n, 350);

} Sada: os alunos so 350 os alunos so 350 os alunos so 350

Note: Main ( ) { printf ( %3.1f \ n, 3456.78); printf ( %10.3f \ n, 3456.78); } Sada: 3456.8 3456.780

A FUNO SCANF( )qfuno de E / S qcomplemento de printf( ) Sintaxe: scanf(expresso de controle, lista de argumentos)

expresso: % ou %* ex: Main ( ) { int num; scanf( %d, &num); scanf( %*f ); }

lista: &varivel

Main ( ) { char letra; scanf ( %*d %c, &letra); }

O OPERADOR DE ENDEREO (&)

1 Kbyte = 1024 endereos 1 Mbyte = 1024 x 1024 = 1.048.576 endereos 8 Mbyte = 8 x 1024 x 1024 = 8 x 1.048.576 = 8.388.608 endereos 0 at 8.388.607 1 Gbyte = 1024 x 1024 x 1024 = 1.073.741.824

qum endereo de memria o nome que o computador usa para identificar uma varivel qtoda varivel ocupa uma rea de memria e seu endereo o do primeiro byte por ela ocupado Ex : inteiro 2 bytes float 4 bytes char 1 byte Quando usamos & precedendo uma varivel, estamos falando do endereo da mesma na memria Ex: Main ( ) { int num; num = 2; printf (valor = %d, endereo = %Iu, num, &num); } Sada: valor = 2, endereo = 1230 varia conforme mquina / memria

CDIGO DE FORMATAO SCANF( )%c %d %e %f %o %x %s %lf Ex: caracter inteiro nmero ou notao cientfica ponto flutuante octal hexadecimal string (cadeia de caracteres) double

Main ( ) { char a ; printf ( digite um caracter ); scanf ( % c, &a ); printf ( \n %c = %d em decimal, a, a); printf (%o em octal, %x em hexadecimal, a, a);

}

Digitando m: m = 109 em decimal, 155 em octal, 6d em hexadecimal

FUNES GETCHE( ) E GETCH( )

qA funo scanf obriga que a tecla seja pressionada aps a entrada dos dados qa biblioteca de C oferece funes que lem dados sem esperar

getche( ): l um caracter do teclado ecoando-o na tela getch( ): l um caracter do teclado sem eco-lo na tela Ex : main ( ) { char ch; printf ( digite um caracter); ch = getche( ); printf ( \n todos sabem que voc digitou %c, ch); }

Executando: digite um caracter: a todos sabem que voc digitou a

USANDO GETCH ...Main ( ) { char ch; ch = getch( ); printf ( \ n somente agora saberemos);

printf (que voc digitou %c, ch); } Executando: Digite um caracter: Somente agora saberemos que voc digitou b

Aritmticosqbinrios: qunrio: Ex: Int a, b; b = 3; b = a * b; a = b + 2; b = 7 % 2; = + * / %

Atribuio em: qC uma expresso, logo: a = 5; a = b = 4 * a; qPascal no , logo: a := 5; a := b := 4 * a; invlido a := 5; b := 4 * a; a := b;

Nota:

a = 2000; vlido 2000 = a; invlido constante

Mais um Exemplo ...Main ( ) { int nota, conceito; printf ( entre com a nota e o conceito); scanf ( %d %d, &nota, &conceito); printf ( sua nota final %d, nota * conceito); }

Mais um exemplo ...Main ( ) { int resto, divisor, dividendo; printf(entre com 2 nmeros); scanf( %d %d , &dividendo, &divisor);

resto = dividendo % divisor; printf(o resto da diviso inteira de %d, dividendo); printf(por %d = %d, divisor, resto); } Sada: entre com 2 nmeros 10 4 o resto da diviso inteira de 10 por 4 = 2

OPERADORES DE INCREMENTO (++) E DECREMENTO (--)qIncrementam / decrementam uma unidade de seu operando qmodos distintos qpr - fixado qps - fixado ex: int n; n = 0; n++; ++n;

n = n + 1; n = n + 1;

n=1 n=2

Se o operador usado em uma instruo: n = 5; x = n++; ex: n = 5; x = n++ * 3; x = 5 (usa a varivel e depois n=6 incrementa) x = 15 n=6

ex: n = 5; x = ++n * 3; ex: n = 6; x = n-- / 2;

n=6

x = 6 * 3 = 18 n=5

x = 6/2 = 3

MAIS EXEMPLOS: Ex: n = 5; x = --n / 2; n = 4 x = 4/2 = 2

Main( ) { int num = 0; printf ( %d, num); printf ( %d, num++); printf ( %d, num); } Sada:

0 0 1

Main ( ) { int num = 0; printf ( %d, num); printf ( %d, ++num); printf ( %d, num); } Sada: 0 1 1 E se no lugar de num++ e ++num tivssemos num-- e --num, qual seria a sada?

PRECEDNCIAPor enquanto: - (unrio) * / % + - (binrio) = Ou seja: x = 3 * a - b (3 * a) - b x = y = 5 % 2 x = (y = (5 % 2)) Agora: - ++ -* / % + - (binrio) = Ou seja: x = 3 * a++ - b (3 * (a++)) - b y = 3 * --a - b (3 * (--a)) - b z = a * b++ a * (b ++) Obs: ++, -- s podem ser usados com variveis Erro: (a * b) ++; 5++;

CUIDADO COM PRINTF( )

Ex: n = 5; printf ( %d %d %d \n, n, n + 1, n++); sada: 5 6 5 sada: 6 7 5 (avaliao feita esquerda) (avaliao feita direita)

A maneira de avaliar imprevisvel

Ex:

Main ( ) { int n, i = 3; n = i * (i + 1) + (++i); printf (n = %d, n); }

turbo c

sada: n = 24 Mas: i = 3; printf(%d %d %d, i = i + 1, i = i + 1, i = i + 1); sada: 6 5 4

OPERADORES ARITMTICOS DE ATRIBUIOq+=, -=, *=, /=, %= qatribuir um novo valor varivel dependendo do operador e da expresso a direita A sintaxe: x op= exp equivalente a x = (x) op (exp) Ex: i += 2 x *= y + 1 t /= 4

i = i + 2; x = x * (y + 1) t = t/4

p %= 6 h -= 3

p= p%6 h = h - 3;

produz cdigo de mquina mais eficiente

OPERADORES RELACIONAISqUsados para comparaes > maior >= maior ou igual < menor = != += -= *=

/=

%=

Comentriosqinformao acrescentada ao cdigo para facilitar sua compreenso q ignorado pelo compilador (no faz parte do cdigo objeto) qComea com /* terminando com */ Ex: /* isto um exemplo de comentrio */ main ( ) { printf ( apenas um exemplo); }

COMENTRIOSObs: /* ou */ dentro de um comentrio Invlido: Ex: /* isto no um /* comentrio */

vlido: / * comentrio em mais de uma linha */

ESTRUTURAS DE REPETIOMain ( ) { printf (1); printf (2); : : : printf (10); } sada: 1 2 3 4 ... 10 Como imprimir os 1000 1os nmeros a partir de 1? Soluo 1: { Main ( ) printf (1); printf (2); : : : printf (1000); } qfor, while, do-while qrepetir uma sequncia de comandos Main ( ) { int num;

for (num = 1; num