Você está na página 1de 7

Ampliando Conhecimentos em C

Prof. Rhogrio Correia


Nota: 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:
Editor

Programa-Fonte

Compilador

Programa-Objeto

Biblioteca Padro

Linkeditor
Outras Bibliotecas
Programa Executvel

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 cdigoobjeto: .OBJ)
Ligador ou Linkeditor junta" o cdigo-objeto com as bibliotecas necessrias para gerar o programaexecutvel (Extenses das bibliotecas:.DLL ou .LIB)
Programa Executvel cdigo que pode ser executado pelo sistema operacional. (Extenso do programaexecutvel: .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 <stdio.h>).
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 <stdio.h>
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.
int
Varivel 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.
Para valores com casas decimais (reais) deve-se utilizar este tipo. Ele pode armazenar nmeros
float
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. Peso e 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():

Char (Ex: 'b' '\n' '\0' )


unsigned char

Formato
para
leitura
com scanf
%c

%c

255

signed char
int (Ex: 2 320 130)
signed int

8
16
16

%c
%i
%i

-128
-32.768
-32.768

127
32.767
32.767

unsigned int

16

%u

65.535

short int (100 30)


unsigned short int

16

%hi

-32.768

32.767

16

%hu

65.535

signed short int

16

%hi

-32.768

32.767

long int (100000 -467)


signed long int

32

%li

-2.147.483.648

2.147.483.647

32

%li

-2.147.483.648

2.147.483.647

unsigned long int

32

%lu

4.294.967.295

Tipo

Num
de
bits

Intervalo
Inicio

Fim

-128

127

32
%f
-3,4 x 1038
float(0.0 23.7)
double (12546354334.0
64
%lf
-1,7 x 10308
-0.0034236556)
long double
80
%Lf
-3,4 x 104932
O tipo long double o tipo de ponto flutuante com maior preciso.

3.4 x 1038
1,7 x 10308
3,4 x 104932

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
\b
\f
\n
\t
\"
\'
\0
\\
\a
\N
\xN

Significado
Retrocesso ("back")
Alimentao de formulrio ("form feed")
Nova linha ("new line")
Tabulao horizontal ("tab")
Aspas
Apstrofo
Nulo (0 em decimal)
Barra invertida
Sinal sonoro ("beep")
Constante octal (N o valor da constante)
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
0xEF
0x12A4
03212
034215432
Nunca escreva portanto 013
013 diferente de 13!

Tipo
Constante Hexadecimal (8 bits)
Constante Hexadecimal (16 bits)
Constante Octal (12 bits)
Constante Octal (24 bits)
achando que o C vai compilar isto como se fosse 13. Na linguagem C

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 doente
como resultado.

Abaixo apresentamos a tabela de cdigos de formato:


%c
%d
%i
%e
%E
%f
%g
%G
%o
%s
%u
%x
%X
%%
%p

Um caracter (char)
Um nmero inteiro decimal (int)
O mesmo que %d
Nmero em notao cientfica com o "e"minsculo
Nmero em notao cientfica com o "E"maisculo
Ponto flutuante decimal
Escolhe automaticamente o melhor entre %f e %e
Escolhe automaticamente o melhor entre %f e %E
Nmero octal
String
Decimal "unsigned" (sem sinal)
Hexadecimal com letras minsculas
Hexadecimal com letras maisculas
Imprime um %
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.967 e1
printf ("%d %o",10,10);
10
12
possvel tambm indicar o tamanho do campo, justificao e o nmero de casas decimais. Para isto usase 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:
Operador

+
*
/
%

Ao
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
Operador

Ao

++
--

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

Exemplo:

x += 5;
x -= 2;

Operador

Ao

+=
-=
*=
/=

Adio
Subtrao
multiplicao
diviso

o mesmo que
o mesmo que

x = x + 5;
x = x 2;

Operadores Relacionais e Lgicos


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

Ao

<
>
<=
>=
==
!=

Menor do que
Maior do que
Menor ou igual a
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:
Operadores

Operao

&&
||
!

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 !!!