Buscar

livros

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 24 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 24 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 24 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Chapter 1
Prefacio
Esta apostila e´ apenas um material auxiliar para uso em sala de aula, como guia
pra´tico. O conteu´do e´ baseado em um material utilizado durante a disciplina
de Laborato´rio de Programac¸a˜o em C, ministrada pelo professor Ricardo An-
drade Cava, na Universidade Cato´lica de Pelotas. O material original tem como
refereˆncias bibliogra´ficas:
• FORBELLONE, Andre´, EBERSPACHER, Henri, Lo´gica de Programac¸a˜o -
A construc¸a˜o de algoritmos e estruturas de dados. 2005.
• KERNIGHAN, Brian, RITCHIE, Dennis, C a linguagem de programac¸a˜o.
1986.
• MIZRAHI, Victorine V., Treinamento em Linguagem C - Mo´dulo 1. 1990.
• MIZRAHI, Victorine V., Treinamento em Linguagem C - Mo´dulo 2. 1990.
O conteu´do ainda esta´ em desenvolvimento....
1
Chapter 2
Introduc¸a˜o
Esse material e´ baseado em va´rios materiais dentre os quais encontram-se o livro
de
2.1 Computador
Um computador e´ composto basicamente por duas partes essenciais, a parte
f´ısica e a parte lo´gica.
A parte f´ısica, chamada de hardware, corresponde a parte material, aos com-
ponentes f´ısicos e eletroˆnicos do computador. Na Figura 2.1, e´ poss´ıvel observar
a interac¸a˜o entre os principais componentes de hardware de um computador.
Figure 2.1: Interac¸a˜o entre componentes de hardware.
2
CHAPTER 2. INTRODUC¸A˜O 3
A parte lo´gica, chamada de software, corresponde aos programas que esta˜o
instalados no equipamento. Todo computador possui um software gerenciador
conhecido como sistema operacional, atrave´s do qual os equipamentos sa˜o con-
trolados e o usua´rio pode interagir com os mesmos, como exemplo, podemos
citar o Windows ou o Linux. Ale´m do sistema operacional, existem outros pro-
gramas que permitem a execuc¸a˜o de tarefas comuns, como escrever textos e
editar imagens, a esses programas damos o nome de aplicativos, por exemplo,
Word, Excel e OpenOffice.
2.2 Programa
Um programa de computador, consiste de um conjunto de instruc¸o˜es, escritas
em alguma linguagem de programac¸a˜o. Todo programa possui um objetivo claro,
nesse sentido busca resolver um determinado problema. Podemos criar um pro-
grama para informar a temperatura na CPU, informar as horas para o usua´rio,
ou simplesmente apresentar alguma mensagem na tela do computador. Por ex-
emplo, o programa abaixo ao ser executado apresenta uma mensagem de boas
vindas.
Listing 2.1: Linguagem Pascal
program exemplo ;
beg in
w r i t e (” Ola´ , s e j a BEM VINDO ! ! ! ” ) ;
end .
Listing 2.2: Linguagem C
#i n c l u d e <s t d i o . h>
main ( ){
p r i n t f ( ”Ola´ , s e j a BEM VINDO ! ! ! ” ) ;
}
Listing 2.3: Linguagem Java
p u b l i c c l a s s Exemplo{
p u b l i c v o i d s t a t i c main ( S t r i n g a r g s [ ] ) {
System . out . p r i n t l n ( ”Ola´ , s e j a BEM VINDO ! ! ! ” ) ;
}
}
2.2.1 A construc¸a˜o de um programa
A construc¸a˜o de um programa passa por algumas etapas ba´sicas. Apo´s a elab-
orac¸a˜o do algoritmo, o passo-a-passo para a soluc¸a˜o, o desenvolvedor podera´
utilizar um editor de texto qualquer ou um editor espec´ıfico para a linguagem
a qual esta´ trabalhando. Em ambos os casos, o programador ira´ escrever um
CHAPTER 2. INTRODUC¸A˜O 4
arquivo de texto contendo o chamado co´digo-fonte, escrito em uma linguagem
de programac¸a˜o (C, Java, C++,etc.). Esse arquivo e´ enta˜o compilado pelo com-
pilador da linguagem gerando um novo arquivo, esse u´ltimo contendo o chamado
co´digo executa´vel, escrito em uma linguagem de ma´quina (Assembly). Na Figura
2.2 e´ poss´ıvel observar esse processo ilustrado em alto n´ıvel.
Figure 2.2: Etapas no desenvolvimento de um programa.
O compilador nada mais e´ do que um programa espec´ıfico que traduz o
arquivo que conteˆm o co´digo-fonte para uma linguagem de ma´quina, espec´ıfica
para a arquitetura do computador.
Um algoritmo, como visto e´ a descric¸a˜o de um conjunto de ac¸o˜es que, obe-
decidos, resultam em uma sucessa˜o finita de passos, com o intuito de atingir a
soluc¸a˜o de um determinado problema [?].
2.3 Exerc´ıcio
Questa˜o 1 Escreva uma algoritmo para resolver o quebra-cabec¸as chamado
Torres de Hano´i.
Figure 2.3: Diagrama das Torres de Hano´i.
Objetivo: Mover todos os discos do pino A para o pino B.
Regras:
• Mover 1 disco por vez;
CHAPTER 2. INTRODUC¸A˜O 5
• Um disco com diaˆmetro maior na˜o pode ficar sobre um disco com diaˆmetro
menor.
2.4 Noc¸o˜es importantes
Antes de comec¸armos a escrever nossos primeiros programas vamos entender
alguns detalhes sobre a linguagem C.
2.4.1 Diferenciando maiu´sculas de minu´sculas
A linguagem e´ sens´ıvel com relac¸a˜o a letras maiu´sculas e minu´sculas, normal-
mente sempre iniciamos identificadores de varia´veis e func¸o˜es com letras minu´sculas
como forma padra˜o, assim em qualquer parte do mundo outro programador
podera´ entender o que estamos fazendo. Portanto, uma varia´vel com o identifi-
cador nomeAluno e´ diferente de nomealuno.
2.4.2 Formatac¸a˜o e bibliotecas
O formato do texto e´ livre, no entanto, para garantir que o compilador identifique
cada passo do programa, os comandos sa˜o finalizados por “;”, indicando que o
que vem a seguir trata-se de um novo comando. Abaixo segue um exemplo:
Listing 2.4: Exemplo de co´digo C.
1 #include<s t d i o . h>
2 main ( ){
3 p r i n t f ( ” Ma t e r i a l para e s t udo s ! ! ” ) ;
4 }
Na linha 1, e´ utilizado o comando “#include < stdio.h >”, esse comando
permite a utilizac¸a˜o de uma biblioteca de func¸o˜es pre´-definidas para a linguagem.
Nesse caso, esta´ sendo inclu´ıda ao programa a biblioteca “stdio.h”, biblioteca
essencial para a maioria dos programas que vamos desenvolver. Dentro dessa
biblioteca esta˜o func¸o˜es ba´sicas para a entrada e sa´ıda de dados (I/O), como as
func¸o˜es “printf” (linha 3), que envia uma mensagem para o dispositivo padra˜o
de sa´ıda (terminal), e a func¸a˜o “scanf”, que permite a leitura de dados a partir
do dispositivo padra˜o de entrada (teclado).
CHAPTER 2. INTRODUC¸A˜O 6
2.4.3 Arquivos gerados - sem pane!!
Ao utilizar algum editor, como por exemplo, o Code::Blocks1 ou Dev C++2, e´
poss´ıvel que alguns arquivos sejam gerados durante o processo de compilac¸a˜o:
• prog.c - programa fonte, escrito pelo programador
• prog.bak - uma co´pia de seguranc¸a
• prog.obj - programa objeto gerado no processo de compilac¸a˜o
• prog.exe - programa executa´vel, escrito em uma linguagem de ma´quina.
Toda estrutura ou func¸a˜o possui um bloco de operac¸o˜es ou comandos associ-
ado. O bloco e´ delimitado por chaves, ou seja, inicia-se um bloco atrave´s de uma
chave de abertura { e encerra-se o bloco atrave´s de uma chave de fechamento
}. Quando um bloco possui apenas um comando as chaves podem ser omiti-
das, mas deve-se tomar muito cuidado, sa˜o esses pequenos detalhes que acabam
levando a tempo desperdic¸ado procurando por erros lo´gicos. Abaixo segue um
exemplo de bloco de operac¸o˜es associado a uma estrutura de selec¸a˜o.
Listing 2.5: Exemplo de co´digo C. Blocos de co´digo.
1 i f { // i n i c i o do b l o c o de o p e r a c¸ o˜ e s caso v e r d a d e i r o
2 <comando 1>;
3 . . .
4 <comando n>;
5 } // f im do b l o c o de o p e r a c¸ o˜ e s caso v e r d a d e i r o
6 e l s e { // i n i c i o do b l o c o caso f a l s o
7 <comando>
8 } // f im do b l o c o caso f a l s o
1http://www.codeblocks.org/
2http://www.bloodshed.net/devcpp.html
Chapter 3
Primeiros Passos
Vamos comec¸ar a escrever nossos primeiros programas, lembre-se esse material
segue o conteu´do visto no decorrer do curso.
3.1 Programas Sequenciais
Um programa puramente sequencial nada mais e´ do que um conjunto de in-
struc¸o˜es que sera˜o executadas sequencialmente durante a execuc¸a˜o do programa,
sem qualquer uso de estruturas com desvio condicional ou repetic¸a˜o de blocos de
co´digo. Seguem exemplos de programas sequeˆncias com sa´ıda de dadossimples.
Listing 3.1: Exemplo de co´digo C.
1 #include<s t d i o . h>
2 i n t main ( ){
3 p r i n t f ( ” Ma t e r i a l ” ) ;
4 p r i n t f ( ” para ” ) ;
5 p r i n t f ( ” e s t udo s ! ! ” ) ;
6
7 return 0 ;
8 }
Listing 3.2: Exemplo de co´digo C.
1 #include<s t d i o . h>
2 i n t main ( ){
3 p r i n t f ( ” Ma t e r i a l \n” ) ;
4 p r i n t f ( ” para \n” ) ;
5 p r i n t f ( ” e s t udo s ! ! ” ) ;
6
7 return 0 ;
8 }
7
CHAPTER 3. PRIMEIROS PASSOS 8
Listing 3.3: Exemplo de co´digo C.
1 #include<s t d i o . h>
2 i n t main ( ){
3 p r i n t f ( ” Ma t e r i a l \ npara
4 \ ne s tudos ! ! ” ) ;
5
6 return 0 ;
7 }
Observe que a estrutura ba´sica de um programa em C e´ dada pela inclusa˜o de
bibliotecas, atrave´s do comando #include < nome biblioteca.h >, seguida das
func¸o˜es do programa. Obrigatoriamente a func¸a˜o main() deve ser implementada,
sendo que essa sera´ executada assim que o programa entra em execuc¸a˜o.
Atividade 2 Escreva programas para imprimir cada tela abaixo.
CHAPTER 3. PRIMEIROS PASSOS 9
3.1.1 Varia´veis, Constantes e Expresso˜es
Ainda sobre programas sequenciais observe o exemplo abaixo, um programa para
realizar a soma de dois valores 15 e 100.
Listing 3.4: Exemplo de co´digo C.
1 #include<s t d i o . h>
2 i n t main ( ){
3 i n t va , vb , soma ;
4
5 va = 15 ;
6 vb = 100 ;
7 soma = va + vb ;
8 p r i n t f ( ”A soma de %d e %d e %d” , va , vb , soma ) ;
9
10 return 0 ;
11 }
Observe na linha 3, sa˜o declaradas 3 varia´veis “va, vb e soma” todas do tipo
inteiro. Em C a sintaxe para declarac¸a˜o de varia´veis segue:
< tipo >< identificador >
Por exemplo:
int va;
int vb, vc;
E´ poss´ıvel na pro´pria declarac¸a˜o realizar uma inicializac¸a˜o direta, atribuindo
um valor a varia´vel rece´m criada atrave´s do operador “=”:
int va = 15;
int vb = 100, vc;
Uma varia´vel na verdade e´ um espac¸o de memo´ria que pode conter, a cada
instante de tempo, valores diferentes. Seu conteu´do e´ referenciado atrave´s de
um identificador, o qual deve passar algum tipo de informac¸a˜o relevante, que
aponte para que dados esta˜o sendo armazenados naquele espac¸o de memo´ria,
por exemplo, idade, nome, sexo, etc. Uma varia´vel ocupa um determinado espac¸o
de memo´ria, de acordo com o tipo dos dados que sera˜o armazenados. A definic¸a˜o
de um identificador para as varia´veis de um programa deve seguir algumas regras
ba´sicas:
1. Deve comec¸ar com uma letra ou sublinhado (underline);
2. O restante pode ser uma combinac¸a˜o de letras, nu´meros ou sublinhado;
3. Na˜o e´ permitida a utilizac¸a˜o de acentos;
CHAPTER 3. PRIMEIROS PASSOS 10
4. Palavras reservadas da linguagem na˜o podem ser utilizadas.
Alguns exemplos va´lidos:
• ftotal, area, n1, num alunos, teste, numAlunos
Alguns exemplos inva´lidos:
• 1nome, $a, num-alunos, num alunos, int, main
Olhando para o exemplo da listagem 3.4, observe que nas linhas 5, 6 e 7, sa˜o
realizadas atribuic¸o˜es. Uma atribuic¸a˜o permite armazenar um valor em posic¸a˜o
de memo´ria, associada a` uma varia´vel do programa, nesse caso, “va, vb e soma”,
respectivamente.
Figure 3.1: Representac¸a˜o simbo´lica do espac¸o de memo´ria ocupado pelas
varia´veis do programa
Na Figura 3.1, e´ poss´ıvel observar uma ilustrac¸a˜o simbo´lica sobre o que ocorre
quando o programa entra em execuc¸a˜o. As varia´veis sa˜o alocadas na memo´ria
do computador, e podem ser utilizadas enquanto o programa mante´m-se em
execuc¸a˜o. Ao final da execuc¸a˜o as posic¸o˜es de memo´ria sa˜o liberadas.
Assim como as varia´veis, podemos nos referir a certas posic¸o˜es de memo´ria
como constantes. Nesse caso, o valor armazenado nessas posic¸o˜es na˜o sofre
alterac¸o˜es durante toda a execuc¸a˜o do programa, e´ tambe´m chamado de fixo
ou invariante. Para definir uma constante e´ necessa´rio logo apo´s a inclusa˜o das
bibliotecas utilizar o comando #define com o identificador da constantes que
se esta´ alocando.
Listing 3.5: Exemplo de co´digo C.
1 #inc lude <s t d i o . h>
2
3 // d e c l a r a c¸ a˜ o da c o n s t a n t e
4 #def ine ICMS 0 . 1 8 ;
CHAPTER 3. PRIMEIROS PASSOS 11
5
6 i n t main ( ){
7 f l o a t p reco p rodu to , v a l o r i cm s ;
8
9 p r i n t f ( ” In fo rme o v a l o r do produto : ” ) ;
10 s c an f ( ”%f ” , &p r e co p r odu to ) ;
11
12 v a l o r i cm s = p r e co p r odu to ∗ ICMS ;
13
14 p r i n t f ( ” Va lo r de imposto a s e r pago : R$ %.2 f ” , v a l o r i cm s ) ;
15
16 getch ( ) ;
17 return 0 ;
18 }
Figure 3.2: Co´digo C definindo uma constante.
Observe na linha 4, esta´ sendo definida uma constante chamada ICMS com
o valor 0.18, ou seja, esse valor na˜o pode ser alterado em todo execuc¸a˜o do
programa.
Na linha 12 e´ poss´ıvel observar uma expressa˜o, nesse caso uma operac¸a˜o
matema´tica. Expresso˜es sa˜o representac¸o˜es simbo´licas de operac¸o˜es a serem
feitas sobre determinados operandos (varia´veis e constantes), visando a obtenc¸a˜o
de um resultado.
Com relac¸a˜o as atribuic¸o˜es sa˜o poss´ıveis em C:
• < variavel >=< constante >. Exemplo: va = 15;
• < variavel >=< variavel >. Exemplo: va = vb;
• < variavel >=< expressao >. Exemplo: soma = va + 100;
Com relac¸a˜o as expresso˜es esta˜o dispon´ıveis como operadores aritme´ticos:
Lembrando que os parenteses alteram a ordem de precedeˆncia, ou seja,
primeiro aplica-se as operac¸o˜es internas e depois operac¸o˜es mais externas. Alguns
exemplos de expresso˜es escritas na linguagem C:
a = 5 + 2 ∗ 3;
b = (5 + 2) ∗ 3;
CHAPTER 3. PRIMEIROS PASSOS 12
Table 3.1: Tabela de operadores matema´ticos
Operador Func¸a˜o Precedeˆncia
∗ Multiplicac¸a˜o 1a
/ Divisa˜o 1a
% Resto da Divisa˜o 1a
+ Soma 2a
− Subtrac¸a˜o 2a
c = 11%3;
d = ((a+ b) ∗ c+ 2)/2;
Ale´m das operac¸o˜es ba´sicas existem outras operac¸o˜es implementadas atrave´s
de func¸o˜es pre´-definidas, inclusas na biblioteca “math.h”:
Table 3.2: Tabela de operac¸o˜es pre´-definidas, #include < math.h >
Operac¸a˜o Matema´tica Linguagem C
Raiz Quadrada y =
√
x y = sqrt(x);
Poteˆncia y = xn y = pow(x, n);
Seno y = sen(x) y = sin(x);
Cosseno y = cos(x) y = cos(x);
Atividade 3 Escreva um programa que calcule a expressa˜o: x = −b+
√
b2−4ac
2a
Atividade 4 Qual o resultado para a expressa˜o: x = 100%10 + 15/5;
Atividade 5 Refac¸a a expressa˜o y = (((15 ∗ 2)− 5)/3) + (100/2), utilizando
o m´ınimo poss´ıvel de parenteses.
3.2 Entrada e Sa´ıda de dados
Como vimos a sa´ıda de dados e´ realizada atrave´s da func¸a˜o prinf . Essa func¸a˜o
recebe uma mensagem na forma de uma string (vetor de caracteres), e a envia
para a sa´ıda padra˜o. A sa´ıda de dados e´ realizada atrave´s da func¸a˜o scanf ,
a qual executa um leitura do teclado e armazena o valor informado na varia´vel
passada como refereˆncia. Observe o programa abaixo:
Listing 3.6: Exemplo de co´digo C.
1 #include<s t d i o . h>
CHAPTER 3. PRIMEIROS PASSOS 13
2 i n t main ( ){
3 i n t va , vb , soma ;
4
5 s c an f ( ”%d” , &va ) ;
6 s c an f ( ”%d” , &vb ) ;
7 soma = va + vb ;
8 p r i n t f ( ”A soma de %d e %d e %d” , va , vb , soma ) ;
9
10 return 0 ;
11 }
Trata-se de uma versa˜o do programa apresentado na listagem 3.4. Observe
nas linhas 5 e 6, o programa espera a interac¸a˜o do usua´rio que devera´ fornecer
dois valores, um para “va” e o outro para “vb”, para isso esta´ sendo utilizada a
func¸a˜o scanf .
A func¸a˜o scanf permite que o programa capture a leitura de dados do dis-
positivo de entrada, nesse caso, o teclado. Esta˜o sendo passados dois paraˆmetros
para ela, o primeiro indica o tipo dos dados de entrada (%d) e o segundo cor-
responde ao enderec¸o da varia´vel (&va) que recebera´ os dados. O enderec¸o de
uma varia´vel, na linguagem C, e´ obtido atrave´s do operador una´rio & juntamente
a varia´vel em questa˜o.
Para deixar o programa da listagem 3.7 um pouco mais “amiga´vel”, podemos
inserir mensagens intercaladasa` entrada de dados, informando ao usua´rio o que
e´ esperado pelo programa.
Listing 3.7: Exemplo de co´digo C.
1 #include<s t d i o . h>
2 i n t main ( ){
3 i n t va , vb , soma ;
4
5 p r i n t f ( ” In fo rme o p r im e i r o operando : ” ) ;
6 s c an f ( ”%d” , &va ) ;
7 p r i n t f ( ” In fo rme o segundo operando : ” ) ;
8 s c an f ( ”%d” , &vb ) ;
9 soma = va + vb ;
10 p r i n t f ( ”A soma de %d e %d e %d” , va , vb , soma ) ;
11
12 return 0 ;
13 }
3.2.1 Formatac¸a˜o
Na Tabela 3.3, e´ poss´ıvel observar alguns co´digos para formatac¸a˜o de acordo
com o tipo de dado.
CHAPTER 3. PRIMEIROS PASSOS 14
Table 3.3: Tabela formatac¸a˜o
Co´digo Leitura e Impressa˜o
%c caracter
%d inteiro
%u inteiro sem sinal
%ld long
%lu long sem sinal
%x hexadecimal
%o octal
%f float
%lf double
%s string
Somente Impressa˜o
%% para imprimir %
\n nova linha
\t tabulac¸a˜o
\\ barra invertida
\” aspas
\0 terminador de strings
Um dos tipos nume´ricos mais utilizados e´ o tipo float. Esse tipo permite
armazenar dados que possuem casas decimais, como temperaturas (36.5 C), a´rea
(7.2356 m2). Como visto na tabela de co´digos a` formatac¸a˜o para esse tipo e´ dada
atrave´s do co´digo %f . No entanto, essa formatac¸a˜o pode manter a impressa˜o
de va´rias casas decimais, o que em alguns casos torna-se um inconveniente.
Para melhorar a apresentac¸a˜o e´ poss´ıvel indicar a quantidade de d´ıgitos que
sera˜o apresentados, incluindo o “.” que separa a parte inteira da decimal. Para
isso utiliza-se o padra˜o “%05.2f , onde o 05.2 indica que devera˜o ser impressos
5 d´ıgitos contando com as casas decimais e o ponto, sendo no ma´ximo 2 casas
decimais. No caso do valor possuir menos que 5 d´ıgitos sera˜o acrescidos 0 a
frente para chegar na formatac¸a˜o desejada.
Figure 3.3: Formatac¸a˜o de valores nume´ricos do tipo float, tamanho total e
casas decimais.
No entanto, se a parte inteira possui um tamanho maior a` formatac¸a˜o do
CHAPTER 3. PRIMEIROS PASSOS 15
tamanho sera´ desconsidera, sendo levado em considerac¸a˜o apenas as casas dec-
imais. Observe o exemplo abaixo:
Listing 3.8: Exemplo de co´digo C.
1 #include<s t d i o . h>
2 i n t main ( ){
3 f l o a t x=999.333;
4
5 // formatando as c a s a s d e c i m a i s
6 p r i n t f ( ”%f %.1 f %.2 f \n” , x , x , x ) ;
7 // formatando a p a r t e i n t e i r a e c a s a s d e c i m a i s
8 p r i n t f ( ”%05 f %02.1 f %08.2 f \n” , x , x , x ) ;
9
10 return 0 ;
11 }
Figure 3.4: Formatac¸a˜o de valores nume´ricos do tipo float.
Essa mesma regra de formatac¸a˜o pode ser aplicada aos valores do tipo inteiro,
denotados pelo co´digo “%d′′. A diferenc¸a que na˜o existem casas decimais, logo,
e´ poss´ıvel apenas formatar o nu´mero de d´ıgitos que sera˜o impressos, no caso do
valor ser menor que o tamanho solicitado sera˜o adicionados 0’s a frente.
Listing 3.9: Exemplo de co´digo C.
1 #include<s t d i o . h>
2 i n t main ( ){
3 i n t x=1234;
4
5 p r i n t f ( ”%d %05 f %08 f \n” , x , x , x ) ;
6
7 return 0 ;
8 }
Atividade 6 Para evitar excessos de velocidade em toda cidade o departa-
mento de traˆnsito contratou uma empresa para construir um sistema eletroˆnico
de controle de velocidade. A parte que envolve o hardware esta´ pronta, e voceˆ
recebeu o convite para construc¸a˜o do software do equipamento.
CHAPTER 3. PRIMEIROS PASSOS 16
Figure 3.5: Formatac¸a˜o de valores nume´ricos do tipo int.
O equipamento baseia-se em dois sensores colocados na pista, a uma certa
distancia “d”(em metros) um do outro, essa distaˆncia pode variar de acordo
com o local onde o equipamento foi instalado. O equipamento captura o tempo
“t” (em segundos) que o ve´ıculo levou para passar entre os dois sensores. Seu
programa devera´ receber a distaˆncia entre os sensores e o tempo que o ve´ıculo
levou para percorrer essa distaˆncia e calcular a velocidade em Km/h (Quiloˆmetros
por hora).
Figure 3.6:
Fo´rmulas u´teis para o problema:
V =
dkm
th
, dkm =
dm
1000
, th =
ts
3600
3.3 Programas com Repetic¸a˜o
Os lac¸os na linguagem C seguem os mesmos princ´ıpios vistos na construc¸a˜o de
algoritmos. A linguagem fornece o lac¸o com teste no in´ıcio, atrave´s da estrutura:
while(< condicional >){< blocodecomandos >}
CHAPTER 3. PRIMEIROS PASSOS 17
. Nesse caso, a condic¸a˜o e´ testada antes do bloco de comandos que sera´ repetido,
logo, o bloco pode na˜o ser executado nenhuma vez, dependendo do resultado do
teste.
Exemplo: Escreva um programa para ler va´rios valores. Para cada valor lido
calcular e escrever sua raiz quadrada. O programa termina apo´s a entrada de
um valor negativo.
Listing 3.10: Exemplo de co´digo C.Lac¸o com teste no in´ıcio
1 #include<s t d i o . h>
2 #include<math . h>
3 i n t main ( ){
4 i n t x ;
5
6 p r i n t f ( ” In fo rme um v a l o r : ” ) ;
7 s c an f ( ”%d” ,&x ) ;
8 whi le ( x>=0){
9 p r i n t f ( ”A r a i z quadrada e i g u a l a %f \n” , s q r t ( x ) ) ;
10 p r i n t f ( ” In fo rme um v a l o r : ” ) ;
11 s c an f ( ”%d” ,&x ) ;
12 }
13
14 return 0 ;
15 }
Figure 3.7:
A linguagem C tambe´m permite a repetic¸a˜o controlada por um teste no final
atrave´s da estrutura:
do{< blocodecomandos >}while(< condicional >)
Observe que nesse caso o bloco de comandos executa pelo menos uma vez.
Reescrevendo o co´digo anterior agora com uma estrutura de repetic¸a˜o com teste
no final.
CHAPTER 3. PRIMEIROS PASSOS 18
Listing 3.11: Exemplo de co´digo C. Lac¸o com teste no final
1 #include<s t d i o . h>
2 #include<math . h>
3 i n t main ( ){
4 i n t x ;
5
6 do{
7 p r i n t f ( ” In fo rme um v a l o r : ” ) ;
8 s c an f ( ”%d” ,&x ) ;
9 p r i n t f ( ”A r a i z quadrada e i g u a l a %f \n” , s q r t ( x ) ) ;
10 }whi le ( x<0);
11
12 return 0 ;
13 }
Os operadores relacionais dispon´ıveis na linguagem C podem ser analisados
na Tabela 3.4. Lembrando que todos sa˜o operadores bina´rios, ou seja, relacionam
duas varia´veis, como por exemplo x < y onde estamos verificando se x e´ menor
que y.
Table 3.4: Tabela operadores relacionais
Operador Func¸a˜o
< menor que
> maior que
== igual a
<= menor ou igual
>= maior ou igual
! = diferente de
Por u´ltimo a estrutura de repetic¸a˜o com lac¸o controlado por um contador,
utilizada quando sabe-se a priori o nu´mero exato de vezes que o lac¸o ira´ executar.
Um contador e´ uma varia´vel utilizada especificamente para controlar o nu´mero
de vezes que algo ocorre. E´ uma varia´vel qualquer que recebe um valor inicial,
normalmente 0, e que e´ incrementada em algum ponto do co´digo com um valor
constante.
variavel = variavel + constante; //cont = cont+ 1;
Quando essa constante e´ o valor 1 e´ poss´ıvel utilizar o operador de incremento
++, por exemplo cont + +. O operador de incremento pode ser utilizado pre´-
fixado, escrito antes da varia´vel(++ cont), nesse caso o incremento e´ realizado
antes de ler o valor da varia´vel, ou enta˜o pode ser po´s-fixado, escrito apo´s a
varia´vel (cont++), nesse caso a varia´vel e´ lida e depois incrementada.
CHAPTER 3. PRIMEIROS PASSOS 19
Listing 3.12: Exemplo de co´digo C.
Incremento po´s-fixado
1 #include<s t d i o . h>
2 i n t main ( ){
3 i n t i ;
4
5 i =10;
6 p r i n t f ( ”%d\n” , i ++);
7
8 return 0 ;
9 }
Listing 3.13: Exemplo de co´digo C.
Incremento pre´-fixado
1 #include<s t d i o . h>
2 i n t main ( ){
3 i n t i ;
4
5 i =10;
6 p r i n t f ( ”%d\n” , ++i ) ;
7
8 return 0 ;
9 }
O lac¸o controlado por um contador e´ constru´ıdo a partir da estrutura for(<
inicio >;< condicional >;< passo >), onde < inicio > corresponde a inicial-
izac¸a˜o do contador, < condicional > corresponde ao teste condicional que limita
o nu´mero de iterac¸a˜o e < passo > representa o incremento sobre o contador.
Listing 3.14: Exemplo de co´digo C. Lac¸o controlado
1 #include<s t d i o . h>
2 #include<math . h>
3 i n t main ( ){4 i n t i , x ;
5
6 f o r ( i =0; i <10; i ++){
7 p r i n t f ( ” %d − I n fo rme um v a l o r : ” , i ) ;
8 s c a n f ( ”%d” ,&x ) ;
9 p r i n t f ( ”A r a i z quadrada e i g u a l a %f \n” , s q r t ( x ) ) ;
10 }
11
12 return 0 ;
13 }
Nesse exemplo, a estrutura ira´ repetir 10 vezes o bloco de operac¸o˜es associ-
ado. Observe que a varia´vel i e´ inicializada com zero, e enquanto i < 10 o lac¸o
repete, a cada iterac¸a˜o i e´ incrementado de 1 (i++).
3.4 Estruturas unidimensionais e multidimension-
ais
Em C e´ poss´ıvel a manipulac¸a˜o de um conjunto de varia´veis do mesmo tipo
que compartilham um mesmo identificador, as estruturas homogeˆneas de dados.
As varia´veis sa˜o indexadas a esse identificador com a finalidade de permitir um
acesso unificado a estrutura, pore´m, com a individualizac¸a˜o dos elementos do
conjunto.
CHAPTER 3. PRIMEIROS PASSOS 20
Uma matriz unidimensional, chamada de vetor, permite a indexac¸a˜o de varia´veis
em apenas uma dimensa˜o. Logo, e´ preciso apenas a manipulac¸a˜o de um ı´ndice
para acessar as varia´veis dentro do conjunto.
Na linguagem C um vetor de tamanho esta´tico e´ declaro atrave´s da sintaxe:
< tipo > < identificador > [< tamanho >];
Exemplo:
int v [5];
Figure 3.8:
As estruturas indexadas como, os vetores e matrizes, sa˜o manipuladas interna-
mente por ponteiros. Um ponteiro e´ um mecanismos que manipula diretamente
enderec¸os de memo´ria. A primeira posic¸a˜o da estrutura e´ o enderec¸o onde foi
declarado o vetor. Por exemplo, o enderec¸o inicial do vetor v e´ o pro´prio referen-
ciado pelo seu identificador, suponha que seja o enderec¸o 100 na memo´ria, toda
a estrutura ocupa 5 posic¸o˜es, assumi-se enta˜o que sejam 100, 101, 102, 103 e
104. Para acessar uma posic¸a˜o basta somar um ı´ndice ao enderec¸o inicial, logo,
para acessar a primeira posic¸a˜o utiliza-se o ı´ndice 0. Veja o exemplo a seguir.
Listing 3.15: Exemplo de co´digo C. Lac¸o controlado
1 #include<s t d i o . h>
2 #include<math . h>
3 i n t main ( ){
4 i n t v [ 5 ] , i ;
5
6 v [ 0 ] = 1 ;
7 v [ 1 ] = 4
8 v [ 2 ] = −5;
9 v [ 3 ] = 10 ;
10 v [ 4 ] = 6 ;
11
12 p r i n t f ( ”%d” , v [ 2 ] ) ;
13
14 i =4;
15
CHAPTER 3. PRIMEIROS PASSOS 21
16 p r i n t f ( ”%d” , v [ i ] ) ;
17
18 return 0 ;
19 }
Observe nas linhas 6-10, esta˜o sendo atribu´ıdos valores a cada posic¸a˜o do
vetor, ou seja, a cada varia´vel indexada nesse conjunto. Na linha 12, esta´ sendo
impresso o valor armazenado na terceira posic¸a˜o desse vetor, dado que o primeiro
ind´ıce e´ 0 a posic¸a˜o 2 corresponde ao terceiro elemento. Na linha 14, esta´
sendo utilizado uma varia´vel i para acessar uma posic¸a˜o, nesse caso como i foi
inicializado com 4 a quinta posic¸a˜o sera´ acessada e seu conteu´do impresso.
Com isso, e´ percept´ıvel o uso de estruturas de repetic¸a˜o para manipulac¸a˜o
de vetores e matrizes. Um lac¸o controlado por contador pode utilizado, dado
que sabe-se o tamanho do vetor e consequentemente o nu´mero de iterac¸o˜es.
Observe o pro´ximo exemplo, nele um vetor de 5 posic¸o˜es e´ inicializado com
dados fornecidos pelo usua´rio, atrave´s da func¸a˜o scanf na linha 7. Apo´s, e´
impresso o valor de cada elemento do vetor multiplicado por 2, linha 10.
Listing 3.16: Exemplo de co´digo C. Lac¸o controlado
1 #include<s t d i o . h>
2 #include<math . h>
3 i n t main ( ){
4 i n t v [ 5 ] , i ;
5
6 f o r ( i =0; i <5; i ++){
7 s c an f ( ”%d” , &v [ i ] )
8 }
9 f o r ( i =0; i <5; i ++){
10 p r i n t f ( ”%d” , v [ i ] ∗ 2 ) ;
11 }
12
13 return 0 ;
14 }
Cuidados devem ser tomados quando se esta´ manipulando ı´ndices de vetores
e matrizes:
• os ı´ndices sa˜o devem ser inteiros (constante, varia´vel ou expressa˜o)
• o primeiro elemento possui ı´ndice 0
• ao acessar os elementos na˜o deve-se ultrapassar os limites, ou seja, um
vetor de 5 elementos e´ acessado por ı´ndices entre 0 e 4.
Atividade 7 Ler um vetor de 10 elementos e copiar os valores maiores que 25
para um vetor auxiliar. Apo´s copiar os elementos seu programa devera´ imprimir
o vetor auxiliar.
CHAPTER 3. PRIMEIROS PASSOS 22
As estruturas multidimensionais sa˜o conhecidas como matrizes. Nesse caso,
cada dimensa˜o da matriz e´ indexada por um ı´ndice, por exemplo, para acessar
uma posic¸a˜o dentro de uma matriz bidimensional sa˜o necessa´rios 2 ı´ndices, uma
para as linhas e outro para as colunas da matriz.
A declarac¸a˜o de uma matriz segue a sintaxe:
< tipo > < identificador > [< dim1 >]...[< dimn >];
Por exemplo, para uma matriz de inteiros com 2 dimenso˜es de tamanho
esta´tico:
int matriz[3][5];
Figure 3.9:
Uma matriz e´ considerada um vetor de vetores, onde cada posic¸a˜o do vetor
possui outro vetor denotando outra dimensa˜o. Logo, a manipulac¸a˜o de uma ma-
triz segue os mesmos princ´ıpios das estruturas unidimensionais mas considerando
agora um ı´ndice para cada dimensa˜o. Nesse caso, para percorrer toda a estrutura
sa˜o necessa´rios um lac¸o para cada dimensa˜o. Os lac¸os devem estar aninhados,
permitindo a fixac¸a˜o de uma dimensa˜o enquanto percorre outra completamente.
Considere o exemplo da Figura 3.9, nele e´ apresentada uma matriz de duas
dimenso˜es, podemos dizer que uma dimensa˜o e´ representada pelas linhas e a
outra pelas colunas da matriz. Para indexar cada dimensa˜o suponha que foram
criadas as varia´veis linha e coluna. Para percorrer todos os elementos podemos
fixar uma dimensa˜o por exemplo as linhas e percorrer as colunas, acessando cada
elemento da linha, a estrutura e´ apresentada na Figura 3.10. Pode-se tambe´m
percorrer fixando uma coluna e percorrendo as linhas acessando cada elemento
da coluna, apresentada na Figura 3.11.
Atividade
CHAPTER 3. PRIMEIROS PASSOS 23
Figure 3.10: Percorrendo uma matriz bidimensional linha-coluna.
Figure 3.11: Percorrendo uma matriz bidimensional coluna-linha.
CHAPTER 3. PRIMEIROS PASSOS 24
EM EDIC¸A˜O
	Prefacio
	Introdução
	Computador
	Programa
	A construção de um programa
	Exercício
	Noções importantes
	Diferenciando maiúsculas de minúsculas
	Formatação e bibliotecas
	Arquivos gerados - sem pane!!
	Primeiros Passos
	Programas Sequenciais
	Variáveis, Constantes e Expressões
	Entrada e Saída de dados
	Formatação
	Programas com Repetição
	Estruturas unidimensionais e multidimensionais

Outros materiais