Академический Документы
Профессиональный Документы
Культура Документы
Introduo linguagem C
Autor: Juliano Denner da Rocha
Verso: 0.1
Data: 01 de maio de 2013
Contedo
1. Introduo linguagem C .......................... 4
7. Operadores ............................................ 25
8. Estruturas de deciso.............................. 28
Estrutura de deciso if-else ............................. 28
Estrutura de deciso switch ............................ 29
9. Estruturas de repetio ........................... 31
Estrutura de repetio for............................... 31
Estrutura de repetio while........................... 32
Estrutura de repetio do-while ..................... 33
Comandos continue e break ........................... 33
10. Bibliotecas teis ................................... 35
Biblioteca stdio................................................ 35
Biblioteca stlib ................................................. 35
Biblioteca math ............................................... 36
Biblioteca ctype ............................................... 36
Inicializao .................................................... 15
Escopo ............................................................ 16
1. Introduo linguagem C
Breve histria
A linguagem C foi criada por Dennis Ritchie e Ken Thompson entre os anos de 1969 e 1973 no
Laboratrio Bell, um campo de pesquisa da empresa de telefonia americana AT&T. H
divergncias quanto ao nome "C", a mais hiptese mais aceita que seja a prxima letra da
sequncia BCPL, uma linguagem da qual j havia originado a linguagem B.
O objetivo da criao da linguagem era o desenvolvimento de um sistema operacional prprio, o
que aconteceu. Baseando-se na linguagem foram desenvolvidas partes do sistema Unix. Mas, por
sua simplicidade e performance a linguagem C teve o seu uso expandido para outras aplicaes,
como: desenvolvimento de editores de texto, compiladores, planilhas, etc.
Com o crescimento da utilizao da linguagem um comit foi formado e em 1989 que criou um
padro ANSI, o que formalizou a linguagem na forma como ns utilizamos hoje.
A sequncia cronolgica dos principais fatos :
1966 - Criao da linguagem BCPL
1970 - Criao da linguagem B
1972 - Criao da linguagem C
1989 - Padronizao atravs do padro ANSI
Figura 1 - Ken Thompson e Dennis Ritchie
Caractersticas
A linguagem C apresenta as seguintes caractersticas:
Alta performance
Muito utilizada
2. Ferramentas de desenvolvimento
Compiladores
Compiladores so programas que transformam cdigos escritos em linguagem de alto nvel em
linguagem de mquina. Assim, ao escrever seu cdigo em linguagem C, voc cria um arquivo .c
contendo todas as instrues em uma linguagem que voc compreende, mas para a execuo
necessrio fazer a compilao, isso , criar um arquivo em uma linguagem que a mquina
entenda. Ao compilar um programa C gerado um arquivo com a extenso .o j compilado.
Existem vrios compiladores para a linguagem C. Borland C, o Microsoft Visual C++ e o GCC (GNU
Compiler Collection) so alguns exemplos. Tambm existem pacotes MinGW e Cygwin que
incluem um compilador e outras ferramentas.
Ferramentas IDEs
Ferramentas IDEs (Integrated Development Environment) so ferramentas que auxiliam o
desenvolvimento de programas. Para cada linguagem existem diversas IDEs disponveis. Para a
linguagem C no diferente.
Algumas das IDEs disponveis para programar em linguagem C so: Turbo C da Borland, Dev C++,
Code::Blocks, o NetBeans (atravs de plugins) e o Microsoft Visual Studio (com o compilador
citado anteriormente, o Microsoft Visual C++).
Os benefcios de programar utilizando uma IDE prpria para a linguagem so:
Compiladores integrados: a ferramenta possui um compilador (citado no tpico anterior)
integrado a ela que facilita a compilao do cdigo.
Editor de cdigo prprio para a linguagem: a ferramenta reconhece no seu cdigo os
operadores e comandos utilizados, destacando cada item em uma cor diferente.
Recurso de auto-completar: em determinadas situaes a ferramenta sugere o comando,
baseando-se nos operadores e funes padres da linguagem.
Previso de erros: em determinadas IDEs os erros de compilao so identificados antes
mesmo da compilao ser executada.
Depurao: recurso muito til para o acompanhamento da execuo do cdigo.
Apresentando o Code::Blocks
Em nossos estudos utilizaremos o Code::Blocks 12.11 que, como visto no tpico anterior, uma
IDE para desenvolvimento de programas C ou C++.
Por que adotarmos o Code::Blocks:
1. prpria para desenvolvimentos de programas C/C++.
2. gratuito: seu uso no implica em gastos.
3. uma ferramenta atual, portanto com verses para as plataformas atuais como Windows 7
e 8 e para diversas distribuies Linux e Mac.
4. Possui um instalador completo, contendo o editor de cdigos e o compilador, o que facilita
a instalao.
A barra de ferramenta do Code::Blocks apresenta atalho para as operaes mais utilizadas, como
criar ou abrir arquivos e salvar. Tambm apresenta os botes para compilar
um arquivo. E, para facilitar, o boto que compila e executa
ou executar
( o mais recomendado).
3. Estrutura de programas em C
Estrutura bsica
Podemos adotar como padro a seguinte estrutura:
Veremos nos prximos tpicos mais detalhes sobre cada parte do cdigo.
Incluso de bibliotecas
Muitas funcionalidades j esto prontas nas bibliotecas do C e podem ser utilizadas de acordo
com a necessidade. Por exemplo, para interagirmos com a entrada e sada de dados temos
disponvel a biblioteca stdio.h e para manipularmos textos temos a biblioteca string.h.
Mas, para no sobrecarregar os programas com funcionalidades desnecessrias, necessrio
informar ao compilador quais bibliotecas sero utilizadas no programa atual. Isso feito atravs
do comando include. Esse comando deve sempre estar no incio do cdigo.
#include <stdio.h>
#include <string.h>
Veja mais sobre bibliotecas no captulo 10.
Definio de tipos
A linguagem C permite que, baseando-se nos tipos de dados bsicos, possamos criar tipos
diferentes de dados com as mesmas caractersticas ou com uma estrutura mais complexa.
Veja mais sobre bibliotecas no captulo 12.
Funo main
A funo main o ponto inicial da execuo de um programa C. Portanto, nos exerccios contento
apenas um arquivo necessria uma funo main que iniciar a execuo.
Sua sintaxe a seguinte:
<tipo de retorno> main(<parmetros>){
<bloco de instrues>
<retorno>
}
Demais funes
Como visto no tpico Introduo s funes, as funes nos auxiliam na organizao do cdigo.
Para isso necessrio identificar trechos do cdigo que podem ser solicitados mais de uma vez e
separar esses trechos funes.
Um exemplo:
Nesse exemplo est declarada a funo main, que contm as primeiras instrues e a funo
imprimeSoma que contm instrues para somar dois nmeros e exibir o resultado.
Veja mais sobre funes no captulo 11.
Indentao
A indentao uma forma de organizar o cdigo e faz parte das boas prticas de programao.
Em linguagem C ela no interfere na execuo do cdigo, mas uma caracterstica esttica que
facilita a compreenso do cdigo, tanto para o programador que o escreveu, quanto para outras
pessoas que o utilizarem posteriormente. Sem a indentao correta a compreenso de blocos de
cdigos relativamente simples se torna complexa.
Existem variaes na forma de indentar o cdigo, mas em linhas gerais, cada bloco de cdigo que
estiver dentro de outro bloco, deve iniciar em uma nova linha e ser recuado um tab.
Normalmente, o espao de um tab equivale a quatro espaos.
Um exemplo no indentado:
Comentrios
Durante a programao pode surgir a necessidade de fazer alguma anotao sobre o cdigo. Para
no sermos obrigados a fazer essa anotao em outro arquivo a linguagem C (assim como a
maioria das outras linguagens) possui duas formas de sinalizar o trecho de cdigo que deve ser
ignorado no momento da compilao, permitindo adicionar comentrios dentro do prprio
cdigo.
Primeiro: atravs de duas barras podemos comentar uma nica linha.
//Esta linha de comentrio ser ignorada na compilao
Segundo: atravs de barra e asterisco podemos iniciar um comentrio com vrias linhas. Para
encerrar o comentrio usa-se asterisco e barra.
/*
Estas linhas sero
ignoradas na
compilao do programa.
*/
5. Declarao de variveis
Programas, desde os mais simples, necessitam armazenar algum tipo de dado para realizar as
suas operaes. Para armazenar esses dados surge o conceito de variveis. Uma varivel em
programao um espao reservado na memria que nomeamos com um identificador para
facilitar a sua manipulao.
A sintaxe para declarao de variveis a seguinte:
<tipo de dado> <identificador>;
Inicializao
Quando declarada as variveis reservaram um espao para armazenar essa informao, porm,
ainda no tem nenhum valor. Portanto, precisamos "aliment-la" com um valor. Esse processo se
chama inicializao e pode ser feito de formas diferentes.
Algumas formas de inicializar a varivel:
1. Inicializar a varivel com um valor no momento da declarao.
int idade = 18;
2. Inicializar a varivel aps a declarao.
int idade;
idade = 18;
3. Inicializar atravs de uma funo de entrada de dados, como por exemplo, a scanf.
int idade;
scanf("%d",&idade);
Escopo
Escopo refere-se ao local onde declaramos a varivel. Inicialmente podemos ter uma viso errada,
de que quando declaramos a varivel, podemos utiliz-la em qualquer parte do cdigo. Isso no
acontece. Quando declaramos a varivel s podemos a utiliz-la dentro do bloco de cdigo onde
ela se encontra (o chamado de escopo da varivel).
Terminando esse bloco de cdigo a varivel deixa de existir, portanto, libera o espao reservado
por ela. Esse o motivo de declaramos as variveis apenas no local onde a iremos usar, para no
alocar espaos desnecessrios na memria.
Um exemplo de escopo:
O cdigo est destacado com quatro cores, cada uma representa um bloco de cdigo.
A cor verde representa o escopo global, ou seja, todo o programa. Portanto, qualquer varivel
declarada dentro desse escopo estar disponvel em qualquer parte do programa. As variveis
dentro desse bloco podem ser chamadas de variveis globais. Um exemplo disso a varivel
opcao declarada na linha 5. Ela usada na linha 21 para compor a mensagem, mas poderia ser
usada em qualquer parte do cdigo.
Na linha 13 temos um exemplo de varivel local, isso porque ela est dentro do bloco de cdigo
da instruo if, esse o seu escopo. Outro exemplo de variveis locais so as variveis das linhas
28 e 29, pois fazem parte do bloco de cdigos da funo funcao_potencia, portanto, no podem
ser usadas fora desse escopo.
Inteiro (int)
Para trabalharmos com nmeros inteiros a linguagem C disponibiliza os tipos de dados int e long.
O tipo int adequado para nmero inteiros que variem entre -32.768 e 32.767, para isso reserva
na memria um espao de 2 bytes. O tipo long (como o prprio nome sugere) para nmero
inteiros maiores, abrange os nmeros entre -2.147.438.648 e 2.147.438.647, para isso reserva na
memria um espao de 4 bytes.
Exemplo:
int altitude_pico_da_neblina = 2993;
long habitantes_brasil = 190755799;
Caractere (char)
Observe que os dois tipos de dados citados anteriormente so numricos. Para trabalharmos com
letras e outros caracteres temos disponvel na linguagem C o tipo de dados char. Dentro de uma
varivel char podemos armazenar um caractere da tabela ASCII e esse ocupar 1 byte de
memria.
Um exemplo, inicializando com um valor fixo:
char inicial = 'A';
Variveis char tambm podem ser inicializadas com o cdigo do caractere na tabela ASCII:
char inicial = 65;
Texto (string)
A linguagem C no possui um tipo de dado string para armazenar textos. Para armazenamento de
um texto utilizamos um vetor de caracteres.
Um exemplo:
char texto[50];
texto[0] = 'T';
texto[1] = 'e';
texto[2] = 'x';
texto[3] = 't';
texto[4] = 'o';
Porm, a inicializao de variveis dessa forma se torna trabalhosa. Isso pode ser resolvido
utilizando o texto desejado em uma nica linha entre aspas. Exemplo:
char texto[50] = "Texto";
Outro ponto importe a ser observado que a manipulao de textos no da mesma forma que
outros tipos de dados. A maioria das manipulaes so feitas por funes disponveis na
biblioteca string.h. Por exemplo, para copiar o texto de uma varivel para outra utiliza-se a funo
strcpy.
char origem[50] = "Texto";
char detino[50];
strcpy(detino, origem);
Vazio (void)
Em algumas situaes (principalmente na declarao de funes) preciso indicar um valor
inexistente/vazio. Para isso a linguagem C dispe do tipo void.
Um exemplo:
void imprimeMensagem(char msg[100]){
printf("Mensagem: %s",msg);
}
No exemplo acima declarada uma funo que tem por objetivo imprimir uma mensagem.
Observe que, a funo imprime a mensagem mas no retorna nenhum valor. Nesse caso
indicado no incio de sua declarao que o retorno ser void.
Um exemplo:
char nome[50] = "Maria";
int idade = 18;
printf("%s tem %d anos.",nome,idade);
Observe que a mensagem formada por um texto que contm, em determinados locais, o
caractere % seguido de uma letra. Esses controles indicam que nesses locais sero inseridos os
valores das variveis passadas na sequncia.
Um nmero inteiro
%c
Um nico caractere
%s
Um texto
%f
Um nmero decimal
\n
Nova linha
\t
Tabulao
Um exemplo:
char nome[50] = "Maria";
puts(nome);
Um nmero inteiro
%c
Um nico caractere
%s
Um texto
%f
Um nmero decimal
2. Utilizando um getchar aps o scanf. Aps a leitura de um texto com o scanf, normalmente,
fica no buffer um caractere, o enter pressionado para enviar o texto. Utilizando um getchar
antes de ler um nico caractere pode tirar essa sujeira do buffer.
Exemplo:
char nome[50], sexo;
scanf("%s", &nome);
getchar(); //Limpeza do caractere deixado no buffer
scanf("%c", &sexo);
3. Uma terceira forma na prpria leitura do caractere indicar para ignorar o caractere deixado
no buffer, adicionando o controle %*c na leitura. Esse controle indica para fazer a leitura de
um caractere (no caso a sujeira) e no armazen-lo.
Exemplo:
char nome[50], sexo;
scanf("%s", &nome);
scanf("%*c%c", &sexo); //Observe o %*c antes do %c
7. Operadores
Operadores so smbolos formados por um ou mais caracteres usados na programao para
realizar operaes diferentes. Veja a seguir uma lista com os principais operadores.
Os operadores formados por dois caracteres esses no podem ser separados.
Operadores matemticos
Operador
Nome
Sintaxe
Resultado
Soma
resultado = a + b;
Total da soma
Subtrao
resultado = a b;
Total da subtrao
Multiplicao
resultado = a * b;
Total da multiplicao
Diviso
resultado = a / b;
Total da diviso
Mdulo
resultado = a % b;
Resto da diviso
++
Incremento
a++;
Nmero mais um
--
Decremento
a--;
Nmero menos um
+=
a += b;
Total da soma em a
-=
a -= b;
Total da subtrao em a
Operadores relacionais
Operador
Nome
Sintaxe
>
Maior
(a > b)
<
Menor
(a < b)
>=
Maior ou igual
(a >= b)
<=
Menor ou igual
(a <= b)
==
Igual
(a == b)
!=
Diferente
(a != b)
No confundir o operador de igualdade (==) com o de atribuio (=) . O primeiro compara dois
nmeros, o segundo copia o valor da varivel da direita para a varivel da esquerda.
Operadores lgicos
Operador
Nome
Sintaxe
&&
E lgico
||
OU lgico
(a < b) || (a > c)
Negao
!(a < b)
Precedncia de operadores
Na linguagem C quando a operao apresenta diversos operadores alguns apresentam prioridade
sobre outros, assim como na matemtica. Por exemplo:
int a = 10, b = 15, c = 3, resultado;
resultado = a + b * c;
Observe que foram utilizados os operadores de soma e de multiplicao. primeira vista
podemos supor que a primeira execuo seria a operao de soma por estar esquerda
resultando em 75, porm, a execuo segue a seguinte precedncia de operadores:
Ordem
Operadores
Descrio
( )
Parnteses
++ --
Incremento e decremento
* / %
+ -
Soma e subtrao
== !=
Igualdade e diferena
&&
||
Ou
Negao
Atribuio
Como o operador de multiplicao tem uma prioridade sobre o operador de soma o resultado da
operao seria 55.
Para evitar confuses em situaes como essa adequado o uso de parnteses para separar
corretamente cada trecho da operao, tal qual na matemtica. Como o operador parntese
tem precedncia sobre os outros operadores, a sentena entre parnteses ser executada antes.
Mesma operao, agora delimitada por parnteses:
resultado = a + (b * c);
Outro exemplo:
if(((a > b) && (a > c)) || (a == (b + c))) {
//Bloco de cdigos...
}
Observe nessa condio que so vrios os operadores e a compreenso estaria comprometida se
no houvesse a separao das sentenas usando parnteses.
8. Estruturas de deciso
Estruturas de deciso so extremamente teis na programao, pois permitem criar condies
para que determinados blocos de cdigo sejam executados.
9. Estruturas de repetio
Estrutura de repetio for
A estrutura de repetio for permitem a repetio de determinado bloco de cdigo sob uma
condio, normalmente utilizando-se de uma varivel de nmeros inteiros para contagem das
execues.
Sintaxe:
for(<inicializao>;<condio>;<incremento>){
<bloco de cdigos>
}
Observe que a sintaxe do for exige trs parmetros de entrada.
Condio: uma condio lgica (usando operadores lgicos) que determina a condio
para que o bloco de cdigo seja executado. Normalmente, essa condio baseada na
varivel de controle.
Incremento: o quanto essa varivel de controle ir crescer a cada iterao do lao for.
Normalmente, a varivel de controle incrementada um nmero a cada iterao, para
isso basta usar o operador de incremento (++).
Observe no exemplo acima que a varivel de controle declarada na linha 5. Na declarao do for
inicializada com valor 1 e determinado, como condio para que lao continue executando,
que esse nmero seja menor ou igual a 100. No terceiro parmetro foi determinado que o
incremento dessa varivel fosse de 1 a cada iterao. Portanto, a instruo printf que est na
linha 9 dentro do bloco de cdigos do lao for, ser executada 100 vezes, imprimindo o valor da
varivel contador a cada iterao.
Observe que foi declarada uma varivel char para controle do lao. A cada iterao do lao essa
varivel ir armazenar a resposta do usurio e terminando as instrues dentro do bloco de
cdigo do while (o que no exemplo acima acontece na linha 12) ir retornar na condio e
verificar o novo valor.
Observe que tambm foi necessria a declarao de uma varivel para controle do lao, mas no
foi necessrio inicializa-la para que entrasse no lao na primeira vez. Isso porque, independente
do valor da varivel de controle o lao ser executado no mnimo uma vez, e ao final ir alterar o
valor dessa varivel de controle (linha 10) e verificar a condio (linha 12).
Observe que o while foi declarado com uma condio que nunca ir mudar, pois o valor da
varivel sim nunca alterado. Mas esse no um lao infinito, pois o controle foi feito com os
comandos continue e break. Nas linhas 13 a 17 est uma estrutura de deciso instruindo que,
caso o usurio digite 1 retorne para o incio da estrutura while (linha 7) e caso contrrio pare a
execuo do while.
Biblioteca stdio
uma das principais bibliotecas da linguagem C. Seu nome deriva do ingls, standard inputoutput, ou seja, entrada e sada padro. a biblioteca mais utilizada para comunicao com o
usurio.
Principais funes da stdio
scanf
printf
puts
gets
putchar
getchar
Biblioteca stlib
a biblioteca padro da linguagem C. Seu nome deriva de standard library em ingls, ou seja,
biblioteca padro. Ela apresenta funes de uso geral.
Principais funes da stlib
atof
atoi
strtod
rand
srand
Aloca memria
free
exit
Encerra o programa
system
Biblioteca math
A biblioteca math, como o prprio nome sugere, auxilia em clculos matemticos mais
avanados.
Principais funes da math
pow
sqrt
ceil
floor
log
Logaritmo
cos
Cosseno
sin
Seno
exp
Exponencial
Biblioteca ctype
A biblioteca ctype auxilia na manipulao de tipos de dados.
Principais funes da ctype
isalnum
isalpha
isdigit
islower
isupper
tolower
toupper
11. Funes
O que so e quando utilizar
Funes so blocos de cdigos isolados e nomeados, que ajudam na organizao do programa.
O uso de funes recomendado para:
Declarao de funes
A declarao da funo o isolamento de um bloco de cdigo com objetivos especficos.
A sintaxe para declarao de funes :
<tipo de retorno> <nome da funo> (<parmetros >){
<bloco de cdigo>
}
Tipo de retorno: quando a funo executada pode ser desejado alguma resposta, essa
respostada chamada de retorno da funo. Por exemplo, quando uma funo executa
um clculo, normalmente, desejado que ela retornasse o resultado final do clculo; para
isso no momento da declarao deve ser declarado o retorno com o tipo de dado do
resultado.
Observao: utilizado o tipo void quando no esperado nenhum retorno.
Nome da funo: um identificador da funo que est sendo chamada e ser utilizado
no momento da execuo da funo. Para facilitar a compreenso do cdigo, o nome dar
clareza sobre a operao que a funo ir realizar.
Observe que essa a mesma estrutura da declarao da funo main. Porm, alm da funo
main o cdigo pode ser organizado em outras funes.
Prottipo de funes
O prottipo de uma funo utilizado para indicar, logo no incio do programa, que uma funo
estar declarada mais abaixo. Isso instrui o compilador sobre quais parmetros devem ser
passados para a funo e qual o retorno que pode ser esperado da funo.
A sintaxe para a declarao do prottipo seguinte:
<tipo de retorno> <nome da funo> (<parmetros>);
Por exemplo, o prottipo da funo criada no exemplo anterior seria:
float area_retangulo(float largura, float altura);
Ateno: o prottipo da funo deve ser exatamente igual declarao da funo.
Tipo de dado e nome varivel: a declarao das variveis que fazem parte dessa
estrutura;
13. Ponteiros
Quando declaramos uma varivel estamos reservando um espao na memria do computador de
tamanho suficiente para armazenar o tipo de dado desejado. Essa varivel recebe um nome com
qual a manipulamos; mas o computador no manipula os dados atravs desse nome, ele traduz
esse nome em um endereo de memria.
A linguagem C permite declarar variveis que armazenem o endereo de uma varivel na
memria, so os chamados ponteiros.
Ponteiros so variveis que armazem um endereo de memria de outra varivel.
Declarao
Ponteiros so declarados utilizando-se do operador asterisco (*) antes do nome do ponteiro.
<tipo de dado> *<nome do ponteiro>;
Asterisco: o que sinaliza que essa varivel ser um ponteiro e no uma varivel comum.
Nome do ponteiro: o nome usado para manipular o endereo de memria. Por padro
se inicia o nome do ponteiro com a letra p, para identificar que se trata de um ponteiro.
Inicializao
Quando criados os ponteiros no apontam para nenhum endereo conhecido. Portanto, seu uso
sem a devida inicializao pode acarretar em erros e at danificar parte de outros sistemas que
estejam armazenados na memria.
Para inicializarmos um ponteiro devemos indic-lo qual a varivel queremos apontar:
int numero = 7;
int *ponteiro;
ponteiro = №
Observe o uso do caractere & para referenciar-se ao endereo de memria da varivel numero.
Portanto, a partir dessa inicializao o ponteiroNumero est armazenando o endereo na
memria da varivel numero.
Vejamos uma representao do cdigo acima:
MEMRIA
Endereo
Varivel
Contedo
#2665505
numero
#2665506
ponteiro
#2665505
*ponteiro = 8;
printf("Novo contedo da varivel nmero: %d", numero);
Referncias
TENENBAUM, Aaron M. Estruturas de dados usando C.
FEOFILOFF, Paulo. Algoritmos em linguagem C.
BACKES, Andr R. Linguagem C descomplicada.
Site: http://programacaodescomplicada.wordpress.com/apostila/
FEOFILOFF, Paulo. Projeto de Algoritmos em C.
Disponvel em: http://www.ime.usp.br/~pf/algoritmos/
Linguagem C.
Disponvel em: http://linguagemc.com.br/