Вы находитесь на странице: 1из 59

Algoritmos e Estruturas de Dados I IEC012

Linguagem C - Guia de bolso -

Prof. Csar Melo

Histrico
A linguagem C uma linguagem de programao inventada na dcada de 1970 por Dennis Ritchie Brian Kennigaham. O ANSI (American National Standard Institute) padronizou a verso ANSI-C

http://en.wikipedia.org/wiki/C_programming_language

Por que estudar C?


Versatilidade: ele possui tanto caractersticas de "alto nvel" quanto de "baixo nvel". Poder: possui ampla biblioteca de funes e utilizado na construo de software para os mais diversos projetos. Portabilidade: possvel adaptar um programa em C de um tipo de computador para outro.

Primeiros passos
Um programa em C consiste de vrias funes encadeadas. Uma funo um bloco de cdigo de programa que pode ser usado diversas vezes em sua execuo. Blocos de cdigo so delimitados por chaves: {} O uso de funes permite que o programa fique mais legvel, mais estruturado.

O C Case Sensitive
Caracteres maisculos e minsculos fazem diferena:

Soma soma SOMA SomA


Palavras reservadas do C (if ou for, por exemplo) s podem ser escritos em minsculas, pois seno o compilador interpretar como variveis.

Falando em palavras reservas do C


So32 no total

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

Estrutura Geral
tipo_de_retorno tipo_de_retorno main() main() { { comandos comandos return return valor; valor; } } Exemplo: int int main() main() { { int int x, x, y; y; x x= =x x+ + y; y; return return 0; 0; } }

A funo main()
Todo programa deve ter uma nica funo main. A funo main o ponto de partida quando o programa executado. Arquivos auxiliares no devem conter a funo main.

Bibliotecas
Programas que possuem a especificao das funes pr-definidas da linguagem. As bibliotecas que sero usadas devem ser os primeiros comandos de um programa em C.

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

Bibliotecas
Programas que possuem a especificao das funes pr-definidas da linguagem. As bibliotecas que sero usadas devem ser os primeiros comandos de um programa em C.
#include #include <nome_da_biblioteca.h> <nome_da_biblioteca.h> int int main() main() { { <aoes> <aoes> return return 0; 0; } }
1

Bibliotecas :: Exemplos
stdio.h: biblioteca de funes de entrada e sada (leitura e escrita de dados). math.h: biblioteca de funes matemticas (potenciao, raiz quadrada, funes trigonomtricas, etc.). string.h: biblioteca de funes para manipulao de conjunto de caracteres (por exemplo, palavras).

Comentrios
Comentrios em C podem ser escritos em qualquer lugar do texto para facilitar a interpretao do algoritmo. Tipos de comentrios:
Delimitados por /* e */.
Todo o texto delimitado considerado pelo compilador como um comentrio.

Colocando // em uma linha.


Tudo que estiver direita do smbolo considerado como um comentrio. No reconhecido pelo padro C-ANSI 1

Variveis, Conceito
Representa um espao na memria do computador que usado para amazenar um determinado tipo de dado;
Identificadas na fase de modelagem do problema; Ou no...

Variveis so de um determinado tipo e possem nomes;

Variveis
Devem ser declaradas antes de serem usadas, no incio de um bloco de cdigo. Forma geral da declarao de variveis:
tipoDaVarivel tipoDaVarivel lista_de_variveis; lista_de_variveis; Exemplo: char char float float int int letra; letra; temperatura, temperatura, pressao; pressao; dia, dia, mes, mes, ano; ano;

Variveis, nome
Variveis so armazenadas na memria do computador.
Endereo 0000 0001 0002 0003 0004 0005 ... FFFF Contedo

Tipos de dados
A linguagem C tem 5 tipos bsicos:
char int float void caracteres ASCII nmero inteiro nmero real de preciso simples sem valor

double nmero real de preciso dupla

Tipos de dados
Tipo Tamanho (bytes) Tamanho (bits)

char int float double


* Depende do compilador

1 4* 4 8

8 32* 32 64

Tipos de dados :: Modificadores


Um modificador de tipo altera o intervalo de valores que uma varivel pode armazenar ou como o compilador representa um valor. Existem quatro modificadores de tipo:
signed unsigned long short

Tipos de dados :: Modificadores


Ao tipo float no se pode aplicar nenhum modificador. Ao tipo double pode-se aplicar apenas o modificador long. Os quatro modificadores podem ser aplicados a inteiros (int). O modificador unsigned serve para especificar variveis sem sinal, instruindo o compilador a no considerar o primeiro bit como sinal.

Tipos de dados :: Modificadores


O nmero de bits do tipo int normalmente corresponde ao tamanho da palavra de uma determinada arquitetura de computador. Dependendo do compilador, os modificadores short e long alteram a quantidade de bits reservados para representar nmeros inteiros:
short int: long int:

reserva menos bits que o tipo int

reserva mais bits que o tipo int

Cada compilador livre para escolher tamanhos adequados para o seu prprio hardware.

Tipos de dados :: Resumo (compilador gcc)


Tipo char unsigned char signed char int unsigned int signed int short int unsigned short int signed short int long int unsigned long int signed long int float double long double Tamanho em bits 8 8 8 32 32 32 16 16 16 32 32 32 32 64 80 Faixa de nmeros representados -128 a 127 0 a 255 -128 a 127 -2.147.483.647 a 2.147.483.647 0 a 4.294.967.295 -2.147.483.647 a 2.147.483.647 -32.767 a 32.767 0 a 65.535 -32.767 a 32.767 -2.147.483.647 a 2.147.483.647 0 a 4.294.967.295 -2.147.483.647 a 2.147.483.647 seis dgitos de preciso dez dgitos de preciso dez dgitos de preciso

Identificadores
So os nomes que damos aos objetos utilizados (variveis, constantes, funes, etc.) Podem ter qualquer nome, desde que:
Comece com uma letra ou sublinhado (underscore) _ Os caracteres subseqentes devem ser letras, nmeros ou _. No seja igual a:
uma palavra reservada, uma funo declarada bibliotecas do C.

Identificadores :: Exemplos
Permitido
int int _mes; _mes; int int ano_Atual; ano_Atual; float float temp1; temp1; char char palavraDigitada; palavraDigitada;

No permitido!
char char 2a_feira; 2a_feira; int int valores$; valores$; float float float; float; int int main; main; char char stdio; stdio;

Constantes
So valores que permancem inalterados durante toda execuo do programa. Sua definio no usa ponto-e-vrgula, nem sinal de igualdade.
#define #define <identificador> <identificador> <valor> <valor> Exemplos: #define #define #define #define #define #define PI PI ANO ANO LETRA LETRA 3.1415 3.1415 2009 2009 ' 'A' A'

Constantes
Costuma-se definir o nome das constantes com letras maisculas, para diferenci-los de nomes de variveis e funes. Essa prtica melhora a legibilidade do programa. Definio de constantes facilita a manuteno do programa.

Operador de Atribuio
Uma varivel, ao ser definida, contm um valor qualquer e imprevisvel. Costuma-se dizer que contm lixo de memria. O comando de atribuio (=) permite alterar o valor (contedo) de uma varivel.
<varivel> <varivel> = = <valor>; <valor>;

Operador de Atribuio
Exemplos:
atribuio de valor

letra ano temperatura novaLetra float cateto areaRet

= = = = = =

'H'; 2007; 38.9; letra; 3.1; base * altura;

atribuio de uma varivel a outra definio e atribuio atribuio de frmula

Caractere String de caracteres


Quando uma varivel possui apenas um caractere, ele ocupa apenas uma posio de memria:

char letra = 'A';

0100 0001

Varivel

Memria

Caractere String de caracteres


Uma string de n caracteres ocupa n+1 posies de memria. A posio adicional corresponde ao valor zero (\NULL em ASCII), indicativo do final da string.

char nome[] = "ABC";

0100 0100 0100 0000

0001 0010 0011 0000

n+1 posies

n caracteres Varivel Memria

Operadores
Aritmticos Relacionais Lgicos Bit a bit

Operadores Aritmticos
Operador + * / % ++ -Adio Subtrao Multiplicao Diviso Resto de diviso Incremento Decremento Ao Exemplo x = x + y; x = x y; x = 8 * y; x = y / 2; x = y % 2; x++; y--;

Operadores Aritmticos
Diversos operadores podem ser utilizados em uma mesma expresso:
area area delta delta = = = = 2 2* * PI PI * * raio; raio; b*b b*b 4*a*c; 4*a*c;

A ordem de execuo dos operadores pode ser determinada explicitamente pelo uso de parnteses:
media media delta delta = = = = (a (a + +b b+ + c)/2; c)/2; (b*b) (b*b) (4*a*c); (4*a*c);

Operadores Aritmticos
Quando no h parnteses, o compilador usa regras de precedncia para determinar qual operao executar primeiro
Maior Maiorprecedncia precedncia - (unrio) (unrio) * */ /% % + +Menor Menorprecedncia precedncia

Se duas operaes tm a mesma precedncia, segue-se a ordem da esquerda para a direita.


5

Operadores Aritmticos :: Incremento e decremento


O operador incremento de 1 (++) realiza duas operaes:
Soma 1 ao valor atual da varivel Armazena o resultado na prpria varivel Em vez de x = x + 1; , escreve-se x++;

De forma semelhante funciona o operador decremento de 1 (--).


Em vez de x = x - 1; , escreve-se x--;

Operadores Aritmticos :: Incremento e decremento


Os operadores ++ e -- podem ser usados como:
Prefixos: antes da varivel: Sufixos: aps a varivel:
++x x++

Se a operao aparece isolada, ambas notaes so equivalentes:


int int nn == 6, 6, mm == 3; 3; n++; /* n++; /* resultado: resultado: nn == 77 */ */ ++m; /* ++m; /* resultado: resultado: mm == 44 */ */ n--; /* n--; /* resultado: resultado: nn == 66 */ */ --m; /* --m; /* resultado: resultado: mm == 33 */ */

Operadores Aritmticos :: Incremento e decremento


Se a operao parte de uma expresso:
Prefixo: Valor usado na expresso o valor incrementado/decrementado. Sufixo: Operao incremento/decremento ser realizada depois que o valor for usado na expresso.

int int nn == 0, 0, mm == 0, 0, a, a, b, b, c, c, d; d; n++; /* */ n++; /* resultado: resultado: nn == 11 */ ++m; /* */ ++m; /* resultado: resultado: mm == 11 */ n--; /* */ n--; --n; --n; /* resultado: resultado: nn == -1 -1 */ aa == n++; /* n++; /* resultado: resultado: aa == -1; -1; nn =0 =0 */ */ bb == ++m; /* */ ++m; /* resultado: resultado: bb == 2; 2; mm == 22 */ cc == 2*(m++); */ 2*(m++); /* /* resultado: resultado: cc == 4; 4; mm == 33 */ dd == 3*(++n); */ 3*(++n); /* /* resultado: resultado: dd == 3; 3; nn == 11 */

Operadores Aritmticos :: Incremento e decremento


Avalie o valor das variveis aps cada operao:

int int nn == 0, 0, mm == 0, 0, a, a, b, b, c, c, d; d; n--; n--; --m; --m; n++; n++; ++n; ++n; aa == n--; n--; bb == --m; --m; cc == 2*(m--); 2*(m--); dd == 3*(--n); 3*(--n);

Operadores Aritmticos :: Incremento e decremento


Avalie o valor das variveis aps cada operao:

int int nn == 0, 0, mm == 0, 0, a, a, b, b, c, c, d; d; n--; /* */ n--; /* resultado: resultado: nn == -1 -1 */ --m; /* */ --m; /* resultado: resultado: mm == -1 -1 */ n++; /* */ n++; ++n; ++n; /* resultado: resultado: nn == 11 */ aa == n--; /* n--; /* resultado: resultado: aa == 1; 1; nn == 00 */ */ bb == --m; /* --m; /* resultado: resultado: bb == -2; -2; mm == -2 -2 */ */ cc == 2*(m--); 2*(m--); /* /* resultado: resultado: cc == -4; -4; mm == -3 -3 */ */ dd == 3*(--n); 3*(--n); /* /* resultado: resultado: dd == -3; -3; nn == -1 -1 */ */

Operadores bit a bit


Atuam sobre os bits individuais de uma varivel. No enxergam as variveis com um valor nico, mas sim como um conjunto de bits.
Operador Ao

& | ^ ~ >> <<

AND OR XOR (OR exclusivo) NOT Deslocamento de bits direita Deslocamento de bits esquerda 8

Operaes combinadas com atribuio


Uma operao pode ser combinada com a atribuio em um mesmo operador. Embora sejam mais eficientes, tornam o programa mais difcil de se compreendido.
Forma normal x=x+5 x=x-a x=x*k x = x / (x+1) x=x&k x = x << k ... Forma combinada x += 5 x -= a x *= k x /= x+1 x &= k x <<= k ... 9

Operadores Relacionais
Compara dois valores, produzindo um resultado lgico:
FALSO indicado pelo valor zero. VERDADEIRO indicado por um valor zero. Operador Ao

> >= < <= == !=

Maior do que Maior ou igual a Menor do que Menor ou igual a Igual a Diferente de

Operadores Relacionais :: Exemplos


int int cond; cond; int int aa == 3; 3; float float xx == 1.5; 1.5; cond cond cond cond cond cond cond cond cond cond cond cond cond cond cond cond cond cond == == == == == == == == == aa != != x; x; a/2.0 a/2.0 == == x; x; a/2 a/2 == == x; x; aa != != 2*x; 2*x; aa >= >= x; x; a/3 a/3 <= <= x; x; a/2 a/2 >> 2; 2; a; a; aa 2*x; 2*x; /* /* cond=1 cond=1 -> -> VV */ */ /* /* cond=1 cond=1 -> -> VV */ */ /* /* cond=0 cond=0 -> -> FF */ */ /* /* cond=0 cond=0 -> -> FF */ */ /* /* cond=1 cond=1 -> -> VV */ */ /* /* cond=1 cond=1 -> -> VV */ */ /* /* cond=0 cond=0 -> -> FF */ */ /* /* cond=3 cond=3 -> -> VV */ */ /* /* cond=0 cond=0 -> -> FF */ */ 10

Operadores Lgicos
Operam sobre os valores lgicos das variveis, sem considerar seu bits individuais. No confundir com operadores bit a bit.
Operador Ao

&& || !

AND (E) OR (OU) NOT (NO)

Operadores Lgicos :: Exemplos

int int cond; cond; int int aa == 3; 3; float float xx == 1.5; 1.5; cond cond cond cond */ */ cond cond cond cond cond cond cond cond cond cond == (a/2 (a/2 == == x) x) && && (a (a >> 2); 2); == (a (a != != x) x) || || (a/x (a/x << 2); 2); == == == == == /* /* cond=0 cond=0 -> -> FF */ */ /* /* cond=1 cond=1 -> -> VV

(x /* (x <= <= a) a) && && (a (a >= >= 2*x); 2*x); /* cond=1 cond=1 -> -> VV */ */ !(a/3 /* !(a/3 <= <= x); x); /* cond=0 cond=0 -> -> FF */ */ (a/2==x) || (a>=x) && !(2*x!=a); /* cond=1 -> V */ (a/2==x) || (a>=x) && !(2*x!=a); /* cond=1 -> V */ aa && /* && x; x; /* cond=1 cond=1 -> -> VV */ */ (a /* (a -- 2*x) 2*x) || || (x (x << a/2); a/2); /* cond=0 cond=0 -> -> FF */ */

11

Precedncia entre operadores


++ ! * % + > >= < <= == && || = += -= *= /= != / -Pr/ps incremento, decremento Menos Unrio Negao Multiplicao, diviso Mdulo (resto da diviso inteira) Subtrao, adio Relacionais Igual, diferente E lgico OU lgico Atribuio Menor precedncia Maior precedncia

Comandos de Entrada e Sada


Esto descritos na biblioteca stdio.h Comandos de Sada:
Funo printf() Funo putchar()

Comandos de Entrada:
Funo scanf() Funo getchar()

Comandos de Sada :: printf()


Funo para a escrita formatada no dispositivo de sada padro, normalmente o vdeo.
printf printf (mascaraDeImpressao, (mascaraDeImpressao, argumentos); argumentos);

Comandos de Sada :: printf()


mascaraDeImpresso consiste em: Caracteres que sero exibidos na tela Caracteres de controle (\) Comandos de formato, que definem a maneira como os argumentos sero mostrados (%) argumentos so as variveis cujos

contedos sero exibidos na tela.

Comandos de Sada :: printf()


Caracteres de controle imprimem caracteres especiais na sada:
\n \t \\ \b \" \'

nova linha tabulao horizontal a prpria contra-barra backspace aspas apstrofe

Comandos de Sada :: printf()


Comandos de formato disponveis(comeam por %):
%d (%i) nmeros inteiros em decimal %f nmeros reais do tipo float %lf nmeros reais do tipo double %e (%E) nmeros reais em notao cientfica %c %s %o %% %p caractere seqncia de caracteres (string) nmeros em octal (base 8) o prprio caractere % endereos de memria (em hexadecimal)

%x (%X) nmeros em hexadecimal (base 16)

12

Comandos de Sada :: printf()


Comandos de formato podem ser alterados para especificao da largura mnima de campo ou do nmero de casas decimais: %[alinhamento][tamanho][.][preciso]formato %[alinhamento][tamanho][.][preciso]formato
Especifica nmero de casas decimais a serem impressas. Especifica nmero de caracteres a serem impressos, incluindo o sinal e o ponto decimal. 0: completa com zeros esquerda para atingir o tamanho especificado 13 -: fora alinhamento esquerda

Comandos de Sada :: printf()


Outros comandos de alinhamento: + - imprime o sinal de + mesmo quando o nmero
positivo hexa

#x ou #X imprime 0x ou 0X esquerda do nmero #f, #e ou #E imprime o ponto decimal, mesmo para


inteiros

13a

Comandos de Sada :: putchar()


Escreve um caractere na tela a partir da posio atual do cursor. putchar putchar (<varivel>); (<varivel>);

O resultado do comando a impresso do caractere corresponde ao cdigo ASCII do argumento. Argumento pode ser do tipo int ou char.
14

Comandos de Entrada :: scanf()


Rotina de leitura formatada de dados inseridos pelo usurio pelo teclado.

scanf scanf (mascaraDeLeitura, (mascaraDeLeitura, argumentos); argumentos);

mascaraDeLeitura: comandos de formato (%_), os mesmos relacionados para o printf(). argumentos: endereo das variveis onde sero colocados os valores de entrada: &nome_varivel.
O operador & representa o endereo de uma varivel.

15

16

Comandos de Entrada :: gets()


Rotina de entrada que l uma seqncia de caracteres (string) at que seja pressionada a tecla ENTER.

gets(nomeDaVarivel); gets(nomeDaVarivel);

17

Comandos de Entrada :: getchar()


getchar() - rotina que espera uma tecla ser pressionada e devolve seu valor na tela. Deve-se pressionar ENTER depois de digitar o caractere. nomeDaVarivel nomeDaVarivel = = getchar(); getchar();

No fazem parte do ANSI C padro:


getche() - l caractere, exibe na tela, dispensa ENTER. getch() - l caractere, no exibe na tela, dispensa ENTER. 18

Modeladores (Cast)
Modeladores ou cast so aplicados a uma expresso para converter seu resultado em um tipo especificado.
(<tipo>) (<tipo>) <expresso> <expresso>

19

Questes

Tabela ASCII
American Standard Code for Information Interchange (ASCII) um conjunto de cdigos para o computador representar nmeros, letras, pontuao e outros caracteres. http://pt.wikipedia.org/wiki/ASCII
Binrio 0100 0001 0100 0010 0100 0011 0010 1011 0011 0001 Decimal 65 68 67 43 49 Hex 41 42 43 2B 31 Caractere A B C + 1

Вам также может понравиться