Você está na página 1de 37

Linguagem C Aprenda aqui! - http://groups.google.

com/group/aprendaC

Produzido por: Tlio Ornelas (ocultokx@gmail.com)
2007
1
Sumrio
Captulo 1 ............................................................................................................................................... 3
Tipos de dados bsicos: ...................................................................................................................... 3
Identificadores: .................................................................................................................................. 3
Tipos de variveis: .............................................................................................................................. 4
Int (Inteiros) ................................................................................................................................... 4
char (Caracteres) ............................................................................................................................ 4
float (Reais) .................................................................................................................................... 4
double (Reais com dupla preciso) ................................................................................................. 4
Void (vazio) .................................................................................................................................... 4
Variveis: ........................................................................................................................................... 5
FUNO main() ................................................................................................................................. 5
DIRETIVA include: ............................................................................................................................... 5
FUNO printf() ................................................................................................................................. 6
Primeiro programa em C: ................................................................................................................... 7
Operadores Aritmticos: .................................................................................................................... 9
Operadores Relacionais: ..................................................................................................................... 9
Operadores Lgicos: ........................................................................................................................... 9
FUNO scanf() ................................................................................................................................ 10
FUNES getch() e getche() ............................................................................................................. 12
Estruturas Condicionais .................................................................................................................... 13
IF - ELSE: ...................................................................................................................................... 13
IF - ELSE aninhados ....................................................................................................................... 15
SWITCH ()..................................................................................................................................... 16
Operador ternrio (?) ................................................................................................................... 18
Comentrios:.................................................................................................................................... 19
Praticando Conhecimento ................................................................................................................ 20
Soluo: ....................................................................................................................................... 20
http://groups.google.com/group/aprendaC
Visite o grupo e participe!
2
Captulo 2 ............................................................................................................................................. 23
Operadores Compostos .................................................................................................................... 23
Operadores de incremento e decremento ........................................................................................ 23
Estruturas de Repetio ................................................................................................................... 24
For: .............................................................................................................................................. 24
While: .......................................................................................................................................... 26
Do-While:..................................................................................................................................... 28
Praticando Conhecimento ................................................................................................................ 30
Soluo: ....................................................................................................................................... 30
Bibliografia: .......................................................................................................................................... 32


Linguagem C Aprenda aqui! - http://groups.google.com/group/aprendaC

Produzido por: Tlio Ornelas (ocultokx@gmail.com)
2007
3
Linguagem de programao C
Captulo 1

A linguagem C portvel e no efetua nenhuma verificao em tempo de execuo,
uma linguagem case sensitive, ou seja, diferencia maisculas de minsculas, estruturada e
utiliza o conceito de blocos de programao, mas essa teoria toda ser aprendida na prtica.
Existem algumas palavras reservadas da linguagem, so elas:
Auto Double int struct break else
switch case enum * register typedef char
extern return const * float short unsigned
continue for signed * void * default goto
volatile* do if static while sizeof
long

Tipos de dados bsicos:
Tipo Tamanho em bits Tamanho em bytes Faixa
char 08 1 0 a 255
int 16 2 -32768 a 32767
float 32 4 3.4E-38 a 3.4E38
seis dgitos de preciso
double 64 8 1.7E-308 a 1.7E308
dez dgitos de preciso
void 0 0 sem valor

A definio do tipo de dados permite que o computador aloque e mantenha livre um
espao exato de memria que vai ser utilizado pelo programa.
Identificadores:
So as expresses definidas pelo usurio como nomes de variveis e funes.
Existem regras para declarao de variveis, apenas letras, nmeros e underscore (_) so
permitidos com exceo apenas para o cifro ($) que representa variveis de ambiente, mas
deixem essa declarao para o C avanado.
Devem comear sempre por letra, ou underscore (_), como foi dito antes a linguagem
case sensitive, ou seja, maisculas e minsculas so diferentes e no pode ser igual a uma
palavra reservada da linguagem.
Exemplos corretos: nome, casa, teste1,x, nome_completo
Exemplos incorretos: 1teste,&numero,123,aniversrio, numero!

http://groups.google.com/group/aprendaC
Visite o grupo e participe!
4
Tipos de variveis:
A linguagem C tem um sistema de tipos semelhante ao de alguns descendentes da
linguagem Algol, tais como Pascal. Possui tipos para nmeros inteiros de vrios tamanhos com
e sem sinal, nmeros de ponto flutuante, caracteres e estruturas (structs), mas isso ser
explicado futuramente.
Int (Inteiros)
O tipo de dados int (inteiro) serve para armazenar valores numricos inteiros. Existem
vrios tipo de inteiros, cada um de um tamanho diferente (dependendo do SO):
int, pode possuir 16, ou 32 bits, dependendo se o processador de 16 ou 32 bits.
short int, possui tamanho de 16 bits
long int, possui tamanho de 32 bits
long long int (s em compiladores C99), possui tamanho de 64 bits
Um int pode ser por padro um long int ou um short int dependendo da plataforma onde est
a correr.
Todos estes tipos de inteiros podem ainda ser declarados precedidos da clusula unsigned, o
que faz com que s suporte nmeros positivos. Isto faz com que, com o mesmo tamanho, uma
varivel suporte mais nmeros positivos do que um signed (todos os inteiros so signed por
omisso).
char (Caracteres)
O tipo char ocupa 1 byte, e serve para armazenar caracteres. Isso significa que o
programa reserva um espao de 8 bits na memria RAM do computador para armazenar um
valor. Com o tipo char tambm possvel armazenar strings, que so cadeias de caracteres.
float (Reais)
O tipo de dados float serve para armazenar nmeros de ponto flutuante, ou seja, com
casas decimais.
double (Reais com dupla preciso)
O tipo de dados double serve para armazenar nmeros de ponto flutuante de dupla
preciso, tem o dobro do tamanho do float e portanto o dobro da capacidade.
Void (vazio)
Este tipo serve para indicar que um resultado no tem um tipo definido. Uma das
aplicaes deste tipo em C criar um tipo vazio que pode posteriormente ser modificado para
um dos tipos anteriores.
Vejam na seqncia as regras para declarar variveis,
como na imagem ao lado.


Linguagem C Aprenda aqui! - http://groups.google.com/group/aprendaC

Produzido por: Tlio Ornelas (ocultokx@gmail.com)
2007
5
Variveis:
Posio nomeada de memria usada para guardar um valor que pode ser modificado
pelo programa, todas variveis em C devem ser declaradas antes de serem usadas
Forma geral da definio de varivel
<tipo de dado> <identificador>;
onde
<tipo de dado> qualquer tipo vlido mais qualquer modificador
<identificador> um ou mais nomes de identificadores separados por ,
Exemplos:
char letra;
int x,y,z,numero;
FUNO main()
A funo main obrigatria em um programa na linguagem C, e marca o ponto de incio
da execuo do programa, se um programa consistir em apenas uma funo esta ser main().
Todas as instrues devem estar dentro das chaves que iniciam e terminam a funo (bloco de
instruo) e so executadas na ordem seqencial de escrita no programa.
DIRETIVA include:
Provoca a incluso de um programa fonte em outro, instruindo
ao compilador a ler e agregar o arquivo no programa que tiver a
diretiva include.
#include <arq> arquivo no diretrio padro ou
#include arq arquivo no diretrio atual
arq - est representando o nome do arquivo a ser includo
O smbolo de sustenido #, antes da diretiva include, um sinal
para o pr-processador, que tm a funo de examinar o programa
fonte em C e executar certas modificaes, baseadas nas instrues
das diretivas
O include importa as bibliotecas. A biblioteca padro da
linguagem C stdio.h.
Ex:
#include stdio.h


1) A linguagem C baseada
em blocos, como j foi
explicado.
Ex: main{
}
As chaves representam o
incio({) e o final(}) do bloco
de programao.
2) Em C o compilador vai
interpretando a linha at
encontrar (;) ponto e virgula,
ele indica o final da
instruo.
Ex: char nome;
http://groups.google.com/group/aprendaC
Visite o grupo e participe!
6
Em linguagem C podemos utilizar recursos do sistema
operacional, um exemplo disso pausar a execuo
do programa (system ()) atravs do comando
PAUSE, exemplo:
System (PAUSE);

FUNO printf()
Uma das funes de sada que pode ser usada em C, a <expresso controle> pode
conter caracteres que sero exibidos na tela e cdigos de formatao dos argumentos, a <lista
de argumentos> formada pelos argumentos que sero usados pela funo, faz parte da
biblioteca padro da linguagem C (stdio.h) e pode receber um nmero varivel de argumentos
(separados por ,)
printf(<expresso controle>,<lista de argumentos>);
Exemplo: printf(Escrevendo um programa);
printf(Esta a letra %c, C);
printf(Escreva o valor %d \n %s,2, por extenso);
Alguns caracteres no podem ser obtidos diretamente do teclado (como mudana de
linha) por isso tem a sua representao feita por cdigos especiais usando a \ com a
combinao de outro caractere.
Cdigo Significado Cdigo Formato
\n nova linha %c caractere simples (char)
\r retorno do cursor %d decimal (int)
\t tab %e notao cientfica
\b retrocesso %f ponto flutuante (float)
\ aspas %g %e ou %f (o mais curto)
\\ barra %o octal
\f salta pgina de formulrio %s cadeia de caracteres (string)
\0 nulo %u decimal sem sinal
\x caractere grfico (este smbolo %x hexadecimal
escreve cdigos acima de 127 %ld decimal longo (long int)
decimal) \xdd onde dd hexad. %lf ponto flutuante longo (Double)
%% Apresenta o smbolo de porcentagem (%)






Linguagem C Aprenda aqui! - http://groups.google.com/group/aprendaC

Produzido por: Tlio Ornelas (ocultokx@gmail.com)
2007
7
Primeiro programa em C:
Agora j temos base para o nosso primeiro programa em C. Estarei utilizando o
compilador Dev C/C++ nestas aulas, ele open source e pode-se fazer o download no seguinte
endereo http://www.bloodshed.net/devcpp.html
Vamos parar de conversa e ir logo aos exemplos:
1) --------------------------------------------------------------------------------------------------------------------------

Figura 1 - Cdigo do programa, feito em Dev C/C++.

Figura 2 - Executando o programa acima.
Para compilar e executar um programa em C utilizando o Dev C/C++ basta apertar a
tecla F9 e salvar o arquivo como (*.c).

Figura 3 - Salvando arquivo .c para execuo.
http://groups.google.com/group/aprendaC
Visite o grupo e participe!
8
2) --------------------------------------------------------------------------------------------------------------------------

Figura 4 - Cdigo do programa, feito em Dev C/C++.

Figura 5 - Execuo do programa.
3) --------------------------------------------------------------------------------------------------------------------------

Notem que o exemplo 3 est igual ao exemplo 2 diferenciando apenas o modo da
atribuio, como foi visto no quadro cima.
Atribuio de variveis:
Em C valores podem ser atribudos arbitrariamente, sendo necessrio
apenas que o valor que esteja sendo atribudo seja do mesmo tipo da varivel
declarada. Utilizamos o sinal de =, igual, para atribuir valores. Ex: numero = 10;
Podemos tambm atribuir valores na prpria declarao da varivel.
Ex: int numero = 10;
Linguagem C Aprenda aqui! - http://groups.google.com/group/aprendaC

Produzido por: Tlio Ornelas (ocultokx@gmail.com)
2007
9
Operadores Aritmticos:
Os operadores em linguagem de programao so usados como na matemtica,
vejamos alguns deles.
+ (Adio) Soma nmeros. Ex: numero = 15 + 5; Desta forma, numero estar
recebendo o resultado do calculo 15 + 5, no caso 20.
- (Subtrao) Subtrai nmeros. Ex: numero = 15 - 5; Desta forma, numero estar
recebendo o resultado do calculo 15 - 5, no caso 10.
* (Multiplicao) Multiplica nmeros. Ex: numero = 15 * 10; Desta forma, numero
estar recebendo o resultado do calculo 15 * 10, no caso 150.
/ (Diviso Real) Divide nmeros. Ex: numero = 15 / 3; Desta forma, numero estar
recebendo o resultado do calculo 15 / 3, no caso 5. No caso de dois
nmeros inteiros, a operao de diviso arredondar o resultado, por
isso se voc deseja um valor preciso utilize pelo menos 1 nmero
float ou Double.
% (Resto) Recebe o resto da diviso. Ex: numero = 20 % 2; Desta forma, numero
estar recebendo o resto do resultado do calculo 20%2 , no caso 0
pois 20 divisvel por 2 e possui resto 0.
Operadores Relacionais:
== (Igualdade) Compara dois valores e retorna 1 (verdadeiro) se forem iguais ou 0
(se forem verdadeiros), lembrando que == diferente de =, este
atribui valores as variveis enquanto == compara dois valores
verificando se so iguais.
> (Maior que) Verifica se um valor maior do que outro.
>= (Maior ou igual) Verifica se maior ou igual.
< (Menor que) Verifica se um valor menor do que outro.
<= (Menor ou igual) Verifica se menor ou igual.
!= (Diferente) Compara dois valores e retorna 1 (verdadeiro) se forem diferentes
ou 0 (se forem iguais).
Operadores Lgicos:
Os operadores lgicos servem para interligar mais de uma operao relacional. E assim
como os relacionais retornam zero para falso e um para verdadeiro.
&& (E lgico) Retorna verdadeiro se ambos os operandos so verdadeiros e
falso nos demais casos. Exemplo: if( val1<2 && val2<6).
|| (OU lgico) Retorna verdadeiro se um ou ambos os operandos so verdadeiros e
falso se ambos so falsos.
Exemplo: if( val1>3 || val2<4).
! (NO lgico) Usada com apenas um operando. Retorna verdadeiro se este falso
e vice-versa.
Exemplo: if( !var ).
http://groups.google.com/group/aprendaC
Visite o grupo e participe!
10
FUNO scanf()
Funo de entrada/sada que pode ser usada em C, permite ler dados formatados da
entrada padro (teclado). Sua <expresso controle> deve conter os cdigos compatveis com a
formatao dos argumentos, a <lista de argumentos> nesta funo deve conter os endereos
das variveis (usando o operador de endereo & em C).
O smbolo %* indica que ser lido um valor do tipo especificado, mas no ser
atribudo a nenhuma varivel (no devendo ter parmetros na lista de argumentos)
Faz parte da biblioteca padro da linguagem C (stdio.h) e pode receber um nmero
varivel de argumentos (separados por ,)
scanf(<expresso controle>,<lista de argumentos>);
Exemplo: scanf(%f , &valor);
Vejamos em uma programa o uso do scanf():

Um endereo o nome que o computador usa para identificar varivel, pois toda
varivel ocupa uma localizao na memria e seu endereo o do primeiro byte ocupado por
esta varivel.

Note que no campo
voc informar apenas o tipo
do dado que voc quer ler,
seguindo os padres
apresentados ao lado, depois
disso separamos com uma
vrgula (,) e informamos o
endereo da varivel na qual
receberemos o dado, no caso,
idade. O operador (&) retorna
o endereo da varivel.
Cdigo Formatao da Funo
%c leia um nico caractere
%d leia um inteiro decimal
%e leia um nmero em notao cientfica
%f leia um nmero em ponto flutuante
%o leia um inteiro octal
%s leia uma srie de caracteres
%u leia um decimal sem sinal
%x leia um nmero hexadecimal
%l leia um inteiro longo
%lf leia um double

Linguagem C Aprenda aqui! - http://groups.google.com/group/aprendaC

Produzido por: Tlio Ornelas (ocultokx@gmail.com)
2007
11

Figura 6 - Execuo do programa.
Para explicar melhor o conceito de endereo faremos um exemplo:

Figura 7 Cdigo.

Figura 8 Execuo.
Utilizando o exemplo sobre scanf():

Notem que o comando system
(cls); foi inserido depois da
leitura do dado, apenas para
apresentar o resultado, confiram
a execuo do programa.
System (cls);
Esta funo efetua a limpeza de toda a tela (ou janela). Esta limpeza consiste em apagar todos os
smbolos (ou caracteres) que estavam sendo apresentados em instrues anteriores. Com a limpeza de
toda a tela o cursor fica posicionado na primeira posio dela, ou seja, no canto superior esquerdo.
Existe a funo clrscr(); mas ela pertence a biblioteca conio.h, estudaremos sobre esta biblioteca
mais a frente.
http://groups.google.com/group/aprendaC
Visite o grupo e participe!
12
Execuo:
Em um primeiro momento, esperando que o usurio pressione ENTER para confirmar a
idade informada, no caso 19:

Depois de limpar a tela, apresentando o resultado:

FUNES getch() e getche()
O tipo char como visto antes armazena apenas 1 caractere, uma letra. Podemos ler um
char atravs da funo scanf() utilizando %c,( scanf (%c,&letra);) porm existem funes
mais usadas para esse tipo de trabalho, as funes getch() e getche() que no so definidas
pelo padro ANSI. Porm, elas geralmente so includas em compiladores baseados no DOS,
ambas retornam o caractere pressionado . getche() imprime o caractere na tela antes de
retorn-lo e getch() apenas retorna o caractere pressionado sem imprimi-lo na tela. Ambas as
funes so encontradas na biblioteca conio.h, porm no Dev C/C++ esta biblioteca no possui
todas as caractersticas, mas foi desenvolvida uma biblioteca genrica com a maioria das
funcionalidades da conio.h, se chama conio.c (j presente no compilador). Geralmente essas
funes no esto disponveis em ambiente Unix (compiladores cc e gcc), pois no fazem
parte do padro ANSI.

Execuo:

Depois de informada a idade, o programa limpa a tela.

Linguagem C Aprenda aqui! - http://groups.google.com/group/aprendaC

Produzido por: Tlio Ornelas (ocultokx@gmail.com)
2007
13
Estruturas Condicionais
Com as estruturas condicionais podemos estabelecer condies para que comandos
sejam executados ou no.
IF - ELSE:
Pode-se utilizar uma ou mais instrues verdadeiras e falsas no if. Caso seja mais de uma
deve-se colocar entre chaves. Se a condio verdadeira sero executadas apenas as
instrues localizadas aps a instruo if. Caso contrario somente as instrues aps o else
sero executadas. O else opcional conforme mostra o exemplo abaixo que efetua a soma de
dois nmeros e avisa ao usurio quando o resultado obtido for um nmero par.










Figura 9 Cdigo.

Figura 10 - Informou os nmeros.

Figura 11 - Pressionou-se ENTER e o resultado foi calculado.





http://groups.google.com/group/aprendaC
Visite o grupo e participe!
14
Utilizando o mesmo exemplo para demonstrar o ELSE:

Figura 12 - Cdigo, utilizando else.
Utilizando soma par:

Utilizando soma mpar:




Explicando a expresso: soma % 2 == 0
Como foi visto o operador (%) mod, ou resto, retorna o resto da diviso inteira,
portanto se queremos descobrir se um nmero par ou mpar devemos apenas dividi-lo
por 2, se o resto da diviso for zero (0) por que o nmero par seno mpar.
Se o resultado for zero (0) significa que a expresso verdadeira entrando assim no
bloco de comando do if, caso a expresso seja falsa entrar no bloco de comando do else.
Linguagem C Aprenda aqui! - http://groups.google.com/group/aprendaC

Produzido por: Tlio Ornelas (ocultokx@gmail.com)
2007
15
IF - ELSE aninhados
A linguagem C padro tambm permite o uso de ifs alinhados, obedecendo forma:
If(condio)
Instruo;
Else If(condio)
Instruo;
Else If(condio)
Instruo;
.
.
.
Else
Instruo;

Exemplo:

Figura 13 - Cdigo


Figura 14 Execuo



http://groups.google.com/group/aprendaC
Visite o grupo e participe!
16
SWITCH ()
O switch realiza uma funo semelhante ao if-else aninhado, ele possui uma srie de
condies para varivel em teste. O comando switch prprio para se testar uma varivel
em relao a diversos valores pr-estabelecidos. Quando falamos de switch devemos explicar
tambm o comando break, muitos programadores iniciantes acreditam que o break utilizado
apenas no switch, e isso no verdade. O comando break realiza uma quebra de ciclo, ou seja,
ele interrompe a execuo de determinada rotina no momento em que executado, no caso
do switch ns possumos diversos comandos (cases) agrupados necessitando de uma quebra
entre eles, para que quando um comando (case) for executado ele no execute os demais
quando terminar, vejamos a sintaxe do switch.
Switch (condio){
case ():
Break;
Case():
Break;
.
.
.
}

Exemplos:
1)

Figura 15 - Cdigo
Linguagem C Aprenda aqui! - http://groups.google.com/group/aprendaC

Produzido por: Tlio Ornelas (ocultokx@gmail.com)
2007
17

Figura 16 - Execuo, escolhendo a opo *

Figura 17 - Execuo, escolhendo opo +
Notem que os cases podem ser testados com qualquer tipo, no caso do exemplo,
utilizei char para realizar meus testes. Podemos inserir no switch um case programado para
receber apenas as opes que no se adequarem aos cases propostos, se chama default. Este
opcional.
2)
Neste exemplo
estou utilizando um
inteiro (int) para
receber o valor a ser
testado pelo meu
switch. Percebam
tambm que depois
de colocar todas as
possibilidades do meu
switch eu adicionei o
default que ira
receber todas as
opes que no se
adequarem aos cases
anteriores, no caso
1,2,3,4.
O switch
muito usado na
criao de menus.



http://groups.google.com/group/aprendaC
Visite o grupo e participe!
18
Execuo:



Executando o programa vrias vezes utilizando opes diferentes, notem que no ltimo
exemplo a opo escolhida 9 no est definida em um case, por isso o default chamado
exibindo a frase opo invlida.
Operador ternrio (?)
Este operador no atende a uma gama grande de casos, mas pode ser usado para
simplificar expresses complicadas, sua sintaxe:
<condio> ? <expresso 1> : <expresso 2>;
Vejam a diferena entre o condicional if-else e o
operador ternrio, valor receber 5 se nmero for
menor que 50 ou 3 se for maior.


Linguagem C Aprenda aqui! - http://groups.google.com/group/aprendaC

Produzido por: Tlio Ornelas (ocultokx@gmail.com)
2007
19
Comentrios:
Como na maioria das linguagens, C permite a insero de comentrios no cdigo do
programa, isso facilita o entendimento. Nesta linguagem podemos comentar de duas formas
nosso cdigo:
1) Comentrio de linha (//)
2) Comentrio em bloco (/**/)
Para comentarmos em linha basta digitar os caracteres // que a linha em que voc esta
ser convertida em comentrio. J em bloco utilize os caracteres /* para abrir o bloco e */
para fechar. Vejamos alguns exemplos:














Notem que neste exemplo utilizei os dois tipos de comentrio, em linha e em bloco, eles
no afetam a execuo do seu programa por isso so fortemente recomendados a todos os
programadores, lembrem-se programa bem comentado um programa de fcil compreenso.
Em qualquer compilador o usurio pode definir as cores do seu cdigo, por isso no se
assuste se o seu comentrio estiver com outra cor, neste caso eu que troquei a cor para rosa,
visando facilitar a visualizao pois a cor default, padro, do meu compilador era pouco visvel.
http://groups.google.com/group/aprendaC
Visite o grupo e participe!
20
Praticando Conhecimento
Exerccio final do captulo, usaremos grande parte do conhecimento aprendido neste
captulo, ento vamos ao exerccio:
Desenvolva uma calculadora simples que permita soma, subtrao, multiplicao e
diviso de dois nmeros reais (float). Faa de forma a no ocorrer diviso por zero, e
verifique se operador informado existe na sua calculadora.
Soluo:
Primeira parte da soluo: Declarando variveis e lendo valores.

Linguagem C Aprenda aqui! - http://groups.google.com/group/aprendaC

Produzido por: Tlio Ornelas (ocultokx@gmail.com)
2007
21
Segunda parte da soluo: Operando valores lidos e apresentando resultado.



Forma de apresentao de nmeros usando printf()
Um float possui muitas casas decimais, e nem sempre precisamos visualizar todas elas, por
isso a funo printf permite que esses nmeros seja formatados, ou seja, apresentados de outra
forma. O que foi feito no exerccio final ser explicado agora:
%<quantidade de casas inteiras>.<quantidade de casas decimais>.f
Esta a sintaxe da operao, devemos colocar depois da porcentagem (%) o nmero de
casas inteiras que desejamos depois devemos colocar o ponto (.) e em seguida o nmero de casas
decimais. No exerccio a cima foi feito: %.2f
Isso significa que no nos importamos com o nmero de casas inteiras mas queremos
apenas duas casas decimais.
http://groups.google.com/group/aprendaC
Visite o grupo e participe!
22
Execues do exerccio:





















Linguagem C Aprenda aqui! - http://groups.google.com/group/aprendaC

Produzido por: Tlio Ornelas (ocultokx@gmail.com)
2007
23
Captulo 2
A linguagem C foi criada na dcada de 1970 por Dennis Ritchie e Ken Thompson para
ser usada no sistema operacional UNIX. Desde ento espalhou-se por muitos outros sistemas
operativos, e tornou-se uma das linguagens de programao mais usadas. A linguagem tem
como ponto-forte a sua eficincia tem preferncia para o desenvolvimento de software de
sistemas, apesar de tambm ser usada para desenvolver aplicaes. muito usada no ensino
de cincias da computao, mesmo no tendo sido projetada para estudantes e apresentando
algumas dificuldades no seu uso.
Operadores Compostos
Os operadores compostos so usados para simplificar expresses.
A = A + B; A += B; Operador composto da adio
A = A B; A -= B; Operador composto da subtrao
A operao composta pode ser aplicada com a maioria dos operadores, o sinal do
operador antes da igualdade idntica a composio, ele garante que a varivel que est
recebendo aquele calculo ainda seja operada no final da conta seja somando, dividindo,
subtraindo etc.
X = X*(A+B); X *= (A+B); Operando com a multiplicao
X = X/Y; X /= Y; Operando com a diviso
Operadores de incremento e decremento
Estes operadores acrescem ou decrescem em 1 a varivel, so muito utilizados como
contadores. Podem ser colocados antes ou depois da varivel a modificar, se colocados antes,
modificam o valor antes da expresso ser usada e, se colocados depois, modificam depois do
uso, vejamos na prtica.




Notem que quando fizemos x++ o valor de x foi aumentado em um (1), e quando realizamos x-
- seu valor decresceu em 1 unidade, vejamos outro exemplo.

http://groups.google.com/group/aprendaC
Visite o grupo e participe!
24


Notem que o IF (x++ > 0) no apresentou seu resultado pois o x foi incrementado
apenas depois de verificado.
Estruturas de Repetio
A linguagem C possuir trs estruturas de repetio que so o for, while e do-while. Cada
uma dessas estruturas possui caractersticas diferentes, vejamos essas estruturas:
For:
Obedece seguinte sintaxe for (<inicializao>; <condio>; <incremento>) <instruo>;
O loop for utilizado quando sabemos exatamente a quantidade de vezes que o ciclo
ser executado, por exemplo, quando queremos somar dez (10) nmeros, a quantidade
conhecida, no caso 10. Vejamos o funcionamento do for.
<inicializao> Este parmetro indica como devemos comear, o nosso ponto de partida.
Ele recebe uma varivel e a inicializa. Como exemplo, utilizaremos x = 1.
<condio> Como o prprio nome diz, este parmetro indica a nossa condio de
parada, o momento em que nosso loop ser finalizado. Seguindo o nosso exemplo, teremos
x <= 10.
<incremento> Aqui ns vamos mover o nosso loop, a varivel utilizada para contagem
ser acrescida neste parmetro utilizando a lgica de incremento explicada anteriormente, no
caso x++.
Com isso teremos: for (x = 1; x <= 10; x++) <instruo>;
Como em qualquer estrutura em C o for pode ser colocado em bloco, permitindo assim
a execuo de mais de uma instruo, ficando da seguinte forma:

Linguagem C Aprenda aqui! - http://groups.google.com/group/aprendaC

Produzido por: Tlio Ornelas (ocultokx@gmail.com)
2007
25
for (x = 1; x <= 10; x++){
<instruo>;
}
Vejamos nosso exemplo: Criar um programa que some de 1 a 10.

Execuo:


Neste exemplo utilizei algumas estruturas aprendidas anteriormente, vamos revisar:
resposta = 0; Neste comando eu declarei a varivel resposta e a inicializei com zero (0),
pois se esta varivel ir armazenar a soma dos nmeros ela deve comear com zero.
resposta += x; Aqui eu utilizei o operador composto += para somar resposta com x,
reduzindo a expresso resposta = resposta + x;
int main (void){ A funo main est diferente da utilizada anteriormente, por que?
Como j foi explicado no primeiro captulo, a linguagem possui alguns tipos de dados e isto
inclui as funes, toda funo possui um tipo de dado de retorno e um tipo de entrada, neste
caso a funo main do tipo inteiro, int, e no est recebendo nada como parmetro, por isso,
ela recebe void, que vazio, como entrada. Mas no se preocupem isso ser explicado mais
para frente, estou apenas apresentando para vocs o molde de uma funo, para quando
estudarmos funes vocs j tenham se acostumado com a sintaxe.

Algumas perguntas muito comuns sobre o uso do loop for:

Eu posso inicializar o meu x com qualquer valor?
R: Sim, o x pode receber qualquer valor.

Posso utilizar outra varivel no for ou apenas x?
R: Pode-se utilizar qualquer varivel INTEIRA no for, desde que voc a declare antes.

Na condio do loop eu posso utilizar outro operador condicional?
R: Sim, a condio montada pelo programador, podendo ser >,>=,<,<= etc.

O meu for pode ser executado subtraindo?
R: Sim, a sua sintaxe pode ser: for (x=10; x>=1; x--) <instruo>
http://groups.google.com/group/aprendaC
Visite o grupo e participe!
26

While:
Obedece seguinte sintaxe while ( <condio> ) <instruo>;
Esta estrutura utilizada quando queremos que a nossa condio seja verificada antes
da execuo do loop. Vejamos o funcionamento do while:
<condio> Como no for, aqui temos a nossa condio de parada.
Vejam que no while a inicializao e incrementao fica por conta do programador,
deste modo o loop ser executado eternamente at que a condio de parada ocorra ou o
encerramento do loop seja forado por algum comando, veremos isso a seguir.
Se tivssemos que somar 10 nmeros, a while ficaria desta forma:
while (x <= 10) <instruo>;
O while pode ser escrito na forma de bloco:
While (x <= 10){
<instrues>;
}

Vejamos a soma de 10 nmeros como ficaria utilizando o while:

Execuo:
Observaes importantes:
A inicializao executada uma nica vez antes do loop ser iniciado.
A seqncia de comandos ser repetida enquanto a condio for verdadeira. Quando ela
for falsa os comandos aps o loop so executados.
O incremento define como ser alterada a varivel de controle do lao, cada vez que ele
for repetido, sendo executado logo aps o fim do corpo do loop.
Professor Vandor Rissoli, Universidade Catlica de Braslia. Com alteraes.
Linguagem C Aprenda aqui! - http://groups.google.com/group/aprendaC

Produzido por: Tlio Ornelas (ocultokx@gmail.com)
2007
27


Vejamos as diferenas do cdigo utilizando o while:

Notem que a varivel de controle do loop, x, teve que ser inicializada x = 1.
A nossa condio manteve-se igual, x <= 10.
E tivemos que adicionar o nosso prprio operador de incremento, x++;

No loop while as instrues so executadas enquanto a condio for verdadeira, ou seja
diferente de zero (0), a condio verificada no incio de cada ciclo de repetio, ou seja, ela
verifica se a condio estiver verdadeira o loop executado, assim que as instrues forem
executadas volta-se para o incio do loop e verifica novamente se a condio de parada est
verdadeira, se estiver o loop continua.
Existem outras formas de terminar o loop while, se utilizarmos o comando break,
estudado no captulo sobre switch(), poderemos encerrar o loop e continuar com o programa.
Esta tcnica no recomendada, mas vejamos um exemplo:

Execuo:


Notem que o loop foi encerrado quando x era igual a 4, realizando apenas a conta:
1 + 2 + 3 + 4 = 10
O comando break encerrou o loop while antes que sua condio fosse falsa.

http://groups.google.com/group/aprendaC
Visite o grupo e participe!
28
Algumas perguntas sobre o while:

Se eu colocar no parmetro de condio o nmero 1 o que acontece?
R: Em C o nmero 1 representa verdadeiro, portanto o seu loop while ser infinito,
parando apenas com um comando break.

Posso utilizar um operador de decremento no while?
R: Sim, pode at mesmo utilizar um operador composto, se assim desejar.

Se eu utilizar o 1 na condio e no parar com o break o que acontece?
R: O seu while simplesmente no vai parar, seu programa ficar preso no while.

Do-While:
Segue a seguinte sintaxe:
do{
<instrues>;
}while ( <condio> );
Esta estrutura utilizada quando queremos que a nossa condio seja verificada depois
da execuo do cdigo. Vejamos o funcionamento do do-while:
No do-while assim como no while a inicializao e incrementao ficam por conta do
programador, o loop ser chamado at que a condio seja falsa, de modo que no do-while as
instrues so executadas pelo menos uma vez. O do-while pode ser utilizado sem as chaves
de bloco, porm estas favorecem a legibilidade do cdigo e so altamente recomendadas.
Vejamos um exemplo de do-while: Construa um programa que apresente um menu de
opes e saia apenas quando o usurio utilizar a opo de sair do menu.
O programa deve obedecer ao seguinte layout:






Linguagem C Aprenda aqui! - http://groups.google.com/group/aprendaC

Produzido por: Tlio Ornelas (ocultokx@gmail.com)
2007
29


















Execues:


http://groups.google.com/group/aprendaC
Visite o grupo e participe!
30



Praticando Conhecimento
Um fazendeiro deseja descobrir qual a vaca com o maior peso e a com o menor peso
de sua criao, faa um programa que leia 200 nmeros de identificao e 200 pesos e ao
final da execuo apresente o maior e o menor peso, juntamente com suas respectivas
matrculas.
Soluo:
Linguagem C Aprenda aqui! - http://groups.google.com/group/aprendaC

Produzido por: Tlio Ornelas (ocultokx@gmail.com)
2007
31
Execues:


Explicando:

Nesta linha eu atribui as variveis que receberiam o maior e o menor peso. Mas porque
esses valores -999999 e 99999? A resposta simples, neste exerccio utilizamos um mtodo
chamado estouro de varivel, o que seria isso? Este mtodo consiste em atribuir valores
mximos e contrrios as variveis, neste caso, peso_maior deveria armazenar o maior peso
por isso recebeu o menor valor possvel na sua inicializao, de forma que o primeiro peso
informado seria automaticamente o maior peso. O mesmo aconteceu com o menor peso, com
isso o primeiro peso seria o maior e o menor, e conforme os demais pesos fossem sendo
informados o maior e o menor seriam alterados pela nossa condio, vejamos a condio
utilizada:
A condio criada foi a seguinte, se o peso que
informamos na varivel peso for maior que o maior_peso,
no caso da primeira execuo -999999, a varivel
mair_peso recebe o peso informado e a matricula do
maior peso recebe a matrcula informada, o mesmo
ocorre com o menor_peso, conforme formos informando
os pesos os valores em maior e menor peso sero
alterados.
Alguns de vocs devem estar se perguntando o porqu de -999999 j que no existe
peso negativo. O valor negativo poderia ser substitudo sem prejuzo por 0 (zero), porm
preferi utilizar o valor -999999 pra mostrar que este mtodo tambm funciona com valores
negativos.
O nmero de vacas propostas, 200, apenas para dificultar o processo, pode-se usar um
nmero menor para testar o programa, como o que eu fiz, utilizei apenas 6 vacas.
http://groups.google.com/group/aprendaC
Visite o grupo e participe!
32
Captulo 3
A seqncia em que esta apostila foi preparada capacita o estudante a desenvolver
pequenos problemas utilizando a linguagem estudada, cumprindo com a proposta da apostila,
que ensina a linguagem de maneira prtica e descomplicada, porm algumas estruturas
necessitam de maiores detalhes, e neste captulo estudaremos estes tipos de estruturas.
String
Uma string um conjunto de caracteres agrupados, uma palavra. No captulo 1
estudamos o tipo de dado char, que armazena um caractere, as strings so um conjunto de
caracteres, logo um conjunto de chars. Podemos dizer que as strings so um tipo de dado
homogneo, pois todos os dados pertencentes a esse conjunto so do mesmo tipo, char.
So sempre terminadas pelo caractere nulo (\o), por isso so acrescidas de 1 em seu
tamanho real, o compilador ir ler o conjunto de caracteres at encontrar o elemento nulo,
est a nica maneira de identificar a string. Cada char ocupa um byte na memria, como foi
visto antes, por isso, cada caractere da string ocupa 1 byte, no caso da palavra casa teramos 4
bytes.
Sintaxe de declarao da string:
char <nome da varivel> [Tamanho] ;
Vamos declarar uma varivel string que ir armazenar um nome:
char nome[50];
Esta varivel possui um espao em memria para armazenar 49 caracteres. O nmero
dentro dos colchetes chamado de ndice da string, no caso da varivel nome temos do ndice
0 ao 48 para armazenarmos as letras do nome e o ndice 49 para armazenar o caractere nulo
(\0). O caractere nulo no adicionado pelo compilador, ou seja, o programador deve
programar a sua insero ou utilizar funes que j faam a insero do \0.
Scanf lendo string
Podemos utilizar o scanf para ler strings, utilizando a mesma sintaxe vista
anteriormente. Ao falarmos de strings estamos falando tambm de endereos, uma string
um conjunto serial de endereos que armazenam o mesmo tipo de dado. Cada ndice da string
representa um endereo na memria, e cada endereo representa um char, desta forma o
endereo, por exemplo, nome[0] representaria o primeiro endereo da string, seu comeo,
este endereo especial, por onde a maioria das funes de escrita e leitura de strings se
baseiam para suas operaes, por isso, podemos utilizar o primeiro endereo apenas
escrevendo o nome da varivel, nome = nome[0] ambas as formas apontam para o mesmo
endereo.
Desta forma ao utilizarmos o scanf para lermos uma string devemos utilizar o
identificador de string %s e indicar o primeiro endereo da string, no caso nome. Vejamos a
sintaxe completa:
Linguagem C Aprenda aqui! - http://groups.google.com/group/aprendaC

Produzido por: Tlio Ornelas (ocultokx@gmail.com)
2007
33

Notem que no utilizamos o operador de endereo & para recebermos o endereo da
string, utilizamos apenas seu nome como foi explicado agora a pouco. Vejamos um exemplo
completo da utilizao do scanf na leitura de strings:

Execuo:

Vejamos agora outro exemplo:

Queremos que o usurio informe seu nome completo, vejamos a execuo do
programa:

http://groups.google.com/group/aprendaC
Visite o grupo e participe!
34
Notem que na apresentao do nome no foi impresso nome completo, por qu?
A funo scanf no mais apropriada para a leitura de strings, pois ela atribui (\0) aos
espaos em branco da string, finalizando-a no primeiro espao. No exemplo dado Tulio nome
completo ficaria Tulio\0nome\0completo e a string seria finalizada no primeiro (\0)
encontrado pelo compilador.
Funo gets()
A funo gets() seria get string que significa receber string. Esta uma funo mais
apropriada a leitura de strings, sua sintaxe seria:
gets ( <primeiro endereo da string, seu nome> );
Vejamos o exemplo anterior utilizando a funo gets():

Execuo:

Notem que o nome foi apresentado corretamente, porm como em todas as funes de
leitura de string na linguagem C, a funo gets() tambm possui alguns problemas ela no
verifica o tamanho da string, o que seria isso, se o usurio digitasse 200 caracteres na nossa
varivel nome[50] de 48 caracteres ele causaria uma invaso de memria, podendo invadir a
memria do prprio sistema operacional. Voc deve estar se perguntando, como resolver esse
problema? Sua pergunta ser respondida em breve.




Linguagem C Aprenda aqui! - http://groups.google.com/group/aprendaC

Produzido por: Tlio Ornelas (ocultokx@gmail.com)
2007
35
Funo puts()
puts = put string = colocar string.
A funo puts tem a funo de apresentar uma string, nada que um printf no resolva,
porm fica a cargo do programador decidir o que ir usar. O puts imprime apenas uma string
por vez e sempre salta um linha no final, vejamos um exemplo:

Execuo:

Como a funo puts() apresenta um string inteira de uma vez podemos utilizar o
seguinte recurso:



Imprimimos nossa string a partir da posio 3 (nome[2], 0,1,2 terceira letra).
http://groups.google.com/group/aprendaC
Visite o grupo e participe!
36
Funes de manipulao de strings
Atravs da biblioteca String.h podemos adicionar ao nosso programa uma variedade de
funes que operam utilizando string, vejamos algumas destas funes:
Funes Explicaes
strlen ( <nome da string> );

Retorna o nmero de caracteres da
string, descontando o (\0).
strcat( <string1> , <string2> );

Concatena, cola, a string 2 no final da
string 1 e retorna a string 1.
strcmp( <string1> , <string2> );

Compara as duas strings, retorna zero (0)
se ambas forem iguais. Retorna a
diferena em ASCII entre os dois
primeiros caracteres diferentes.
strcpy( <string1> , <string2> );

Copia o contedo da string2 para string1,
isso apaga a string 1.
strstr ( <string1> , <string2> );

Encontra a primeira ocorrncia da
string2 na string1, retorna nulo se no
encontrar.
atoi ( <string> );

Converte a string para um nmero
inteiro. Caso a string contenha letras ela
retorna zero (0).
atof ( <string> );

Funciona da mesma forma que o atoi()
para nmeros reais (float).
strupr ( <string> );

Converte a string para caracteres
maisculos.
strlwr ( <string> );

Converte a string para caracteres
minsculos.
Strcasecmp ( <string1> , <string2> );

Compara duas strings ignorando letras
maisculas e minsculas. Retorna zero
(0) se forem iguais.



Linguagem C Aprenda aqui! - http://groups.google.com/group/aprendaC

Produzido por: Tlio Ornelas (ocultokx@gmail.com)
2007
37
Bibliografia:
SCHILDT, H., C Completo e Total, Editora Makron Books do Brasil Editora Ltda, 1996.
EVARISTO, J., Aprendendo a programar programando em linguagem C, Book Express, 2001.
MIZRAHI, V. V., Treinamento em Linguagem C, Curso Completo, Mdulos 1 e 2, Makron Books
do Brasil Editora Ltda,1990.
DEITEL, H. M. e Deitel, P. J., C++ Como Programar, 2001.
pt.wikipedia.org/wiki/Linguagem_de_programao_C
Universidade Catlica de Braslia - site
http://www.ucb.br/programar (opo Linguagens)

Você também pode gostar