programaçao emc

7
 Ampliando Conhecimentos em C Prof. Rhogério Correia Nota: A intenção deste documento é simplificar o entendimento em relação a linguagem C. Não deixe de ir a biblioteca e consultar outros livros.  FLUXO DE PROGRAMAÇÃ O: O compilador analisa o có di go-font e e o converte para um códi go-ob jeo (ou programa-objeo). O código-objeto é a versão em li!g"agem de m#$"i!a do programa-fonte. Enquanto analisa o código-fonte, o compilador verifica erros de escrita no programa fonte O programa pode conter camadas a fun!"es de biblioeca% (fun!ão cosseno, por e#emplo) O li!&edior junta o p rograma-objeto com a(s) respectiva(s) biblioteca(s) e gera um código e'ec"#(el (ou programa-e'ec"#(el ) )ERMO* U*UA+* ,ódigo-Fo!e criado em um editor de te#tos, contend o os comand os da lingua gem de progra ma!ão ($, %ascal...). &erve como entrada para o compilador ,ódigo-Obje o criado pela con ver são do código-fon te em lin gua gem de m'quin a. ger ado pelo compilador. &ó é criado quando não ' erros (erros de compila!ão) no código-fonte. (E#tensão do código- objeto .O*+) Ligador o" Li!&edior .  junta o código-objeto com as bibliotecas necess'rias para gerar o programa- e#ecut'vel (E#tens"es das bibliotecas. ou ./*) Programa E'ec"#(el código que pode ser e#ecutado pelo sistema operacional. (E#tensão do programa- e#ecut'vel .E0E) )empo de ,ompila/0o durante o processo de conversão entre código-fonte e código-objeto )empo de E'ec"/0o após a ativa!ão do programa e#ecut'vel Pr1-proce%%ador tradutor empregado para e#pandir macro-instru!"es em instru!"es de uma linguagem de programa!ão (1include 2stdio.3). ,OME2)3R+O* O compilador 45&/ $ aceita os coment'rios entre 67 e 76. 8uaisquer te#tos colocados entre estes dois s9mbolos serão ignorados pelo compilador. :ale ressaltar que um programa bem comentado tem ;<= a menos de problemas quando se vai fa>er a manuten!ão. %rocure, sempre que a lógica não esteja clara, comentar um treco. ?m outro ponto importante, é que se deve colocar um coment'rio no in9cio de cada fun!ão do programa e#plicando a fun!ão, seu funcionamento, seus par@metros de entrada e quais são os poss9veis retornos que esta fun!ão pode devolver. E#emplos /* Isto é um comentário */ E*)RU)URA DE UM PROGRAMA ?m programa $ deve possuir uma certa estrutura para ser v'lido. *asicamente temos trAs blocos distintos nos programas. B C uma se!ão onde serão feitos os includes necess'rios para o programa. %or enquanto deve-se colocar a seguinte lina em todos os programas 1include 2stdio.3 D C um bloco das fun!"es definidas pelo usu'rio. Este bloco não é obrigatório e só e#istir' se o usu'rio definir uma fun!ão.  Editor %rograma-onte $ompilador %rograma-Objeto inFeditor *iblioteca %adrão Outras *ibliotecas %rograma E#ecut'vel

Upload: elizeucassimiro

Post on 05-Oct-2015

216 views

Category:

Documents


0 download

DESCRIPTION

LINGUAGEM EM C

TRANSCRIPT

2

Ampliando Conhecimentos em C

Prof. Rhogrio CorreiaNota: A inteno deste documento simplificar o entendimento em relao a linguagem C.

No deixe de ir a biblioteca e consultar outros livros.

FLUXO DE PROGRAMAO:

O compilador analisa o cdigo-fonte e o converte para um cdigo-objeto (ou programa-objeto). O cdigo-objeto a verso em linguagem de mquina do programa-fonte.

Enquanto analisa o cdigo-fonte, o compilador verifica erros de escrita no programa fonte O programa pode conter chamadas a funes de bibliotecas (funo cosseno, por exemplo)

O linkeditor junta o programa-objeto com a(s) respectiva(s) biblioteca(s) e gera um cdigo executvel (ou programa-executvel)

TERMOS USUAIS

Cdigo-Fonte criado em um editor de textos, contendo os comandos da linguagem de programao (C, Pascal...). Serve como entrada para o compilador

Cdigo-Objeto criado pela converso do cdigo-fonte em linguagem de mquina. gerado pelo compilador. S criado quando no h erros (erros de compilao) no cdigo-fonte. (Extenso do cdigo-objeto: .OBJ)Ligador ou Linkeditor junta" o cdigo-objeto com as bibliotecas necessrias para gerar o programa-executvel (Extenses das bibliotecas:.DLL ou .LIB)

Programa Executvel cdigo que pode ser executado pelo sistema operacional. (Extenso do programa-executvel: .EXE)

Tempo de Compilao durante o processo de converso entre cdigo-fonte e cdigo-objeto

Tempo de Execuo aps a ativao do programa executvel

Pr-processador tradutor empregado para expandir macro-instrues em instrues de uma linguagem de programao (#include ).

COMENTRIOS

O compilador ANSI C aceita os comentrios entre /* e */. Quaisquer textos colocados entre estes dois smbolos sero ignorados pelo compilador.

Vale ressaltar que um programa bem comentado tem 50% a menos de problemas quando se vai fazer a manuteno. Procure, sempre que a lgica no esteja clara, comentar um trecho.

Um outro ponto importante, que se deve colocar um comentrio no incio de cada funo do programa explicando a funo, seu funcionamento, seus parmetros de entrada e quais so os possveis retornos que esta funo pode devolver.

Exemplos

/* Isto um comentrio */

ESTRUTURA DE UM PROGRAMA

Um programa C deve possuir uma certa estrutura para ser vlido. Basicamente temos trs blocos distintos nos programas.

1 uma seo onde sero feitos os includes necessrios para o programa. Por enquanto deve-se colocar a seguinte linha em todos os programas: #include

2 um bloco das funes definidas pelo usurio. Este bloco no obrigatrio e s existir se o usurio definir uma funo.

3 um bloco principal, obrigatrio em qualquer programa C. Nele est definida a funo main, que ser a funo por onde o programa comeara a ser executado.

Funo main

Todo programa em C deve ter uma funo chamada main. por esta funo que ser iniciada a execuo do programa. Deve-se especificar o tipo da sada da funo, que pode ser int ou void.

Caso se coloque int, o valor retornado pela funo main estar disponvel para se testar no sistema operacional.

Caso o retorno da funo seja declarado como void, nada ser retornado ao sistema operacional.

VARIVEIS

Uma varivel uma posio de memria que pode ser identificada atravs de um nome.

Podem ter seu contedo alterado por um comando de atribuio.

Aps a atribuio mudam de valor.

int a,b, somaGeral;

a = 3; // a recebe o valor 3

b = a * 2; // b recebe o dobro do valor de a

somaGeral = a + b + 2; // somaGeral recebe 11

Para se criar variveis em um programa C deve-se indicar para o compilador qual o tipo desta varivel. Uma varivel pode ter um tipo bsico, intrnseco linguagem C ou tipo estruturado, montado pelo programador.

A linguagem C define os seguintes tipos bsicos de variveis.

intVarivel tipo inteira. Deve ser utilizados para se armazenar valores inteiros, com ou sem sinal.

char Varivel do tipo caracteres. Servir para se armazenar um nico caractere.

float Para valores com casas decimais (reais) deve-se utilizar este tipo. Ele pode armazenar nmeros reais com at 6 dgitos significativos.

double o mesmo que o anterior, s que pode armazenar mais dgitos, dando uma preciso maior nos clculos com casas decimais. Ele pode armazenar nmeros reais com at 10 dgitos significativos.

O tipo void deve ser utilizado no para variveis, mas sim para indicar que uma funo no tem nenhum valor retornado ou no possui nenhum parmetro de entrada.

Nomes de Variveis

As variveis no C podem ser declaradas tendo as seguintes observaes:

- o nome deve comear com uma letra ou sublinhado (_) e os caracteres subseqentes devem ser letras, nmeros ou sublinhado (_).

- o nome de uma varivel no pode ser igual a uma palavra reservada, nem igual ao nome de uma funo declarada pelo programador, ou pelas bibliotecas do C.

- variveis de at 32 caracteres so aceitas.

- C "case sensitive" (as letras maisculas so diferentes das letras minsculas) e portanto deve-se prestar ateno s maisculas e minsculas. Pesoe peso so diferentes.

- deve-se usar nomes significativos dentro do contexto do programa.

- procure usar somente abreviaturas conhecidas, como por exemplo: vlr, cont, tot, deb, crd... Quando o significado no pode ser abreviado, utilize a forma integral. Exemplos: balanceamento, giroSemanal, etc.- costuma-se usar maisculas e minsculas para separar palavras: "pesoDoCarro";

Tipos de Variveis

Todas as variveis em C tem um tipo;

Cada tipo define os valores que a varivel pode armazenar;

Cada tipo ocupa uma certa quantidade de memria.

O C tem 5 tipos bsicos: char, int, float, void, double. Para cada um dos tipos de variveis existem os modificadores de tipo. Os modificadores de tipo do C so quatro: signed, unsigned, long e short. Ao float no se pode aplicar nenhum e ao double pode-se aplicar apenas o long. Os quatro modificadores podem ser aplicados a inteiros. A inteno que short e long devam prover tamanhos diferentes de inteiros onde isto for prtico. Inteiros menores (short) ou maiores (long). int normalmente ter o tamanho natural para uma determinada mquina. Assim, numa mquina de 16 bits, int provavelmente ter 16 bits. Numa mquina de 32, int dever ter 32 bits. Na verdade, cada compilador livre para escolher tamanhos adequados para o seu prprio hardware, com a nica restrio de que shorts ints e ints devem ocupar pelo menos 16 bits, longs ints pelo menos 32 bits, e short int no pode ser maior que int, que no pode ser maior que long int. O modificador unsigned serve para especificar variveis sem sinal. Um unsigned int ser um inteiro que assumir apenas valores positivos. A seguir esto listados os tipos de dados permitidos e seu valores mximos e mnimos em um compilador tpico para um hardware de 16 bits. Tambm nesta tabela est especificado o formato que deve ser utilizado para ler os tipos de dados com a funo scanf():

TipoNum de bitsFormato para leitura com scanfIntervalo

InicioFim

Char (Ex: 'b' '\n' '\0' )8%c-128127

unsigned char8%c0255

signed char8%c-128127

int (Ex: 2 320 130)16%i-32.76832.767

signed int16%i-32.76832.767

unsigned int16%u065.535

short int (100 30)16%hi-32.76832.767

unsigned short int16%hu065.535

signed short int16%hi-32.76832.767

long int (100000 -467)32%li-2.147.483.6482.147.483.647

signed long int32%li-2.147.483.6482.147.483.647

unsigned long int32%lu04.294.967.295

float(0.0 23.7) 32%f-3,4 x 10383.4 x 1038

double (12546354334.0

-0.0034236556) 64%lf-1,7 x 103081,7 x 10308

long double 80%Lf-3,4 x 1049323,4 x 104932

O tipo long double o tipo de ponto flutuante com maior preciso.

Declarao de Variveis

Para se usar uma varivel em C devemos defini-la indicando o seu tipo e o seu nome. Para se fazer isto se deve usar a seguinte sintaxe:

tipo nome1 [, nome2]... ;Pode-se definir em uma mesma linha mais de uma varivel, bastando para isto colocar os nomes das variveis separados por vrgulas. Isto deve ser usado somente quando as variveis so simples e no se precisa explicar o uso das mesmas. Como sugesto deve-se colocar sempre uma nica varivel por linha e aps a definio da mesma colocar um comentrio com a descrio mais completa.

Exemplos

float fValorSalrio;

char cSexo;

int i,k,j;

Podemos inicializar variveis no momento de sua declarao. Para fazer isto podemos usar a forma geral:

tipo nome1 = constante;

Isto importante pois quando o C cria uma varivel ele no a inicializa. Isto significa que at que um primeiro valor seja atribudo nova varivel ela tem um valor indefinido e que no pode ser utilizado para nada. Nunca presuma que uma varivel declarada vale zero ou qualquer outro valor. Exemplos de inicializao so dados abaixo:

char ch = 'D';

int count = 0;

float pi = 3.141;

Converso de tipos em expresses

Quando o C avalia expresses onde temos variveis de tipos diferentes o compilador verifica se as converses so possveis. Se no so, ele no compilar o programa, dando uma mensagem de erro. Se as converses forem possveis ele as faz, seguindo as regras abaixo:

1. Todos os chars e short ints so convertidos para ints.

2. Todos os floats so convertidos para doubles.

3. Para pares de operandos de tipos diferentes:

a. se um deles long double o outro convertido para long double;

b. se um deles double o outro convertido para double;

c. se um long o outro convertido para long;

d. se um unsigned o outro convertido para unsigned.

CARACTER DE CONTROLE

O C utiliza, para nos facilitar a tarefa de programar, vrios cdigos chamados cdigos de barra invertida ou caractere de controle.

Estes so caracteres que podem ser usados como qualquer outro. Como alguns caracteres de controle so muito usados existe uma maneira especial de se indicar estes caracteres. Abaixo esto alguns formatos interpretados pelo compilador:

Cdigo

Significado

\b

Retrocesso ("back")

\f

Alimentao de formulrio ("form feed")

\n

Nova linha ("new line")

\t

Tabulao horizontal ("tab")

\"

Aspas

\'

Apstrofo

\0

Nulo (0 em decimal)

\\

Barra invertida

\a

Sinal sonoro ("beep")

\N

Constante octal (N o valor da constante)

\xN

Constante hexadecimal (N o valor da constante)

De uma maneira geral toda vez que o compilador encontrar a barra invertida ele no processar o prximo caractere, a no ser que seja um dos indicados acima.

CONSTANTES

Constantes so valores que so mantidos fixos pelo compilador. J usamos constantes neste curso. So consideradas constantes, por exemplo, os nmeros e caracteres como 45.65 ou 'n', etc...

Constantes hexadecimais e octais

Muitas vezes precisamos inserir constantes hexadecimais (base dezesseis) ou octais (base oito) no nosso programa. O C permite que se faa isto. As constantes hexadecimais comeam com 0x. As constantes octais comeam em 0. Alguns exemplos:

Constante Tipo

0xEF

Constante Hexadecimal (8 bits)

0x12A4

Constante Hexadecimal (16 bits)

03212

Constante Octal (12 bits)

034215432 Constante Octal (24 bits)

Nunca escreva portanto 013 achando que o C vai compilar isto como se fosse 13. Na linguagem C 013 diferente de 13!

Constantes strings

Uma String uma seqncia de caracteres entre aspas duplas: "exemplo de uma string em C".

Vamos agora alertar para o fato de que uma string "Joao" na realidade uma constante string. Isto implica, por exemplo, no fato de que 't' diferente de "t", pois 't' um char enquanto que "t" uma constante string com dois chars onde o primeiro 't' e o segundo '\0'.

COMANDO PRINTF

A funo printf exibe um ou mais dados na tela. Para tanto ela deve receber pelo menos dois parmetros, separados por vrgula:

um string de formato que define atravs de caracteres especiais, os tipos dos dados a serem impressos e suas posies na linha de impresso;

um dado a ser impresso. Este dado pode ser qualquer um dos dados visto anteriormente.

Por exemplo:

printf("%s","teste");

"%s" : a string de formato

"teste" : o dado a ser impresso.

A string de formato define quais os tipos dos dados a serem impressos. O smbolo %s ser substitudo pelo dado que vem aps a vrgula. Os dados definem quais os valores a serem impressos.

Se for necessrio, um string de formato pode definir que mais de um dado ser impresso. Para tanto, dentro da string de formato deve haver mais de um %, um para cada dado a ser impresso.

Neste caso, os dados devem vir aps a string de formato separado por vrgulas.

Por exemplo:

printf("%s %s","teste1", "outra string");

Isto ir imprimir o string teste1 deixar 1 espao em branco e imprimir ao lado o string outra string, assim :

teste1 outra string possvel incluir um texto dentro da string de formato. Este texto ir aparecer exatamente como for digitado no programa-fonte.

O exemplo

printf("A aluna %s ficou doente","Maria");

geraria

A aluna Maria ficou doentecomo resultado.

Abaixo apresentamos a tabela de cdigos de formato:

%c Um caracter (char)

%d Um nmero inteiro decimal (int)

%i O mesmo que %d

%e Nmero em notao cientfica com o "e"minsculo

%E Nmero em notao cientfica com o "E"maisculo

%f Ponto flutuante decimal

%g Escolhe automaticamente o melhor entre %f e %e

%G Escolhe automaticamente o melhor entre %f e %E

%o Nmero octal

%s String

%u Decimal "unsigned" (sem sinal)

%x Hexadecimal com letras minsculas

%X Hexadecimal com letras maisculas

%% Imprime um %

%p Ponteiro

Vamos ver alguns exemplos:

printf ("Um %%%c %s",'c',"char");

Um %c char

printf ("%X %f %e",107,49.67,49.67);

6B 49.67 4.967e1

printf ("%d %o",10,10);

10 12

possvel tambm indicar o tamanho do campo, justificao e o nmero de casas decimais. Para isto usa-se cdigos colocados entre o % e a letra que indica o tipo de formato. Um inteiro indica o tamanho mnimo, em caracteres, que deve ser reservado para a sada. Se colocarmos ento %5d estamos indicando que o campo ter cinco caracteres de comprimento no mnimo. Se o inteiro precisar de mais de cinco caracteres para ser exibido ento o campo ter o comprimento necessrio para exibi-lo. Se o comprimento do inteiro for menor que cinco ento o campo ter cinco de comprimento e ser preenchido com espaos em branco. Se quiser um preenchimento com zeros pode-se colocar um zero antes do nmero. Temos ento que %05d reservar cinco casas para o nmero e se este for menor ento se far o preenchimento com zeros.

O alinhamento padro direita. Para se alinhar um nmero esquerda usa-se um sinal - antes do nmero de casas. Ento %-5d ser o nosso inteiro com o nmero mnimo de cinco casas, s que justificado a esquerda.

Pode-se indicar o nmero de casas decimais de um nmero de ponto flutuante. Por exemplo, a notao %10.4f indica um ponto flutuante de comprimento total dez e com 4 casas decimais. Entretanto, esta mesma notao, quando aplicada a tipos como inteiros e strings indica o nmero mnimo e mximo de casas. Ento %5.8d um inteiro com comprimento mnimo de cinco e mximo de oito.

Vamos ver alguns exemplos:

printf ("%05d\n",456);

|00456|

printf ("%-5d\n",456);

|456|

printf ("%5.2f\n",456.671);

|456.67|

printf ("%-5.2f\n",456.671);

|456.67|

printf ("%10s\n","Ola");

| Ola|

printf ("%-10s%s\n","Ola","OOO"); |Ola OOO |

printf ("1234567890\n");

|1234567890|

printf ("%7f\n", -2.5);

|-2.500000|

printf ("%7.0f%7.3f\n", -2.5, -2.5); | -3 -2.500|

printf ("%-8.3f%08.3f\n", -2.5, -2.5);|-2.500 -002.500|

printf ("%08.3f\n", -2.5);

|-002.500|

printf ("%9.3f\n", -2.5);

| -2.500|

printf ("%8.4f\n", -2.5);

| -2.5000|

printf ("%8.1f\n", -2.5);

| -2.5|

printf ("%6.12f\n", -2.5);

|-2.500000000000|

Nos exemplos o "pipe" ( | ) indica o incio e o fim do campo mas no so escritos na tela.

EXPRESSES ARITMTICAS

Expresses so combinaes de variveis, constantes e operadores. Quando montamos expresses temos que levar em considerao a ordem com que os operadores so executados, conforme a tabela de precedncias da linguagem C.

Exemplos de expresses:

anos = dias/365.25;

i = i+3;

c = a*b + d/e;

c = a*(b+d)/e;

Operadores Aritmticos e de Atribuio

Os operadores aritmticos so usados para desenvolver operaes matemticas. A seguir apresentamos a lista dos operadores aritmticos do C:

OperadorAo

+Soma (inteira e ponto flutuante)

-Subtrao ou Troca de sinal (inteira e ponto flutuante)

*Multiplicao (inteira e ponto flutuante)

/Diviso (inteira e ponto flutuante)

%Resto de diviso (de inteiros)

O operador / (diviso) quando aplicado a variveis inteiras, nos fornece o resultado da diviso inteira; quando aplicado a variveis em ponto flutuante nos fornece o resultado da diviso "real". O operador % fornece o resto da diviso de dois inteiros. Assim seja o seguinte trecho de cdigo:

int a = 17, b = 3;

int x, y;

float z = 17. , z1, z2;

x = a / b;

y = a % b;

z1 = z / b;

z2 = a/b;

ao final da execuo destas linhas, os valores calculados seriam x = 5, y = 2, z1 = 5.666666 e z2 = 5.0. Note que, na linha correspondente a z2, primeiramente feita uma diviso inteira (pois os dois operandos so inteiros). Somente aps efetuada a diviso que o resultado atribudo a uma varivel float.

Operadores Unrios

OperadorAo

++Incremento (inteiro e ponto flutuante)

--Decremento (inteiro e ponto flutuante)

Os operadores de incremento e decremento so unrios que alteram a varivel sobre a qual esto aplicados. O que eles fazem incrementar ou decrementar, a varivel sobre a qual esto aplicados, de 1. Ento

x++;

x--;

so equivalentes a

x=x+1;

x=x-1;

Estes operadores podem ser pr-fixados ou ps-fixados. A diferena que quando so pr-fixados eles incrementam e retornam o valor da varivel j incrementada. Quando so ps-fixados eles retornam o valor da varivel sem o incremento e depois incrementam a varivel. Ento, em

x=23;

y=x++;

teremos, no final, y=23 e x=24. Em

x=23;

y=++x;

teremos, no final, y=24 e x=24. Uma curiosidade: a linguagem de programao C++ tem este nome pois ela seria um "incremento" da linguagem C padro. A linguagem C++ igual a linguagem C s que com extenses que permitem a programao orientada a objeto, o que um recurso extra.

Operadores de Atribuio

OperadorAo

+=Adio

-=Subtrao

*=multiplicao

/=diviso

Exemplo:

x += 5; o mesmo quex = x + 5;

x -= 2; o mesmo que x = x 2;

Operadores Relacionais e Lgicos

Os operadores relacionais do C realizam comparaes entre variveis. So eles:

OperadorAo

Maior do que

=Maior ou igual a

==Igual a

!=Diferente de

Os operadores relacionais retornam verdadeiro(1) ou falso(0). Para verificar o funcionamento dos operadores relacionais, execute o programa abaixo:

Para fazer operaes com valores lgicos (verdadeiro e falso) temos os operadores lgicos:

OperadoresOperao

&&AND (E)

||OR (OU)

!NOT (NO)

Usando os operadores relacionais e lgicos podemos realizar uma grande gama de testes.

ESTRUTURAS DE CONTROLE

As estruturas de controle de fluxo so fundamentais para qualquer linguagem de programao. Sem elas s haveria uma maneira do programa ser executado: de cima para baixo comando por comando. No haveria condies, repeties ou saltos. A linguagem C possui diversos comandos de controle de fluxo. possvel resolver todos os problemas sem utilizar todas elas, mas devemos nos lembrar que a elegncia e facilidade de entendimento de um programa dependem do uso correto das estruturas no local certo.

O Comando if (Desvio Condicional)

Sua forma geral :

if (condio)

comando1;

else

comando2;

A expresso, na condio, ser avaliada. Se ela for verdadeira (diferente de zero), o comando1 ser executado. Se a condio for falsa (igual a zero) o comando2 ser executado.

Nunca sero executadas as duas ou nenhuma delas.

Caso seja necessrio executar mais de um comando dentro de um condicional obrigatrio utilizar os delimitadores de bloco. Com isso a forma geral fica assim:

if (condio){comando1;

comando1a;

:

:

comando1xx;

}

else

comando2;

Aprimore ( PESQUISE !!!

Editor

Programa-Fonte

Compilador

Programa-Objeto

Linkeditor

Biblioteca Padro

Outras Bibliotecas

Programa Executvel