Você está na página 1de 15

APOSTILA LINGUAGEM C.

PROFESSOR VALDER OLMO CORRA


CAPTULO 01
Compilador!
A forma pela qual nos comunicamos com um computador o programa, ou software. Os softwares
so escritos em vrias linguagens e a nica linguagem que o computador entende a linguagem de
mquina que e uma coleo de zeros e uns ( e !", so os c#amados $its. O $it zero significa n%vel
l&gico igual a zero, quer dizer aus'ncia de energia, e o $it um significa n%vel l&gico igual a !, quer
dizer que # energia. A linguagem de mquina muito confusa para n&s, seres #umanos
entendermos, fica isso a cargo dos engen#eiros eletr(nicos que tra$al#am com pro)etos de
computadores.
As linguagens ditas de alto n%vel so mais acess%veis * compreenso #umana e por isso mesmo so
usadas na programao de um computador. +,emplos dessas linguagens so -isual .asic, /elp#i,
0ava, que uma e,celente linguagem de programao, 12 (leia3se 1 4#arp", que muito
semel#ante * linguagem 0ava, 0ava4cript (que no 0ava, no confundam5", 676, essas duas
ltimas so linguagens de script para a intenet, e tam$m a linguagem que ser o$)eto de estudo
para nosso curso, a linguagem 1.
8as se todas essas linguagens acima no so linguagens de mqunia como que o computador
entende um programa escrito com elas9 A resposta que devemos escrever nosso programa em uma
dessas linguagens e ento compil3la com um compilador da linguagem. Os compiladores fazem a
tarefa de converter o c&digo escrito em linguagem de alto n%vel para a linguagem de mquina que o
computador entende, ou se)a, o compilador :traduz; o c&digo escrito em linguagem de alto n%vel
para a linguagem de mquina.
Os compiladores de linguagem 1 l'em uma a uma as lin#as de c&digo que escrevemos e vo
traduzindo para a linguagem de mquina at que a ltima instruo se)a traduzida. 4e no #ouver
erros durante o processo de compilao o compilador cria um programa em disco com a
e,tenso .O.0 que contm as instru<es traduzidas. 8as o programa .O.0 no pode ser e,ecutado
pelo computador, pois ainda no possui as $i$liotecas com as fun<es em linguagem de mquina
inseridas nele. O tra$al#o de se inserir essas fun<es e $i$liotecas no programa ca$e a outro
programa c#amado =in>editor. O lin>editor ento cria um programa final com a e,tenso .+?+ que
ser interpretado pelo computador diretamente pelo sistema operacional. +sse programa com
e,tenso .+?+ somente funciona em @indows, pois o =inu,, por e,emplo, destroi com todo quanto
arquivo com essa e,tenso, =inu, no aceita arquivos com e,tenso .+?+ por motios de
segurana.
+nto para criarmos nossos programas devemos seguir tr's passos, que so os seguintesA
!. /igitar as lin#as de c&digo de nosso programa em um editor de nossa prefer'ncia e grav3lo
em disco com a e,tenso .1, no caso da linguagem 1. +sse arquivo c#amado de arquivo
fonte.
B. 1ompilar o programa com e,tenso .1 seguindo as instru<es de nosso compilador de
prefer'ncia gerando assim o arquivo com e,tenso .O.0.
C. =in>editar o arquivo .O.0 a fim de se gerar o arquivo e,ecutvel com a e,tenso .+?+. +se
arquivo final c#amado de e,ecutvel.
6ara realizar a dura tarefa acima podemos fazer tudo manualmente ou lanarmos mo de $oas
D/+s , Dntegrated /evelopment +nviroment, ou Am$iente de /esenvolvimento Dntegrado, que )
trs todos os pacotes que precisamos para fazermos nossos programas. Alguns e,emplos de D/+s
que podemos tra$al#ar com a linguagem 1 so o 1ode=ite e o 1odeA.loc>s. +ssa D/+s ) trazem
para n&s o compilador da linguagem 1, um editor de te,tos adequado *s necessidades e um
=in>editor, $astando a n&s digitarmos o nosso c&digo fonte no editor de te,tos e ento pedirmos
para que a D/+ salve e compile o programa e ela far todo o restante do tra$al#o.
Ema D/+ $astante interessante o +1=D64+, que foi desenvolvido para se tra$al#ar com a
linguagem 0ava e atualmente traz plugins para as linguagens 676 e 1. O +clipse foi desenvolvido
pela D.8 que gastou no pro)eto a $agatela de F mil#<es de d&lares e a dei,ou livre para n&s
usarmos, mas o +clipse precisa da linguagem 0ava instalada na mquina, o que no muito simples
de se fazer, pois precisamos de configurar as variveis de am$iente, o que no muito intuitivo, por
isso ficaremos ento com o 1ode=ite ou o 1odeA.loc>s.
A E!"r#"#ra $%!i&a d #m Pro'rama E!&ri"o (a Li('#a'm C.
6ara escrevemos nossos programas em linguagem 1 necessitamos de seguir algumas normas da
linguagem, isso vlido para qualquer linguagem de programao, ou se)a, devemos con#ecer sua
estrutura para podemros escrever nossos c&digos fontes. A estrutura da linguagem 1 consite em
fun<es que realizam determinados tra$al#os e segue a seguinte forma geralA
tipo nomeGunc(declarao de parHmetros"
I
/eclarao de variveisJ
Dnstruo !J
Dnstruo BJ
Dnstruo CJ
.
.
.
Dnstruo nJ
return valorKtipoJ
L
Ma estrutura de c&digo acima o tipo o tipo de dado a ser retornado pela funo, veremos os tipos
adiante nesse curso. A palavra nomeGunc o nome da funo, normalmente momeamos nossas
fun<es para palavras mnemonicas, ou se)a, palavras que lem$ram o que a funo deve fazer. +ntre
par'nteses temos as declara<es dos parHmetros, estudaremos isso quando vermos fun<es. Ma lin#a
onde est escrito /eclarao de variveis declaramos as variveis que serao utilizadas pelo nosso
programa. O que se segue so as intru<es do c&digo, ou se)a, a partir dessa lin#a que vamos
:ensinar; o computador a realizar uma determinada tarefa. Ma lin#a onde est escrito return
declaramos o que a funo deve retornar para a e,ecuo do programa, reforo mais uma vez que
ainda veremos isso quando estudarmos fun<es em 1, portanto, no se preocupem por enquanto
com essa nomenclatura.
A F#()*o mai(+,.
Os programas escritos em qualquer linguagem necessitam de fun<es. Mos programas podemos ter
quantas fun<es quisermos com o nome que quisermos, porm uma funo em especial
o$rigatria e,istir a fim de que o programa funcione, o nome dessa funo main(", principal, em
Dngl's. N a funo main(" quem comea a e,ecuo de nosso programa, sem ela o mesmo no seria
interpretado corretamente pelo compilador e o mesmo emitiria uma mensagem de erro. A funo
main(" do tipo inteiro, ou se)a, ela retorna um valor inteiro * e,ecuo do programa, ela a
responsvel por :c#amar; ou :invocar; as outras fun<es do programa e rece$er os retornos que
essas fun<es t'm.
Os programas em linguagem 1 devem conter uma nica funo main(", se o programa contiver uma
nica funo, essa deve ser a main(". 6ortanto no podemos nomear outra funo com o nome de
main(", pois essa palavra reservada * linguagem 1. Os par'nteses ap&s o nome main so o
indicativo de funo, assim que o compilador entende que uma funo, caso contrrio poderia
entender que se trata de uma varivel do tipo inteira. As c#aves ap&s o nome main(" indicam o
comeo e o fim do c&digo, dentro dessas c#aves que inserimos as lin#as de c&digo que a funo
deve e,ecutar e a funo main(" no foge a essa regra.
No!!o Primiro Pro'rama m Li('#a'm C.
6ara escrevemos nosso primeiro programa em linguagem 1 devemos con#ecer alguns comandos,
instru<es, fun<es especiais da linguagem e duas $i$liotecas especiais. -amos escrever nosso
primeiro programa em linguagem 1 e ento e,plicaremos lin#a a lin#a o c&digo. -amos ento
escrever um pequeno programa que escreva na tela o nosso nome. O c&digo o seguinteA
2include Ostdio.#P
2include Ostdli$.#P
int main("
I
printf(:8eu nome -alder Olmo 1orr'a;"J
sQstem(:pause;"J
return J
L
-amos agora a uma e,plicaao de cada lin#a do nosso primeiro programaA
#include <stdio.h>
+ssa lin#a faz com que se)a inclu%da a $i$lioteca stdio.# ao programa. +ssa $i$lioteca necessria
pois sem ela no consegur%amos escrever algo na tela, ou se)a, no ter%amos como fazer uma sa%da
de dados. A $i$lioteca stdio.# uma $i$lioteca de entrada (i de in" e sa%da (o de out", por isso
stdio.#. 4em a incluso dessa $i$lioteca no poder%amos utilizar a funo printf(", que uma funo
de sa%da de dados, ) que tem a funo de escrever algo na tela.
#include <stdlib.h>
A lin#a contendo essa instruo faz com que se)a inclu%da no programa a $i$lioteca stdli$.# que traz
as diretivas para que a funo sQstem funcione. 4em a funo sQstem no conseguir%amos parar a
e,ecuo do programa e o mesmo seria rodado e encerrado sem que pudssemos ver o resultado do
processamento.
printf(Meu nome Valder Olmo Corra!
+ssa lin#a de c&digo utiliza a funo printf(" para escrever algo na tela. Mote que dese)amos
escrever um nome, ou se)a, um dado do tipo string (vo se acostumando com essa nomenclatura".
/entro dos par'nteses e entre aspas devemos escrever o que se dese)a que se)a escrito na tela, em
nosso caso o nome de algum muito especial.
s"stem(pause!
+ssa lin#a provoca uma pausa na e,ecuo do programa at que uma tecla se)a pressionada. Dsso
necessrio, caso contrrio no conseguir%amos notar o processamento. A funo responsvel por
essa pausa a funo sQstem(" que rece$e o parHmetro pause.
return #!
+ssa lin#a de c&digo retorna o valor inteiro (zero" para quem c#amou a funo main(", no caso o
sistema operacional. Ap&s essa lin#a de c&digo o programa finalizado.
Motem que todo o nosso c&digo, com e,ceo das diretivas include, esto entre as c#aves da funo
main(". Mote tam$m que toda instruo deve aca$ar com um ponto e v%rgula (J". O ponto e v%rgula
indica ao compilador que a intruo c#egou ao fim e que uma nova instruo cever ser interpretada
a seguir.
-amos agora escrever nosso primeiro programa de uma outra forma, veremos como formatar a
sa%da de dados com a funo printf(". Ao invs de escrever o nome completo em uma nica lin#a
iremos escrev'3lo em duas lin#as separadamente. Atente ao seguinte programaA
2include Ostdio.#P
2include Ostdli$.#P
int main("
I
printf(:8eu nome -alder;"J
printf(:8eu so$renome Olmo 1orr'a;"J
sQstem(:pause;"J
return J
L
Aos ol#os de uma pessoa que este)a aprendendo a programar e nunca ten#a tido contato com outra
linguagem o programa acima deveria imprimir na tela o nome em uma lin#a e o so$renome em
outra, porm no isso que ele faz, pois em nen#um momento dissemos ao compilador que se deve
imprimir a mensagem dessa forma. 6ara imprimirmos a mensagem como queremos
devemosmaprender a formatar a sa%da de dados com a funo printf(". 6ara tanto atende ao
programa a seguirA
2include Ostdio.#P
2include Ostdli$.#P
int main("
I
printf(:8eu nome -alderRn;"J
printf(:8eu so$renome Olmo 1orr'aRn;"J
sQstem(:pause;"J
return J
L
Motem agora que inserimos dois caracteres ap&s as strings a serem impressas pela funo printf(",
os caracteres Rn. Ma verdade esses dois caracteres representam um nico caracter em 1 que (o-a.
li(/a. /essa forma dizemos ao compilador que ap&s a impresso dese)a3se passar a e,ecuo do
programa para uma nova lin#a, assim sendo a pr&,ima string ser impressa na lin#a seguinte.
-rias outras formata<es podem ser feitas em linguagem 1 inserindo3se o caracter R seguido de
outro caracter que informa a linguagem o tipo de formatao que queremos. Ma ta$ela seguinte
encontra3se uma srie das fomata<es mais utilizadas na linguagem 1, estude3as para mel#orar sua
e,peri'ncia com a linguagem.
C0di'o E!p&ial Si'(i1i&ado
Rn Mova lin#a
Rt Sa$ulao
R$ Tetrocesso. 1&digo utilizado pelas impressoras.
Rf 4alto de pgina. Etilizado em formulrios cont%nuos.
Ra .eep. O toque do alto falante.
Rr 1T. Tetorno do cursor para o %n%cio da lin#a.
RR R .arra invertida.
R Uero.
RV Aspas simples
R; Aspas duplas.
R,dd Tepresentao de nmeros na forma #e,adecimal.
Rddd Tepresentao de nmeros na forma octal.
Com("%rio! m Pro'rama!
Mormalmente os programas que so desenvolvidos para se e,ecutar uma tarefa profissional, como
por e,emplo um aplicativo de $anco de dados, que e,ige um nmero muito grande de c&digos e,
portanto um nmero enorme de lin#as de c&digo, ou ento em um programa de anlise numrcia ou
elementos finitos, o c&digo fica muito grande e as vezes muito confuso, na #ora de se fazer uma
upgrade ou uma atualizao do software o tra$al#o torna3se e,tremamente cansativo e a$orrecedor
se no sou$ermos o que cada $loco do programa, ou mesmo cada lin#a, realiza. 6ara evitar esses
a$orrecimentos e otimizar o tra$al#o na #ora de se fazer uma atualizao ou de se dar suporte ao
software, inserimos no c&digo lin#as de comentrios para sa$ermos o que a mesma est fazendo.
Os comentrios nos a)udam a sa$ermos qual tarefa cada lin#a ou $loco de programa realiza. Os
comentrios no so interpretados pelo compilador, portanto no so interpretados pelo mesmo.
1omentrios so inseridos nos programas de duas formas diferentes, vistas a seguirA
!. 1om duas $arras (WW" fazemos o comentrio de apenas uma lin#a do programas.
B. 1om os caracteres X e W fazemos comentrios em um $loco de lin#as do programa, sendo
que a sequ'ncia WX indica o in%cio do $loco de comentrio e XW indica o finaldo $loco de
comentrio.
-e)a a seguir como ficaria nosso ltimo programa com lin#as de comentriosA
2include Ostdio.#P
2include Ostdli$.#P
int main("
I
WX 6rograma ela$orado pelo professor -alder Olmo 1orr'a
para ser utilizado na apostila da disciplina de computao
do curso de +ngen#aria 8ecHnica e 1ivil da Eniversidade
de 8ogi das 1ruzes campus -illa =o$os
XW

WW Dmprime o nomeA
printf(:8eu nome -alder;"J
WW Dmprime o so$re nomeA
printf(:8eu so$renome Olmo 1orr'a;"J
sQstem(:pause;"J
return J
L
Motem que no programa acima # um $loco de comentrio de vrias lin#as inciciando com os
caracteres WX e terminando com os caracteres XW e dois $locos de comentrios de uma nica lin#a,
am$os os comentrios e,plicam o que as lin#as de c&digo realizam, ou se)a, imprimir o nome e o
so$re nome.
Imprimi(do Cara&"r! N#m2ri&o!
8uitas vezes precisaremos imprimir o resultado de uma e,presso alg$rica, em todas as reas do
con#ecimento essa situao muito comum, pois todas elas utilizam #o)e em dia softwares
espec%ficos para se realizar determinadas tarefas e muitas vezes os softwares no o fazem de forma
otimizvel ou ento no permite a empresa adapt3los *s suas necessidades. Messe caso os analistas
ou engen#eiros devem ela$orar um software espec%fico para a empresa que atenda a necessidades da
mesma.
6ara imprimir caracteres numricos com a funo printf(" podemos proceder de duas formas
distintas. Ema delas pedir para que se)a impresso o nmero dese)ado simplesmente colocando3o
dentro da string a ser impressa, ve)a a lin#a de c&digo a$ai,oA
printf(:+ste o nmero oito YP Z;"J
Messe caso sa$emos com anteced'ncia qual nmero deve ser impresso, no caso o nmero oito, mas
e se no sou$ssemos qual o nmero a ser impresso o qual foi o resultado de um processamento de
nosso programa9 Messe caso # os c&digos para impresso da funo printf(", que tam$m so
c&digos de formatao. /essa forma devemos informar * funo printf(" uma lista de parHmetros os
quais informam que tipo de informao dever ser impressa ap&s a string a ser impressa entre as
aspas. 6erce$eremos isso mel#or na pr&,ima sesso quando vermos o uso de variveis na
linguagem 1, por enquanto atente para a lin#a de c&digo a$ai,o que imprime o nmero oito de uma
forma diferente da vista anteriormente.
printf(:+ste o numero oitoA [dRn;, Z"J
Teparem os caracteres [d ap&s a string a ser impressa, eles indicam que a funo printf(" rece$er
como argumento um dado inteiro a ser impresso, nesse caso o argumento o nmero oito. Teparem
tam$m na v%rgula ap&s as aspas, essa v%rgula a separao entre a string a ser impressa e a lista de
argumentos que a funo printf(" rece$e, ou se)a, ap&s a v%rgula a funo printf(" rece$e uma lista de
argumentos que devero ser impressos e esses argumentos devem ser indicados inicialmente com os
c&digos caracter%sticos de cada dado a ser impresso.
Cara&"r Cadia d Cara&"r!
Os caracteres em 1 so nmeros delimitados entre e BFF, isso quer dizer que um caractere em
linguagem 1 representado por um nmero entre e BFF, ou se)a, um nico $Qte, ou oito $its. Os
caracteres constantes podem ser escritos entre aspas simples com o seu c&digo A41DD. Em e,emplo
o nmero \F que pode ser como VAV.
Ema cadeia de caracteres em linguagem 1 escrita entre aspas duplas. 6or e,emplo a cadeia de
caracteres :-alder Olmo 1orr'a; corretamente interpretada pela linugagem 1, pois est entre
aspas duplas.
Algumas linguagens de programao no fazem diferena entre aspas simples ou aspas duplas na
representao de caracteres ou cadeia de caracteres, mas a linguagem 1 faz5 6or isso devemos
estudar com $astante ateno o uso correto de caracteres na linguagem 1 a fim de no termos
pro$lemas na impresso de dados desse tipo. 1omo dito acima, em 1 usamos as aspas simples para
representar um nico caractere utilizando seu c&digo A41DD e usamos aspas duplas para representar
uma cadeia de caracteres que corretamente interpretada pelo compilador.
A$ai,o temos uma ta$ela com alguns c&digos especiais e os dados que cada um deles indica ao
compilador que devem ser impressos.
1&digos de GormataoW
Dmpresso 4ignificado
[c 1aractere simples.
[d Dnteiro decimal.
[e Motao cient%fica com e minsculo.
[+ Motao cient%fica com + maisculo.
[f 6onto flutuante.
[o Dnteiro octal sem sinal
[s 4tring de caracteres.
[, Dnteiro #e,adecimal sem sinal (letras minsculas".
[? Dnteiro #e,adecimal sem sinal (letras maisculas".
[p 6onteiro (endereo de mem&ria".
[n 6onteiro inteiro.
[[ Dmpresso do caractere [.
Mote na lin#a a$ai,o outro e,emplo de impresso utilizando os caracteres de formatao para a
funo printf("A
printf(:8eu nome [sRn;, :-alder Olmo 1orr'a;"J
printf(:8in#a idade [d anos e meu saldo $ancrio de [d mil#oes de reaisRn;, BF, C"J
U!o d Co(!"a("! Vari%-i! m Li('#a'm C.
Ema varivel ou uma constante em 1 um espao reservado de mem&ria destinado a guardar um
certo tipo de dado que possui um nome pr&prio que por sua vez definido pelo programador em
tempo de pro)eto e esse dado ou seu valor pode ser acessado a qualquer momento por outro dado a
fim de se realizar clculos numricos ou interpola<es com strings.
Ao ela$orarmos nossos programas em qualquer linguagem de programao, e a linguagem 1 no
foge * regra, devemos ter em mente que o programa precisar tra$al#ar com dados numricos e
esses dados podem ser constantes, ou se)a, no possuem seu valor mudado ao longo de todo o
programa, ou dados variveis, aqueles que seus valores variam durante a e,ecuo do programa e
precisam ou ser informados pelo usurio ou ento so resultados de clculos que o programa
efetuar ao longo do processamento.
6ara e,emplificar o que foi e,posto no pargrafo anterior vamos supor que uma empresa fez um
acordo com os funcionrios e que por esse acordo os mesmos rece$ero durante um ano um rea)uste
mensal com ta,a fi,a de )uros mensais. 6odemos imaginar assim dois tipos de dados em um
programa, um a ta,a mensal de aumento dos salrios da empresa, ou se)a, a porcentagem de
aumento ao longo dos meses, que um dado fi,o, uma constante. O outro tipo de dado o pr&rpio
salrio dos funcionrios que se alterar ao longo dos meses, ou se)a, um dado varivel que o
programa deve calcular seu valor m's a m's.
Motem a e,trema importHncia de se utilizar dados constantes e variveis em um programa.
+m linguagem 1 # vrios tipos de dados, a e,emplo de outras linguagens, e o primeiro tipo de
dado que vamos estudar so os dados numricos do tipo inteiro. 6ara fazer uso de variveis em 1
devemos declar3las informando ao compilador o tipo de dado a qual a vairvel armazenar $em
como seu nome. 6ara se declarar uma varivel do tipo inteiro em 1 devemos escrever a palavra
reservada i(" seguida do nome que qeuremos dar * varivel.
6ara vermos um e,emplo com declarao de variveis e mel#or compreender o que foi e,plicado
nos dois pargrafos anteriores atente para o programa a seguirA
2include Ostdio.#P
2include Ostdli$.#P
int main("
I
WW /eclara duas variveis do tipo inteiro
int valor!J
int valorBJ

WW Atri$ui o valor B * varivel valor!
valor! Y BJ

WW Atri$ui * varivel valorB o valor da varivel valor! mais o inteiro C
valorB Y valor! ] CJ

WW Dmprime na tela do computador os valores das duas variveisA

printf(:O valor da variavel ! e [dRn;, valor!"J
printf(:O valor da variavel B e [dRn;, valorB"J

sQstem(:6AE4+;"J
return J
L
Motem que devemos declarar as variveis antes de us3las, caso contrrio o compilador ir imprimir
uma mensaem de erro informando que a varivel no foi encontrada ou que ine,istente. Soda
declarao de variveis em linguagem 1 deve ser feita no inicio da funo logo ap&s a a$ertura das
c#aves (I" que representa o in%cio de funo. +m algumas linguagens mais atuais a declarao de
variveis pode ser feita em qualquer ponto do programa, como a linguagem 0A-A, por e,emplo.
6ara finalizar deve3se esclarecer que em 1 toda varivel deve ser declarada antes de ser usada.
Ma declarao de variveis aconsel#ado faz'3lo de forma organizada a fim de se identificar quais
os o$)etivos de cada varivel. Momear variveis com nomes mnem(nicos tam$m a)uda $astante a
identificar a funo da varivel no programa, recomenda3se tam$m organizar em $locos as
variveis com o$)etivos semel#antes e para finalizar sempre $om incluir uma lin#a de comentrio
e nesse indicar o que a varivel ou o con)unto de variveis, no caso de um $loco, faz ou e,ecuta.
Tesumindo, temosA
!. 4empre declare as variveis no in%cio de cada funo.
B. Organize a declarao de variveis em $locos.
C. Momeia as variveis com nomes mnem(nicos (Momes que lem$ram a funo da varivel".
^. Dnclua lin#as de comentrios comentando a funo da varivel no programa.
O! Tipo! d Vari%-i! m Li('#a'm C.
Ma linguagem 1 temos vrios tipos de variveis, um deles ) vimos, que o tipo de varivel inteiro
(int". -amos agora estudar e entender os outros tipos. O tipo de varivel, como o pr&prio nome diz,
nos indica o tipo de dado que ser armazenado pela varivel, ou se)a, um dado do tipo inteiro
armazenar dados inteiros, nmeros inteiros. O tipo de dado tam$m indica ao compilador a
quantidade de mem&ria que deve ser reservada a ele no computador, cada tipo de varivel possui
um taman#o, uma quantidade de mem&ria necessrio ao seu armazenamento.
Os tipos $sicos de variveis em 1 so &/ar, i(", 1loa", do#3l, e -oid, sendo que # tam$m os
modificadores desses tipos, que veremos a seguir. Os tipos c/ar e i(" so utilizados para armazenar
nmeros inteiros sendo que &/ar possui o taman#o de um $Qte e o tipo i(" possui o taman#o de ^
$Qtes, isso nos computadores atuais providos de am$ientes de CB $its, @indows _F ou posterior,
=inu,, Eni,, DO4. /esses dados o tipo c#ar no aceita modificadores, como citado anteriormente,
todos os outros aceitam. Os modificadores so apenas tr's, a sa$erA !/or", lo(', e #(!i'(d.
A ta$ela a seguir lista os tipos de variveis em linugagem 1, seu taman#o em $its e $Qtes e a escala
de a$rang'ncia dos valores que so poss%veis armazenar com cada uma delasA
Sipo .its .Qtes +scala de a$rang'ncia
c#ar Z ! 3!BZ a !B`
int CB ^ 3B.!^`.^ZC.\^Z a B.!^`.^ZC.\^`
s#ort !\ B 3CB.`\F a CB.`\`
long CB ^ 3B.!^`.^ZC.\^Z a B.!^`.^ZC.\^`
float CB ^ C,^,!
3CZ
a C,^,!
CZ
dou$le \^ Z !,`,!
3CZ
a !,`,!
CZ
=ong dou$le Z ! C,^,!
3^_CB
a C,^,!
^_CB
Ma declarao de uma varivel poss%vel faz'3lo com um operador de atri$uio a fim de se dar *
varivel um valor inicial. Dsso feito com o operador de atri$uio que usa o sinal de igualdade para
esse fim (Y", devemos notar que esse operador no significa igualdade em linguagem 1, mas sim o
pr&prio nome do operador que atri$uio. auando damos um valor inicial para uma varivel
estamos inicializando a mesma, ou se)a, o que c#amamos de inicializao de variveis.
6odemos tam$m declarar mais de uma varivel na mesma lin#a, podemos inclusive declarar vrias
variveis na mesma lin#a e tam$m inicializ3las. -e)amos a seguir alguns e,emplos de declarao
de variveis com sua devida inicializao. 6ara isso digite o seguinte c&digo em sua D/+ de
prefer'ncia, salve, compile e rode o programaA
2include Ostdio.#P
2include Ostdli$.#P
int main("
I
int percentual Y FJ
c#ar categ Y VAVJ
float sal Y !F.J
float salatualJ
printf(:O percentual de rea)uste e de [d por cento;, percentual"J
printf(:O salario atual e de [f reais;, sal"J
printf(:A categoria e classe [c;, categ"J
salatual Y sal ] salXpercentualW!J
printf(:O salario sera rea)ustado em [d porcento e seu novo valor sera [f reais;, salatual"J
L
Motem que no e,emplo anterior declaramos variveis de tr's tipos diferentes, c#ar, int e float sendo
que inicializamos as variveis c#ar, int e uma das variveis float dei,ando a outra para acumular um
valor, no caso salrio atual, que resultado de um processamento do programa. Sam$m importante
notar que na ltima lin#a do programa imprimimos dois tipos de variveis, $astando para isso
formatar a sa%da de dados com o s%m$olo de percentual ([", isso poss%vel e deve ser feito em
linguagem 1, porm devemos faz'3lo com o cuidado de se escrever os c&digos de formatao nas
posi<es corretas onde os valores correspondentes devem ser impressos.
N4mro! &om Ca!a! D&imai!
As variveis do tipo inteiro, int, so utilizadas para muitos casos em linguagem 1 ou em qualquer
outra linguagem, porm esse tipo de dado, como o pr&prio nome diz, no admite casas decimais,
ento no podemos utiliz3las para e,pressar valores monetrios, por e,emplo, pois esses valores
necessitam de casas decimais para e,pressar os centavos.
6ara os casos onde # a necessidade de se utilizar variveis que admitem casas decimais as
linguagens de programao possuem os tipos float, dou$le e long dou$le. Os nmeros em ponto
flutuante so os que os matemticos c#amam de nmeros reais, ou se)a, os nmeros que possuem
casa decimais.
Forma"a(do a Impr!!*o
A funo printf(" imprime na tela os dados que dese)amos, porm ela os imprime de forma
desordenada, ou se)a, no formatada, como ) vimos nas sess<es anteriores. 6ara imprimir os dados
de forma organizada que nos proporcione uma leitura agradvel devemos formatar a sua sa%da.
Algumas formata<es ) foram e,ploradas aqui, agora vamos e,plorar algumas outras
possi$ilidades de formatao com a funo printf(", atentem para nosso ltimo programa, ele
imprime o percentual de rea)uste e o salrio rea)ustado em sua ltima lin#a de c&digo, notem que a
impresso do dado salatual aparece com inmeras casas decimais, o que torna sua leitura
desagradvel. 6ara resolver esse pro$lema a linguagem 1 possui uma forma de se formatar a sa%da
de dados e com ela podemos informar quantas casas decimais dese)amos que se)a impressa.
6ara e,emplificar esse tipo de formatao atentem para o e,emplo a seguir, que o mesmo do
e,emplo anterior, porm com a formatao de casas decimais para dados do tipo float.
2include Ostdio.#P
2include Ostdli$.#P
int main("
I
WW /eclarao de variveis
int rea)uste Y !FJ
float salario Y BF.J
float salatualJ
c#ar categ Y V.VJ
WW Dmprime salario, rea)uste e categoria
printf(bO salario e de [F.Bf reaisRnb, salario"J
printf(bO percentual de rea)uste e de [d por centoRnb, rea)uste"J
printf(bA categoria e classe [cRnb, categ"J
WW 1alcula novo salario
salatual Y salario ] salarioXrea)usteW!J
WW Dmprime o percentual de rea)uste e o novo salario
printf(bO salario sera rea)ustado em [d por cento e seu novo valor sera de [F.Bf reaisRnb, rea)uste, salatual"J
sQstem(b6AE4+b"J
return J
L
Teparem nas lin#as onde solicitada a impresso do salrio e do salrio atual, nessas lin#as foram
acrescentadas entre o s%m$olo de percent e o caractere que define o tipo de varivel a ser impressa,
no caso float, que formatdo pela letra f, dois algarismos separados por um ponto, esses algarismos
definem com quantos algarismos e com quantas casas decimais dese)amos imprimir o valor da
varivel, no caso com cinco algarismos e duas casas decimais.
CAPTULO 05
Oprador!6 E("rada d Dado!6 a! F#()7! S&a(1+,6 G"&/+,6 G"&/+, G"&/ar+,
Mo cap%tulo um vimos como funciona os compiladores e como a linguagem 1 funciona, fizemos
vrios e,emplos para nos acostumar com alguns comandos e formatadores da linguagem, tam$m
foi visto os tipos de variveis e como declar3las e tam$m como utilizar a funo printf(", porm
no estudamos a entrada de dados, ou se)a, como o computador rece$e os dados de n&s, usurios,
$em como os operadores da linguagem 1 tam$m no foram estudados. +sses temas sero assuntos
desse cap%tulo.
A linguagem 1 possui vrios operadores que servem para o processamento das informa<es, desses
) vimos um que o operdor de atri$uio (Y" e tam$m algumas fun<es para a entrada de dados
via teclado, como por e,emplo a funo scanf(" e a funo getc#(". 1omearemos agora a estudar
cada um desses operadores e fun<es, comearemos pelos operadores.
Oprador!
A"ri3#i)*o
Ma linguagem 1 assim como muitas outras linguagens, como 0ava, por e,emplo, o sinal de igual Y
no tem significa e,atamente igualldade como na matemtica. +sse sinal de igual em computao
significa atri$uio, ou se)a, esse operador que atri$ui da e,presso * sua direita * varivel * sua
esquerda. -e)a um e,emplo a$ai,o que atri$ui o valor F * varivel ,A
, Y FJ
Ari"m2"i&o! +8 . 9 : ;,
Os operadores aritmticos em linguagem 1 so os de adio (]", su$trao (3", multiplicao (X", e
o operador m&dulo ([". +sses operadores so con#ecidos como operadores $inrios, pois operam
so$re dois operandos. -e)a na lin#a de c&digo a seguir um e,mplo de uso desses operadores.
salatual Y salatual ] rea)usteJ
Mo e,emplo acima atri$u%do (Y" * varivel salatual o seu valor mais (]" o valor do rea)uste. O uso
dos outros operadores anlogo ao e,emplo acima, co e,ceo do operador m&dulo, e veremos
mais so$re seu uso nos e,emplos desse cap%tulo. Os operadores soma, su$trao, multiplicao e
diviso operam com qualquer tipo de dado, inteiros ou ponto flutuante, e so usados de modo
semel#ante a da aritmtica. O operador de m&dulo ([" opera somente em dados do tipo inteiro e
retorna para o processamento do programa o resto da diviso entre dois inteiros, ve)a o e,emplo a
seguir do uso do operador m&duloA
resto Y !_[CJ
Messe e,emplo o operador m&dulo atri$ui * varivel resto o valor do resto da diviso do inteiro !_
pelo inteiro C, no caso o valor ^, pois !_ dividido por C resulta em cinco e resto igual a ^.
Pr&d<(&ia d Oprador!
4e tivermos uma e,presso que precisa ser processada pelo programa e essa e,presso contiver
vrios operadores # a necessidade de con#ecermos a preced'ncia desses operadores. A preced'ncia
dos operadores indica qual deles dever ser e,ecutado primeiro. Mo antigo curso ginasial, atual
fundamental B, aprendemos que numa e,presso alg$rica devemos e,ecutar primeiro a
multiplicao ou a diviso e depois a soma e a su$trao. 4e quisssemos efetuar uma soma antes
de uma multiplicao ou diviso, por e,emplo, dever%amos indic3la entre par'nteses, ou ento se
precisssemos resolver uma e,presso, resolv%amos primeiro os par'nteses, depois os colc#etes e
depois as c#aves. +m computao a regra a mesma, porm no podemos colocar colc#etes e
c#aves em nossas e,press<es de atri$uio, devendo ser utilizado os par'nteses em seus lugares.
A seguir demostrado o uso dessa preced'ncia em alguns e,emplos, atentem para elesA
, Y >X C ] B
Mo e,emplo acima a varivel > multiplicada por tr's, ap&s isso somado dois ao rsultado dessa
mutiplicao e por fim o resultado da e,presso atri$u%do * varivel ,.
, Y (> ] C"XBJ
Messe e,emplo primeiro somado tr's * varivel >, ap&s isso o resultado da soma multiplicado
por dois e por fim o resultado final da e,presso atri$u%do * varivel ,.
, Y ((> ] F"XC c ^"XBJ
Mo e,emplo acima primeiramente atri$u%do o valor cinco * varivel >, ap&s isso o resultado
multiplicado por tr's. Ap&s essas duas opera<es su$tra%do ^ do resultado da e,presso anterior e
ap&s essa su$trao o resultado multiplicado por B o$tendo assim o resultado final da operao.
Ao final o resultado atri$u%do * varivel ,.
/evemos notar que
fora os pare'nteses os operadores X, W e [ possuem a mesma preced'ncia da esquerda para a direita.
A F#()*o !&a(1+, o E(dr)am("o d Mm0ria
At agora em nosso curso apenas pedimos ao programa para que imprimisse algo na tela,
formatamos a sa%da de dados via monitor (v%deo", porm no fizemos nen#uma entrada de dados, ou
se)a, no #ouve a necessidade de informarmos um valor ao programa em tempo de e,ecuo do
mesmo. A entrada de dados necessria, pois com ela que preenc#emaos um formulriona
internet, por e,emplo.
A entrada de dados feita com algumas fun<es, com essas fun<es que pedimos ao computado
que nos solicite o valor de algum dado, ou se)a, pedimos ao computador que nos pea o valor de
algum dado. A entrada de dados numricos na linguagem 1 feita com a funo !&a(1+,. 6orm, a
funo scanf(" necessita do endereo de mem&ria da varivel a que o valor ser atri$u%do, essa
prtica no necessria em outras linguagens, como 0ava, por e,emplo. 6or isso vamos dedicar
alguns instantes de nosso curso para aprendermos um pouco so$re endereo de mem&ria.
O Oprador d E(dr)o +=,
Ma linguagem 1 o operador d opera so$re o endereo de uma varivel. Ma verdade ele opera so$re
o nome da varivel resultando em seu endereo de mem&ria e a funo scanf(" necessita desse
endereo para realizar a entrada de dados via teclado. /essa forma quando declaramos uma varivel
o compilador reserva um espao na mem&ria que ser ocupada por essa varivel sendo que o
taman#o do espao reservado na mem&ria depen der do tipo de dado que a varivel armazenar.
+sse espao de mem&ria possui um endereo que o endereo do primeiro $Qte.
4e declararmos uma varivel do tipo inteira, por e,emplo, a ela dermos o nome de var e a
inicializarmos com o nmero cinquenta, quando a referenciarmos o$teremos o valr cinquenta. A
refer'ncia de uma varivel seu endereo de mem&ria que ) dito no pargrafo anterior que o
endereo do primeiro pela mesma. 6orm se ao invs de referenciarmos a varivel com seu nome,
no caso var, se usarmos dvar com a funo printf(" para imprim%3la, o resultado ser o endereo de
mem&ria do primeiro $Qte ocupado por var, ou se)a, o endereo de mem&ria da varivel var.
O e,emplo aseguir declara uma varivel c#amada var, atri$ui a ela o valor cinquenta e ap&s isso,
utilizando a funco printf(" imprime primeiro o valor da varivel e depois o seu endereo de
mem&ria.
2include Ostdio.#P
2include Ostdli$.#P
int main("
I
int varJ
var Y FJ
printf(:O valor da variavel var e [dRn;, var"J
printf(:O endereco de memoria da variavel var e [pRn;, dvar"J
sQstem(:6AE4+;"J
return J
L
Mo caso a saida de nosso programa, ou se)a, a impresso no monitor ser a seguinteA
O valor da variavel var e F
O endereco de memoria da variavel var e BZffc
Os endereos de mem&ria so escritos em nmeros #e,adecimais que so nmeros escritos na $ase
!\. 6ara recuperar o endereo de mem&ria de uma varivel usamos o formato [p.
-oltemos agora * funo scanf(". A funo scanf(" uma funo de DWO, ou se)a, uma das fun<es de
entrada e sa%da de dados que so fornecidas com os compiladores da linguagem 1. A funo scanf("
nos permite ler dados informados pelos usurios via teclado, que a entrada padro dos
computadores. +la faz parte da $i$lioteca stdio.#.
Assim como a funo printf(" para usarmos a funo scanf(" devemos con#ecer sua sinta,e, que
$em semel#ante * sinta,e da funo printf(", ento devemos informar * funo scanf(" uma
e,presso de controle seguida de uma lista de argumentos sendo que os argumentos devem ser
endereos de mem&ria, essa uma das diferenas entre ela e a funo printf(". 1om o e,posto acima
a sinta,e da funo scanf(" fica da seguinte formaA
scanf(:e,presso de controle;, lista de argumentos"
A e,presso de controle pode conter c&digos de formatao precedidos pelo sinal de percentagem [
que so os mesmo utilizados pela funo printf(". +sses c&digos de formatao podem ser vistos na
ta$ela que ) foi impressa quando estudamos a funo printf(".
/evemos tomar ulguns cuidados para fazermos uma entrada de dados com a funo scanf(", pois ela
entende um espao em $ranco como final de dado, com isso se quisermos fazer vrias entradas de
dados utilizando apenas uma c#amada * funo scanf(" devemos formatar adequadamente a entrada
de dados. /essa forma devemos realizar a entrada mltipla de dados utilizando espaos em $ranco
entre as variveis, nesse caso a tecla +MS+T utilizada como finalizador da entrada de dados.
auando a entrada de dados for feita por vrias c#amadas * funo scanf(", uma para cada varivel,
que a forma mais adequada e recomendada, ao informarmos o valor da primeira varivel e
teclarmos +MS+T essa tecla ir finalizar a entrada daquela varivel introduzindo um espao em
$ranco na entrada de dados informando * funo scanf(" o trmino da entrada para aquela varivel e
o comeo da entrada seguinte.
O e,posto no pargrafo anterior um grande pro$lema ao usarmos a funo scanf(" para fazermos a
entrada de dados do tipo c#ar que conten#a mais de um caractere. Os dados do tipo c#ar que
conten#am mais de um caractere so normalmente c#amados de dados do tipo 4tring em outras
linguagens, como 0ava, por e,emplo. Ma linguagem 1 os dados do tipo 4tring so vetores de
caracteres, ou se)a, so cole<es com taman#o definidos de caracteres. Ainda veremos vetores no
nosso curso de linguagem 1, por enquanto convena3se de que um dado do tipo 4tring em
linguagem 1 um vetor de caracteres terminados por uma $arra n, Wn, ou $arra , W, dependendo do
compilador.
+spere um pouco555 vetores de caracteres terminados por Wn ou W9999 Dsso no introduziria um
espao em $ranco ao final da varivel e quando fizssemos uma entrada de dados com a funo
scanf(" no ter%amos dois espaos em $ranco ao final da entrada de dados9 6ois 555555 +sse
o real pro$lema ao se fazer uma entrada de dados do tipo 4tring com scanf(", o dado termina com
um espao em $ranco e a tecla +MS+T introduz mais um.
Assim a funo scanf(" l' o espao em $ranco da tecla +MS+T e dei,a o espao em $ranco da
varivel 4tring no $uffer de mem&ria dei,ando l um li,o para ser lido pela pr&,ima c#amada *
funo scanf(". /essa forma a pr&,ima c#amada * funo scanf(" no ler o dado que queremos
informar a ela, mas sim pegar aquele li,o, que o espao em $ranco dei,ado pela ltima c#amada
* funo scanf(". 6ara resolver esse pro$lema de entrada de dados do tipo 4tring a linguagem 1
possui as fun<es gec#(", getc#ar(", gets(", entre outras quesero estudadas ainda nesse cap%tulo.
6ara e,ercitar um pouco o uso da funo scanf(" vamos fazer alguns e,emplos simples, porm de
grande valia a fim de no nos atrapal#armos com a mesma. /igite o seguinte programa em sua D/+
de prefer'nciaA
2includeOstdio.#P
2includeOstdli$.#P
int main("
I
float salarioJ
float percentualJ

printf(:Dnforme o salarioA"J
scanf(:[fRn;, dsalario"J
printf(:Dnforme o percentual de rea)usteA;"J
scanf(:[fRn;, dpercentual"J

salario Y salario ] salarioXpercentualW!J
printf(:O salario rea)ustado e de [f;, salario"J
sQstem(:pause;"J
return J
L
Teparem na entrada de dados com a funo printf(" que no colocamos o formatador Rn. Dsso foi
feito para que digitssemos os valores das variveis correspondentes na mesma lin#a em que a
mensagem que as solicita escrita, dessa forma podemos visualizar mel#or o que o programa nos
solicita que se)a digitado.
A E("rada d Dado! do Tipo Cara&"r
A! F#()7! G"&/+, G"&/+,
1omo vimos na sesso anterior, no conveniente ler dados do tipo caractere (c#ar" com a funo
sacanf(", pois ao teclarmos +MS+T a funo dei,a um li,o no $uffer de mem&ria a ser lido pela
pr&,ima c#amada da funo scanf(". Mo caso da necessidade de se ler um caractere ou um nome
pr&prio, por e,emplo, e esse tipo de leitura muito utilizada em programao, a linguagem 1
oferece uma srie de fun<es apropriadas para cada caso, o caso de se ler apenas um caractere ou o
caso de se ler um nome pr&prio, que um dado do tipo 4tring, que em linguagem 1 um vetor de
caracteres.
Mo caso da necessidade de se ler apenas um caractere do teclado a linguagem 1 oferece as fun<es
getc#e(" e getc#(". -amos estudar cada uma delas separadamente.
A! F#()7! G"&/+, G"&/+,
A funo getc#e(" captura do teclado um caractere digitado sem a necessidade de se teclar +MS+T e
imediatamente ap&s a digitao do caractere o processamento passado para a pr&,ima lin#a de
c&digo. Mote que no ficar nen#um li,o no $uffer de mem&ria, como ocorre com a funo scanf(".
A funo getc#e(" necessita que a $i$lioteca conio.# se)a inclusa no pro)eto.
6ara aprendermos o uso da funo getc#e(" digite, compile e e,ecute o seguinte programa em sua
D/+ preferidaA
2include Ostdio.#P
2include Ostdli$.#P
2include Oconio.#P
int main("
I
c#ar c#J
printf(b6ressione uma tecla qualquerA b"J
c# Y getc#("J
printf(bRnA tecla digitada foiA [cRnb, c#"J
sQstem(bpauseb"J
return J
L
Teparem a incluso da $i$lioteca conio.# antes da declarao da funo main(". A primeira lin#a
ap&s as c#aves da funo main(" declara uma varivel do tipo caractere (c#ar" e a nomeia c#. Ap&s
isso usada a funo printf(" para solicitar ao usurio que digite uma tecla qualquer. Ma pr&,ima
lin#a de c&digo usado a funo getc#e(" para se ler o caractere digitado via teclado, reparem que
no # a necessidade do uso do caractere de endereamento d. A pr&,ima lin#a do c&digo utiliza a
funo printf(" para imprimir o caractere digitado paa isso utiliza [c.
A funo getc#(" $astante similar * funo getc#e(" com a diferena de que quando digitamos o
caractere esse no aparecer na tela do computador, ou se)a, em nosso programa na primeira
c#amada * funo printf(" ao digitarmos o caractere dese)ado esse no aparecer no v%deo, isso
somente ocorrer na segunda c#amada * funo printf(" quando formatamos a sa%da dos dados com
[c e pedimos e,plicitamente a impresso do caractere digitado. +,perimente e,ecutar o mesmo
progrma utilizando a funo getc#(" e ve)a a pequena diferena.