Anda di halaman 1dari 14

Algoritmos e Estruturas de Dados

Histrico
A linguagem C uma linguagem de programao programa genrica inventada na dcada de 1970 por Dennis gen d Ritchie.

Linguagem C - Conceitos Bsicos B

O ANSI (American National Standard Institute) (American Institute) padronizou a verso ANSI-C ANSI-

Prof. Patrick Pedreira

C uma linguagem de mdio nvel


Alto nvel n Ada Pascal Cobol Fortran Basic Mdio nvel n C++ C Baixo nvel n Assembly

Por que estudar C?


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

1 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message.

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

O C Case Sensitive
Caracteres maisculos e minsculos fazem mai min diferena: diferen

Soma soma SOMA SomA

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

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

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

Exemplo:

2 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message.

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

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

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

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

Colocando // em uma linha.


Tudo que estiver direita do smbolo considerado como s um comentrio. coment

3 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message.

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

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

double nmero real de preciso dupla

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

Tipos de dados :: Modificadores


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

char int float double


* Depende do compilador

1 4* 4 8

8 32* 32 64

4 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message.

Tipos de dados :: Modificadores


Ao tipo float no se pode aplicar nenhum modificador. Ao tipo double pode-se aplicar apenas o podemodificador long. Os quatro modificadores podem ser aplicados a inteiros (int). O modificador unsigned serve para especificar variveis sem sinal, instruindo o compilador a vari sinal, 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: n
long int: reserva mais bits que o tipo int short int: reserva menos bits que o tipo int

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

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 n 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 d dez dgitos de preciso d dez dgitos de preciso d

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

5 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message.

Identificadores :: Exemplos
Permitido
int int _mes _mes int int ano_atual ano_atual float temp1 float temp1 char palavra_digitada char palavra_digitada

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

Constantes so valores fixos que no podem ser modificados em nenhuma parte do programa. Sua definio no usa ponto-e-vrgula, nem defini pontorgula, sinal de igualdade. igualdade.
#define <identificador> <valor> #define <identificador> <valor> Exemplos: #define #define #define #define #define #define PI PI ANO ANO LETRA LETRA 3.1415 3.1415 2007 2007 ' 'A' A'

Constantes
Costuma-se definir o nome das constantes com Costumaletras maisculas, para diferenci-los de nomes mai diferenci de variveis e funes. vari fun Essa prtica melhora a legibilidade do pr programa. Definio de constantes facilita a manuteno Defini manuten do programa.

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

6 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message.

Operador de Atribuio
Exemplos:
atribuio de valor atribui

Caractere String de caracteres


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

letra letra ano ano temperatura temperatura nova_letra nova_letra float cateto float cateto area_ret area_ret

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

atribuio de uma atribui varivel a outra vari definio e atribuio defini atribui atribuio de frmula atribui f

char letra = 'A';

0100 0001

Varivel Vari

Memria Mem

Caractere String de caracteres


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

Operadores
Aritmticos Aritm Relacionais Lgicos

char nome[] = "ABC";

B
n caracteres Varivel Vari

0100 0100 0100 0000

0001 0010 0011 0000

n+1 posies posi

Memria Mem

7 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message.

Operadores Aritmticos
Operador + * / % ++ -Adio Adi Subtrao Subtra Multiplicao Multiplica Diviso Resto de diviso Incremento Decremento Ao Exemplo x = A + 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 * PI * raio; 2 * PI * raio; b*b 4*a*c; b*b 4*a*c;

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

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

Operadores Aritmticos :: Incremento e decremento


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

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

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


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

8 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message.

Operadores Aritmticos :: Incremento e decremento


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

Operadores Aritmticos :: Incremento e decremento


Se a operao parte de uma expresso: opera expresso:
Prefixo: Valor usado na expresso o valor incrementado/decrementado. incrementado/decrementado. Sufixo: Operao incremento/decremento ser realizada depois Opera ser que o valor for usado na expresso. int nn == 0, mm == 0, a, b, c, d; int 0, 0, a, b, c, d; n++; /* resultado: nn == 11 */ n++; /* resultado: */ ++m; /* resultado: mm == 11 */ ++m; /* resultado: */ n--; --n; /* resultado: nn == -1 */ n--; --n; /* resultado: -1 */ aa == n++; /* resultado: aa == -1; nn =0 */ n++; /* resultado: -1; =0 */ bb == ++m; /* resultado: bb == 2; mm == 22 */ */ ++m; /* resultado: 2; cc == 2*(m++); /* resultado: cc == 4; mm == 3*/ 2*(m++); /* resultado: 4; 3*/ dd == 3*(++n); /* resultado: dd == 3; nn == 11 */ */ 3*(++n); /* resultado: 3;

Se a operao aparece isolada, ambas notaes opera isolada, nota so equivalentes:


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

Operaes combinadas com atribui


Uma operao pode ser opera combinada com a atribuio em um atribui mesmo operador.
Forma normal x=x+5 x=x-a Forma combinada x += 5 x -= a x *= k x /= x+1 x &= k ... ...

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

> >= < <= == !=

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

Embora sejam mais eficientes, tornam o eficientes, programa mais difcil de dif se compreendido.

x=x*k x = x / (x+1) x=x&k ... ...

9 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message.

Operadores Relacionais :: Exemplos


int int cond; cond; int int aa == 3; 3; float xx == 1.5; float 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 == x; a/2.0 == x; a/2 == x; a/2 == x; aa != 2*x; != 2*x; aa >= x; >= x; a/3 <= x; a/3 <= x; a/2 >> 2; a/2 2; a; a; aa 2*x; 2*x; /* cond=1 -> VV */ /* cond=1 -> */ /* cond=1 -> VV */ /* cond=1 -> */ /* cond=0 -> FF */ /* cond=0 -> */ /* cond=0 -> FF */ /* cond=0 -> */ /* cond=1 -> VV */ /* cond=1 -> */ /* cond=1 -> VV */ /* cond=1 -> */ /* cond=0 -> FF */ /* cond=0 -> */ /* cond=3 -> VV */ /* cond=3 -> */ /* cond=0 -> FF */ /* cond=0 -> */

Operadores Lgicos
Operam sobre os valores lgicos das variveis, sem vari considerar seu bits individuais.
Operador Ao

&&

AND (E)

||

OR (OU)

NOT (NO)

Operadores Lgicos :: Exemplos

Precedncia entre operadores


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

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

! *

==

!=

10 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message.

Comandos de Entrada e Sada


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

Comandos de Sada :: printf()


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

Comandos de Entrada: Entrada:


Funo scanf() Fun scanf() Funo gets() Fun gets() Funo getchar() Fun getchar()

Comandos de Sada :: printf()


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

Comandos de Sada :: printf()


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

nova linha tabulao horizontal tabula a prpria contra-barra pr contra backspace aspas apstrofe ap cdigo hexadecimal do caractere ASCII alerta sonoro

argumentos so as variveis cujos contedos vari conte

\" \' \xnnn \a

sero exibidos na tela.

11 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message.

Comandos de Sada :: printf()


Comandos de formato disponveis (comeam por %): dispon (come
%d (%i) nmeros inteiros em decimal (%i) %f %lf %c %s %o %% %p nmeros reais do tipo float nmeros reais do tipo double caractere seqncia de caracteres (string) seq nmeros em octal (base 8) o prprio caractere % pr endereos de memria (em hexadecimal) endere mem 12

Comandos de Sada :: putchar()


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

%e (%E) nmeros reais em notao cientfica (%E) nota cient

O resultado do comando a impresso do caractere corresponde ao cdigo ASCII do argumento. c

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

Argumento pode ser do tipo int ou char. char.

Comandos de Entrada :: scanf()


Rotina de leitura formatada de dados inseridos pelo usurio pelo teclado. usu scanf (string_de_controle, argumentos); scanf (string_de_controle, argumentos);

Comandos de Entrada :: gets()


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

gets(nome_da_varivel); gets(nome_da_varivel); string_de_controle: comandos de formato (%_), string_de_controle: (%_), os mesmos relacionados para o printf(). printf(). argumentos: endereo das variveis onde sero argumentos: endere vari colocados os valores de entrada: &nome_varivel. nome_vari vel.
O operador & representa o endereo de uma varivel. endere vari

12 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message.

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. Devenome_da_varivel = getchar(); nome_da_varivel = getchar();

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

No fazem parte do ANSI C padro:


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

Tabela ASCII
American Standard Code for Information Interchange (ASCII) um conjunto de cdigos c para o computador representar nmeros, letras, n pontuao e outros caracteres. pontua

Exemplo programa em C referente ao algoritmo de inverso de nmeros


Exerccio 5 pgina 38 Exerc p

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

13 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message.

/* Arquivo Capitulo_02_05.c */ /* stdio.h a biblioteca em C que implementa as funes de entrada e sada */ stdio.h fun sa #include <stdio.h> stdio.h> /* mdulo principal */ m int main() main() /* O caractere "{" a abertura do bloco. Corresponde ao "incio". "in O caractere "}" corresponde ao "fim" */ { /* A declarao de variveis se inicia pelo tipo seguido pelas variveis */ declara vari vari int valor_inicial, valor_temp, milhar, centena, dezena, unidade, valor_invertido; valor_inicial, valor_temp, valor_invertido; /* "printf" corresponde ao comando "escreve". O /n faz pular para a prxima linha "printf" pr */ printf("Entre com um nmero.\n"); printf("Entre nmero.\ /* "scanf" corresponde ao comando "leia" */ "scanf" /* necessrio colocar o caractere "&" antes da varivel que ser lida, para necess vari ser indicar que a mesma ser alterada */ ser /* necessario indicar o tipo da varivel a ser lida. vari No caso, os inteiros so indicados pelo "%d" */ scanf("%d", &valor_inicial); scanf("%d", &valor_inicial);

/* o caractere "=" corresponde a "" */ " valor_temp = valor_inicial; valor_inicial; milhar = valor_temp / 1000; /* O operador "%" corresponde ao operador "resto" */ valor_temp = valor_temp % 1000 ; centena = valor_temp / 100; valor_temp = valor_temp % 100; dezena = valor_temp / 10; valor_temp = valor_temp % 10; unidade = valor_temp; valor_temp; valor_invertido = unidade * 1000; valor_invertido = valor_invertido + ( dezena * 100 ); valor_invertido = valor_invertido + ( centena * 10 ); valor_invertido = valor_invertido + milhar; /* Na escrita, o %d substitudo pela varivel na seqncia. No caso a seguir, O valor substitu vari seq da varivel valor_inicial inserido na posio do primeiro %d e o valor da varivel vari posi vari valor_invertido na posio do segudo %d */ posi printf("O nmero %d invertido %d\n", valor_inicial,valor_invertido); printf("O n %d\ valor_inicial,valor_invertido); /* Retorno do mdulo principal */ m return 0; }

Questes

14 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message.

Anda mungkin juga menyukai