Você está na página 1de 21

Apostila bsica da

linguagem C

Sumrio
1. ESTRUTURA DE UM PROGRAMA C..............................................................2
A.

SINTAXE BSICA........................................................................................ 2

B.

OPERADORES............................................................................................ 2

2. VARIVEIS E CONSTANTES........................................................................7
3. TIPOS PRIMITIVOS..................................................................................... 7
A.

MODIFICADORES DE TIPO ..........................................................................8

B.

QUANDO USAR MODIFICADORES ................................................................8

4. ESTRUTURAS DE DECISO.........................................................................9
5. ESTRUTURAS DE REPETIO....................................................................10
A.

FOR ()...................................................................................................... 10

B.

WHILE ().................................................................................................. 11

C.

DO {} WHILE ()......................................................................................... 11

6. FUNES................................................................................................ 13
7. PASSAGEM DE PARMETROS POR VALOR..................................................14
8. PASSAGEM DE PARMETRO POR REFERNCIA...........................................15
ANEXO I TABELA ASCII.........................................................................17
ANEXO II MSCARAS DE DADOS..............................................................18
ANEXO III MODIFICADORES PARA MSCARAS DE DADOS.......................19
ANEXO IV CARACTERES NO IMPRIMVEIS...............................................20

1. ESTRUTURA DE UM PROGRAMA C

Um programa bsico em C de um cabealho, onde sero colocadas


as diretivas de compilao e linkedio, opcionalmente pode haver
declaraes de constantes e variveis que tero visibilidade em todo
o programa. Dentre as diretivas de compilao, a diretiva include a
mais utilizada. Ela serve para incluir ao programa principal uma
biblioteca de funes, que pode ser adicionada manualmente ao
projeto ou fazer parte das bibliotecas padro do C. Segue abaixo um
exemplo de um programa em C.
#include <stdio.h> //biblioteca padro de entrada e sada
int x; //declara a varivel x como sendo do tipo inteira
int main()
{
x = 10; //atribui o valor 10 a varivel x
printf(o valor de x %d\n,x); //mostra o valor de x na
tela
return 0; //retorna o valor 0
}

a. SINTAXE BSICA

Todo programa em C possui uma sintaxe bsica que podemos


resumir nas seguintes regras:
Toda linha deve ser terminada com o smbolo ;.
As chaves {} so utilizadas para delimitar um incio e
fim de um bloco de cdigo.
As funes sempre so seguidas de parnteses (),
mesmo aquelas no possuem parmetros, neste caso os
parnteses ficam vazios.

b. OPERADORES

A linguagem C possui uma larga variedade de operadores.


Para melhor compreendermos vamos separ-los por grupos:
Operador de atribuio
Operadores aritmticos
Operadores aritmticos unrios
Operadores Compostos
Operadores lgicos

Operadores relacionais
Operadores de bits
Operadores de endereos
Segue abaixo as tabelas correspondentes a cada grupo de
operadores.
Operador de atribuio
Operador
=

Descrio
Exemplo
atribui valor a uma varivel x = 1; x = y;
x = y = 1;
Perceba que o operador = pode ser usado mais de uma vez em
uma mesma linha. Por exemplo, se voc quer atribuir o valor 1
as variveis x e y, voc pode escrever apenas:
x=y=1;
ao invs de:
y=1;
x=y;
Operadores aritmticos
Operado
r
+
*
/
%
\

Descrio
Soma
Subtrao
Multiplicao
Diviso
Resto da diviso
Diviso inteira

Operadores aritmticos unrios


Operado
r
x++
x--

Descrio
incrementa x em 1
decrementa x em 1

Equivalncia
x=x+1
x=x1

Operadores compostos
Operador
x+=y

Descrio
Equivalncia
Soma o valor de x a y e atribui a x = x + y
x
x-=y
Subtrai o valor y em x e atribui a x = x - y
x
x*=y
Multiplica x por y e atribui o x = x* y
resultado a x
x/=y
Divide o valor de x por y e x = x / y
atribui o resultado a x
x%=y
Pega o resto da diviso de x por x = x % y
y e atribui a x
x\=y
Pega a parte inteira da diviso de x = x \ y
x por y e atribui a x
A tabela acima mostra apenas a combinao do operador =
com os operadores aritmticos, mas todos os outros operadores
pode ser combinados com o =, com exceo dos unrios.
Operadores lgicos
Operado
Descrio
r
&&
e lgico
||
ou lgico
!
no lgico
^
ou exclusivo
Os operadores lgicos so utilizados em sentenas e podem
resultar em verdadeiro ou falso.
Operadores relacionais
Operado
r
>
<
>=
<=
==
!=

Descrio
Maior que
Menor que
maior ou igual que
menor ou igual que
igual
diferente

Operadores de bits
Operado
r

Descrio

Inverte os bits de um
~
valor. ) 0 passa a ser 1 e
1 passa a ser 0.
e lgico entre duas
&
sequncias binrias
ou lgico entre duas
|
sequencias binrias
Desloca n bits para a
>>
direita
Desloca n bits para a
<<
esquerda
ou exclusivo entre duas
^
sequencias binrias
Os operadores de bit so bastante usados em tcnicas de
criptografia e compactao de arquivos. Estes operadores
fazem uma combinao bit a bit gerando um resultado baseado
no operador utilizado.
Ex:
Sabe-se que o decimal 4 representado em binrio por
00000100. Ao se fazer ~a os bits sero invertidos passando a
ficar 11111011 que em decimal equivale a 251.
Se operarmos com o operador & dois nmeros decimais
teremos:
(12) 00001100
&

(10) 00001010
------------------(08) 00001000

Se operarmos os mesmos nmeros com o operador |, teremos:


(12) 00001100
|
(10) 00001010
------------------(248) 11111000
Por sua vez se os operarmos com o operador ^, teremos:
(12) 00001100
^
(10) 00001010
------------------(06) 00000110
Se a varivel a=4, em binrio 00000100 e fazemos a = a >> 1,
ento deslocaremos 1 bit para a direita o que resultar em
00000010, que em decimal ser igual a 2. Mas se fizermos a =
a << 1, ento deslocaremos 1 bit para a esquerda, o que
resultar em 00001000 que em decimal ser igual a 8.

Operadores de endereos
Operador

Descrio

&
*

retorna o endereo de memria de uma


varivel
retorna o valor armazenado em um
determinado endereo de memria

2.

VARIVEIS E CONSTANTES

Variveis so espaos de memria reservados para armazenar valores


que durante a execuo do programa. Esses valores podem sofrer
alteraes a qualquer momento enquanto a varivel existir. A
quantidade (em bytes) da memria reservada por cada varivel est
relacionada com o tipo atribuda a mesma (ver o item 2). Cada
varivel nomeada para facilitar seu acesso durante o programa, e as
regras para criao das variveis esto dispostas a seguir:
Nome de variveis s podem comear com letras;
Depois do primeiro caractere no podem conter caracteres
especiais, apenas o underline e nmeros so aceitos.
Exemplos de nomes vlidos para variveis:
o x, x1, nota, nota_final.
Exemplos de nomes invlidos para variveis:
o 1x, nota&, nota-final, nota final.
As constantes so semelhantes s variveis, inclusive quanto s
regras de nomeao e quanto aos tipos. A nica diferena que as
constantes no podem sofrer alteraes durante o programa, o valor
atribudo a elas ser sempre o mesmo desde a sua criao.
3. TIPOS PRIMITIVOS

Os tipos primitivos so os tipos de dados bsicos utilizados na


linguagem C. Os tipos de dados definidos pelo ANSI C so:
char : armazena um caractere, normalmente representado por um
cdigo da tabela ASCII (veja ANEXO I).
int : armazena um nmero inteiro.
float : armazena um nmero real de preciso simples.
double : armazena um nmero real de preciso dupla.
void: indica que no h um tipo definido. Normalmente utilizado
para declarar funes que no retornam valores.
A tabela abaixo relaciona os tipos primitivos com sua preciso (em
bytes) e seu escopo de abrangncia.
TIPO
char
int
float

PRECISO
1 byte
4 bytes
4 bytes

Double

8 bytes

ESCOPO
-127 a 127
-2.147.483.648 a 2.147.483.647
6 dgitos de preciso (incluindo casas
decimais)
10 dgitos de preciso (incluindo casas

decimais)
Obs: C no tem um tipo para lgico. Para testar verdadeiro ou falso
podemos usar um tipo inteiro ou char, sempre que o valor da varivel
assumir 0 ser falso, qualquer outro valor ser verdadeiro.
a. MODIFICADORES DE TIPO

Os modificadores de tipo so palavras reservadas que podem


ser usadas na declarao de variveis antes do tipo a ser
declarado. Os modificadores servem para aumentar ou
diminuir a preciso de um tipo ou ainda, suprimir ou inserir o
uso de sinal (+ ou -). Vale ressaltar, que caso um modificador
no seja utilizado o padro dos tipos primitivos aceitar os
sinais. Os modificadores definidos no ANSI C so:
unsigned : indica que o tipo que for declarado com este
modificador no poder assumir valores negativos
signed : indica que o tipo que for declarado com este
modificador ir assumir valores negativos e positivos. Esta a
forma padro, o uso deste modificador apenas para deixar
explcita uma situao.
short : Diminui a preciso de um tipo
long : aumenta a preciso de um tipo
A tabela abaixo relaciona os tipos primitivos sendo usados
com modificadores a sua preciso e escopo.
TIPO
unigned char
signed char
unsigned int
signed int
short int
long int
long double

PRECIS
O
1 byte
1 byte
4 bytes
4 bytes
2 bytes
4 bytes
10 bytes

ESCOPO
0 a 254
-127 a 127
0 a 4.294.967.295
-2.147.483.648 a 2.147.483.647
-32.768 a 32.767
-2.147.483.648 a 2.147.483.647
10 dgitos de preciso

b. QUANDO USAR MODIFICADORES

Os modificadores so usados sempre que precisamos aumentar


ou diminuir o escopo de uma varivel com o objetivo de
economizar memria. Por exemplo, se sabemos que uma
determinada varivel do tipo inteira s ir assumir valores

entre -32.768 e 32.768, podemos modific-la com short, assim


economizaremos 2 bytes de armazenagem na memria. Segue
abaixo um exemplo de programa e C utilizando
modificadores:
#include <stdio.h>
int main()
{
unsigned char carac;
printf(Tabela ASCII\n);
for(carac=0;carac<=254;carac++)
printf(Codigo : %d Caractere : %c\n,carac,
carac);

return 0;
}
O cdigo anterior declara a varivel de nome carac como
sendo do tipo char com um modificador unsigned. Com este
modificador a varivel carac assumir valores apenas entre 0 e
254. O objetivo deste pequeno problema mostrar na tela uma
tabela ASCII, como esta varia de 0 a 254, um tipo unsigned
char foi utilizado. Note que carac utilizado em um loop for
variando de 0 a 254 e ao mesmo tempo utilizado no printf
para exibir tanto o cdigo como o caractere relacionado. Isto
possvel porque em C um tipo char pode receber tambm um
valor numrico que representa o cdigo ASCII do caractere.
Por exemplo, se for atribudo o valor 65 a uma varivel do tipo
char, e um printf for solicitado para imprimir a varivel na tela
com uma mscara do tipo %c, ser exibida a letra A, pois este
o caractere referente ao cdigo 65 na tabela ASCII.
4. ESTRUTURAS DE DECISO

Em C temos duas estruturas bsicas de deciso. O if()-else e o


switch()-case. O primeiro utilizado em uma deciso simples, onde
se toma uma resoluo ou outra, e o segundo utilizado em
mltiplas decises.
Sintaxe do if()
if(condio)
{

bloco de cdigo a ser executado quando a condio verdadeira


}
else
{
bloco de cdigo a ser executado quando a condio falsa
}
Sintaxe do switch()
switch(varivel do tipo int ou char)
{
case valor1: {bloco de cdigo} break;
case valor2: {bloco de cdigo} break;
case valorN: {bloco de cdigo} break;
default: {bloco de cdigo} break;
}

5. ESTRUTURAS DE REPETIO
a. FOR ()

O for() uma poderosa estrutura e permite diversas sintaxes e


usos. Vamos entender apenas a sua forma mais comum. A
sintaxe mais usada do for() a seguinte:
for(var=valor_inicial;condio de parada;incremento)
{
bloco de cdigo
}
Quando o bloco de cdigo que est compreendido no loop
for() composto de apenas uma linha, as chaves podem ser
dispensadas.
Ex:
#include <stdio.h>
int main()
{
int i;
for(i=0;i<=10,i++)
printf(%d\n,i);
return 0;
}
b. WHILE()

O while() outra estrutura de repetio. utilizada com uma


condio que serve para determinar o final do loop. Enquanto
a condio verdadeira o loop ser executado. Segue abaixo a
sintaxe do while()
while(condio)
{
bloco de cdigo
}
Quando o bloco de cdigo que est compreendido no loop
while() composto de apenas uma linha, as chaves podem ser
dispensadas.
Ex:
#include <stdio.h>
int main()
{
int i;
while(i++ < 10)
printf(%d\n,i);
return 0;
}
c. DO {}WHILE()

Esta estrutura difere da anterior apenas que a condio


testada no final. utilizada quando queremos que bloco de
cdigo seja executado ao menos uma vez. Segue abaixo a
sintaxe do loop do{}while()
do
{
bloco de cdigo
}while(condio)
Quando o bloco de cdigo que est compreendido no loop
do{}while() composto de apenas uma linha, as chaves
podem ser dispensadas.

#include <stdio.h>
int main()
{
int i=0;
do
printf(%d\n,i);
while(i++<10);
return 0;
}
6. FUNES

Funes ou procedimentos so pores de cdigo escritas para


realizar uma tarefa especfica. As funes podem compor o programa
principal, em arquivos separados adicionados ao projeto, ou ainda
em bibliotecas compiladas. comum escrevermos funes para
efetuar clculos corriqueiros e repetitivos, ou ainda para executar
tarefas de entrada e sada ou anlise de dados. Muitas vezes as
funes precisam de informaes para o seu processamento, a essas
informaes chamamos de parmetros. E aps este processamento,
as funes podem gerar algum resultado numrico ou outro tipo
qualquer. Neste caso, dizemos que a funo retorna um valor. Para
uma funo retornar um valor, ela deve ser declarada com mesmo
tipo do valor a ser retornado, por exemplo se o seu processamento
resulta em um nmero real, a funo deve ser declarada como sendo
do tipo float ou double. Uma funo que se destine a calcular o valor
de y em uma equao do segundo grau precisar receber como
parmetros os valores dos termos a,b e c e tambm o valor de x para
o qual ser calculado o valor de y. Alm disso, a uno dever
retornar o valor de y para o ponto onde chamada. Como y pode
assumir qualquer valor real, a funo pode ser declarada como sendo
do tipo float. Quando uma funo apenas executa um processamento,
e este no resulta em um valor especfico, essa funo no precisa
retornar valor. Neste caso, declaramos a funo com sendo do tipo
void (sem tipo). Segue abaixo a sintaxe para declarao de funes:
<tipo> nome(lista de parmteros)
{

bloco de cdigo;
return <valor processado>
}
Ex: (programa que implementa uma funo para calcular o y de uma
funo do segundo grau)
#include <stdio.h>
float grau2(float a, float b, float c, float x)
{
float y;
y = a*x*x+b*x+c;
return(y);
}
int main()
{
float x, y;
for(x=-5;x<=5;x+=.01)
{
y = grau2(0.5,1,2,x);
printf(x=%.2f, y=%.2f\n,x,y);
}
return 0;
}
7. PASSAGEM DE PARMETROS POR VALOR

A passagem de parmetros feita quando chamamos uma funo. Na


chamada, colocamos os parmetros dentro dos parnteses. Quando
nos parmetros so colocados diretamente valores numricos, ou
variveis sem operadores de endereo, chamamos isso de passagem
por valor. Isto quer dizer que passamos para a funo apenas o valor
contido na varivel, ou o valor que queremos manipular. Neste caso,
a varivel em seu local de origem no sofrer alteraes mesmo que
a funo altere o valor do parmetro em seu cdigo. O exemplo de
cdigo dado anteriormente mostra uma passagem de parmetro por
valor.

8. PASSAGEM DE PARMETRO POR REFERNCIA

Neste caso, so passados os endereos de memria das variveis que


contm o valor a ser passado no parmetro da funo. Deste modo,
alm da funo usar o valor para os clculos, ento caso a funo os
modifique, estas sero modificadas tambm na rea de cdigo que a
chamou. Para que uma funo receba parmetros por referncia, na
sua declarao necessrio usar o operador de endereos * antes do
nome do parmetro. No corpo da funo, os parmetros tambm
devem ser manipulados com os devidos operadores de endereo. E
na chamada a funo, as variveis deve ser passadas com o operador
de endereo & antes do nome da varivel. Veja o exemplo seguinte:
void func(int *num1, int *num2)
{
*num1 *= *num2;
*num2 += *num1;
}
int main()
{
int n1,n2;
n1 = 2;
n2 = 1;
printf(%d, %d\n,n1,n2);
func(&n1,&n2);
printf(%d, %d\n,n1,n2);
return 0;
}
Neste exemplo, no primeiro printf ser impresso na tela 2,1 e no
segundo ser impresso 2,3. Note que mesmo sem as variveis n1 e
n2 sofrerem qualquer operao no programa, elas mudam de valor
aps serem passadas por referncia na funo. Isto ocorre porque o
que passado para funo so os endereos de memria das
variveis, e a na funo sero manipulados esses endereo
diretamente. Diferente da passagem de parmetros por valor, onde
feito uma cpia da varivel em um endereo diferente dentro da
funo e neste so feitas as operaes. veja o exemplo abaixo, com o
mesmo programa, passando variveis por valor:
void func(int num1, int num2)
{

num1 *= num2;
num2 += num1;
}
int main()
{
int n1,n2;
n1 = 2;
n2 = 1;
printf(%d, %d\n,n1,n2);
func(n1,n2);
printf(%d, %d\n,n1,n2);
return 0;
}
A diferena do exemplo citado agora para o anterior que no
usamos mais os operadores de endereo, e tambm, tanto no
primeiro com no segundo printf, sero exibidas as mesmas
sequencias, ou seja: 2,1.

ANEXO I TABELA ASCII

ANEXO II MSCARAS DE DADOS


mscara tipo de dado
%d
int
%c
char
%f
float ou double
%i
int
%ld
long int
%e
float ou double
%E
float ou double
%o
int
%x
int
%X
int
%s
char

descrio
mostra um nmero inteiro
mostra um caracter
mostra um nmero decimal
mostra um nmero inteiro
mostra um nmero inteiro longo
mostra um nmero exponencial (nmero cientfico)
mostra um nmero exponencial (nmero cientfico)
mostra um nmero inteiro em formato octal
mostra um nmero inteiro em formato hexadecimal
mostra um nmero inteiro em formato hexadecimal
mostra uma cadeia de caracteres (string)

ANEXO III MODIFICADORES PARA MSCARAS DE


DADOS
mascara modificao
descrio
%d
%+d
mostra o sinal de positivo se houver
o nmero que vier entre o ponto e o f ser o limite de sua
%f %."nmero"f
preciso
%o
%#o
completa o nmero octal com zero
%x
%#x
mostra indicador de Hexadecimal (0x).

ANEXO IV CARACTERES NO IMPRIMVEIS

Caracterer

Significado

\cx

Coincide com o caractere de controle indicado por x.Por exemplo, \cM


corresponde a um caractere de retorno de carro ou de controle-M.O valor
de x deve estar no intervalo de A-Z ou a-z.Caso contrrio, c considerado
um caractere literal c.

\f

Corresponde a um caractere de avano de formulrio.Equivalente a \x0c


e \cL.

\n

Corresponde a um caractere de nova linha.Equivalente a \x0a e \cJ.

\r

Corresponde a um caractere de retorno de carro.Equivalente a \x0d e \cM.

\s

Corresponde a qualquer caractere de espao em branco, incluindo espao,


guia, feed de formulrio e assim por diante.Equivalente a [\f\n\r\t\v].

\S

Corresponde a qualquer caractere que no seja espao em


branco.Equivalente a [^ \f\n\r\t\v].

\t

Corresponde a um caractere de tabulao.Equivalente a \x09 e \cI.

\v

Corresponde a um caractere de tabulao vertical.Equivalente a \x0b e \cK.

Você também pode gostar