Anda di halaman 1dari 60

Programao em C

Aula 1 Livro: Edson Senne


Curso: Introduo a Computao turma C 1S2014 Prof. Marcio Merino Fernandes
1

Problema 1
Considere o seguinte problema:
Determinar o valor de y = seno(1,5).

Definies
Para resolver um problema de computao preciso escrever um texto. Este texto, como qualquer outro, obedece regras de sintaxe. Estas regras so estabelecidas por uma linguagem de programao. Este texto conhecido como:

Programa
3

Definies
Neste curso, ser utilizada a linguagem C. A linguagem C subconjunto da linguagem C++ e, por isso, geralmente, os ambientes de programao da linguagem C so denominados ambientes C/C++. Um ambiente de programao contm:
Editor de programas: viabiliza a escrita do programa. Compilador: verifica se o texto digitado obedece sintaxe da linguagem de programao e, caso isto ocorra, traduz o texto para uma sequncia de instrues em linguagem de mquina.

Cdigo binrio
4

Definies
Que ambiente de programao iremos utilizar?
Existem muitos, por exemplo: Microsoft Visual C++, Borland C++ Builder e DEV-C++. Ser utilizado neste curso o Microsoft Visual C++ Express
Grtis, no site da Microsoft. Verses recomendadas: 2008 2012

Definies
Porque o compilador traduz o programa escrito na linguagem de programao para a linguagem de mquina?
0101010110100010011 1000101010111101111 1010100101100110011 0011001111100011100 0101010110100010011 1000101010111101111 1010100101100110011 0011001111100011100

Compilador

Os computadores atuais s conseguem executar instrues que estejam escritas na forma de cdigos binrios. Um programa em linguagem de mquina chamado de programa executvel.
6

Erros de sintaxe
Ateno!
O programa executvel s ser gerado se o texto do programa no contiver erros de sintaxe. Exemplo: considere uma string. Ah?! O que isso?! Uma sequncia de caracteres delimitada por aspas. Se isso uma string e se tivssemos escrito: printf(y = %f,y); O compilador iria apontar um erro de sintaxe nesta linha do programa e exibir uma mensagem tal como:

undetermined string or character constant


7

Erros de sintaxe
Se o nome do programa p1.c, ento aps a compilao, ser produzido o programa executvel p1.exe. Executando-se o programa p1.exe, o resultado ser:

Problema Resolvido!

Erros de lgica
Ateno!
No basta obter o programa executvel!! Ser que ele est correto? Y = sin(1.5); Se ao invs de: Tivssemos escrito: Y = sin(2.5); O compilador tambm produziria o programa p1.exe, que executado, iria produzir:

Erros de lgica
Embora um resultado tenha sido obtido, ele no correto. Se um programa executvel no produz os resultados corretos, porque ele contm erros de lgica ou bugs. O processo de identificao e correo de erros de lgica denominado depurao (debug). O nome de um texto escrito em uma linguagem de programao chamado de programa-fonte. Exempo: o programa p1.c um programa-fonte.
10

Arquivos de cabealho
Note que o programa-fonte p1.c comea com as linhas:
#include <stdio.h> #include <stdlib.h>

Todo programa-fonte em linguagem C comea com linhas deste tipo. O que elas indicam?
Dizem ao compilador que o programa-fonte vai utilizar arquivos de cabealho (extenso .h, de header). E da? O que so estes arquivos de cabealho? Eles contm informaes que o compilador precisa para construir o programa executvel.

11

Arquivos de cabealho
Como assim? Observe que o programa p1.c inclui algumas funes, tais como: sin funo matemtica seno. printf funo para exibir resultados. Por serem muito utilizadas, a linguagem C mantm funes como estas em bibliotecas. Ateno! O contedo de um arquivo de cabealho tambm um texto.
12

Arquivos de cabealho
Ao encontrar uma instruo #include em um programa-fonte, o compilador traduz este texto da mesma forma que o faria se o texto tivesse sido digitado no programa-fonte. Portanto, as linhas:
#include <stdio.h> #include <stdlib.h>

indicam ao compilador que o programa p1.c utilizar as instrues das bibliotecas stdio e stdlib.
13

Processo de compilao
O processo de compilao, na verdade, se d em duas etapas:
Fase de traduo: programa-fonte transformado em um programa-objeto. Fase de ligao: junta o programa-objeto s instrues necessrias das bibliotecas para produzir o programa executvel.
Compilador Programa Objeto Ligador Programa Executvel

Programa Fonte

Programa Objeto das Bibliotecas


14

Funo main
A prxima linha do programa :
int main(int argc, char *argv[])

Esta linha corresponde ao cabealho da funo main (a funo principal, da o nome main). O texto de um programa em Linguagem C pode conter muitas outras funes e SEMPRE dever conter a funo main.
int main(int argc, char *argv[])

Indica o tipo do valor produzido pela funo.

Nome da Funo.

Lista de parmetros da funo.


15

Funo main
A Linguagem C case sensitive. Isto , considera as letras maisculas e minsculas diferentes. Ateno!
O nome da funo principal deve ser escrito com letras minsculas: main. Main ou MAIN, por exemplo, provocam erros de sintaxe.

Da mesma forma, as palavras int e char, devem ser escritas com letras minsculas.

16

Tipos de dados

A soluo de um problema de clculo pode envolver vrios tipos de dados. Caso mais comum so os dados numricos:
Nmeros inteiros (2, 3, -7, por exemplo). Nmeros com parte inteira e parte fracionria (1,234 e 7,83, por exemplo).

Nas linguagens de programao, d-se o nome de nmero de ponto flutuante aos nmeros com parte inteira e parte fracionria. Da mesma forma que instrues, os dados de um programa devem ser representados em notao binria. Cada tipo de dado representado na memria do computador de uma forma diferente.
17

Representao de nmeros inteiros


Existem vrias maneiras de representar nmeros inteiros no sistema binrio. Forma mais simples a sinal-magnitude:
O bit mais significativo corresponde ao sinal e os demais correspondem ao valor absoluto do nmero.

Exemplo: considere uma representao usando cinco dgitos binrios (ou bits).
Decimal
+5 -3

Binrio
00101 10011

Desvantagens: - Duas notaes para o zero (+0 e -0). - A representao dificulta os clculos.
00101 10011 Soma 11000 Que nmero esse? 5 3 = 8 ???
18

Representao de nmeros inteiros


Outra representao possvel, habitualmente assumida pelos computadores, a chamada complemento-de-2:
Para nmeros positivos, a representao idntica da forma sinal-magnitude. Para os nmeros negativos, a representao se d em dois passos:
1. Inverter os bits 0 e 1 da representao do nmero positivo; 2. Somar 1 ao resultado.

Exemplo:
Decimal
+6 -6

Binrio
00110 11001 1 11010 (bits invertidos) (somar 1)
19

Representao de nmeros inteiros


Note o que ocorre com o zero:
Decimal
+0 -0

Binrio
00000 11111 1 00000 (bits invertidos) (somar 1)

Note que o vai-um daqui no considerado, pois a representao usa apenas 5 bits.

E a soma?
Decimal
+5 -3 Somando: 00101 11101 00010

Binrio
00101 11100 + 1 = 11101

Que corresponde ao nmero +2!


20

Nmeros de ponto flutuante


Nmeros de ponto flutuante so os nmeros reais que podem ser representados no computador. Ponto flutuante no um ponto que flutua no ar! Exemplo:
Representao com ponto fixo: 12,34. Representao com ponto flutuante: 0,1234 x 102.

Ponto Flutuante ou Vrgula Flutuante? A representao com ponto flutuante segue padres internacionais (IEEE-754 e IEC-559).

21

Nmeros de ponto flutuante


A representao com ponto flutuante tem trs partes: o sinal, a mantissa e o expoente. No caso de computadores, a mantissa representada na forma normalizada, ou seja, na forma 1.f, onde f corresponde aos demais bits. Ou seja, o primeiro bit sempre 1. Exemplo 1:
Decimal
+13.25

Binrio
1101.01

Binrio normalizado
1.10101 x 23 Expoente
22

Mantissa

Nmeros de ponto flutuante


Exemplo 2:
Decimal
+0.25

Binrio
0.01

Binrio normalizado
1.0 x 2-2 Expoente

Mantissa

Existem dois formatos importantes para os nmeros de ponto flutuante:


Preciso simples (SP). Preciso dupla (DP).

23

Nmeros de ponto flutuante


Preciso Simples
Ocupa 32 bits: 1 bit de sinal, 23 bits para a mantissa e 8 bits para o expoente (representado na notao excesso-de-127). Exemplo:
Ponto flutuante 1.10101 x 23 Ponto flutuante 1.0 x 2-2 0 0 Representao SP 10000010 10101000000000000000000

Representao SP 01111011 00000000000000000000000

O primeiro bit da mantissa de um nmero de ponto flutuante no precisa ser representado (sempre 1).
24

Nmeros de ponto flutuante


Preciso Simples - Valores especiais

5/0

-3/0

0/0 ou /
25

Nmeros de ponto flutuante


Observaes Preciso Simples:
Dado que para o expoente so reservados 8 bits, ele poder ser representado por 256 (28) valores distintos (0 a 255). Usando-se a notao excesso-de-127, tem-se:
para um expoente igual a -127, o mesmo ser representado por 0 (valor especial! Nmero Zero). para um expoente igual a 128, o mesmo ser representado por 255 (valor especial! Infinito).

Concluso, os nmeros normalizados representveis possuem expoentes entre -126 e 127.


26

Nmeros de ponto flutuante


Preciso Dupla Ocupa 64 bits: 1 bit de sinal, 52 bits para a mantissa e 11 bits para o expoente (representado na notao excesso-de-1023). Exemplo: Similar ao abordado para preciso simples...

27

Representao de dados no-numricos


A soluo de um problema pode envolver dados no numricos. Por exemplo, o programa p1.c inclui strings (sequncias de caracteres delimitadas por aspas).

28

Representao de dados no-numricos


Existem tambm padres internacionais para a codificao de caracteres (ASCII, ANSI, Unicode). A Linguagem C adota o padro ASCII (American Standard Code for Information Interchange):
Cdigo para representar caracteres como nmeros. Cada caractere representado por 1 byte, ou seja, uma seqncia de 8 bits. Por exemplo:
Caractere A @ a Decimal 65 64 97 ASCII 01000001 01000000 01100001
29

Variveis
Os dados que um programa utiliza precisam ser armazenados na memria do computador. Cada posio de memria do computador possui um endereo.
8
1000

3.25
1001

a
1002

g
1003

q
1004

2
1005

*
1006

1
1007

1008

1009

1010

1011

Memria

1012

1013

1014

1015

1016

1017

1018

1019

30

Variveis
A partir dos endereos, possvel para o computador saber qual o valor armazenado em cada uma das posies de memria. Como a memria pode ter bilhes de posies, difcil controlar em qual endereo est armazenado um determinado valor! Para facilitar o controle sobre onde armazenar informao, os programas utilizam variveis. Uma varivel corresponde a um nome simblico de uma posio de memria. Seu contedo pode variar durante a execuo do programa.

31

Variveis
Exemplo de varivel:

A varivel y ir armazenar o valor de sin(1.5).


32

Variveis
Cada varivel pode possuir uma quantidade diferente de bytes, uma vez que os tipos de dados so representados de forma diferente. Portanto, a cada varivel est associado um tipo especfico de dados. Logo:
O tipo da varivel define quantos bytes de memria sero necessrios para representar os dados que a varivel armazena.

33

Variveis
A Linguagem C dispe de quatro tipos bsicos de dados. Assim, as variveis podero assumir os seguintes tipos:
Tipo
char int

Tamanho (bytes)
1 4

Valor
Um caractere (ou um inteiro de 0 a 127). Um nmero inteiro. Um nmero de ponto flutuante (SP). Um nmero de ponto flutuante (DP).
34

float

double

Variveis
Dentro do programa, as variveis so identificadas por seus nomes. Portanto, um programa deve declarar todas as variveis que ir utilizar. Ateno!
A declarao de variveis deve ser feita antes que a varivel seja usada, para garantir que a quantidade correta de memria j tenha sido reservada para armazenar seu valor.

35

Escrevendo um programa em C
Escrever um programa em Linguagem C corresponde a escrever o corpo da funo principal (main). O corpo de uma funo sempre comea com abre-chaves { e termina com fecha-chaves }.

Corpo da funo

36

Escrevendo um programa em C
A primeira linha do corpo da funo principal do programa p1.c :
float y;

37

Escrevendo um programa em C
Esta linha declara uma varivel y para armazenar um nmero de ponto flutuante (SP). A declarao de uma varivel no armazena valor algum na posio de memria que a varivel representa. Ou seja, no caso anterior, vai existir uma posio de memria chamada y, mas ainda no vai existir valor armazenado nesta posio.
38

Escrevendo um programa em C
Um valor pode ser atribudo a uma posio de memria representada por uma varivel pelo operador de atribuio = . O operador de atribuio requer esquerda um nome de varivel e direita, um valor. A linha seguinte de p1.c atribui um valor a y:

39

Escrevendo um programa em C
No lado direito do operador de atribuio existe uma referncia funo seno com um parmetro 1.5 (uma constante de ponto flutuante representando um valor em radianos.)

40

Escrevendo um programa em C
Em uma linguagem de programao chamamos o valor entre parnteses da funo, neste exemplo, o valor 1.5, de parmetro da funo. Da mesma forma, diz-se que sin(1.5) o valor da funo sin para o parmetro 1.5. O operador de atribuio na linha y = sin(1.5) obtm o valor da funo (0.997495) e o armazena na posio de memria identificada pelo nome y. Esta operao recebe o nome de: atribuio de valor a uma varivel.
41

Escrevendo um programa em C
Ateno: O valor armazenado em uma varivel por uma operao de atribuio depende do tipo da varivel. Se o tipo da varivel for int, ser armazenado um valor inteiro (caso o valor possua parte fracionria, ela ser desprezada). Se o tipo da varivel for float ou double, ser armazenado um valor de ponto flutuante (caso o valor no possua parte fracionria, ela ser nula).
42

Escrevendo um programa em C
Exemplo:
Considere as seguintes declaraes: int a; float b; Neste caso, teremos:
Operao de atribuio a = (2 + 3) * 4 b = (1 4) / (2 - 5) a = 2.75 + 1.12 b = a / 2.5 Valor armazenado 20 1.0 3 1.2

43

Escrevendo um programa em C
As prximas linhas do programa p1.c so:
printf(y = %f,y); printf(\n);

A funo printf faz parte da biblioteca stdio.


44

Escrevendo um programa em C
A funo printf usada para exibir resultados produzidos pelo programa e pode ter um ou mais parmetros. O primeiro parmetro da funo printf sempre uma string, correspondente sequncia de caracteres que ser exibida pelo programa.
printf(y = %f,y); printf(\n);

45

Escrevendo um programa em C
Essa sequncia de caracteres pode conter alguns tags que representam valores. Estes tags so conhecidos como especificadores de formato.
printf(y = %f,y); printf(\n);
Especificador de formato

Um especificaor de formato comea sempre com o smbolo %. Em seguida, pode apresentar uma letra que indica o tipo do valor a ser exibido. Assim, printf(y = %f,y) ir exibir a letra y, um espao em branco, o smbolo =, um espao em branco, e um valor de ponto flutuante. 46

Escrevendo um programa em C
Veja:

Valor armazenado em y.

47

Escrevendo um programa em C
Na funo printf, para cada tag existente no primeiro parmetro, dever haver um novo parmetro que especifica o valor a ser exibido.
printf(a = %d, b = %c e c = %f,a,m,(a+b));

A linguagem C utiliza o smbolo \ (barra invertida) para especificar alguns caracteres especiais:
Caractere \a \n \t \ Significado Caractere (invisvel) de aviso sonoro. Caractere (invisvel) de nova linha. Caractere (invisvel) de tabulao horizontal. Caractere de apstrofo
48

Escrevendo um programa em C
Observe a prxima linha do programa p1.c:
printf(\n);

Ela exibe o caractere (invisvel) de nova linha. Qual o efeito disso? Provoca uma mudana de linha! Prxima mensagem ser na prxima linha.
49

Escrevendo um programa em C
Observe agora a prxima linha do programa:
system(PAUSE);

Ela exibe a mensagem Pressione qualquer tecla para continuar... e interrompe a execuo do programa.
50

Escrevendo um programa em C
A execuo ser retomada quando o usurio pressionar alguma tecla. A ltima linha do programa p1.c :
return 0;

51

Escrevendo um programa em C
usada apenas para satisfazer a sintaxe da linguagem C. O comando return indica o valor que uma funo produz. Cada funo, assim como na matemtica, deve produzir um nico valor. Este valor deve ter o mesmo tipo que o declarado para a funo.
52

Escrevendo um programa em C
No caso do programa p1.c, a funo principal foi declarada como sendo do tipo int. Ou seja, ela deve produzir um valor inteiro.

A linha return 0; indica que a funo principal ir produzir o valor inteiro 0.


53

Escrevendo um programa em C
Mas e da?!! O valor produzido pela funo principal no usado em lugar algum! Logo, no faz diferena se a ltima linha do programa for:
return 0; return 1; ou return 1234;
54

Escrevendo um programa em C
Neste caso, o fato de a funo produzir um valor no relevante. Neste cenrio, possvel declarar a funo na forma de um procedimento. Um procedimento uma funo do tipo void, ou seja, uma funo que produz o valor void (vazio, intil, -toa). Neste caso, ela no precisa do comando return.
55

Escrevendo um programa em C
Note que os parmetros da funo main tambm no foram usados neste caso. Portanto, podemos tambm indicar com void que a lista de parmetros da funo principal vazia. Assim, podemos ter outras formas para p1.c:

56

Problema 2
Uma conta poupana foi aberta com um depsito de R$500,00. Esta conta remunerada em 1% de juros ao ms. Qual ser o valor da conta aps trs meses?

57

Problema 2
Executando-se o programa, obtm-se:

Aps 3 meses: R$ 515,15


58

Problema 2
No programa p2.c, note que o tag usado na funo printf %.2f em vez de %f. Neste caso, o especificador de formato inclui tambm o nmero de dgitos desejados aps o ponto decimal. Ateno! de extrema importncia o uso de ponto-evrgula aps cada instruo. Com os pontos-e-vrgulas, o compilador sabe exatamente onde termina cada uma das instrues.
59

Exerccios
Exerccios 6, 7, 8, 9 e 10. Pgina 17 do livro texto. Dicas: Para a aula prtica, estudem o captulo antes. Leiam e procurem compreender os exerccios. Se possvel, esbocem as solues dos exerccios.

60

Anda mungkin juga menyukai