Upload
gil2173
View
520
Download
5
Embed Size (px)
Citation preview
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, ¬a, &conceito); printf ( sua nota final %d, nota * conceito); }
Mais um exemplo ...Main ( ) { int resto, divisor, dividendo; printf(entre com 2 nmeros); scanf( %d %d , ÷ndo, &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