Академический Документы
Профессиональный Документы
Культура Документы
A linguagem C surgiu na dcada de 1970 e foi inventada por Dennis Ritchie, rodando o sistema
operacional Unix.
A linguagem C compilada.
exemplo01.c
double
int
struct
break
else
long
switch
case
enum
register
typedef
char
extern
return
union
const
float
short
unsigned
continue
for
signed
void
default
goto
sizeof
volatile
do
if
static
while
Tipos de dados
Caracteres
char
Inteiros
int
Representa 2 ou 4 bytes.
float
Existem quatro tipos de modificadores para os tipos: signed, unsigned, long e short.
Tipo
char
unsigned char
signed char
int
unsigned int
signed int
short int
unsigned short int
signed short int
long int
signed long int
unsigned long int
float
double
long double
Formato
Num de bits para leitura
com scanf
8
8
8
16
16
16
16
16
16
32
32
32
32
64
80
%c
%c
%c
%i
%u
%i
%hi
%hu
%hi
%li
%li
%lu
%f
%lf
%Lf
Intervalo
Inicio
Fim
-128
0
-128
-32.768
0
-32.768
-32.768
0
-32.768
-2.147.483.648
-2.147.483.648
0
3,4E-38
1,7E-308
3,4E-4932
127
255
127
32.767
65.535
32.767
32.767
65.535
32.767
2.147.483.647
2.147.483.647
4.294.967.295
3.4E+38
1,7E+308
3,4E+4932
Nomes de variveis
O nome das variveis deve comear com uma letra ou um sublinhado (_).
O nome da varivel no pode ser igual a uma das palavras-reservadas e nem igual ao nome
de uma funo declarada pelo programador ou pelas bibliotecas C.
Declarao e inicializao de variveis
Para indicar que um nmero est numa base diferente da decimal, utilize 0X para indicar que o
nmero hexadecimal e 0 para indicar que est na base octal.
Operadores aritmticos
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)
Incremento (inteiro e ponto flutuante)
Decremento (inteiro e ponto flutuante)
Ao
Maior do que
Maior ou igual a
Menor do que
Menor ou igual a
Igual a
Diferente de
Ao
AND (E)
OR (OU)
NOT (NO)
exemplo-ler-escrever-string.c
Escrita de valores
Cdigo
%c
%d
%i
%e
%E
%f
%g
%G
%o
%s
%u
%x
%X
%%
%p
Formato
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
Leitura de valores
Formato
%c
%d
%i
Um nmero inteiro
%hi
Um short int
%li
Um long int
%e
Um ponto flutuante
%f
Um ponto flutuante
%lf
Um double
%h
Inteiro curto
%o
Nmero octal
%s
String
%x
Nmero hexadecimal
%p
Ponteiro
exemplo-printf-scanf.c
Comandos condicionais
Comando if...else
exemplo-maior-valor.c
Comando switch...case
Sintaxe:
switch (expresso) {
case x:
lista de operaes;
break;
case y:
lista de operaes;
break;
default:
lista de operaes;
}
A lista de operaes do comando default ser executada por padro, a menos que algum caso
(case) anterior seja executado e exista um comando break para encerrar o fluxo. Se no
existir o comando break, o comando default sempre ser executado.
Apesar da similaridade com o comando condicional if, o comando switch possui duas
diferenas importantes e que devem ser destacadas. A primeira diferena que no
possvel utilizar operaes lgicas no local da expresso. Por exemplo, no possvel
verificar se um determinado valor maior ou igual a outro valor. Uma segunda diferena
que merece destaque que o comando switch executa em cascata, ou seja, se a varivel da
expresso for igual ao primeiro caso, e dentro do comando switch houver outros casos, estes
sero tambm executados, independentemente do valor dos demais casos. A exceo para
isso quando ocorrer um comando break dentro de algum dos casos. Essa a razo para o
comando default ser sempre executado, a menos que aparea algum comando break anterior.
exemplo-switch-case.c
Comandos de laos (loop)
Comando for
Sintaxe:
for (inicializao; critrio de parada; incremento ou decremento) {
lista de operaes;
}
exemplo-comando-for.c
for (i=0;i<1000000;i++);
Comando while
controle de incremento/decremento.
Sintaxe:
while (condio) {
lista de operaes;
}
exemplo-comando-while.c
Comando do-while
Sintaxe:
do {
lista de operaes;
} while (condio);
exemplo-comando-do-while.c
Comando continue
exemplo-comando-continue.c
Comando break
O comando pode ser utilizado dentro de laos de repetio para finalizar a execuo do lao,
pulando todos os demais comandos e no considerando a prpria condio de parada.
exemplo-comando-break.c
Operaes matemticas
Assim, sempre que necessitar dessas operaes, deve-se declarar no incio do programa.
#include <math.h>
Esta funo retorna um valor tipo double e seus argumentos tambm so double.
Embora seja possvel calcular a raiz quadrada de um nmero, utilizando o expoente com o
valor 0,5, a linguagem C possui uma funo prpria, que o comando sqrt ( ).
Esta funo recebe um valor do tipo double como parmetro e retorna um valor
arredondado. Por exemplo, se x = ceil (3.2), o valor de x passar a ser 4.
Funo de truncamento
Esta funo recebe um valor do tipo double como parmetro e retorna um valor truncado.
Por exemplo, se x = floor (3.2), o valor de x passar a ser 3.
exemplo-funcoes-matematicas.c
Funo de nmero
A linguagem C possui duas funes para calcular o valor absoluto de um nmero. A funo
Tiago Eugenio de Melo www.tiagodemelo.info
abs (valor) e a funo fabs (valor). A diferena que a primeira utilizada para calcular
valores absolutos do tipo double e a segunda utilizada para calcular valores absolutos para
o tipo inteiro.
Funes para gerao de nmeros aleatrios
A linguagem C possui o comando rand( ) para gerar nmeros aleatrios. A funo retorna
um valor inteiro entre 0 e RAND_MAX, em que RAND_MAX o maior valor que pode ser
obtido por essa funo. Este valor definido em stlib.h.
Quando se deseja limitar o valor mximo de rand, utiliza-se a seguinte declarao: rand( ) %
k; com k sendo um nmero inteiro que determina o valor teto para os nmeros gerados.
exemplo-numero-randomicos.c
Ponteiros
Os ponteiros tambm possuem um tipo, pois ao armazenar o endereo, preciso identificar qual
o tipo de valor que ser armazenado.
possvel tambm descobrir o valor do endereo de uma varivel. Para isso, basta usar o
operador & antes da varivel para pegar o endereo.
Trecho de exemplo:
int valor = 10;
int *pt;
pt = &valor;
exemplo-ponteiro-01.c
Cuidado no uso de ponteiros
O principal cuidado do programador no uso de ponteiros saber para onde ele est
apontando, ou seja, nunca utilize um ponteiro que no foi inicializado.
Os ponteiros sempre devem ser inicializados com um endereo de memria, com 0 (zero) ou
com a palavra-reservada NULL.
exemplo-ponteiros-06.c
possvel tambm realizar operaes de incremento e decremento com os ponteiros. Quando
incrementamos um ponteiro ele passa a apontar para o prximo valor do mesmo tipo para o qual
o ponteiro aponta. Ou seja, se temos um ponteiro para um inteiro e o incrementamos ele passa a
apontar para o prximo inteiro. Esta a razo pela qual o compilador precisa saber o tipo de um
ponteiro.
A operao de decremento funciona de forma semelhante, mas com a diminuio dos endereos.
Exemplo de incremento de ponteiro: p++
Vale dizer que p++ diferente de (*p)++. O primeiro representa um incremento no endereo do
ponteiro p e o segundo representa um aumento do contedo do ponteiro p.
exemplo-ponteiros-02.c
A operao de subtrao funciona de maneira semelhante operao de soma.
possvel tambm realizar operaes relacionais entre ponteiros. Por exemplo, possvel
verificar se dois ponteiros tm o endereos iguais (==) ou diferentes (!=). Ainda possvel
verificar se o endereo de um ponteiro maior (>) ou menor (<) que o endereo de outro
ponteiro. Um ponteiro maior que o outro significa que aquele est direita, enquanto que um
ponteiro menor do que o outro significa que aquele est esquerda deste.
Verificao de aprendizado:
Tiago Eugenio de Melo www.tiagodemelo.info
Um ponteiro para ponteiro guardar o endereo de um ponteiro, sendo que este guarda o
endereo de uma varivel. Ou seja, um ponteio para ponteiro guardar um endereo que
aponta para outro endereo.
Sintaxe: <tipo-varivel>
**<nome-ponteiro>;
No existe limitao desse recurso, ou seja, possvel que ponteiro aponte para outro e este
aponte para outro ponteiro. Poderamos ter uma quantidade indeterminada de referncias de
ponteiros.
exemplo-ponteiros-05.c
Ponteiros ainda so normalmente utilizados para manipular strings e vetores/matrizes. Isto ser
detalhado mais adiante.
Vetores e Matrizes
Vetores e matrizes so estruturas de dados homogneas porque todos os elementos que possuem
so do mesmo tipo.
Strings
Existem diversas funes em C para manipular strings. Essas funes esto disponveis na
biblioteca <string.h>.
No possvel comparar duas strings atravs do sinal de igualdade (==), pois strings
podem ser entendidos como vetores de caracteres em C. Para fazer a comparao
necessrio usar a funo strcmp.
exemplo-strcmp.c
exemplo-strcpy.c
exemplo-strcat.c
exemplo-strlen.c
Matrizes
exemplo-maior-elemento-matriz.c
Isso justifica o fato dos vetores comearem em zero, ou seja, *vet equivalente a vet[0].
exemplo-ponteiros-matriz.c
importante destacar que o ponteiro uma varivel, mas o nome de um vetor no uma
varivel, no sendo possvel realizar operaes como: vet = vet + 2 ou vet++;
exemplo-ponteiro-vetor.c
possvel tambm criar vetores de ponteiros. Por exemplo, a declarao int *vetpt [10]
um vetor que armazena 10 ponteiros para o tipo inteiro.
Strings e ponteiros
exemplo-string-ponteiro01.c
exemplo-string-ponteiro02.c
Funes
Uma funo um bloco de cdigo de programa que pode ser usado diversas vezes em sua
execuo.
Forma geral:
<tipo-retorno> <nome-funo> (<lista-argumentos>) {
lista de comandos;
}
exemplo-funcao01.c
Retorno de funes
Se no for especificado o tipo de retorno, o compilador C entende que o tipo de retorno ser
Tiago Eugenio de Melo www.tiagodemelo.info
inteiro.
O valor de retorno de uma funo deve ser compatvel com o tipo de retorno declarada para
a funo.
exemplo-funcao-produto.c
exemplo-varios-returns.c
Tipo void
O tipo void pode ser utilizado nas funes que no retornam valores ou que no possuem
parmetros de entrada.
exemplo-prototipo-funcao.c
Bibliotecas em C
exemplo-uso-bibliotecas.h
Escopo de variveis
Escopo o conjunto de regras que determinam o uso e a validade de variveis nas diversas
partes do programa.
Variveis locais
exemplo-variaveis-locais.c
Parmetros formais
Esses parmetros tomam apenas uma cpia dos valores passados para a funo
(passagem por valor).
possvel alterar o valor do parmetro formal, pois esta no ter efeito na varivel que
foi passada funo.
Variveis globais
Quando uma funo tem uma varivel local com o mesmo nome de uma varivel global
a funo dar preferncia varivel local.
exemplo-variavel-local-global.c
Outro tipo de passagem de parmetros para uma funo ocorre quando alteraes nos
parmetros formais, dentro da funo, alteram os valores dos parmetros que foram
passados para a funo. Esse tipo de chamada de funo tem o nome de chamada por
referncia.
Embora, por conveno, a Linguagem C adote a passagem de parmetro por valor, possvel
criar uma chamada por referncia passando o ponteiro para o argumento. Como isso faz com
que o endereo do argumento seja passado para a funo, possvel alterar o valor fora da
funo.
Exemplo-funcao-passagem-referencia.c
Passagem de vetores/matrizes como parmetros
Quando uma matriz/vetor passado como argumento de uma funo, apenas o endereo da
matriz passado, no uma cpia da matriz/vetor inteiro.
Existem trs formas de se passar uma matriz ou vetor para uma funo:
exemplo-funcao-passagem-matriz.c
Estruturas
Sintaxe:
struct <nome-estrutura> {
<tipo1> <nome1>;
<tipo2> <nome2>;
} <lista-variveis-estrutura>;
struct estruturaAluno {
char nome[20];
int matricula;
float nota;
} aluno1, aluno2;
Para se fazer referncia a um dos elementos da estrutura utiliza-se o nome de uma das variveis
da <lista-variveis-estrutura> seguido de um ponto e o nome do elemento. Exemplo:
aluno1.nota = 8.0.
exemplo-estrutura-aluno.c
Vetores/Matrizes de estruturas
Uma estrutura qualquer tipo de dado em C. Por isso, possvel criar vetores/matrizes do
tipo criado pela estrutura.
No primeiro caso, a utilizao igual a uma varivel comum. No segundo caso, deve-se
declarar como parmetro da funo apenas o nome da varivel da estrutura a ser enviada.
exemplo-estrutura-funcao.c
possvel tambm renomear o nome dos tipos pr-definidos e tambm das estruturas criadas.
Exemplo:
Alocao dinmica
A funo malloc( ) utilizada para alocar a memria e possui a seguinte sintaxe: void
*malloc(tipotamanho). O parmetro tamanho quantidade de bytes que se deseja
alocar na memria e o tipo definido como sendo um inteiro sem sinal. Essa funo retorna um
ponteiro do tipo void, podendo assim ser atribudo a qualquer tipo de ponteiro.
exemplo-alocacao-estatica.c
Exemplo de programa que utiliza alocao esttica. Nesse exemplo, se o usurio digitasse
apenas 3 elementos, o restante do vetor, 97 posies, ficaria sem uso, mas tendo a memria
alocada.
exemplo-alocacao-dinamica.c
A funo calloc( ) tambm utilizada para alocar memria e tem a seguinte sintaxe:
O problema dessa declarao que o programador est assumindo que o tipo inteiro ser
sempre 4 bytes, o que nem sempre verdadeiro.
A funo realloc( ) normalmente utilizada para alterar o tamanho da memria alocada para um
outro ponteiro. A sintaxe da funo :
exemplo-realloc.c
Abertura e fechamento de arquivos
exemplo-arquivos-01.c
Modo
Significado
"r"
Abre um arquivo texto para leitura. O arquivo deve existir antes de ser aberto.
Abrir um arquivo texto para gravao. Se o arquivo no existir, ele ser criado.
Se j existir, o contedo anterior ser destrudo.
Abrir um arquivo texto para gravao. Os dados sero adicionados no fim do
arquivo ("append"), se ele j existir, ou um novo arquivo ser criado, no caso de
arquivo no existente anteriormente.
"w"
"a"
Abre um arquivo binrio para leitura. Igual ao modo "r" anterior, s que o arquivo
binrio.
Cria um arquivo binrio para escrita, como no modo "w" anterior, s que o
"wb"
arquivo binrio.
Acrescenta dados binrios no fim do arquivo, como no modo "a" anterior, s que
"ab"
o arquivo binrio.
Abre um arquivo texto para leitura e gravao. O arquivo deve existir e pode ser
"r+"
modificado.
Cria um arquivo texto para leitura e gravao. Se o arquivo existir, o contedo
"w+"
anterior ser destrudo. Se no existir, ser criado.
Abre um arquivo texto para gravao e leitura. Os dados sero adicionados no
"a+"
fim do arquivo se ele j existir, ou um novo arquivo ser criado, no caso de
arquivo no existente anteriormente.
Abre um arquivo binrio para leitura e escrita. O mesmo que "r+" acima, s que o
"r+b"
arquivo binrio.
Cria um arquivo binrio para leitura e escrita. O mesmo que "w+" acima, s que o
"w+b"
arquivo binrio.
Acrescenta dados ou cria uma arquivo binrio para leitura e escrita. O mesmo
"a+b"
que "a+" acima, s que o arquivo binrio
"rb"
exemplo-arquivos-02.c
exemplo-arquivos-03.c
A funo retorna no-zero se o arquivo chegou ao EOF, caso contrrio retorna zero.
Outra forma de verificar o fim de um arquivo comparar o caractere lido por getc com EOF.
exemplo-arquivos-04.c
A funo retorna um valor no negativo se for executada com sucesso e retorna EOF se
ocorrer uma falha.
exemplo-fputs.c
A funo retorna o mesmo contedo de str (parmetro) se for executada com sucesso. A
funo retorna um ponteiro nulo se no for executada com sucesso.
exemplo-fgets.c
Referncias
MONTGOMERY, Eduard. Programando com C Simples e Prtico. Editora Alta Books: Rio de
Janeiro, 2006.
Tiago Eugenio de Melo www.tiagodemelo.info
SANTOS, Henrique Jos. Curso de Linguagem C. Universidade Federal de Minas Gerais, 1997.