Você está na página 1de 168

Elisamara de Oliveira

Algoritmos e
Linguagem de
Programao

Revisada por Clausia Mara Antoneli (janeiro/2013)

APRESENTAO
com satisfao que a Unisa Digital oferece a voc, aluno(a), esta apostila de Algoritmos e Linguagem de Programao, parte integrante de um conjunto de materiais de pesquisa voltado ao aprendizado
dinmico e autnomo que a educao a distncia exige. O principal objetivo desta apostila propiciar
aos(s) alunos(as) uma apresentao do contedo bsico da disciplina.
A Unisa Digital oferece outras formas de solidificar seu aprendizado, por meio de recursos multidisciplinares, como chats, fruns, aulas web, material de apoio e e-mail.
Para enriquecer o seu aprendizado, voc ainda pode contar com a Biblioteca Virtual: www.unisa.br,
a Biblioteca Central da Unisa, juntamente s bibliotecas setoriais, que fornecem acervo digital e impresso,
bem como acesso a redes de informao e documentao.
Nesse contexto, os recursos disponveis e necessrios para apoi-lo(a) no seu estudo so o suplemento que a Unisa Digital oferece, tornando seu aprendizado eficiente e prazeroso, concorrendo para
uma formao completa, na qual o contedo aprendido influencia sua vida profissional e pessoal.
A Unisa Digital assim para voc: Universidade a qualquer hora e em qualquer lugar!
Unisa Digital

SUMRIO
INTRODUO................................................................................................................................................ 5
1 ALGORITMOS............................................................................................................................................ 7
1.1 O que um Algoritmo?..................................................................................................................................................7
1.2 Conceitos Bsicos da Programao de Computadores.....................................................................................9
1.3 Etapas da Programao de Computadores.........................................................................................................12
1.4 Expresso de Algoritmos ...........................................................................................................................................13
1.5 Os Algoritmos sero Expressos em Pseudolinguagem..................................................................................18
1.6 Resumo do Captulo.....................................................................................................................................................19
1.7 Atividade Proposta........................................................................................................................................................19

2 PSEUDOLINGUAGEM DE PROGRAMAO: PORTUC.............................................. 21

2.1 Identificadores................................................................................................................................................................21
2.2 Tipos Bsicos e Declarao de Variveis................................................................................................................22
2.3 Comando de Atribuio..............................................................................................................................................23
2.4 Operadores Aritmticos .............................................................................................................................................24
2.5 Operadores Lgicos .....................................................................................................................................................25
2.6 Operadores Relacionais..............................................................................................................................................28
2.7 Comando Condicional.................................................................................................................................................29
2.8 Comando de Repetio..............................................................................................................................................31
2.9 Comandos de Entrada e Sada..................................................................................................................................33
2.10 Separador de Comandos ........................................................................................................................................37
2.11 Comentrios..................................................................................................................................................................37
2.12 Bloco de Programa.....................................................................................................................................................38
2.13 Resumo do Captulo..................................................................................................................................................41

3 CONSTRUO DE ALGORITMOS EM PORTUC: PRATICANDO OS


COMANDOS E FAZENDO CLCULOS..................................................................................... 43

3.1 Declarao de Variveis Comandos leia e imprima.................................................................................43


3.2 Comando Condicional se.........................................................................................................................................44
3.3 Bloco de Programa........................................................................................................................................................45
3.4 Operaes Bsicas com Nmeros...........................................................................................................................46
3.5 Operaes com Operadores Lgicos e Relacionais..........................................................................................49
3.6 Resumo do Captulo.....................................................................................................................................................51
3.7 Atividades Propostas....................................................................................................................................................51

4 METODOLOGIA PARA A CONSTRUO DE ALGORITMOS.................................... 55


4.1 Os Passos da Metodologia.........................................................................................................................................55
4.2 Soluo de Exerccios utilizando a Metodologia...............................................................................................57
4.3 Resumo do Captulo.....................................................................................................................................................57
4.4 Atividades Propostas....................................................................................................................................................58

5 A LINGUAGEM DE PROGRAMAO C................................................................................... 61

5.1 Tipos Bsicos e Declarao de Variveis em C....................................................................................................61


5.2 Operadores de Atribuio, Aritmticos, Relacionais e Lgicos (Binrios) em C ...................................62
5.3 Comando Condicional em C (if)...............................................................................................................................65
5.4 Comando de Seleo Mltipla em C (switch).....................................................................................................68
5.5 Comando de Repetio em C (while).....................................................................................................................71
5.6 Comando de Repetio em C (for)..........................................................................................................................72
5.7 Comandos de Leitura e Escrita em C .....................................................................................................................76
5.8 Comentrios em C ........................................................................................................................................................79
5.9 Bloco de Programa em C ...........................................................................................................................................79
5.10 Funes teis em C....................................................................................................................................................81
5.11 Traduo de PortuC para a Linguagem C........................................................................................................84
5.12 Resumo do Captulo..................................................................................................................................................89
5.13 Atividades Propostas.................................................................................................................................................89

6 USANDO COMANDOS DE REPETIO EM C.................................................................... 91

6.1 Comando de Repetio Entrada Indeterminada de Dados (uso de flags)...........................................91


6.2 Comando de Repetio Entrada de Dados Determinada..........................................................................94
6.3 Exemplo dos Minutos Telefnicos...........................................................................................................................96
6.4 Exemplo do Preo Final de Automveis.............................................................................................................100
6.5 Exemplo da Eleio.....................................................................................................................................................104
6.6 Exemplo da Srie Numrica....................................................................................................................................108
6.7 Resumo do Captulo...................................................................................................................................................112
6.8 Atividades Propostas..................................................................................................................................................112

7 OUTROS PROGRAMAS EM C......................................................................................................119


8 PRTICA EM LABORATRIO.......................................................................................................127
8.1 Estudo Dirigido............................................................................................................................................................ 127

9 CONSIDERAES FINAIS..............................................................................................................131
RESPOSTAS COMENTADAS DAS ATIVIDADES PROPOSTAS....................................133
REFERNCIAS............................................................................................................................................175

INTRODUO
Esta apostila se refere disciplina Algoritmos e Linguagem de Programao do curso de Engenharia de Produo, na modalidade a distncia, da Unisa.
O objetivo desta disciplina capacitar voc, caro(a) aluno(a), a fazer os primeiros programas de
computador utilizando uma linguagem de programao. Escrever programas de computador uma tarefa muito interessante, instigante e desafiadora! Vamos comear entendendo o que um algoritmo,
que um roteiro com instrues sequenciais para se resolver um problema ou se realizar alguma tarefa.
como uma receita de bolo, que indica os ingredientes e as instrues para se fazer o bolo passo a passo.
Usando essa analogia, os ingredientes seriam os dados, os passos seriam as instrues do programa e o
forno para assar o bolo seria o computador!
O universo dos computadores muito simples, muito limitado, mas muito poderoso: tudo se baseia na base 2, que possui apenas 2 algarismos: 0 e 1. Esses dois dgitos binrios, ou bits, formam a linguagem de mquina, que a nica linguagem que o computador digital entende. Mas ns vamos aprender
a escrever as instrues dos nossos programas numa linguagem de programao chamada C, que mais
prxima da nossa linguagem de comunicao. Ns nos comunicamos em Portugus, certo? Ento vamos
comear a escrever nossos primeiros algoritmos em PortuC, uma pseudolinguagem, e depois traduzi-los para um programa em linguagem C. Isso ainda no resolve nosso problema: para que o computador
possa executar nosso programa em C, ele precisa ser traduzido para linguagem de mquina! Mas isso
ser feito facilmente pelo compilador C, um programa que faz exatamente isso: traduz programas em C
para instrues binrias (linguagem de mquina).
Como voc pode ver, ser um belo desafio! Ento, caro(a) aluno(a), afie seu raciocnio lgico e prepare-se para entrar num mundo em que a lgica ser o carro-chefe! No tema nada, pois tudo ser
ensinado de forma simples e didtica... Mais algumas pginas frente e voc j estar programando seu
computador!
Profa. Dra. Elisamara de Oliveira

Unisa | Educao a Distncia | www.unisa.br

ALGORITMOS

Em nosso dia a dia, executamos mecanicamente uma srie de aes, que so seguidas sequencialmente e que provocam o acontecimento de algo. Por exemplo, temos um trajeto frequente ao sairmos
diariamente de casa em direo ao nosso trabalho ou nossa universidade, que, sempre que seguido,
nos leva ao nosso destino. Isso um algoritmo. Em outras palavras, um algoritmo descreve eventos com
durao finita, que envolvem um conjunto de objetos cujas caractersticas podem ser alteradas, atravs
de aes que ocorrem sequencialmente.

1.1 O que um Algoritmo?

Vamos, juntos, entender o que so algoritmos, utilizando inicialmente alguns conceitos j definidos
na literatura tcnica da rea:
Ateno
Programar construir algoritmos.
Programa = algoritmo + estruturas de dados.
No processo de construo de programas, a formulao do algoritmo e a definio das estruturas de dados esto
intimamente ligadas.

Alm dessas importantes definies, acrescentemos que, num algoritmo, podem-se observar os
seguintes aspectos:
ao: evento que ocorre num perodo de tempo finito;
estado: propriedades de um objeto numa dada situao;
processo: sequncia temporal de aes;
padro de comportamento: toda vez que seguido, um evento ocorre.

Unisa | Educao a Distncia | www.unisa.br

Elisamara de Oliveira

Saiba mais
Exemplo de um algoritmo

Algoritmo para fazer batatas fritas para o jantar


Traga a cesta com batatas da despensa;
Traga a panela do armrio;
Coloque leo na panela;
Se a roupa clara
ento coloque o avental;
Enquanto n de batatas insuficiente para o nmero de pessoas faa
descasque as batatas;
Pique as batatas;
Esquente o leo da panela;
Frite as batatas na panela;
Escorra o excesso de leo das batatas fritas;
Coloque as batatas fritas numa vasilha com papel absorvente.

Apesar de muito simples, algumas observaes importantes podem ser notadas nesse algoritmo:
o tempo verbal est na forma imperativa (faa, traga, frite etc.);
h um sequenciamento das aes, que esto separadas por um ponto e vrgula;
o avental no usado toda vez: existe um motivo para coloc-lo, ou seja, h uma condio para
que o avental seja colocado;
o nmero de batatas descascadas varia; a ao de descascar uma batata repete-se at que a
condio de parada (ser suficiente para alimentar as pessoas que iro jantar) seja alcanada;
a ordem das aes importante: primeiro descasca-se a batata, pica-se a batata, para depois frit-la...
Exemplos de algoritmos conhecidos:
Qual o algoritmo que voc descreve para vir estudar?
Qual o algoritmo para se fazer uma feijoada?
Qual o algoritmo para se trocar uma lmpada?
Apesar de receitas culinrias e trajetos rotineiramente percorridos encaixarem-se perfeitamente no
conceito inicial de algoritmo, no nosso curso, estamos interessados num tipo de algoritmo especial, que
seja capaz de ser executado por um computador. Para tanto, necessrio que identifiquemos problemas
do mundo real que possam ser traduzidos em aes primitivas finitas e dos quais se possa extrair um
padro de comportamento.

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Com base nos exemplos apresentados at aqui, estamos prontos para definir o que um algoritmo.
Um algoritmo a descrio de um padro de comportamento, expresso em termos de um
repertrio bem definido e finito de aes primitivas que podem ser executadas.
Analise a definio e veja como coerente com o que apresentamos; no mesmo? Alm disso,
importante observar que, num algoritmo, distinguem-se claramente dois aspectos:
aspecto esttico: que corresponde ao texto;
aspecto dinmico: que corresponde sua execuo (a partir de valores iniciais).
O curso de Algoritmos e Linguagem de Programao , na realidade, um curso de Programao de
Computadores para alunos(as) que iniciam cursos superiores na rea de Engenharia e Informtica. Sei
que voc est curioso(a) para conhecer um algoritmo, mas, para comear a construir seus algoritmos e
fazer seus primeiros programas de computador, necessrio que voc domine uma srie de conceitos
bsicos, que so apresentados a seguir, a comear pelo prprio computador!

1.2 Conceitos Bsicos da Programao de Computadores

Fonte: http://evotecinformatica.blogspot.com/p/como-cuidar-do-seu-computador.html.

Computador: uma mquina capaz de seguir uma espcie de algoritmo chamado programa, que
est escrito em linguagem de mquina.
Linguagem de mquina: internamente, o computador executa uma srie de instrues que ficam
armazenadas em sua memria principal em cdigo binrio, ou seja, em linguagem de mquina (zeros (0)
e uns (1), que so os dgitos binrios ou bits).
Linguagem de alto nvel: para escrever os programas de computador, os programadores utilizam
linguagens que esto mais prximas da linguagem humana, que so chamadas linguagens de alto nvel
ou, simplesmente, linguagens de programao. Exemplos de linguagens de programao (alto nvel)
so: C, C++, C#, Pascal, Delphi, Java, Basic, VisualBasic, Fortran, Cobol, entre muitas outras.

Unisa | Educao a Distncia | www.unisa.br

Elisamara de Oliveira

Linguagem de montagem ou Assembly: h programas de computador que precisam interferir


diretamente no hardware da mquina para permitir a execuo de funes especficas, como as oferecidas por sistemas operacionais, por exemplo. Nesse caso, os programadores utilizam as linguagens de
montagem ou linguagens assembly, que esto muito prximas da linguagem de mquina e mais distantes das linguagens de programao, sendo, por isso, chamadas linguagem de baixo nvel.
A Figura 1 mostra a relao entre as linguagens discutidas anteriormente.
Figura 1 Relao entre linguagens de baixo e de alto nvel.

Numa ponta da Figura 1, est a linguagem de mquina e, no outro extremo, esto as linguagens
humanas. Quanto mais prxima da linguagem de mquina, mais de baixo nvel a linguagem; em contrapartida, quanto mais prxima das linguagens humanas, mais alto nvel. As linguagens de programao fazem uma espcie de ponte entre a linguagem binria, ou linguagem que o computador entende,
e a linguagem que ns humanos utilizamos.
Linguagem de programao: Uma linguagem de programao uma linguagem utilizada por
uma pessoa para expressar um processo atravs do qual o computador possa resolver um problema.
(SEBESTA, 2000). Pessoas que possuem uma compreenso limitada da linguagem natural tendem a ser
mais limitadas para expressar seus pensamentos, especialmente em termos de capacidade de abstrao.
Programadores que tiveram pouca educao formal em disciplinas de Computao tendem a continuar
a usar a mesma linguagem de programao, mesmo que esta esteja em desuso. A aprendizagem contnua fundamental. necessrio que os programadores conheam os fundamentos das linguagens
de programao para que possam ler, entender e aprender com os manuais e livros tcnicos das novas
linguagens e os novos paradigmas que venham a surgir.
Compilador: permite que os programadores utilizem linguagens de alto nvel para escrever os
programas de computador, pois se encarrega de traduzi-los para linguagem de mquina. O compilador
um programa que traduz uma determinada linguagem de programao para linguagem de mquina.
Dessa forma, existem diversos compiladores especficos para cada uma das linguagens de programao
e para cada sistema operacional, conforme ilustra a Figura 2.

10

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Figura 2 Os compiladores so especficos para cada linguagem e para cada sistema operacional.

Conforme ilustra a Figura 2, um compilador C para o sistema operacional Windows (compilador


X) diferente de um compilador C para o sistema operacional Linux (compilador Y), que tambm diferente de um compilador C para o sistema operacional Mac OS (compilador Z), por exemplo, embora a
linguagem de programao (C) seja a mesma (linguagem de alto nvel). O compilador de linguagem de
montagem ou linguagem assembly chamado assembler.
Caro(a) aluno(a), dadas essas explicaes bsicas, como unir todas essas informaes para comearmos a programar? A Figura 3 vai nos ajudar, mostrando o ciclo completo da elaborao do algoritmo
execuo de um programa de computador. Cada um dos componentes desse ciclo explicado a seguir.
Figura 3 Do algoritmo execuo de um programa de computador.

Unisa | Educao a Distncia | www.unisa.br

11

Elisamara de Oliveira

Algoritmo: estrutura do programa; instrues que descrevem a lgica do programa;


Editor de texto: permite que o cdigo-fonte do programa seja editado em um arquivo-fonte.
Alguns compiladores tm editores com ambiente de programao integrados, como o caso
do compilador Dev C++;
Cdigo-fonte: conjunto de comandos escritos na linguagem de programao escolhida (que,
neste curso, ser a linguagem C). O cdigo-fonte fica armazenado no arquivo-fonte em formato ASCii, ou seja, em texto [o arquivo-fonte possui a extenso relativa linguagem de programao usada, por exemplo, .pas (Pascal), .c (C), .cpp (C++), .cs (C#), .java (Java)];
Compilador: l o cdigo-fonte do programa e cria outro arquivo, com o mesmo programa
escrito em linguagem de mquina;
Cdigo-objeto: arquivo resultante da compilao do cdigo-fonte. Contm informaes sobre alocao de memria, os smbolos do programa (como nomes de variveis e de funes) e
tambm informaes sobre debug (o arquivo-objeto possui a extenso .obj para a maioria das
linguagens de programao);
Arquivos de biblioteca: contm funes j compiladas que podem ser utilizadas no programa;
Linker: programa auxiliar do compilador que cria o programa executvel a partir de arquivos-objeto e dos arquivos de biblioteca;
Cdigo executvel: programa que pode ser executado no computador (o arquivo executvel
possui a extenso .exe).
Resumindo todo esse processo, caro(a) aluno(a), vamos precisar passar por 5 etapas: obter um problema a ser resolvido; escrever um algoritmo em pseudolinguagem para solucionar esse problema; traduzir o algoritmo para a linguagem de programao C; e, finalmente, editar esse programa e usar um
compilador C para testar seu funcionamento!

1.3 Etapas da Programao de Computadores

Como acabamos de dizer, para conseguirmos construir programas de computador, necessrio


cumprir 5 etapas bsicas da programao. As 5 etapas da programao de computadores so:
1. identificao de um problema do mundo real;
2. confeco do algoritmo;
3. teste do algoritmo;
4. confeco do programa de computador;
5. execuo do programa no computador.

Para realizarmos esse ciclo de etapas com sucesso, quer dizer, para conseguirmos fazer programas
de computador com qualidade e confiveis, muito importante a utilizao de tcnicas de programao,
como a programao estruturada. A programao estruturada uma metodologia de projeto e desenvolvimento que pretende:

12

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

facilitar a escrita;
facilitar o entendimento;
permitir a verificao;
facilitar a alterao e a manuteno dos programas de computador.
O principal objetivo da metodologia de programao estruturada reduzir a complexidade dos
problemas. Essa metodologia, quando utilizada, induz o programador a produzir programas:
confiveis;
de fcil manuteno;
flexveis;
documentados;
legveis.

Sendo assim, caro(a) aluno(a), vamos aprender a programar da melhor maneira possvel: utilizando
as regras da programao estruturada!

1.4 Expresso de Algoritmos

Os algoritmos podem ser expressos atravs de diagramas, de pseudolinguagens ou da prpria linguagem de programao. Vamos examinar cada uma dessas trs opes e, no final deste captulo, vamos
optar por uma delas, para que possamos comear a fazer nossos primeiros algoritmos!
Expresso de Algoritmos Atravs de Diagramas

A utilizao de diagramas para a expresso de algoritmos foi bastante utilizada at a dcada de
1980. Diagramas de Chapin e fluxogramas foram os principais mtodos utilizados ento. Nos mtodos
baseados em diagramas, uma grande variedade de formas geomtricas, como quadrados, retngulos,
hexgonos, pentgonos etc., utilizada para representar as instrues de leitura e impresso de dados,
assim como os comandos condicionais, de repetio etc. Alm disso, uma srie de regras para a disposio dessas formas e/ou setas para representar o sequenciamento das instrues fazem parte desses
mtodos.
Apesar de terem sido utilizados largamente pelas primeiras geraes de programadores, esses mtodos apresentam uma srie de inconvenincias, tais como:
o programador tem que memorizar todas as formas geomtricas e conhecer as regras de inter-relacionamento entre elas;
o programador perde um tempo considervel para fazer e refazer desenhos, tendo que possuir
diversas rguas com os smbolos dos diagramas;
para algoritmos muito grandes, os desenhos comeam a ocupar muitas pginas, tornando im-

Unisa | Educao a Distncia | www.unisa.br

13

Elisamara de Oliveira

praticvel a visualizao de toda a soluo;


a memorizao de regras de expresso desvia a ateno do programador, que no tem apenas
de se concentrar na lgica do problema, como seria desejvel, mas tem as preocupaes adicionais de elaborar desenhos e consultar regras e regras.
Alm de todos os inconvenientes citados, que de longe esgotam os seus problemas, os mtodos
baseados em diagramas se distanciam muito do alvo da programao, que a expresso da lgica algortmica na prpria linguagem de programao! Alm disso, esses mtodos no so nem um pouco
intuitivos. Veja a Figura 4 e tente descobrir o que o programa faz, sem muito esforo, se for possvel:
Figura 4 Algoritmo expresso atravs de um diagrama de Chapin.

A Figura 5 mostra um exemplo de um algoritmo expresso atravs de um fluxograma. Observe a


existncia de diferentes formas geomtricas para as diferentes instrues e o uso de setas para representar o fluxo dos dados. Voc seria capaz de dizer o que esse algoritmo faz? Quais as variveis que ele utiliza
e de que tipo bsico elas so? (Dica: esse algoritmo faz a mesma coisa que o expresso pelo diagrama de
Chapin, da Figura 4).

14

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Figura 5 Algoritmo expresso atravs de um fluxograma.

Expresso de Algoritmos Atravs de Linguagem de Programao


Expressar um algoritmo atravs de uma linguagem de programao o objetivo, a meta do programador, com certeza, mas isso feito quando o programador j adquiriu bastante experincia de programao, quer dizer, quando o programador j consegue programar diretamente da linguagem de programao. Os programadores iniciantes podem ter grandes dificuldades para aprender a programar se
forem diretamente s instrues da linguagem de programao.
Uma linguagem de programao permite, alm da expresso do raciocnio algortmico, a sua execuo no computador (por causa do compilador, conforme j aprendemos). Embora as linguagens de
programao sejam chamadas linguagens de alto nvel, devido sua proximidade com a linguagem humana, suas instrues vm em ingls. O ingls uma das diversas linguagens humanas, claro, mas pode
oferecer certo desconforto aos estudantes, principalmente aos que falam portugus, como o nosso
caso.
Existem diversas linguagens de programao. Cada uma pode ser mais adequada resoluo de
problemas especficos e recebe alguns rtulos por isso, como linguagens para aplicaes cientficas, linguagens para desenvolvimento de software bsico, linguagens para utilizao intensiva de recursos
Unisa | Educao a Distncia | www.unisa.br

15

Elisamara de Oliveira

grficos, para manipulao de bancos de dados etc. e linguagens para o ensino de programao!
Veja a Figura 6. um cdigo escrito em Pascal.
Figura 6 Algoritmo expresso na linguagem de programao Pascal.

A Figura 6 mostra um algoritmo expresso na linguagem de programao Pascal, ou seja, j um


programa de computador. Observe a estrutura do programa: comea com PROGRAM, depois tem a seo VAR, na qual as variveis so declaradas e, depois, vm as instrues contidas entre o BEGIN (incio) e
o END (fim). Voc seria capaz de dizer o que esse algoritmo faz? Quais as variveis que ele utiliza e de que
tipo bsico elas so? (Dica: esse programa faz a mesma coisa que o expresso pelo diagrama de Chapin e
pelo fluxograma, mostrados nas Figuras 4 e 5).
Agora, observe o exemplo de um programa escrito na linguagem de programao C.
Figura 7 Algoritmo expresso na linguagem de programao C.

16

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

A Figura 7 mostra um algoritmo expresso na linguagem de programao C, ou seja, tambm um


programa de computador. Observe a estrutura do programa: comea com um comentrio, depois tem
a incluso de uma biblioteca de funes, depois a declarao das variveis e, em seguida, vem a seo
main, na qual as instrues do programa esto contidas entre o { (incio) e o } (fim). Voc seria capaz de
dizer o que esse algoritmo faz? Quais as variveis que ele utiliza e de que tipo bsico elas so? (Dica: esse
programa faz a mesma coisa que o expresso pelo diagrama de Chapin, pelo fluxograma e pelo programa
Pascal, mostrados nas Figuras 4, 5 e 6).
O programa traz um comentrio dizendo explicitamente o que ele faz. Portanto, garanto que voc
conseguiu responder primeira pergunta. Com relao s variveis que o programa utiliza e seu tipo
bsico, observe a declarao int valor, menor; no programa. H duas variveis ali declaradas: valor e
menor; o tipo bsico int; um pouquinho de imaginao e int = inteiro!
Que tal voc comparar o cdigo C com o cdigo Pascal? Semelhanas? Qual dos dois lhe pareceu
mais fcil de entender?
Bem, se sua resposta foi o cdigo Pascal, digo-lhe que o Pascal tem o rtulo de linguagem mais
adequado ao ensino de programao. Se sua resposta foi o cdigo C, saiba que uma linguagem que foi
criada para ser utilizada por programadores experientes. Mas, se voc teve dificuldade de entender ambos os cdigos, no se preocupe! O curso est apenas comeando e h muito que se aprender de lgica
de programao! Garanto que no final do curso esse programa vai parecer muito, muito fcil para voc!
Expresso de Algoritmos Atravs de Pseudolinguagem
Uma pseudolinguagem uma notao para expresso de algoritmos para ser utilizada nas 3 primeiras etapas da programao definidas na seo 1.3, quais sejam, identificao de um problema do mundo real, confeco e teste do algoritmo. apresentada na forma de portugus estruturado. Embora seja
uma pseudolinguagem, possui estrutura, sintaxe e semntica semelhantes s de uma linguagem de programao.
A principal diferena entre a pseudolinguagem e a linguagem de programao que a primeira
no possui um compilador. Isso significa que possvel expressar o raciocnio algortmico utilizando-se
uma pseudolinguagem, mas o programa no pode ser executado no computador.
So muitas as vantagens de se utilizar uma pseudolinguagem para escrever algoritmos:
uma linguagem independente de mquina; o programador pensa somente no problema a
ser resolvido, sem se preocupar com possveis restries do compilador ou do hardware (computador);
o programador tem que conhecer a sintaxe, a semntica e a estrutura da pseudolinguagem,
mas tem total liberdade para criar novos comandos ou usar instrues em alto nvel (ou em
forma de frases); por um lado, ele vai se acostumando com a rigidez da sintaxe das linguagens
de programao, mas, por outro, tem a liberdade de expressar seu raciocnio sem esbarrar em
limitaes de contexto;
uma vez estando pronto o algoritmo na pseudolinguagem, a sua implementao no computador (etapas 4 e 5 da programao: confeco e execuo do programa) fica muito facilitada,
pois toda a lgica j foi desenvolvida e testada e somente uma traduo para a linguagem de
programao-alvo se faz necessria.

Unisa | Educao a Distncia | www.unisa.br

17

Elisamara de Oliveira

Veja o exemplo de um algoritmo escrito na pseudolinguagem PortuC.


Figura 8 Algoritmo expresso na pseudolinguagem PortuC.

A Figura 8 mostra um algoritmo expresso na pseudolinguagem PortuC. Observe a estrutura do


algoritmo: comea com um comentrio dizendo o que o algoritmo faz, tem a declarao das variveis
e depois vem a seo principal ( ), em que so apresentadas as instrues contidas entre o { (incio) e }
(fim) do algoritmo. Voc seria capaz de dizer o que esse algoritmo faz? Quais as variveis que ele utiliza
e de que tipo bsico elas so? (Dica: esse algoritmo faz a mesma coisa que o expresso pelo diagrama de
Chapin, pelo fluxograma, pela linguagem Pascal e pela linguagem C, mostrados nas Figuras 4, 5, 6 e 7).
Esse algoritmo em PortuC corresponde ao programa em C mostrado na Figura 7. Observe a grande semelhana entre eles. Essa semelhana proposital, com certeza. O PortuC quase a traduo de
um programa C para o portugus. As vantagens de se utilizar o PortuC so muitas. Pense sobre elas, pois
o PortuC ser nosso maior aliado no aprendizado de algoritmos!
Um exerccio interessante para voc fazer agora seria visitar os exemplos deste algoritmo escritos
no diagrama de Chapin e no fluxograma e compar-los com o PortuC. Diga-me: qual deles mais fcil
de entender? Qual dessas formas de expresso de algoritmos voc escolheria?

1.5 Os Algoritmos sero Expressos em Pseudolinguagem

Em funo de tudo o que foi dito e aps conhecermos as 3 formas de expresso de algoritmos, usaremos pseudolinguagem para escrever nossos primeiros algoritmos! As justificativas dessa nossa escolha so muitas e foram j fundamentadas. A pseudolinguagem PortuC utiliza o portugus, numa forma
estruturada, e tem estrutura, sintaxe e semntica muito semelhantes s da linguagem de programao
C.
Apesar de o Pascal ter se consagrado como uma linguagem adequada para o ensino da programao aos estudantes que a iniciam, ou seja, como primeira linguagem de programao, a linguagem
C, antes restrita comunidade cientfica, ganhou uma popularidade inquestionvel na dcada de 1990
que se estende aos dias atuais, pois a base de novas linguagens, como o Java, o C# e at o Android. Em
funo disso, a linguagem C passou a ser alvo do interesse dos estudantes. A resistncia, que j existiu,

18

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

em utiliz-la como primeira linguagem de programao pelos professores se deveu, em parte, ao fato de
seus criadores, Dennis Ritchie e Brian Kernighan, terem afirmado que C retm a filosofia bsica de que
os programadores sabem o que esto fazendo (KERNIGHAN; RITCHIE, 1989). Bem, se considerarmos que
programadores iniciantes no tm condies de saber com segurana o que esto fazendo, exatamente
pelo fato de serem inexperientes, a adoo da linguagem seria realmente questionvel.
No entanto, as linguagens de programao evoluram bastante e as mais utilizadas hoje, como o
Java e o C#, tm como base a linguagem C. Alm disso, a adoo de um mtodo adequado e coerente
para o ensino da programao de computadores pode atuar como um facilitador do processo de aprendizagem, permitindo que uma linguagem mais complexa, como o C, possa ser ensinado sem oferecer
obstculos aprendizagem.
Assim, a adoo do PortuC, nossa pseudolinguagem, e da metodologia de ensino proposta pela
professora viabiliza a adoo da linguagem de programao C como primeira linguagem. Isso vai ao encontro das expectativas dos estudantes e coloca o ensino da programao na direo da atual tendncia
da programao de computadores, que vem utilizando, cada vez mais, o C como base dos novos e modernos paradigmas de programao.

1.6 Resumo do Captulo

Caro(a) aluno(a), o PortuC, alm de oferecer o conforto de utilizar nossa lngua ptria, o que o
torna muito familiar ao programador, no requer a memorizao das abominveis formas geomtricas
e setas e mais setas dos diagramas. Fique tranquilo, meu(minha) estudante, mais duas lies e voc j
estar fazendo seus primeiros programas de computador!

1.7 Atividade Proposta

1. Tente deduzir qual o padro de comportamento utilizado para gerar as sequncias:


1, 5, 9, 13, 17, 21, 25 ...
1, 1, 2, 3, 5, 8, 13, 21, 34 ...

Unisa | Educao a Distncia | www.unisa.br

19

PSEUDOLINGUAGEM DE
PROGRAMAO: PORTUC

Caro(a) aluno(a), suponha que voc ganhou de presente uma viagem para os Estados Unidos. O
que voc deveria fazer antes de ir para l? Estudar ingls! J que os americanos falam essa lngua, claro.
Ento, neste nosso curso, voc est ganhando a chance nica de aprender a programar. Este captulo
o convida a aprender PortuC, que a lngua que os algoritmos (que so as bases dos programas de
computador) falam! O PortuC , basicamente, uma traduo da linguagem C para Portugus. Assim,
aprendendo bem o PortuC, voc j estar se preparando para aprender a prpria linguagem C, de forma
simples e fcil!

2.1 Identificadores

Todo programa de computador manipula dados, que so armazenados em variveis. Uma varivel
precisa ter um nome que a identifique de forma nica no programa: o identificador.

Ateno
Um identificador em PortuC formado por caracteres alfanumricos;
O primeiro caractere tem que ser uma letra; os outros caracteres podem ser:
letras: A-Z, a-z;
dgitos: 0-9;
sublinhado: _ .
No pode haver dois identificadores iguais.
Letras minsculas e letras maisculas so diferentes.
Os identificadores no podem ser acentuados.
No pode haver espao em branco num identificador.
O caractere no pode ser usado num identificador.
Um identificador no pode ter o mesmo nome das palavras reservadas do PortuC (como: principal, se, seno,
inteiro, real etc.).

Exemplos de identificadores vlidos:


NOME, raiz1, letra4, Total_dos_Salarios, Nome_de_Familia.

Unisa | Educao a Distncia | www.unisa.br

21

Elisamara de Oliveira

Exemplos de identificadores INVLIDOS:


4pontos
CUSTO FINAL

(comea com nmero)


(tem espao em branco)

PreoTotal

(caractere no pode ser usado)

Pessoa+Alta

(caractere + no pode ser usado)

Preco-caro

(caractere - no permitido)

Total_dos_salrios
inteiro

(palavra acentuada)
(palavra reservada do PortuC)

2.2 Tipos Bsicos e Declarao de Variveis

Os dados manipulados por um programa so armazenados em variveis. As variveis precisam ter


um nome (identificador), um tipo associado, e precisam ser declaradas antes que possam ser utilizadas.
Saiba mais
H trs tipos bsicos que podem ser associados s variveis:
inteiro;
real;
caractere.
Para declarar uma varivel, escreve-se o nome de seu tipo, salta-se um espao em branco, em seguida escreve-se o
nome do seu identificador e ; para finalizar a declarao.
Se mais de uma varivel for do mesmo tipo bsico, elas podem ser declaradas juntas, apenas separadas por vrgulas.
Toda varivel precisa ser declarada antes de ser utilizada.
No pode haver duas variveis com mesmo nome, mesmo que tenham tipos bsicos diferentes, a menos que algum
caractere maisculo ou minsculo as diferencie.

Exemplos de declarao de variveis vlida:


caractere NOME[20], letra;
inteiro soma;
real raiz1, Total_dos_Salarios;
caractere Nome_de_familia[30];

Exemplos de declarao de variveis INVLIDA:


caractere NOME[20]; letra4; (o separador de identificadores deve ser a vrgula)
inteiro: SOMA;
(no pode haver o sinal de dois-pontos aps o nome do tipo)
raiz1, Total_dos_Salarios real; (o tipo bsico deve vir antes dos identificadores)
caractere Nome_de_Familia[30]; (o nome do tipo bsico est errado)
real

22

SOMA;

(a varivel SOMA j foi declarada: um identificador no pode ser duplicado)


Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

2.3 Comando de Atribuio

O contedo das variveis do programa pode ser determinado atravs de dois tipos de comandos:
comando de atribuio e comando de leitura. O comando de atribuio permite que um determinado
valor seja armazenado numa varivel.

Ateno
O smbolo do comando de atribuio = .
No se deve atribuir a uma varivel um valor que NO seja compatvel com o tipo bsico dessa varivel, ou seja,
nmeros inteiros devem ser atribudos a variveis do tipo inteiro; nmeros reais devem ser atribudos a variveis do
tipo real; frases e letras devem ser atribudas a variveis do tipo caractere.
Caso no haja compatibilidade entre o dado e o tipo da varivel, podem acontecer efeitos indesejados. Ento,
muito cuidado, pois nesse tipo de atribuio ocorre a CONVERSO AUTOMTICA DE TIPOS e o que chega
na varivel de destino pode ser um desastre!
Toda varivel deve ter um valor a ela atribudo antes de ser usada no programa;
Em variveis reais, S EXISTE PONTO DECIMAL; no se pode usar vrgula decimal.

Exemplos de atribuies vlidas:


letra = L;
soma = 0;
Total_dos_Salarios = 1275.50;
NOME = Luiza;

Exemplos de atribuies INVLIDAS:


NOME = Maria;

(a cadeia de caracteres tem que estar entre aspas)

NOME = Maria;

(o smbolo que delimita a cadeia de caracteres no pode ser apstrofo, devem-se usar aspas)

Total_dos_Salarios = 1275.50;

(o valor a ser atribudo a uma varivel numrica no pode estar entre apstrofos nem entre aspas)

Total_dos_Salarios = 1275,50;

(no existe vrgula decimal, o certo usar ponto decimal)

soma = 10.0;

(numa varivel do tipo inteiro,como o caso da varivel soma, no pode haver parte decimal;
esse caso est sujeito converso automtica)

soma := 0;

(o smbolo do comando de atribuio = e no :=)

Unisa | Educao a Distncia | www.unisa.br

23

Elisamara de Oliveira

2.4 Operadores Aritmticos

Os operadores aritmticos permitem que expresses da Matemtica sejam atribudas s variveis.


Os operadores aritmticos implementam as operaes bsicas (adio, subtrao, diviso e multiplicao) e algumas operaes mais avanadas da Matemtica (como logaritmo, raiz quadrada, seno, cosseno
etc.). A varivel que vai receber o resultado de uma operao aritmtica tem que ser de um tipo numrico compatvel, capaz de armazenar o valor resultante, seno poder ocorrer uma converso automtica
com resultados muitas vezes indesejados ou mesmo imprevisveis.

Saiba mais
Os operadores aritmticos bsicos so:
+ (adio);
- (subtrao);
* (multiplicao);
/ (diviso real);
++ (adiciona 1);
-- (subtrai 1).

Alguns operadores aritmticos mais avanados so:
% (resto da diviso inteira);
/ (quociente da diviso inteira);
sqrt( ) (raiz quadrada);
abs( ) (valor absoluto).

Exemplos de expresses aritmticas vlidas:


resto = 10 % 3;
quociente = 10 / 3;
salario = ((totaldehoras*32.50)+102.00) - descontoinss;
valoremdolares = salario / 1.85;
impostoderenda = salario * (0.20);
nome = nome + da silva;
contador = contador +1;
++contador;
--contador;
raiz = sqrt(numero);

24

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Exemplos de expresses aritmticas INVLIDAS:


resto = 10.0 % 3;

(o operador % s pode envolver nmeros inteiros)

valoremdolares = salario / 1,85;

(no existe vrgula decimal, o separador sempre o ponto decimal)

salario = totaldehoras *+ 32.50;

(os operadores * e + so didicos, envolvem sempre dois operadores, portanto no podem ser
utilizados juntos)

nome = nome * 3;

(em variveis do tipo caractere s pode ser feita adio ou subtrao de caracteres)

contador = *1;

(o operador * didico, tem que envolver dois operandos)

2.5 Operadores Lgicos

Os operadores lgicos permitem que os trs principais operadores da lgebra de Boole possam ser
utilizados num programa: E, OU e NO. O estado dos operandos e o resultado de uma operao lgica
so sempre FALSOS (avaliados como zero) ou VERDADEIROS (avaliados como diferentes de zero).
Saiba mais
Os operadores lgicos so:
e (conjuno);
ou (disjuno);
! (negao).
O operador binrio e envolve sempre dois operandos e o resultado VERDADEIRO somente quando ambos os
operandos forem VERDADEIROS, ou seja, basta que um operando seja FALSO para que o resultado seja FALSO.
O operador binrio ou envolve sempre dois operandos e o resultado FALSO somente quando ambos os operandos forem FALSOS, ou seja, basta que um operando seja VERDADEIRO para que o resultado seja VERDADEIRO.
O operador unrio ! muda o estado do operando de FALSO para VERDADEIRO ou de VERDADEIRO para FALSO.

Caro(a) aluno(a), aqui cabe uma explicao um pouco mais detalhada para melhorar o entendimento dos operadores lgicos E, OU e ! (no):
uma varivel lgica aquela que pode assumir apenas os valores VERDADEIRO ou FALSO;
na prtica, as variveis lgicas so utilizadas para descrever o funcionamento de um sistema,
como um circuito formado por uma bateria e uma lmpada:

Unisa | Educao a Distncia | www.unisa.br

25

Elisamara de Oliveira

a representao dos nveis lgicos (1=verdadeiro e 0=falso) pode ser melhor entendida atravs
de chaves que representam um circuito. Se a chave est fechada (valor 1 ou valor VERDADEIRO), a corrente pode passar, o que pode permitir que a lmpada se acenda. Se a chave est
aberta (valor 0 ou valor FALSO), a corrente no pode passar, o que pode impedir que a lmpada
se acenda;

uma funo E resulta em 1=VERDADEIRO se, e somente se, todas as variveis lgicas de entrada tiverem valor 1=VERDADEIRO. Em outras palavras, a lmpada do circuito s acende se
ambas as chaves estiverem fechadas, o que caracteriza um circuito com chaves em sequncia,
como o mostrado a seguir (na funo E, somente se ambas as entradas forem verdadeiras a
expresso avaliada como verdadeira);

26

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

uma funo OU resulta em 1=VERDADEIRO se, pelo menos, uma das variveis lgicas de entrada tiver valor 1=VERDADEIRO. Em outras palavras, a lmpada acende se uma das chaves
estiver fechada ou quando as duas estiverem fechadas (forem verdadeiras), o que caracteriza
um circuito com chaves em paralelo, como o mostrado a seguir (na funo OU, basta que uma
entrada seja verdadeira para a expresso ser avaliada como verdadeira);

uma funo ! (no) uma operao de inverso. Ela converte o estado ou valor de uma varivel lgica em seu inverso lgico: de VERDADEIRO para FALSO e de FALSO para VERDADEIRO.
No caso do circuito, funciona assim: se a chave est aberta, ela se fecha e acende a luz, e, se est
fechada, ela se abre e apaga a luz.

Exemplos de expresses lgicas vlidas:


se (altura > 1.80 e idade < 21 e escolaridade >= 2)
se (idade >= 13 e idade <=20)
se ((media >= 7.0 e faltas <= 18) ou foiDispensado == 1)
se !( numero % 2 == 0)

Unisa | Educao a Distncia | www.unisa.br

27

Elisamara de Oliveira

Exemplos de expresses lgicas INVLIDAS:


se (altura > 1.80 e ou idade < 21)

(os operadores e e ou so binrios, envolvem sempre 2 operandos, portanto no podem ser


utilizados juntos)

se (idade >=13 e <= 20)

(a varivel idade deveria ser repetida para obter o resultado lgico da comparao)

2.6 Operadores Relacionais

Os operadores relacionais permitem a comparao entre contedos de variveis ou de valores e


resultam sempre num resultado FALSO (avaliado como zero) ou VERDADEIRO (avaliado como diferente
de zero).
Saiba mais
Os operadores relacionais so:
> (maior que);
>= (maior ou igual a);
< (menor que);
<= (menor ou igual a);
== (igual a);
!= (diferente de).

Importante: o sinal = corresponde ao comando de atribuio e o sinal == significa comparao!


Exemplos de expresses relacionais vlidas:
se
se
se
se

(resposta ==
(resposta ==
(resposta !=
(sexo == F

S)
S ou resposta == s)
S e resposta != s)
e altura <= 1.50)

Exemplos de expresses relacionais INVLIDAS:


se (resposta !

S)

(o smbolo do operador diferente est errado: no pode haver espao em branco entre o ! e
o =)

se (altura <

= 1.50)

(o smbolo do operador menor que est errado: no pode haver espao em branco entre o <
e o =)

28

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

se (resposta = S)

(o problema aqui o uso do smbolo =, que do comando de atribuio, e no == que a


igualdade; na verdade, o comando no est errado, mas est sendo feita uma atribuio e no
uma comparao. Portanto, muito cuidado!)

2.7 Comando Condicional

O comando condicional permite que se tomem 2 caminhos diferentes e mutuamente exclusivos a


partir da avaliao de uma condio. Se a condio avaliada como verdadeira, um caminho seguido;
se avaliada como falsa, outro caminho escolhido, nunca ambos!
A associao do comando condicional com fatos rotineiros imediata: se estiver chovendo eu vou
de carro, seno eu vou de bicicleta; nesse exemplo, a pessoa avalia a condio do tempo antes de decidir
se sair de carro ou de bicicleta e no h possibilidade de ela sair com ambos os meios de transporte!

Ateno
A sintaxe do comando condicional :
se (<condio>)
{
<bloco de comandos 1>
}
seno
{
<bloco de comandos 2>
}

A semntica (como funciona) do comando condicional :
a <condio> avaliada como VERDADEIRA (valor diferente de zero) ou FALSA (valor igual a zero);
se a <condio> for VERDADEIRA, o <bloco de comandos 1> executado e o comando condicional finalizado;
se a <condio> for FALSA, o <bloco de comandos 2> executado e o comando condicional finalizado.
seno clusula do comando se, ou seja, no comando, apenas faz parte do comando se.
A clusula seno pode no existir num comando se. Nesse caso, (quando no existe a clusula seno), quando
a <condio> avaliada como FALSA, nenhum comando executado e o comando se finalizado.
Os delimitadores de incio { e de fim } so obrigatrios quando existe mais de um comando no <bloco de
comandos 1> ou mais de um comando no <bloco de comandos 2>. Quando existir apenas um comando, os
delimitadores ficam opcionais.

Unisa | Educao a Distncia | www.unisa.br

29

Elisamara de Oliveira

Exemplos de comandos condicionais VLIDOS:


se (media >= 7.0)
aprovado = 1;
se (media >= 7.0)
{ aprovado = 1;
}
se (media >= 7.0)
{
aprovado = 1;
++contadoraprovados;
}
se (media >= 7.0)
aprovado = 1;
seno
aprovado = 0;
se (media >= 7.0)
{ aprovado = 1;
++contadoraprovados;
}
seno
aprovado = 0;
se (media >= 7.0 e faltas <= 9)
{ aprovado = 1;
++contadoraprovados;
}
seno
{ aprovado = 0;
++contadorreprovados;
}

Exemplos de comandos condicionais INVLIDOS:


se media >= 7.0
aprovado = 1;

(faltou colocar parnteses na condio)

se (media >= 7.0)


{
aprovado = 1;
++contadoraprovados;

(faltou colocar o delimitador de fim { no final do comando )

30

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

se (media >= 7.0)


aprovado = 1
seno
aprovado = 0;

se (media >= 7.0)


{ aprovado = 1;
++contadoraprovados;
}
seno
aprovado = 0

se (media >= 7.0 e faltas <= 9)


{ aprovado = 1;
++contadoraprovados;
}
seno
aprovado = 0;
++contadorreprovados;
}

(faltou ; depois do comando aprovado = 1)

(novamente faltou ; aps o comando aprovado = 0)

(faltou o delimitador { aps o seno)

se (media >= 7.0)


aprovado = 1;
++contadoraprovados;
seno
aprovado = 0

(faltaram os delimitadores { } aps a condio do comando se caso verdadeiro (antes do seno))

2.8 Comando de Repetio

O comando de repetio permite que um comando ou um bloco de comandos seja executado


diversas vezes. O nmero de vezes determinado por uma condio que constantemente avaliada.
Enquanto a condio for avaliada como verdadeira (ou diferente de zero), o comando ou bloco de comandos executado repetidamente; quando a condio fica falsa, o comando de repetio para.
A associao do comando de repetio com fatos rotineiros possvel: enquanto o nmero da casa
for menor que o procurado, continue subindo a rua e verificando se a casa procurada; nesse exemplo, a
pessoa avalia a condio, que a verificao do nmero desejado entre diversas casas de uma rua, por
exemplo. Essa avaliao continua at que a casa procurada seja encontrada ou que se encontre uma casa
cujo nmero seja superior ao procurado, supondo que a numerao esteja em ordem crescente.

Unisa | Educao a Distncia | www.unisa.br

31

Elisamara de Oliveira

Ateno
A sintaxe do comando de repetio :
enquanto (condio)
{
<bloco de comandos>
}

A semntica (como funciona) do comando de repetio :


a condio avaliada como VERDADEIRA (diferente de zero) ou FALSA (igual a zero);
se a condio for VERDADEIRA, o <bloco de comandos> executado e, ao chegar ao delimitador de fim } ou final
do comando, automaticamente se retorna avaliao da condio;
se a condio for FALSA, o comando de repetio finalizado.
Entre os comandos do <bloco de comandos> ESSENCIAL que exista um comando que altere a <condio> que
constantemente avaliada, pois, caso contrrio, o comando enquanto NUNCA TERMINAR!
Os delimitadores { e } so obrigatrios quando existe mais de um comando no <bloco de comandos>. Quando
existir apenas um comando, os delimitadores ficam opcionais e o ; funcionar como delimitador de fim,
indicando o final do comando enquanto.

Exemplos de comandos de repetio vlidos:


enquanto (contador < 3)
++contador;
numero = 1;
enquanto (numero <= 50)
{ se (numero % 2 == 0)
++contapar;
seno
++contaimpar;
++numero;

Exemplos de comandos de repetio INVLIDOS:


enquanto contador <= 10
++contador;

(faltaram parnteses na condio)

numero = 1;
enquanto (numero <= 50)
{ se (numero % 2 == 0)
++contapar;
seno
++contaimpar;
++numero;

32

(faltou colocar o delimitador fim } aps o ltimo comando)


Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

numero = 1;
enquanto (numero <= 50)
se (numero % 2 == 0)
++contapar;
seno
++contaimpar;
++numero;

(como no existem os delimitadores de


incio e fim { }, somente o comando se faz parte do comando enquanto e, como o
comando se no altera a varivel numero, o comando enquanto nunca vai parar!)

numero = 1;
enquanto (numero <= 50);
{ se (numero % 2 == 0)
++contapar;
seno
++contaimpar;
++numero;
}

(como foi colocado ; aps a condio, o comando enquanto foi finalizado; a varivel numero no ser alterada e o comando enquanto nunca vai parar!)

2.9 Comandos de Entrada e Sada

O comando de entrada permite que o usurio possa fornecer valores ao programa, atravs do teclado, que sero armazenados nas variveis. O comando de sada permite que informaes e valores de
variveis possam ser enviados ao usurio pela tela do monitor.
dessa forma que se consegue estabelecer um dilogo com o usurio. Se o programa deseja saber
o nome do usurio, por exemplo, usa-se o comando de sada para fazer a pergunta qual o seu nome? e
usa-se o comando de entrada para obter a resposta e armazen-la numa varivel.

Unisa | Educao a Distncia | www.unisa.br

33

Elisamara de Oliveira

Ateno
A sintaxe do comando de entrada :
leia(%letra, [&] varivel);
em que:
%letra representa os especificadores de formato e depende do tipo associado varivel:
%d ou %i
%f
%c
%s

para variveis do tipo inteiro (integer);


para variveis do tipo real (float);
para variveis do tipo caractere (nico) (character);
para variveis do tipo caractere (cadeia ou string);

O smbolo & deve ser utilizado apenas para os tipos numricos, ou seja, para variveis declaradas como inteiras ou
reais.
A semntica (como funciona) do comando de entrada :
a varivel tem que ter sido previamente declarada;
o usurio vai utilizar o teclado para fornecer o dado e, depois que ele teclar <ENTER>, tudo o que ele tiver digitado ser armazenado na varivel automaticamente.
Recomenda-se utilizar o comando leia para ler uma s <varivel> de cada vez.

A tabela a seguir mostra um exemplo de declarao de variveis de tipos bsicos e a forma correta
de leitura.
Declarao

Leitura

Exemplos de contedos

inteiro numero;

leia(%i, &numero);

numero = -5;
numero = 2002;

real valor;

leia(%f, &valor);

valor = -5.867;
valor = 2002.50;

caractere ch;

leia(%c, ch);

ch = 5;
ch = s;
ch = #;

caractere nome[20];

leia(%s, nome);

nome = Maria;
nome = fim;

Observe, na tabela, a diferena entre a declarao, a leitura e a atribuio de valores a um caractere


nico (%c) e a uma cadeia de caracteres (%s). Um nico caractere vem entre apstrofos ( ) e uma cadeia
de caracteres entre aspas ( )!

34

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Ateno
A sintaxe do comando de sada :
imprima( frase e %letra [, lista de variveis] );
Entre aspas, podem ser escritas frases formadas por palavras intercaladas pelos especificadores de formato %s, %c,
%i, %d ou %f, descritos no comando leia. Para cada especificador utilizado, a varivel do tipo correspondente deve
constar da lista de variveis.
A lista de variveis opcional; deve existir somente quando um especificador de formato colocado na frase entre
aspas e, nesse caso, deve haver uma vrgula separando a frase da lista de variveis e vrgulas separando as variveis
da lista.
A semntica (como funciona) do comando de sada :
pode ser impressa qualquer frase e qualquer varivel dentro de um comando imprima, desde que a frase esteja
entre aspas e as variveis estejam devidamente listadas aps a vrgula que separa a frase da lista de variveis;
a frase entre aspas copiada integralmente para a tela e os especificadores de formato so substitudos pelas
variveis da lista de variveis;
quando existe uma varivel, o seu contedo copiado para a tela;
a ordem em que as palavras da frase e as variveis aparecem no comando imprima mantida quando impressa na tela.

Exemplos de comandos de entrada e sada vlidos:


imprima (Qual o seu nome? );
leia(%s,nome);
imprima (Qual a sua idade? );
leia (%i,&idade);
imprima (Qual a sua altura? );
leia (%f,&altura);
imprima (Qual o seu sexo? (F/M) );
leia (%c,sexo);
imprima (O seu nome : %s e voc tem %i anos ,nome, idade);
imprima (Voc foi aprovado no curso com mdia= %f, Media);

Exemplos de comandos de entrada e sada INVLIDOS:


imprima (Qual o seu nome? );

(faltaram aspas aps a interrogao para delimitar a frase a ser impressa)

Unisa | Educao a Distncia | www.unisa.br

35

Elisamara de Oliveira

imprima (Qual a sua idade? );


leia (%i,idade);

(faltou o & antes do identificador idade, pois o tipo numrico: %i)

imprima (A sua idade %i idade);

(faltou uma vrgula entre a frase entre aspas e a varivel idade)

imprima (Voc foi aprovado no curso com mdia= , media);

(faltou o especificador de formato da varivel Media (%f) aps o = na frase entre aspas)

imprima (Qual o seu nome? );


leia (%s,&nome);

(no pode haver & na leituras de variveis do tipo caractere (%c e %s) )

Saiba mais

Explicao adicional Passo a passo do comando de impresso:


imprima (frase varivel1 varivel2 varivel3);
(entre a frase e a varivel e entre as variveis deve haver uma vrgula separando-as).
imprima (frase , varivel1, varivel2, varivel3);
(a frase deve vir entre aspas).
imprima (frase , varivel1, varivel2, varivel3);
(dentro da frase, deve vir um formato para cada varivel, compatvel com o seu tipo bsico).
imprima (frase %s %i %f ,varivel1,varivel2,varivel3);
Exemplo:
imprima (Vc se chama %s, tem %i anos e %f m de altura , nome, idade, altura);

36

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

2.10 Separador de Comandos

Todos os comandos do PortuC so separados por ponto e vrgula.


Ateno
O separador de comandos :

Exemplos de erro na separao de comandos:


se (resposta != s);
{ <comandos>
}

(o ; depois da condio finaliza o comando se)

enquanto (contador < 5) ;


{ <comandos>
}

(o ; depois da condio do comando enquanto coloca o programa em loop infinito!)

2.11 Comentrios

Os comentrios no pertencem s instrues dos algoritmos, mas so teis para que o programador explique o que est sendo feito.
Saiba mais
Os comentrios podem vir delimitados entre
/* */
Ou podem ser comentrios de linha
//

Exemplos de comentrios:
/* Este trecho calcula a media de notas */
desc = preco*0.15; // calcula desconto de 15%

Unisa | Educao a Distncia | www.unisa.br

37

Elisamara de Oliveira

2.12 Bloco de Programa

Bloco de programa o nome que se d estrutura de um programa escrito numa determinada


linguagem. O bloco de programa em PortuC pode ser visto a seguir.
Saiba mais
O Bloco de Programa em PortuC tem a forma:
/* comentrios */
<declarao de variveis>;
principal()
{
<bloco de comandos>;
}
desejvel que todo algoritmo escrito em PortuC comecer com um comentrio dizendo o que o programa faz,
embora comentrios sejam opcionais.
Em seguida, devem ser declaradas todas as variveis que sero utilizadas no <bloco de comandos>.
Aps a declarao das variveis, deve-se escrever a palavra principal( ), que delimita a seo em que os comandos
podem ser utilizados.
O <bloco de comandos> pode conter todos os comandos vlidos em PortuC, separados por ponto e vrgula, e estes
devem estar contidos entre os delimitadores { e }. Nenhum comando pode ser usado fora dessa seo.
importante notar que letras maisculas e minsculas alteram os identificadores e as palavras reservadas do PortuC.

Exemplos de programas escritos em PortuC vlidos:


/* sexo.c: le o nome e o sexo de uma pessoa e imprime uma frase
dizendo se masculino, feminino ou invalido */
caractere nome[20], sexo;
principal ( )
{
imprima (Qual eh o seu nome? );
leia(%s,nome);
imprima (Qual eh o seu sexo? (f/m) );
leia (%c,sexo);
se (sexo == f ou sexo == F)
imprima (%s voce eh do sexo feminino. ,nome);
seno se (sexo == m ou sexo == M)
imprima (%s voce eh do sexo masculino. ,nome);
seno imprima (Voce digitou um sexo invalido );
imprima(Fim do programa.);
}

38

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

/* nota.c: le a nota de um aluno e verifica se ele foi aprovado ou reprovado */


real nota;
principal()
{
imprima (Digite sua nota final: );
leia(%f,&nota);
se (nota >= 6.0)

imprima (Voce foi aprovado! );
seno
imprima (Voce foi reprovado. );

imprima(Fim do programa.);
}
/* idade.c: le o ano atual e o ano de nascimento de uma pessoa
e imprime uma frase dizendo qual eh a idade da pessoa */
inteiro anoatual, anonasc, idade;
principal()
{
imprima (Qual eh o ano atual? );
leia(%i,&anoatual);
imprima (Qual eh o seu ano de nascimento? );
leia (%i,&anonasc);
idade = anoatual anonasc;
imprima (Voce fez ou fara %i anos , idade);

imprima(Fim do programa.);
}

/* parimpar.c: le um numero e verifica se ele eh par ou impar */


inteiro n;
principal()
{
imprima (Digite um numero inteiro: );
leia(%i,&n);
se (n % 2 == 0)

imprima (O numero %i eh par , n);
seno
imprima (O numero %i eh impar , n);

imprima( Fim do programa.);


}

Unisa | Educao a Distncia | www.unisa.br

39

Elisamara de Oliveira

Exemplos de programas escritos em PortuC INVLIDOS:


caractere

sexo, caractere[20];

principal ( )
{
imprima (Qual eh o seu nome? );
leia(%s,caractere);
imprima (Qual eh o seu sexo? (F/M) );
leia (%c,sexo);
se (sexo == F)
imprima (%s voce eh do sexo feminino. ,caractere);
seno
imprima (%s voc eh do sexo masculino. ,caractere);
}

(a varivel caractere tem o mesmo nome da palavra reservada caractere)

real nota;
{
imprima (Digite sua nota final: );
leia(%f,&nota);
se (nota >= 6.0)

imprima (Voce foi aprovado! );
seno
imprima (Voce foi reprovado... );

imprima(Fim do programa.);
}

(faltou a palavra principal( ) para dar incio seo de comandos)

real nota;
nota = 7.5;
principal()
{
imprima (Digite sua nota final: );
leia(%f,&nota);
se (nota >= 6.0)

imprima (Voce foi aprovado! );
seno
imprima (Voce foi reprovado... );

imprima( Fim do programa.);
}

(h um comando de atribuio nota=7.5; na seo de declarao de variveis: no pode!)

40

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

inteiro anoatual, anonasc, idade;


principal()
imprima (Qual eh o ano atual? );
leia(%i,&anoatual);
imprima (Qual eh o seu ano de nascimento? );
leia (%i,&anonasc);
idade = anoatual anonasc;
imprima (Voce fez ou fara %i anos , idade);

imprima(Fim do programa.);
}

(faltou o delimitador { para iniciar a seo de comandos do programa)

inteiro N;
principal()
{
imprima (Digite um numero inteiro: );
leia(%i,&n);
se (n % 2 == 0)

imprima (O numero %i eh par , n);
seno
imprima (O numero %i eh impar , n);

imprima( Fim do programa.);
}

(no foi declarada a varivel n ou foi declarada errada (N maisculo diferente de n minsculo))

2.13 Resumo do Captulo

Caro(a) aluno(a), este captulo foi um convite a aprender PortuC, que a lngua que os algoritmos (que so as bases dos programas de computador) falam! O PortuC , basicamente, uma traduo
da linguagem C para Portugus. Assim, aprendendo bem o PortuC, voc j estar se preparando para
aprender a prpria linguagem C, de forma simples e fcil!

Unisa | Educao a Distncia | www.unisa.br

41

CONSTRUO DE ALGORITMOS
EM PORTUC: PRATICANDO OS
COMANDOS E FAZENDO CLCULOS

3.1 Declarao de Variveis Comandos leia e imprima

1. Escreva um comando que leia um nmero inteiro.

2. Escreva comandos para pedir e ler um nmero inteiro.

3. Escreva comandos para pedir, ler e imprimir um nmero inteiro.

4. Repita o exerccio 3 para um nmero real.

Saiba mais
Ao invs de usar %f para apresentar a altura, usamos %.2f
O que isso significa? Que ns queremos apresentar a altura com apenas 2 dgitos na parte decimal! Afinal, a forma tradicional de se apresentar uma altura com 2 dgitos apenas, como 1.75, 1.62, 1.88 etc., no mesmo?

5. Declare as variveis utilizadas nos exerccios de 1 a 4.

Unisa | Educao a Distncia | www.unisa.br

43

Elisamara de Oliveira

6. Escreva comandos para pedir, ler e imprimir o nome e a idade de uma pessoa.

3.2 Comando Condicional se

7. Escreva um comando para verificar se a idade lida no exerccio 6 corresponde a um adulto


(maior que 17 anos). Se for verdadeiro, imprimir uma frase dizendo que um adulto.

8. Escreva um comando para verificar se a idade lida no exerccio 6 corresponde a uma criana
(menor que 13 anos). Se for, imprima uma frase dizendo que uma criana.

9. Escreva um comando para verificar se a idade lida no exerccio 6 corresponde a um adolescente (entre 13 e 17 anos). Se for, imprima uma frase dizendo que um adolescente.

10. Escreva um nico comando capaz de classificar uma pessoa pela faixa etria e ainda verificar
se a idade vlida.

44

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

3.3 Bloco de Programa

11. Transforme o exerccio 6 num algoritmo, ou seja, construa o Bloco de Programa em PortuC.

12. Escreva um algoritmo que leia o nome e a idade de uma pessoa e imprima uma frase dizendo
se a pessoa uma criana, um adolescente, um adulto ou se a idade invlida.

Unisa | Educao a Distncia | www.unisa.br

45

Elisamara de Oliveira

3.4 Operaes Bsicas com Nmeros

13. Escreva um comando para somar dois nmeros: n1 e n2.

Observe que soma a varivel na qual o resultado da adio de n1 com n2 ser armazenado. So
usados apenas o comando de atribuio = e o operador +.
14. Escreva comandos para subtrair e multiplicar dois nmeros: n1 e n2.

O raciocnio para subtrair e multiplicar dois nmeros o mesmo usado na adio.


15. Escreva um comando para dividir dois nmeros: n1 por n2.
Antes de dividir um nmero n1 (numerador) por um nmero n2 (denominador) necessrio que
verifiquemos se o denominador diferente de zero, pois no existe diviso por zero! O comando
divisao = n1 / n2; vlido do ponto de vista sinttico, mas em programao temos que pensar
nos erros que porventura possam ocorrer quando da execuo dos comandos.

Para evitarmos a diviso eventual por zero, usamos o comando se. Somente se n2 for diferente de
zero que a diviso ser calculada; caso contrrio, uma mensagem impressa para comunicar ao
usurio o motivo pelo qual o clculo no foi efetuado. O resultado da diviso um nmero real.
16. Escreva um comando para calcular o quadrado de um nmero inteiro n1 e tambm n1 elevado a 3.

Com certeza, muito mais fcil do que voc pensava, no ? So pequenos truques da programao. Mas se quisermos calcular n1 elevado a 1000 ou n1 elevado a um nmero qualquer, teremos
que escrever um pequeno trecho de algoritmo. Depois eu mostro como fazer.

46

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

17. Escreva um comando para calcular a raiz quadrada de um nmero n1.

Novamente, para evitarmos um erro tentando calcular a raiz de um nmero negativo, usamos o
comando se. Observe que sqrt( ) um operador aritmtico cuja sintaxe diferente dos outros vistos nos exerccios anteriores. Esse tipo de operador, na verdade, uma funo que recebe n1 como
parmetro e devolve a sua raiz quadrada calculada. Existem muitas outras funes e elas sero
apresentadas na medida em que se fizer necessria a sua utilizao.
18. Escreva comandos para fornecer o quociente e o resto da diviso inteira de n1 por n2.
No caso da diviso inteira de n1 (numerador) por um nmero n2 (denominador), tambm necessrio que o denominador seja diferente de zero.

Nesse caso, importante voc notar que ambos os nmeros (n1 e n2) tm que ser inteiros para
que os operadores / (quociente da diviso) e % (resto da diviso inteira) possam ser utilizados!
Como voc pode notar, no existe um operador especfico para o quociente da diviso inteira; usa-se o / (que da diviso real), mas, como n1 e n2 so inteiros, haver uma converso automtica
de tipos, com o truncamento da parte fracionria do resultado, o que nos fornece o quociente da
diviso inteira. Isso um trunfo do PortuC: nunca se esquea disso!
Se n1 for 7 e n2 for 3, por exemplo, quais seriam os valores de quociente e resto? (7 dividido por 3
d 2 (quociente) e sobra 1 (resto), no ?)

Saiba mais
Qual a diferena entre diviso real e diviso inteira?
3.5 este o resultado da diviso real
7 / 2 = 3 (quociente da diviso inteira)
7 % 2 = 1 (resto da diviso inteira)

Unisa | Educao a Distncia | www.unisa.br

47

Elisamara de Oliveira

19. Escreva um comando para calcular 10% de um nmero.

Em primeiro lugar, vamos esclarecer que NO EXISTE O OPERADOR porcentagem. Na verdade,


% o resto da diviso inteira. Portanto, o clculo da porcentagem tem que ser feito pela operao equivalente: 10% = 10/100 = 0.10. A varivel porc deve ser do tipo real. No recomendo
o uso de 10/100, pois 10/100 pode ser zero, com a converso automtica de tipos. Ento, use
sempre 0.10 no clculo de 10%.
20. Suponha que um produto custe um determinado preo, mas, se pago vista, o cliente ganha
5% de desconto. Escreva comandos para calcular o valor do desconto e o valor final do produto.

21. Escreva comandos para separar os dgitos de um nmero inteiro menor que 100 em dezena
e unidade.
Vamos entender, primeiramente, o que se quer: dado um nmero menor que 100, por exemplo,
29, deseja-se obter o dgito 2 (dezena) separado do dgito 9 (unidade); no caso de um nmero de
um s dgito, por exemplo, 3, o resultado seria 0 (dezena) e 3 (unidade). Bem, este um problema
muito comum na programao e muito fcil de ser resolvido tambm! Basta usar os operadores
/ e % com nmeros inteiros.

Vamos fazer um pequeno teste: 29 dividido por 10 d 2 e sobra 9, certo? 2 a dezena de 29 e coincide com o quociente da diviso inteira; 9 a unidade de 29 e coincide com o resto da diviso inteira
por 10! No caso de n1 ser igual a 3, ficaria assim: 3 dividido por 10 d 0 e sobra 3. Nesse caso, 0 a
dezena (/) e 3 a unidade (%).
Um bom teste aqui seria voc responder: como poderamos separar os 3 dgitos de nmeros entre
100 e 999?
Se no conseguir resolver, esta uma boa pergunta para o frum!

48

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

22. Suponha que, numa certa universidade, os alunos tm um nmero de 5 dgitos que os identificam. Desses 5 dgitos, os 2 primeiros indicam o ano em que o aluno entrou na universidade.
Escreva comandos para separar os 2 primeiros dgitos de um nmero inteiro de 5 dgitos que
representa a identificao do aluno.
Vamos entender o que se quer: dado um nmero de 5 dgitos, por exemplo, 99211, se deseja obter
os 2 primeiros dgitos, no caso, 99 (que indicaria que o aluno entrou em 1999 na universidade).

Mas e se o aluno entrou em 2000 ou 2009? O resultado teria que ser ano de entrada = 0. Vamos
fazer, agora, os testes. Vejamos: n1 00211. 00211 dividido por 1000 d ZERO (que o quociente)
e sobra 211. Pode parecer estranho, mas pense: quando se divide um nmero por 1000, o menor
resto zero e o maior resto pode ser 999. Como queremos apenas o quociente da diviso inteira, o
resultado ser anoentrada = 0 (que, no caso, representaria 2000). Funciona!
Outro teste: n1 igual a 10231. 10231 dividido por 1000 d 10 e sobra 231, certo? 10 o quociente,
o que resulta em anoentrada= 10 (que seria 2010)! Funciona mesmo!
Faa outros testes e verifique que d certo. E como o clculo simples, no?

3.5 Operaes com Operadores Lgicos e Relacionais

23. Escreva um comando para verificar se um nmero positivo ou negativo.

Observe que 0 pode ser considerado um nmero positivo e todo nmero menor que 0 negativo.
24. Escreva um comando para verificar se um nmero par ou mpar.
Um nmero par aquele que, dividido por 2, tem resto zero: 0, 2, 4, 6, 8, 10..., e um nmero mpar
aquele que, dividido por 2, tem resto diferente de zero: 1, 3, 5, 7, 9...

Unisa | Educao a Distncia | www.unisa.br

49

Elisamara de Oliveira

25. Escreva um comando para verificar se um nmero maior que 100.

26. Escreva um comando para verificar se um nmero est entre 10 e 100.

Para se verificar se um nmero est entre dois limites, so necessrias duas comparaes: uma
para o limite inferior e outra para o limite superior, e essas comparaes tm que estar ligadas
pelo conectivo lgico e, quer dizer, somente quando as duas comparaes forem verdadeiras, o
nmero est dentro dos limites. No como na Matemtica, que usamos uma expresso do tipo
10 n1 100!
27. Suponha que certo clube esportivo quer selecionar atletas para o time de basquete. As exigncias so: ter 1.85 m de altura ou mais, ter menos de 21 anos e ter, pelo menos, o primeiro
grau completo. Escreva um comando para verificar se um candidato pode ser ou no aprovado para o time de basquete. O grau de instruo definido como: 0= sem instruo, 1=primeiro grau, 2=segundo grau, 3=superior.

Observe que, ao se fazer a comparao da altura, no se faz referncia unidade de medida metros, quer dizer, estaria errada uma comparao do tipo altura >= 1.85 m. O mesmo acontece
com a idade, em que os anos foram (e devem) ser omitidos.

50

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

28. Suponha que o clube esportivo deseje, agora, formar um time masculino (sexo == m) e outro
feminino (sexo == f) e tenha mudado um pouco seus critrios. As exigncias passaram a ser:
ter 1.85m de altura ou mais para os homens e 1.75 ou mais para as mulheres e ter menos de
21 anos. Escreva um comando para verificar se um candidato ou candidata pode ser ou no
aprovado(a) para o time de basquete.

Observe que surgiu o conectivo ou ligando as comparaes de altura para os sexos diferentes,
que continuaram a ser ligados pelo conectivo e na comparao de idade! Pense por que assim.

3.6 Resumo do Captulo

Caro(a) aluno(a), este captulo foi uma excelente oportunidade para exercitarmos a linguagem de
programao.

3.7 Atividades Propostas

Agora hora de voc praticar um pouco sozinho(a)! A minha forte recomendao que voc faa
os exerccios sozinho(a), consultando os exemplos anteriores para ajud-lo(a). Somente depois da sua
tentativa, que voc deve conferir as respostas. Boa sorte!
1. Escreva um algoritmo que leia e imprima o nome e as duas notas de um aluno.
2. Escreva um comando que calcule a mdia das duas notas lidas no exerccio 3.1.1.
3. Escreva um comando que verifique se a mdia calculada no exerccio 3.1.2 maior ou igual a
7.0; se for, imprima uma frase dizendo que o aluno foi aprovado, caso contrrio, imprima uma
frase dizendo que foi reprovado.
4. Escreva um algoritmo que leia o nome e as duas notas de um aluno, calcule a mdia das notas
e imprima uma frase dizendo se ele foi aprovado (mdia maior ou igual a 7.0) ou reprovado.

Unisa | Educao a Distncia | www.unisa.br

51

Elisamara de Oliveira

5. Considere o trecho de algoritmo em PortuC:


se (B1)
C1;
seno se (B2)
se (B3)
C2;

C5;

seno
{
C3;
C4;
}

Em PortuC, no existe uma varivel do tipo lgico a qual se possa atribuir um valor verdadeiro ou falso. No entanto, o PortuC considera o valor 0 (zero) como sendo falso e qualquer
outro valor diferente de zero como sendo verdadeiro. Nos exerccios que se seguem, considere
que os valores de B1, B2 e B3 representam valores verdadeiros (diferentes de zero) ou falsos
(iguais a zero) e responda pergunta: quais comandos sero executados.
a) Se B1= Verdadeiro B2 =Verdadeiro e B3=Falso?
b) Se B1=Falso B2= Verdadeiro e B3= Falso?
c) Se B1=Falso B2=Verdadeiro e B3=Verdadeiro?
d) Quais os valores de B1, B2 e B3 para que somente o comando C5 seja executado?
6. Dado um conjunto de respostas sim ou no de vrias pessoas e seu sexo (F=feminino,
M=masculino), escreva comandos em PortuC para calcular:
a) o nmero de mulheres que responderam sim;
b) o nmero de homens que responderam no;
c) o nmero de mulheres e homens que responderam no.

52

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

7. Observe o algoritmo a seguir. Qual o valor de L aps a execuo deste algoritmo?


inteiro A, B, C;
real
X, Y;
inteiro L;
principal()
{
A = 0;
/* falso */
B = 1;
/* verdadeiro */
C = 0;
/* falso */
X = 1.5;
Y = 3.2;
se (C ou (X+Y>5) ou no(A e B))

L = 0;
seno
L = 1;

8. Escreva trechos de algoritmo em PortuC que ajudem o Instituto Brasileiro de Geografia e Estatstica (IBGE) a fazer o censo populacional de uma certa cidade. Sabendo-se que os seguintes dados foram pedidos aos cidados: SEXO (H= homem, M= mulher) e RENDA (nmero de
salrios-mnimos sm), os trechos de algoritmo devem fornecer:
a) o total de homens;
b) o total de mulheres;
c) o total de pessoas da classe C (at 4 sm), da classe B (at 20 sm) e da classe A (acima de 20 sm).
9. Fornecidos os dados das candidatas a modelo: ALTURA, PESO e IDADE, escreva um trecho de
algoritmo para verificar se os dados se enquadram nos seguintes limites:
ALTURA: de 1.70 a 1.85 m
PESO: de 48.0 a 60.0 kg
IDADE: de 17 a 21 anos
Se os dados da candidata corresponderem a esses limites, deve ser impressa uma frase dizendo
que ela foi aprovada; caso contrrio, que no foi aprovada.
10. Modifique o exerccio anterior para que uma frase seja impressa aps a verificao de cada
quesito, dizendo se a candidata foi aprovada ou no em cada um deles e uma frase final dizendo se foi aprovada ou no como modelo.

Unisa | Educao a Distncia | www.unisa.br

53

METODOLOGIA PARA A CONSTRUO


DE ALGORITMOS

Neste captulo, caro(a) aluno(a), voc aprender uma metodologia que facilitar o processo de desenvolvimento de solues algortmicas para os problemas que sero propostos para voc resolver. A
metodologia composta de uma sequncia de passos, cujo principal objetivo ajud-lo(la) a resolver
problemas dividindo-os por partes, diminuindo, assim, a sua complexidade. Como ficar bem claro logo
adiante, resolvendo cada parte do problema por vez, consegue-se chegar a solues completas e complexas a partir de solues simples, que j foram, muitas vezes, encontradas para diversos outros problemas semelhantes.
Voc conhecer os passos da metodologia e vrios exemplos prticos sero fornecidos de maneira
a familiariz-lo(la) com o mtodo. importante ressaltar que a metodologia um processo dinmico.
Voc pode estar num passo mais adiante e identificar uma varivel auxiliar e voltar aos passos anteriores
e alter-los, por exemplo. Portanto, no se detenha aos detalhes, pelo contrrio, sinta-se livre para criar
suas solues. O mtodo pretende ajud-lo(la) e no engess-lo(LA)! Vamos em frente!

4.1 Os Passos da Metodologia


Passo 1: Ler e entender o problema
importante ler e reler, pelo menos 3 vezes, o problema at que ele seja completamente compreendido. No adianta querer buscar a soluo de um problema que no esteja suficientemente esclarecido!
Passo 2: Listar todos os dados de entrada do problema
Um dado de entrada aquele que ser fornecido pelo usurio, ou seja, o dado que ser lido pelo
programa.
Passo 3: Listar todos os dados de sada do problema
Um dado de sada algo que ser produzido ou calculado pelo programa; tudo aquilo que deve
ser apenas impresso no deve ser considerado um dado de sada.

Unisa | Educao a Distncia | www.unisa.br

55

Elisamara de Oliveira

Passo 4: Listar todas as variveis auxiliares do programa


Uma varivel auxiliar identificada como aquela que necessria para o clculo de alguma varivel
de sada e no varivel de entrada. Por exemplo, num problema em que vrios nmeros sero lidos e
sua mdia deve ser calculada, o nmero uma varivel de entrada e a mdia uma varivel de sada,
mas como, para calcular a mdia, necessrio somar os nmeros e dividir a soma pela quantidade de
nmeros lidos, a soma e a quantidade de nmeros so variveis auxiliares do programa.
Assim, para identificar as variveis auxiliares, basta analisar cada uma das sadas e verificar se, dadas
as entradas, h necessidade de mais alguma varivel para facilitar o seu clculo.
Passo 5: Declarar todas as variveis do programa
Cada dado de entrada, cada dado de sada e cada varivel auxiliar geram uma varivel. As variveis
do programa devero ser uma para cada dado de entrada, uma para cada dado de sada e uma para cada
varivel auxiliar.
extremamente importante que o programador escolha nomes de variveis significativos, que
possam exprimir a funo da varivel. Por exemplo, uma varivel que receber a idade de uma pessoa
no deveria se chamar x, nem mesmo i seria bom, o ideal seria idade.
Passo 6: Inicializar as variveis do programa
H um conjunto de pequenas regras que pode nos ajudar a encontrar os valores iniciais de cada
varivel do programa, apesar de que nem todas as variveis precisam ter valores iniciais:
toda varivel de entrada inicializada com o comando leia;
todo contador e todo somador devem ser inicializados com 0 ( zero);
todo produto deve ser inicializado com 1 (um).
Passo 7: Escrever o cdigo para calcular cada uma das sadas do programa
Os principais problemas a serem solucionados, na maior parte das vezes, resumem-se no clculo
das sadas do programa. Portanto, neste passo, cada uma das sadas deve ser analisada individualmente
e sua soluo encontrada separadamente.
Passo 8: Imprimir os resultados do programa
Aqui, s devem ser impressos os resultados pedidos na especificao do problema.
Passo 9: Montar o algoritmo unindo os resultados dos passos 5 a 8
Os passos 5 a 8 tm a soluo do problema. A montagem do algoritmo/programa pode seguir um
esquema bsico, mas vai depender muito da lgica de cada problema. Portanto, o esquema a seguir

56

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

serve apenas de orientao. Cada problema deve, no entanto, ser analisado logicamente para chegar ao
seu algoritmo.
Ateno
/* Nome do Programa e o que ele faz */
<passo 5 declarar todas as variveis do programa>
principal()
{ <passo 6 inicializar as variveis do programa >
<passo 7 calcular cada uma das sadas do programa>

<passo 8 imprimir os resultados do programa>


imprima(Fim do programa);

Passo 10: Fazer o teste de mesa do programa a partir de diferentes valores iniciais
O teste de mesa consiste na execuo de todas as instrues do programa a partir de conjuntos
de valores iniciais. Os valores iniciais devem ser escolhidos de maneira que as condies de contorno
do problema sejam verificadas. Por exemplo, num programa que trabalhe com flags, deve ser testada a
condio em que o valor do flag seja fornecido como dado inicial; num programa que s leia nmeros
positivos, devem ser fornecidos nmeros negativos e zero; entre outras situaes possveis.

4.2 Soluo de Exerccios utilizando a Metodologia

A estratgia que utilizaremos nesta seo propor uma lista de exerccios e resolver alguns deles usando a metodologia, deixando outros para que voc, utilizando solues semelhantes, resolva-os
sozinho(a), ok? Ento, vamos l!

4.3 Resumo do Captulo

Neste captulo, caro(a) aluno(a), voc aprendeu uma metodologia que facilitar o processo de desenvolvimento de solues algortmicas para os problemas que sero propostos para voc resolver. A
metodologia composta de uma sequncia de passos, cujo principal objetivo ajud-lo a resolver problemas dividindo-os por partes, diminuindo, assim, a sua complexidade. Como ficar bem claro logo
adiante, resolvendo cada parte do problema por vez, consegue-se chegar a solues completas e complexas a partir de solues simples que j foram, muitas vezes, encontradas para diversos outros problemas semelhantes.
Voc conhecer os passos da metodologia e vrios exemplos prticos sero fornecidos de maneira
a familiariz-lo com o mtodo.

Unisa | Educao a Distncia | www.unisa.br

57

Elisamara de Oliveira

4.4 Atividades Propostas

1. Escreva um algoritmo em PortuC para calcular e imprimir a rea e o permetro de uma sala
retangular, sendo que os comprimentos das paredes (comprimento e largura) so fornecidos
pelo usurio.
2. Escreva um algoritmo em PortuC para calcular e imprimir a rea de uma esfera. O raio da esfera ser fornecido pelo usurio. Obs.: A = 3.14*R2.
3. Escreva um algoritmo em PortuC que calcule e imprima o valor em reais correspondente aos
dlares que um turista possui no cofre do hotel. O programa deve solicitar os seguintes dados:
quantidade de dlares guardada no cofre e cotao do dlar naquele dia.
4. Escreva um algoritmo em PortuC que leia um nmero e informe se ele par ou mpar.
5. Escreva um algoritmo em PortuC que leia 2 nmeros e diga qual deles o maior.
6. Escreva um algoritmo em PortuC que calcule e imprima a quantidade de tijolos iguais necessria para construir uma determinada parede. So dados de entrada do programa: dimenses
do tijolo (comprimento e largura) e dimenses da parede a ser construda (comprimento e
largura).
7. Escreva um algoritmo em PortuC que calcule S, o alcance de um projtil, dados a velocidade
inicial v0 e o ngulo entre o cano do canho e o solo. O valor de g corresponde gravidade
que de 9.8 m/s2. A frmula a ser utilizada :

8. Escreva um algoritmo em PortuC que calcule a rea A de um tringulo pela frmula de Hero,
lendo os valores de entrada s, que o semipermetro, e a, b e c, que so os lados do tringulo:

9. Escreva um algoritmo em PortuC para calcular o valor do desconto, sendo que o preo do
produto fornecido pelo usurio e o desconto de 5%. Apresentar o preo do produto, o valor
do desconto e o preo final com o desconto.

58

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

10. Escreva um algoritmo em PortuC para calcular e imprimir qual foi a porcentagem de desconto
dada em um determinado produto, sabendo-se o preo original do produto e o preo que foi
cobrado por ele depois do desconto sero fornecidos pelo usurio.
11. Escreva um algoritmo em PortuC que receba dois valores inteiros nas variveis A e B. O programa deve trocar os valores entre as variveis (ou seja, ao trmino do programa, a varivel A deve
ter o valor inicial de B e vice-versa). Apresentar as duas variveis no final.
12. Escreva um algoritmo em PortuC para calcular e imprimir o valor a ser pago pelo perodo de estacionamento do automvel. O usurio entra com os seguintes dados: hora e minuto de entrada, hora e minuto de sada. Sabe-se que esse estacionamento cobra R$ 10,00 por hora ou frao.
13. Escreva um algoritmo em PortuC que leia o valor de uma conta de luz e, caso o valor seja
maior que R$ 50,00, apresente a mensagem: Voc est gastando muito. Caso contrrio, exiba
a mensagem: Seu gasto foi normal, parabns.
14. Escreva um algoritmo em PortuC que receba a leitura do termmetro. Caso a temperatura
esteja abaixo de 100 C, apresentar a mensagem de que a temperatura est muito baixa. Caso
a temperatura esteja entre 100 e 200 C, apresentar a mensagem de que a temperatura est
baixa. Caso a temperatura esteja acima de 200 C e inferior a 500 C, apresentar a mensagem de
que a temperatura est normal. Caso contrrio, apresentar a mensagem de que a temperatura
est muito alta.
15. Escreva um algoritmo em PortuC que leia o valor do salrio atual, calcule e imprima o valor
do novo salrio de um funcionrio. Considere que o funcionrio dever receber um reajuste de
15% caso seu salrio seja menor que R$ 500.00. Se o salrio for maior ou igual a 500, mas menor
ou igual a R$ 1000.00, o reajuste deve ser de 10%. Caso o salrio seja maior que R$ 1000.00, o
reajuste deve ser de 5%.
16. Escreva um algoritmo em PortuC que determine quanto ser gasto para encher o tanque de
um carro, sabendo-se que o preo da gasolina R$ 2.60 e o preo do lcool R$ 1.80. O usurio
fornecer os seguintes dados: tipo de carro (as opes como tipo de carro so a letra G gasolina ou a letra A lcool; rejeitar valores invlidos) e capacidade do tanque em litros.

Unisa | Educao a Distncia | www.unisa.br

59

A LINGUAGEM DE PROGRAMAO C

Neste captulo, voc, caro(a) aluno(a), poder comear a traduzir seus primeiros algoritmos para a
linguagem de programao C. Isso o(a) capacitar a realizar as primeiras aulas prticas em laboratrio.
Recomenda-se que voc prepare em seu computador um ambiente adequado programao em C e
comece a trabalhar sozinho(a), fazendo os programas da lista 4.1 como atividades extraclasse. O interessante em se utilizar o PortuC como pseudolinguagem que ele segue quase totalmente as mesmas
regras da linguagem C. Assim, comear a programar em C ser muito fcil, voc ver!

5.1 Tipos Bsicos e Declarao de Variveis em C

Saiba mais
Um identificador em C formado por caracteres alfanumricos.
O primeiro caractere tem que ser _ ou uma letra; os outros caracteres podem ser:
letras: A-Z, a-z;
dgitos: 0-9;
sublinhado: _ .
No pode haver dois identificadores iguais.
Letras minsculas e letras maisculas so diferentes.
Os identificadores no podem ser acentuados.
No pode haver espao em branco num identificador.
O caractere no pode ser usado num identificador.
Um identificador no pode ter o mesmo nome das palavras reservadas do C (como main, if, else, int, char).
Na linguagem C, h 5 tipos bsicos (int, float, double, char e void) e quatro modificadores de tipos (long, short, signed
e unsigned), o que amplia muito os tipos de variveis, mas, neste curso, usaremos apenas 3 tipos bsicos:
int;
float;
char.
O tipo de dados double (%Lf ) corresponde ao float, mas com maior capacidade de armazenamento.
Para se declarar uma varivel, escreve-se o nome de seu tipo, salta-se um espao em branco, em seguida o nome do
seu identificador e ponto e vrgula para finalizar a declarao.
Se mais de uma varivel for do mesmo tipo bsico, elas podem ser declaradas juntas, apenas separadas por vrgulas.
Pode-se inicializar uma varivel na sua declarao atribuindo-se a ela um valor inicial compatvel com
seu tipo.
Toda varivel precisa ser declarada antes de ser utilizada.
No pode haver duas variveis com mesmo nome, mesmo que tenham tipos bsicos diferentes, a menos que algum
caractere maisculo ou minsculo as diferencie.

Unisa | Educao a Distncia | www.unisa.br

61

Elisamara de Oliveira

Exemplo de declarao de variveis vlida:


char nome[20], letra, zero=0;
float soma=0;
int n1, n2;
float raiz1, Total_dos_Salarios;
char nome_de_familia[30]=Menezes;
int idade, cont=0;

5.2 Operadores de Atribuio, Aritmticos, Relacionais e Lgicos (Binrios) em C

Ateno
O operador de atribuio : = .
H os operadores de atribuio compostos:
+=
-=
*=
/=
Os operadores aritmticos bsicos so:
+ (adio);
- (subtrao);
* (multiplicao);
/ (quociente da diviso real);
++ ( adiciona 1);
-- (subtrai 1).
Alguns operadores aritmticos mais avanados so:
% (resto da diviso inteira);
/ (quociente da diviso inteira);
sqrt( ) (raiz quadrada);
abs( ) (valor absoluto).
Os operadores relacionais so:
> (maior que);
>= (maior ou igual a);
< (menor que);
<= (menor ou igual a);
== (igual a);
!= (diferente de).
Os operadores lgicos so:
&& (operador e conjuno);
|| (operador ou disjuno);
! (operador no negao).

62

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Funcionamento dos operadores lgicos em C


Operador lgico

Ao

&&
(e)

Avalia como 1 (verdadeiro) se ambas as expresses forem verdadeiras,


caso contrrio, avalia como 0 (falso).

||
(ou)

Avalia como 1 (verdadeiro) se pelo menos uma expresso for verdadeira, caso contrrio, avalia como 0 (falso).

!
(no)

Avalia como 1 (verdadeiro) se a expresso for falsa e 0 (falso) se a expresso for verdadeira, ou seja, troca verdadeiro por falso e vice-versa.

Expresses conectadas por operadores lgicos so avaliadas da esquerda para a direita, to


logo a veracidade ou falsidade do resultado for reconhecida.
Saiba mais
Na linguagem C, em qualquer expresso que se espere um valor lgico, o resultado ser:
falso se o valor for 0;
verdadeiro para qualquer outro valor (1 ou qualquer nmero positivo ou negativo ou qualquer expresso vlida da
linguagem).

Exemplos:
(5 > 2) && (3 != 2)
(3 >= 2) || (4 == 2)
(3 <= 2) || (4==2)
! (4==2)
! (4>3)

/* avalia como 1 (verdadeiro) */


/* avalia como 1 (verdadeiro) */
/* avalia como 0 (falso) */
/* avalia como 1 (verdadeiro) */
/* avalia como 0 (falso) */

Exemplos de expresses lgicas e relacionais vlidas:


if
if
if
if
if
if
if
if
if

(altura > 1.80 && idade < 21 &&


(idade >= 13 && idade <=20)
((media >= 7.0 && faltas <= 18)
!(numero % 2 == 0)
(resposta == S)
(resposta == S || resposta ==
(resposta != S && resposta !=
(sexo == F && altura <= 1.50)
(cont=0 && soma !=0)

escolaridade >= 2)
|| foidispensado == 1)

s)
s)

(muito cuidado com este tipo de expresso: cont=0 uma atribuio e no uma
comparao, mas em C pode-se fazer atribuio num comando if!)

Unisa | Educao a Distncia | www.unisa.br

63

Elisamara de Oliveira

Exemplos de expresses lgicas e relacionais INVLIDAS:


if (altura > 1.80 && || idade < 21)

(os operadores && e || so binrios, envolvem sempre 2 operandos, portanto


no podem ser utilizados juntos)
if (idade >=13 && <= 20)
(o operando idade deveria ser repetido para se obter o resultado lgico da comparao)
if (resposta ! = S)
(o smbolo do operador diferente est errado: no pode haver espao em branco
entre o ! e o =)
if (altura < = 1.50)
(o smbolo do operador menor que est errado: no pode haver espao em branco entre o < e o =)
resposta == S
(faltaram parnteses delimitando a expresso)

Exemplos de expresses aritmticas vlidas:


resto = 10 % 3;
quociente = 10 / 3;
salario = ((totaldehoras*32.50)+102.00) - descontoinss;
valoremdolares = salario / 2.55;
impostoderenda = salario * 0.20;
ok = (achou=1) && (resposta=s);
strcat (nome,da silva); // concatenao de strings
contador = contador +1;
++contador;
contador += 2;
// equivale a contador = contador + 2;
--valor;
valor -= 5;

// equivale a valor = valor 5;
Soma += Valor;
// equivale a Soma = Soma + Valor;
x1 = -b + sqrt(teta) / (2*A);
// a funo sqrt() est na biblioteca
<math.h>

64

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Exemplos de expresses aritmticas INVLIDAS:


resto = 10.0 % 3;

(o operador % s pode envolver nmeros inteiros)


salario = totaldehoras *+ 32.50;

(os operadores * e + so didicos, envolvem sempre dois operadores, portanto no


podem ser utilizados juntos)

valoremdolares = salario / 2,55;

(no existe vrgula decimal, o separador sempre o ponto)

Nome = Nome + da Silva;

(em variveis do tipo string a manipulao feita atravs de funes. As funes


esto na biblioteca <string.h>)

Contador =

*1;

(o operador * didico, tem que envolver dois operandos)

5.3 Comando Condicional em C (if)

Ateno
A sintaxe do comando condicional :
if (condio)
{
<bloco de comandos 1>
}
else
{
<bloco de comandos 2>
}
A semntica (como funciona) do comando condicional if :
a <condio> avaliada como VERDADEIRA (valor diferente de zero) ou FALSA (valor igual a zero);
se a <condio> for VERDADEIRA, o <bloco de comandos 1> executado e o comando condicional finalizado;
se a <condio> for FALSA, o <bloco de comandos 2> executado e o comando condicional finalizado.
else clusula do comando if, ou seja, no comando, apenas faz parte do comando if.
A clusula else pode no existir num comando if. Nesse caso (no existe a clusula else), quando a <condio>
avaliada como FALSA, nenhum comando executado e o comando if finalizado.
Os delimitadores de { e } so obrigatrios quando existe mais de um comando no <bloco de comandos 1> ou
mais de um comando no <bloco de comandos 2>. Quando existir apenas um comando, os delimitadores
ficam opcionais.

Unisa | Educao a Distncia | www.unisa.br

65

Elisamara de Oliveira

Exemplos de comandos condicionais vlidos:


if (media >= 7.0)
aprovado = 1;
if (media >= 7.0)
{ aprovado = 1;
}
if (media >= 7.0)
{
aprovado = 1;
++contadoraprovados;
}
if (media >= 7.0)
{ aprovado = 1;
++contadoraprovados;
}
else
aprovado = 0;
if (media >= 7.0)
aprovado = 1;
else
aprovado = 0;
if (media >= 7.0 && faltas <= 9)
{ aprovado = 1;
++contadoraprovados;
}
else
{ aprovado = 0;
++contadorreprovados;
}
if (numero % 2 == 0)
++contapar;
else
++contaimpar;
if (numero > 0)
printf(\nNumero
else if (numero
printf(\nNumero
else
printf(\nNumero

66

positivo);
< 0)
negativo);
zero);

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Exemplos de comandos condicionais INVLIDOS:


if media >= 7.0
aprovado = 1;

(faltou colocar parnteses na condio)

if (media >= 7.0)


{
aprovado = 1;
++contadoraprovados;

if (media >= 7.0)


aprovado = 1
else
aprovado = 0;

(faltou colocar o delimitador de fim { no final do comando )

(faltou ; depois do comando aprovado = 1)

if media >= 7.0


aprovado = 1;
++contadoraprovados;
else
{ aprovado = 0;
++contadorreprovados;
}

(faltou colocar parnteses na condio e delimitadores de incio e fim { } antes do else)

if (numero % 2 == 0);
++contapar;
else
++contaimpar;

(no pode-se colocar ; depois da condio do comando if, pois o ; finaliza o comando)

Unisa | Educao a Distncia | www.unisa.br

67

Elisamara de Oliveira

5.4 Comando de Seleo Mltipla em C (switch)

Ateno
Comando de seleo mltipla que testa sucessivamente o valor de uma expresso contra uma lista de valores do
tipo inteiro ou de caracteres. Quando o valor coincide, os comandos associados quele valor so executados. A
sintaxe do comando de seleo mltipla switch :
switch (expresso)
{ case valor1:
<comandos_1>;
break;

case valor2:
<comandos_2>;
break;
...

case valorn:
<comandos_n>;
break;

default:

comandos_default;
}
A expresso deve resultar num valor inteiro do tipo long, int ou char. Compara-se esse resultado com o
valor1 at valorn:
se for encontrada alguma equivalncia, o programa passa a executar os comandos a partir deste ponto, at
encontrar uma instruo break;
se nenhuma equivalncia for encontrada, os comandos relativos a default so executados;
caso no haja a opo default, nenhum comando executado;
caso a instruo break no seja encontrada, todos os comandos vo sendo executados at se chegar ao final
do comando switch.

Exemplos de comandos de seleo mltipla vlidos:

68

switch (sexo)
{
case f:
case F:

printf(\nVoce eh do sexo feminino);
break;

case m:
case M:

printf(\nVoce eh do sexo masculino);
break;

default:

printf(\nValor de sexo invalido.);
}

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

para maisculo
{

letra = toupper(letra);

// toupper transforma o caractere

switch (letra)

case A:
case E:

case I:
case O:

case U:

printf(\n Voce digitou uma vogal);
break;

default:

printf(\n Voce digitou algo diferente de uma vogal);
}

printf(\nDigite o numero do dia da semana (1-7): );


scanf(%i,&dia);
switch(dia)
{
case 1: printf(\n1-Domingo - Sunday);

break;
case 2: printf(\n2-Segunda-feira - Monday);

break;
case 3: printf(\n3-Terca-feira - Tuesday);

break;
case 4: printf(\n4-Quarta-feira - Wednesday);

break;
case 5: printf(\n5-Quinta-feira - Thursday);

break;
case 6: printf(\n6-Sexta-feira - Friday);

break;
case 7: printf(\n7-Sabado - Saturday);

break;

default: printf(\nDia da semana invalido.);

}// switch

Unisa | Educao a Distncia | www.unisa.br

69

Elisamara de Oliveira

switch (voto)
{ case 1: printf(\n Voce votou no candidato 1);
++cont1;
break;
case 2: printf(\n Voce votou no candidato 2);
++cont2;
break;

case 3: printf(\n Voce votou no candidato 3);
++cont3;
break;
default:

printf(\n Voto invalido);
}

Exemplos de comandos de seleo mltipla INVLIDOS ou ERRADOS:



printf(\nQual eh a temperatura do seu corpo? );

scanf(%f,&temp);
switch (temp)

{ case 36.0:
case 36.5: printf(\nVoce no tem febre. Temperatura normal.);
break;
case 37.0:
case 37.5: printf(\nVoce esta levemente febril.);
break;
default: if (temp > 37.5)
printf(\nVoce esta febril. Procure um medico);
else
printf(\nEsta temperatura esta fora dos valores normais);
}

(o comando switch no aceita valores do tipo real!!! Este comando totalmente invlido)

switch (sexo)
{

case f:
case F:

printf(\nVoce eh do sexo feminino);

case m:
case M:

printf(\nVoce eh do sexo masculino);

default:
printf(\nSexo invalido.);
}

(falta o comando break dentro dos cases, ento todos os printf sero executados)

70

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

5.5 Comando de Repetio em C (while)

Ateno
A sintaxe do comando de repetio while :
while (condio)
{
<bloco de comandos>
}
A semntica (como funciona) do comando de repetio while :
a condio avaliada como VERDADEIRA (diferente de zero) ou FALSA (igual a zero);
se a condio for VERDADEIRA, o <bloco de comandos> executado e, ao chegar ao delimitador de fim } ou final
do comando, automaticamente se retorna avaliao da condio;
se a condio for FALSA, o comando de repetio finalizado.
Entre os comandos do <bloco de comandos>, ESSENCIAL que exista um comando que altere a <condio> que
constantemente avaliada, pois, caso contrrio, o comando enquanto NUNCA TERMINAR!
Caso haja um comando break; dentro do comando while, este finaliza imediatamente o comando while quando for executado.
Os delimitadores { e } so obrigatrios quando existe mais de um comando no <bloco de comandos>. Quando
existir apenas um comando, os delimitadores ficam opcionais e o ; funcionar como delimitador de fim,
indicando o final do comando while.

Exemplos de comandos de repetio vlidos:


contador=0;
while (contador < 3)

++contador;
numero = 1;
while (numero <= 100)
{ if (numero % 2 == 0)
++contapar;
else
++contaimpar;
numero += 3;
}
numero = 1;
while (1)
{ if (numero % 2 == 0)
++contapar;
else
++contaimpar;
numero += 3;
if (numero >= 100)
break;
}

Unisa | Educao a Distncia | www.unisa.br

71

Elisamara de Oliveira

Exemplos de comandos de repetio INVLIDOS ou errados:


while

contador <= 10
++contador;

(faltaram parnteses na condio)

numero =1;
while (numero <= 100)
if (numero % 2 == 0)
++contapar;
else
++contaimpar;
numero += 3;

(como no existem os delimitadores de incio e fim { } do comando, somente o comando if faz parte do comando while e, como o comando if no altera a varivel
numero, que controla a condio, o comando while nunca vai parar!)

numero = 1;
while (numero <= 10);
{
numero += 3;
}

(como foi colocado ; aps a condio, o comando while foi finalizado, a varivel
numero no ser alterada e o comando while nunca vai parar!)

numero = 1;
while (1)
numero += 3;
if numero >= 10
break;

(como no foram colocados { } delimitando os comandos dentro do while, que foi


colocado em loop infinito de propsito, o comando break no ser executado e o
comando while nunca vai parar mesmo!)

5.6 Comando de Repetio em C (for)

O comando de repetio for permite que um comando ou um bloco de comandos seja executado
um nmero determinado de vezes. um comando de repetio, como os comandos while (j apresentado)
e do while (que no apresentaremos nesta apostila). A diferena entre eles que o comando for utiliza um
mecanismo de contagem automtica, dentro de um intervalo definido pelo usurio. muito til para controlar a leitura e a impresso de vetores e matrizes (estruturas que sero estudadas no futuro).

72

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Ateno
A sintaxe do comando de repetio for :
for (inicial; condio; incremento ou decremento)
{
<bloco de comandos>
}
As expresses inicial e incremento ou decremento so, em geral, atribuies varivel de controle e condio
uma expresso relacional que envolve a mesma varivel de controle.
A semntica do comando for :
A expresso inicial avaliada, consistindo geralmente na inicializao de uma varivel de controle;
Em seguida, avaliada a condio:
se a condio for verdadeira, o <bloco de comandos> executado e, ao chegar ao delimitador } ou final do
comando for, automaticamente se incrementa ou se decrementa a varivel de controle e se retorna avaliao da condio;
quando a condio ficar falsa, ou seja, o incremento/decremento fizer a varivel de controle chegar no limite
da condio, o comando de repetio finalizado.
Os delimitadores { e } so obrigatrios quando existe mais de um comando no <bloco de comandos>.
Quando existir apenas um comando, os delimitadores ficam opcionais e o ; funcionar como delimitador
de fim, indicando o final do comando for.

Informaes importantes sobre o comando for e exemplos de utilizao:



for (i=3; i<=5; i++)

printf(O valor de i eh: %i\n, i);
Nesse caso, i a varivel de controle; inicial corresponde a i=3; condio corresponde a i<=5; e incremento corresponde a somar 1 varivel de controle i++.
Pode-se omitir a expresso inicial, se esta j tiver sido avaliada anteriormente no programa,
porm o ponto e vrgula deve permanecer.

i=3;

for ( ; i<=5; i++)

printf(O valor de i eh: %d\n, i);
A expresso inicial pode ser qualquer expresso vlida em C.

i=3;

for (printf(comecou) ; i<=5 ; i++)

printf(O valor de i : %d\n, i);
Pode-se, tambm, omitir a expresso incremento ou decremento e avali-la no corpo da instruo for.

i=3;

for ( ;i <= 5; )
{
printf(O valor de i e: %d\n, i);
i++;
}
Unisa | Educao a Distncia | www.unisa.br

73

Elisamara de Oliveira

Note que, quando o corpo da instruo for consistir de mais de um comando, necessrio que
estes sejam colocados entre os delimitadores { }.
A expresso condio pode ser constituda por expresses conectadas por operadores lgicos.

for(i=0; (i<10 && aux!=0); i++)

{
printf(\n %d, aux);
--aux;
}

achou= i= 0;
for( ; (i<10 && achou==0); i++)
{
printf(\n Digite um inteiro: );
scanf(%i, &aux);
achou = (aux == -1);
}

Usando vrgulas, pode-se criar expresses constitudas de duas subexpresses, de forma a realizar duas tarefas. As subexpresses sero avaliadas da esquerda para a direita e toda a expresso ser avaliada como o valor da expresso da direita.

for(i=0, j=10; i<10; i++, j--)

printf(\n%d, %d, i, j);

A instruo for pode ser aninhada, ou seja, executada dentro de outra instruo for.

for(linha=0; linha<10; linha++)

{ for(coluna=0; coluna<10; coluna++)

printf(\n%d, matriz[linha][coluna]);

}
Podem-se omitir as trs expresses: inicial, condio e incremento:

for( ; ; )
Tendo-se, ento, um loop infinito, que pode, no entanto, ser interrompido dentro do corpo da instruo for por um comando break.

74

i=10;
for( ; ; )
{ if (i==0)
break;
--i;
}

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Exemplos de comandos for vlidos:


for

(i=10; i>0; i--)


printf(\nContador decrescente= %i,i);

i= soma = 0;
for ( ; i < 10; i++)
{
printf(\nDigite o valor da nota do aluno %i= ,i);
scanf(%f,&nota);
soma = soma + nota;
}

for (j=1; j<=1000; j++)


{
if (j % 2 == 0)
printf(\n %i eh par ,j);
else printf(\n %i eh impar ,j);
}

for (j=1; j<=1000; j++)


{
printf(\nDigite um numero negativo: );
scanf(%i,&n);
if (n>=0)
break;
else printf(\nValor absoluto de %i = %i, n, abs(n));
}
Exemplos de comandos for INVLIDOS:
for

(i=10; i<0; i--)


printf(\nContador decrescente= %i,i);

(o comando for no ser executado nenhuma vez, pois o valor inicial menor que o valor final
e i-- indica contagem decrescente)

for

(i=10; i>0; i--);


printf(\nContador decrescente= %i,i);

(o comando for no vai fazer nada, pois tem um ; indevido i-- ); que faz com que o for
finalize printf ser executado uma nica vez)

Unisa | Educao a Distncia | www.unisa.br

75

Elisamara de Oliveira

for (j=1; j<=1000; j--)


{
if (j % 2 == 0)
printf(\n %i eh par ,j);
else printf(\n %i eh impar ,j);
}

(o comando for no vai parar nunca, pois a condio nunca vai ser falsa; o certo seria usar
j++ e no j--)

5.7 Comandos de Leitura e Escrita em C

Ateno
Na linguagem C, h diversos comandos de leitura e cada um deles mais adequado aos diferentes tipos
bsicos.
Para a leitura de nmeros, o comando deve ser scanf.
Para a leitura de caractere nico, o melhor comando o getche().
Para a leitura de strings (cadeia de caracteres), o melhor comando gets().
A sintaxe dos comandos de entrada :
scanf(%letra, & varivel);
em que %letra representa os especificadores de formato e depende do tipo associado varivel: %d ou %i, para
variveis do tipo int, e %f, para variveis do tipo float.

76

varivel = getche();

para variveis do tipo char (nico)

gets(varivel);

para variveis do tipo char (string)

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

A tabela a seguir mostra um exemplo de declarao de variveis de tipos bsicos, a forma correta
de leitura e as bibliotecas do C a serem includas.
Declarao

Leitura

int numero;

scanf(%i, &nume- numero = -5;


ro);
numero = 2002;

stdio.h

float valor;

scanf(%f, &valor);

valor = -5.867;
valor = 2002.50;

stdio.h

c=getche();

c = 5;
c = s;
c = #;

conio.h

gets(nome);

Atribuio somente atraconio.h


vs de funo:
string.h
strcpy(nome, Ana);

char c;

char nome[20];

Exemplos de contedos

Biblioteca a ser includa

Saiba mais
A sintaxe dos comandos de sada :
printf(\n frase

%letra , <lista de variveis>);

puts(\n frase);
No comando printf, entre as aspas podem ser escritas somente frases ou frases formadas por palavras intercaladas
pelos especificadores de formato %s, %c, %i, %d ou %f, descritos nos comandos de leitura. Caso haja especificadores,
para cada especificador utilizado, a varivel do tipo correspondente deve constar da <lista de variveis>.
A lista de variveis opcional; deve existir somente quando um especificador de formato colocado na frase entre
aspas e, nesse caso, deve haver uma vrgula separando a frase da lista de variveis e vrgulas separando as variveis
da lista.
Os nmeros do tipo float podem ser impressos com formato, no comando printf, para evitar a forma cientfica, ou
seja, para serem impressos em forma estendida. A parte fracionria truncada caso haja mais casas fracionrias do
que a delimitada pelo formato, mas a parte inteira nunca truncada. Exemplos: %.2f (2 casas na parte fracionria),
%3.0f (no mnimo 3 casas na parte inteira, mas no ocorre truncamento nunca, e nenhuma casa na parte fracionria).
\n um cdigo de barra invertida que salta uma linha na tela. Pode ser usado em qualquer posio dentro das aspas
em ambos os comandos, puts e printf, e opcional.
O comando puts salta uma linha aps a impresso da frase, mesmo sem \n, e no imprime variveis.

Unisa | Educao a Distncia | www.unisa.br

77

Elisamara de Oliveira

Ateno
Explicao adicional Passo a passo do comando de impresso:
printf (frase varivel1 varivel2 varivel3);
(entre a frase e a varivel e entre as variveis deve haver uma vrgula separando-as)
printf (frase , varivel1, varivel2, varivel3);
(a frase deve vir entre aspas)
printf (\nfrase , varivel1, varivel2, varivel3);
(dentro da frase deve vir um formato para cada varivel, compatvel com o seu tipo bsico)
printf (\nfrase %s %i %f ,varivel1,varivel2,varivel3);
Exemplo:
printf (\nVc se chama %s, tem %i anos e %.2f metros de altura ,
nome, idade, altura);

Exemplos de comandos de entrada e sada vlidos:


puts (\nQual eh o seu nome? );

gets(nome);

printf (\nQual eh a sua idade? );


scanf (%i,&idade);
puts (\nQual eh a sua altura? );
scanf (%f,&altura);
puts (\nQual eh o seu sexo? (F/M) );
sexo=getche();
printf (\n%s, voce tem %i anos e\n %.2m de altura\n,
nome, idade, altura);
printf (\nVoc foi aprovado no curso com media= %2.1f,

media);

78

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

5.8 Comentrios em C

Os comentrios no pertencem s instrues do programa C, mas so teis para que o programador explique o que est sendo feito.
Saiba mais
Os comentrios podem vir delimitados entre
/* */
Ou podem ser comentrios de linha
//

Exemplos de comentrios:
/* Este trecho calcula a media de notas */
desc = preco*0.15; // calcula desconto de 15%

5.9 Bloco de Programa em C

Ateno
O Bloco de Programa em C tem a forma:
/* comentrios */
<incluso de bibliotecas>
<declarao de variveis>
void main()
{
<bloco de comandos>
}
Apesar de opcional, todo programa C deve comear com o nome do arquivo .c em um comentrio dizendo o que
o programa faz.
Em seguida, devem ser includas as bibliotecas .h, que sero utilizadas no programa, atravs da diretiva #include
< >.
Em seguida, devem ser declaradas todas as variveis que sero utilizadas no <bloco de comandos>.
Aps a declarao das variveis, deve-se escrever a palavra main( ) ou int main() ou void main(), que delimita a
seo em que os comandos podem ser utilizados.
O <bloco de comandos> pode conter todos os comandos vlidos em C, separados por ponto e vrgula, e estes
devem estar contidos entre os delimitadores { e }. Nenhum comando pode ser usado fora dessa seo, a no ser o
comando de atribuio para inicializar variveis na sua declarao.
importante notar que letras maisculas e minsculas alteram os identificadores e as palavras reservadas do C.
Alguns compiladores C no aceitam void main( ), mas int main() ou apenas main(). Nesses casos,
necessrio colocar o comando return 0; antes de finalizar o programa.

Unisa | Educao a Distncia | www.unisa.br

79

Elisamara de Oliveira

Exemplos de programas escritos em C vlidos:


/* nomesexo.c: le o nome e o sexo de uma pessoa e imprime uma frase
dizendo se masculino ou feminino */
#include <stdio.h>
#include <conio.h>
char nome[20], sexo;
int main ()
{
puts (Qual eh o seu nome? );
gets(nome);
printf (\nQual eh o seu sexo? (F/M) );
sexo=getche();
if (sexo == F || sexo == f)
printf (\n%s, voce eh do sexo feminino. ,nome);
else
printf (\n%s, voce eh do sexo masculino. ,nome);

puts(\n Fim do programa);


getch();
// para a tela
return 0;

/* switch.c - avalia o conhecimento do usurio */


#include <stdio.h>
#include <conio.h>
int opcao;
int main()
{
printf(\nTeste de avaliacao de conhecimento\n);
printf(\nPergunta: Em que ano o Brasil foi descoberto?);
printf(\n 1- Em 100 AC por Pitagoras);
printf(\n 2- Em 1492 por Cristovao Colombo);
printf(\n 3- Em 1500 por Pero Vaz de Caminha);
printf(\n 4- Em 1500 por Pedro Alvares Cabral);
printf(\n Qual a sua escolha? );
scanf(%d,&opcao);

80

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

switch(opcao)
{ case 1:

printf(\nVoce precisa ler mais sobre a historia grega !);

break;
case 2:

printf(\nEle chegou nos paises vizinhos...);

break;
case 3:
printf(\n Naturalmente voce eh um f da carta do descobrimento!);
break;
case 4:

printf(\n Resposta certissima !);

break;
default: printf(\nVoce nao escolheu nenhuma das alternativas validas.);
}
printf(\n Fim do programa );
getch();
return 0;
}

5.10 Funes teis em C

Caro(a) aluno(a), a linguagem C fornece uma srie de funes teis que pertencem a diferentes bibliotecas. Segue uma pequena lista das principais funes que voc poder usar quando se fizer necessrio.
Funes da biblioteca string.h:
strcat (destino, fonte);

anexa o string <fonte> ao string <destino>.

strcpy (destino, fonte);

copia o string <fonte> para o string <destino>.

strcmp (string1,string2);

compara o <string1> com o <string 2> pela ordem alfabtica (conforme tabela ASCii),
resultando em:
menor que 0: <string1> menor que <string2>;
igual a 0: <string1> igual a <string2>;
maior que 0: <string1> maior que <string2>.

Unisa | Educao a Distncia | www.unisa.br

81

Elisamara de Oliveira

strchr(string, caractere);

Verifica se o <caractere> se encontra na <string> e retorna posio da primeira ocorrncia do


<caractere> no <string>; se o <caractere> no for encontrado, retorna NULL.

tamanho = strlen(string);

Retorna o <tamanho> de uma <string> em nmero de caracteres.

strrev(string);

Retorna a <string> invertida, ou seja, os caracteres em ordem contrria.

strupr(string);

Retorna a <string> convertida para letras maisculas.

strlwr(string);

Retorna a <string> convertida para letras minsculas.

Funes da biblioteca ctype.h:


letra=toupper(letra);

Converte uma <letra> para maisculo.

letra=tolower(letra);

Converte uma <letra> para minsculo.

Funes da biblioteca conio.h


clrscr();

Limpa a tela.

textcolor(cor);

Muda a cor da letra.

textbackground(cor);

Muda a cor do fundo.

gotoxy(coluna, linha);

82

Posiciona o cursor nas coordenadas especificadas.

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Funes da biblioteca math.h


Trigonomtricas
sin()

Retorna o valor do seno. Recebe como argumento o valor dos graus em double.

cos()

Retorna o valor do cosseno. Recebe como argumento o valor dos graus em double.
tan()

Retorna o valor da tangente. Recebe como argumento o valor dos graus em double.
Logartmicas
log()

Retorna o valor do logaritmo na base 2. Exige um argumento do tipo double.

log10()

Retorna o valor do logaritmo na base 10. Exige um argumento do tipo double.

Potenciao
pow()

Retorna o valor da base elevada ao expoente. Recebe dois argumentos do tipo double:
o primeiro a base e o segundo o expoente. Por exemplo: se quisermos saber o resultado da operao 210, faramos pow (2, 10).
sqrt()

Retorna o valor da raiz quadrada. Recebe como argumento um double do qual ele
deve extrair a raiz.
Arredondamento
ceil()
Retorna o primeiro float sem casas decimais acima. Recebe um float como argumento. Exemplo: ceil (45.98561) resultaria em 46.
floor()

Retorna o primeiro float sem casas decimais abaixo. Recebe um float como argumento. Exemplo: floor (45.98561) resultaria em 45.

Unisa | Educao a Distncia | www.unisa.br

83

Elisamara de Oliveira

Outras funes system


system(cls);

Limpa a tela.

system(pause);

Faz uma pausa ou para a tela.

system(color 0B);

Cor de fundo preta e letras azuis brilhantes.

5.11 Traduo de PortuC para a Linguagem C

Como voc viu, caro(a) aluno(a), aprender PortuC ajuda bastante a aprender C! Use a tabela a seguir
para ajud-lo(la) na traduo de comandos do PortuC para C!

Saiba mais
Comandos/Tipos

PortuC

Atribuio

inteiro

int

inteiro longo

long int

real

float

caractere

char

inteiro

%i ou %d

real

%f

caractere nico

%c

string

%s

inteiro longo

%ld

Condicional

se seno

if else

Seleo mltipla

escolha

switch

Leitura de caracteres

leia

getche()

Leitura de strings

leia

gets

Leitura de nmeros

leia

scanf

Escrita

imprima

printf

Escrita

imprima

puts

&&

ou

||

no

Tipos bsicos

Formatos

Operadores lgicos

84

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Caro(a) aluno(a), voc deve implementar todos os programas em C usando o compilador de sua
preferncia. No final da apostila, eu indico um compilador que fcil de ser encontrado na internet,
gratuito e fcil de usar (o compilador Dev C++).
/* sexo.c: le o nome e o sexo de uma pessoa e imprime uma frase
dizendo se masculino, feminino ou invalido */
caractere nome[20], sexo;
principal ( )
{
imprima (Qual eh o seu nome? );
leia(%s,nome);
imprima (Qual eh o seu sexo? (f/m) );
leia (%c,sexo);

se (sexo == f ou sexo == F)
imprima (%s voce eh do sexo feminino. ,nome);
seno se (sexo == m ou sexo == M)
imprima (%s voce eh do sexo masculino. ,nome);
seno imprima (Voce digitou um sexo invalido );
imprima(Fim do programa.);

/* sexo.c: le o nome e o sexo de uma pessoa e imprime uma frase


dizendo se masculino, feminino ou invalido */
#include <stdio.h>
#include <conio.h>
char nome[20], sexo;
int main()
{
puts (Qual eh o seu nome? );
gets(nome);
puts (\nQual eh o seu sexo? (f/m) );
sexo = getche();
if (sexo == f || sexo == F)
printf (\n%s voce eh do sexo feminino. ,nome);
else if (sexo == m || sexo == M)
printf (\n%s voce eh do sexo masculino. ,nome);
else printf (\nVoce digitou um sexo invalido );
puts(\nFim do programa.);
getch();

Unisa | Educao a Distncia | www.unisa.br

85

Elisamara de Oliveira

return 0;

/* idade.c: le o ano atual e o ano de nascimento de uma pessoa


e imprime uma frase dizendo qual eh a idade da pessoa */
inteiro anoatual, anonasc, idade;
principal()
{
imprima (Qual eh o ano atual? );
leia(%i,&anoatual);
imprima (Qual eh o seu ano de nascimento? );
leia (%i,&anonasc);

idade = anoatual anonasc;


imprima (Voce fez ou fara %i anos , idade);

imprima(Fim do programa.);

/* idade.c: le o ano atual e o ano de nascimento de uma pessoa


e imprime uma frase dizendo qual eh a idade da pessoa */
#include <stdio.h>
#include <conio.h>
int anoatual, anonasc, idade;
main()
{
printf (\nQual eh o ano atual? );
scanf(%i,&anoatual);
printf (\nQual eh o seu ano de nascimento? );
scanf (%i,&anonasc);
idade = anoatual anonasc;
printf (\nVoce fez ou fara

86

%i anos , idade);

puts(\nFim do programa.);
getch();
return 0;

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

/* parimpar.c: le um numero e verifica se ele eh par ou impar */


inteiro n;
principal()
{
imprima (\nDigite um numero inteiro: );
leia (%i,&n);

se (n % 2 == 0)

imprima (O numero %i eh par , n);
seno
imprima (O numero %i eh impar , n);

imprima( Fim do programa.);

/* parimpar.c: le um numero e verifica se ele eh par ou impar */


#include <stdio.h>
#include <conio.h>
int n;
int main()
{
printf (\nDigite um numero inteiro: );
scanf(%i,&n);

if (n % 2 == 0)

printf (\nO numero %i eh par , n);
else
printf (\nO numero %i eh impar , n);

puts(\nFim do programa.);
getch();
return 0;

Unisa | Educao a Distncia | www.unisa.br

87

Elisamara de Oliveira

/* nota.c: le a nota de um aluno e verifica se ele foi aprovado ou reprovado */


real nota;
principal()
{
imprima (Digite sua nota final: );
scanf(%f,&nota);

se (nota >= 6.0)



imprima (Voce foi aprovado! );
seno
imprima (Voce foi reprovado... );

imprima( Fim do programa.);

/* nota.c: le a nota de um aluno e verifica se ele foi aprovado ou reprovado */


#include <stdio.h>
#include <conio.h>
float nota;
void main()
{
printf (\nDigite sua nota final: );
scanf(%f,&nota);
if (nota >= 6.0)

printf (\nVoce foi aprovado! );
else
printf (\nVoce foi reprovado... );

printf(\n Fim do programa.);
getch();
}

88

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

5.12 Resumo do Captulo

Neste captulo, caro(a) aluno(a), voc aprendeu uma metodologia que facilitar o processo de desenvolvimento de solues algortmicas para os problemas que sero propostos para voc resolver. A
metodologia composta de uma sequncia de passos, cujo principal objetivo ajud-lo a resolver problemas dividindo-os por partes, diminuindo, assim, a sua complexidade.

5.13 Atividades Propostas

1. Traduzir o algoritmo em PortuC para C:


/* Eleicoes.c: este programa computa os votos de uma eleio e divulga os
nmeros obtidos e o candidato vencedor.*/
inteiro

voto, vencedor, brancos, nulos, eleitores, cont1, cont2, cont3;

principal()
{ imprima (digite o seu voto (1,2,3 ou 0(branco) -1 finaliza): );
leia (%i,&voto);
brancos=nulos=eleitores=cont1=cont2=cont3=0;
enquanto (voto != -1)
{
++eleitores;
se (voto == 1)
++cont1;
seno se (voto == 2)
++cont2;
seno se (voto == 3)
++cont3;
seno se (voto == 0)
++brancos;
seno ++nulos;
imprima (digite o seu voto (1,2,3 ou 0(branco) 1 finaliza): );
leia (%i,&voto);
}
se ((cont1 > cont2) e (cont1 > cont3))
vencedor = 1;
seno se ((cont2 > cont1) e (cont2 > cont3))
vencedor = 2;
seno vencedor = 3;
imprima (o candidato vencedor foi: %i , vencedor);
imprima (numero de votos em branco: %i , brancos);
imprima (numero de votos nulos: %i ,nulos);
imprima (numero de eleitores: %i ,eleitores);
}

Unisa | Educao a Distncia | www.unisa.br

89

Elisamara de Oliveira

2. Crie uma nova verso do programa em C do exerccio 5.1.1 utilizando o comando switch no
lugar do ninho de comandos if.
3. Faa um programa em C que calcule e imprima o valor em reais correspondente aos dlares
que um turista possui no cofre do hotel. O programa deve solicitar os seguintes dados: quantidade de dlares guardada no cofre e cotao do dlar naquele dia.
4. Faa um programa em C para calcular e imprimir o valor a ser pago pelo perodo de estacionamento do automvel. O usurio entra com os seguintes dados: hora e minuto de entrada, hora
e minuto de sada. Sabe-se que esse estacionamento cobra R$ 10.00 por hora ou frao.
5. Faa um programa em C que leia o valor do salrio atual, calcule e imprima o valor do novo
salrio de um funcionrio. Considere que o funcionrio dever receber um reajuste de 15%
caso seu salrio seja menor que R$ 500.00. Se o salrio for maior ou igual a R$ 500, mas menor
ou igual a R$ 1000.00, o reajuste deve ser de 10%. Caso o salrio seja maior que R$ 1000.00, o
reajuste deve ser de 5%.
6. Faa um programa em C tendo como dados de entrada o preo de um produto e seu cdigo de
origem; apresente o preo e a sua procedncia, de acordo com a tabela a seguir:

90

Cdigo de Origem

Procedncia

Sul

Sudeste

Centro-Oeste

Norte

Nordeste

Unisa | Educao a Distncia | www.unisa.br

6 USANDO COMANDOS DE REPETIO EM C


6.1 Comando de Repetio Entrada Indeterminada de Dados (uso de flags)

Aqui voc vai aprender a usar o comando repetitivo e a resolver problemas que envolvam flags.
Flag vem do ingls e significa sinal ou bandeira. Um flag em programao representa um valor que usado para indicar o final da entrada de dados. Como j foi dito antes, um algoritmo usado para resolver
problemas finitos. Se algum pede que faamos um programa para ler uma quantidade indeterminada
de nmeros, aparentemente no poderamos escrever um algoritmo para resolv-lo, mas, se um flag
informado, a soluo se torna possvel: faa um programa para ler uma quantidade indeterminada de dados, sabendo-se que o ltimo valor ser -1. Veja bem: a quantidade de nmeros continua indeterminada,
isto , no sabemos se sero 5, 20, 2 ou 2000 nmeros, mas sabemos que o ltimo -1! Assim, -1 o flag
e os nmeros sero lidos at que seja fornecido o -1, quando o programa ir parar de ler os nmeros.
Vamos ver isso na prtica!
1. Escreva comandos para ler e imprimir vrios nmeros inteiros. O ltimo nmero 0 (flag=0).

importante que voc observe a lgica de um trecho de algoritmo que trabalha com flag. Antes de o
nmero n ser processado, necessrio verificar se ele o flag ou no. Por isso, feita uma leitura ANTES do incio do comando de repetio while. No entanto, necessrio que o nmero n seja lido novamente dentro do comando while para que a condio que determina a finalizao do comando
seja modificada (seno o comando while nunca para) e tambm para que a leitura indeterminada
de dados prossiga; essa nova leitura feita no FINAL do comando while!
No pretendo aqui dar uma receita de bolo para voc seguir, mas apenas chamar a sua ateno
para a lgica desse tipo de problema que poder ser utilizada, com certeza, em muitos outros problemas que envolvam o uso de flags.

Unisa | Educao a Distncia | www.unisa.br

91

Elisamara de Oliveira

2. Escreva comandos para ler e imprimir vrios nmeros inteiros e contar a quantidade de nmeros lidos. O ltimo nmero 0 (flag=0). Imprima, tambm, a quantidade de nmeros.

importante que voc observe a lgica para se contar a quantidade de nmeros fornecidos.
Quando o flag utilizado, sabe-se que a entrada de dados indeterminada. Quando se deseja
saber quantos valores vlidos foram fornecidos, necessrio usar um contador (neste algoritmo
o cont). O contador tem que ser inicializado com zero. Cada vez que uma repetio realizada (ou
seja, cada vez que o comando while executado), soma-se mais 1 ao contador. A impresso do
contedo do contador s pode ser feita aps o final do comando while, quando temos a certeza
de que a entrada de dados foi finalizada (ou seja, o flag foi fornecido).
3. Escreva comandos para ler e somar vrios nmeros inteiros. O ltimo nmero -1 (flag= -1).

92

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

4. Escreva comandos para ler e imprimir a idade e o nome de vrias pessoas (ltima idade=0).

Temos, neste exemplo, um caso em que h mais de uma varivel a ser lida e apenas uma dessas
variveis vai funcionar como flag. Nesse caso, a lgica tem que ser um pouco alterada: a varivel
que ser utilizada como flag deve ser lida ANTES do comeo do comando while e sua leitura deve
ser repetida DENTRO do comando imediatamente ANTES DO FINAL do comando while (observe
os comandos em destaque); todas as outras variveis devem ser lidas apenas uma vez, DENTRO do
comando while, bem no seu incio!

5. Escreva comandos para ler e imprimir a idade, o nome e a altura de vrias pessoas (ltima
idade=0). Crie uma forma alternativa.

Observe que, neste exemplo, o comando while no para nunca, pois a condio sempre 1, ou
seja, sempre verdadeira. Para finalizar o comando while, foi utilizado o comando break, ou
seja, quando o usurio digitar 0 para a idade, o comando while finalizado pelo break. Isso
pode ser feito, sim, sem problemas!

Unisa | Educao a Distncia | www.unisa.br

93

Elisamara de Oliveira

6.2 Comando de Repetio Entrada de Dados Determinada

Voc vai continuar usando um comando repetitivo, mas para resolver problemas que envolvam
contadores. Ao contrrio do que vimos na seo 6.1, em que entradas indeterminadas de dados foram
tratadas, aqui estudaremos os problemas cuja entrada de dados DETERMINADA. Se algum pede que
faamos um programa para ler um conjunto de 10 nmeros, seria necessrio que contssemos de 1 at
10 e, a cada contagem, lssemos um dos nmeros do conjunto para que, no final, todos os 10 valores
tivessem sido lidos. Esse tipo de problema requer o uso de contadores para facilitar a contagem dos dados de entrada. Existe um comando especfico para fazer essa contagem, que o comando for, embora
tambm possamos usar o comando while. Vamos ver isso na prtica!
6. Escreva comandos para ler e imprimir o nome de 5 pessoas.

Novamente, importante que voc observe a lgica de um trecho de programa que trabalha com entrada determinada de dados. Antes de o nome ser lido, necessrio zerar o contador cont. Da, utiliza-se o comando while, cuja condio exatamente o contador ser menor do que o nmero de dados
a serem lidos (cont < 5, neste caso). DENTRO do comando while feita, uma nica vez, a leitura do
nome, o nome impresso e somente no FINAL do comando while o contador incrementado de 1.

No entanto, este mesmo trecho pode ser escrito com um comando mais adequado, que o
comando for! Vejamos:

Percebeu como mais fcil? O comando for comea do zero e vai somando 1 varivel de controle cont at que cont fique igual a 5! DENTRO do comando for feita, uma nica vez, a
leitura do nome e o nome impresso.

94

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

7. Escreva comandos para ler e imprimir o nome, a idade e a altura de 10 pessoas.

Observe que, quando h mais de uma varivel a ser lida, todas elas devem ser lidas apenas uma
vez DENTRO do comando for. A contagem fica como antes. Fcil, no ?
8. Escreva comandos para pedir ao usurio o nmero de dados que ele deseja fornecer (N),
leia e imprima o nome e a quantidade que ele forneceu.

Note que a nica mudana na soluo deste tipo de problema a leitura da quantidade de dados
ANTES do comando for e a mudana na condio de finalizao para (cont < n).
9. Reescreva o trecho 8 usando while (1).

Unisa | Educao a Distncia | www.unisa.br

95

Elisamara de Oliveira

10. Reescreva o trecho 9 usando for ( ; ; ).

6.3 Exemplo dos Minutos Telefnicos

A empresa TELEFUN est interessada em saber qual foi o maior nmero de minutos gastos no ms
entre os assinantes e quantos assinantes atingiram esse valor. Faa um programa que leia os valores dos
minutos (o ltimo valor ser -1) e imprima os resultados desejados pela empresa.
Passo 1 (ler e entender o problema)
Certa companhia telefnica quer saber qual foi o maior nmero de minutos gastos num certo ms
e quantos assinantes empataram atingindo esse valor mximo. Por exemplo, se o conjunto de minutos
fornecido:
200, 150, 300, 200, 300, -1
O resultado seria: 300 foi o maior nmero de minutos e 2 assinantes atingiram o valor mximo.
Passo 2 (dados de entrada)
1. Valor dos minutos
Passo 3 (dados de sada)
1. Maior nmero de minutos
2. Quantos assinantes atingiram o maior nmero de minutos

96

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Passo 4 (variveis auxiliares)


No h variveis auxiliares a serem geradas
(para se chegar a essa concluso, o raciocnio foi o seguinte: para o clculo do maior nmero de minutos, necessrio apenas comparar o valor dos minutos dado de entrada com o maior valor de
minutos dado de sada , ou seja, no precisa de varivel auxiliar; para saber a quantidade de assinantes, somente o contador necessrio)
Passo 5 (declarar as variveis)

int minutos, maior minutos, quantos;

(uma varivel para cada entrada, sada e auxiliar: total de 3 variveis. Todas do tipo int.)
Passo 6 (inicializar as variveis)

printf(\nDigite o numero de minutos: );


scanf (%i,& minutos);

(varivel de entrada do tipo int: inicializada com scanf)


maiorminutos = 0;

(quando se deseja selecionar o maior valor, uma estratgia possvel considerar o primeiro valor lido como
sendo o maior ou ento como sendo zero e depois fazer a comparao dos outros valores com este)
quantos = 0;

(contador: inicializado com zero. Poderia ser inicializado na declarao tambm)


Passo 7 (clculo das sadas)
H apenas 2 variveis de sada, ento, dois trechos a serem construdos. Para se selecionar o maior nmero de minutos, necessrio compar-lo com o valor dos minutos que sero lidos. O comando a ser
utilizado o if.

Unisa | Educao a Distncia | www.unisa.br

97

Elisamara de Oliveira

if (minutos > maiorminutos)


{ maiorminutos = minutos;
quantos = 1;
}

No caso de essa comparao ser verdadeira, o maior valor dos minutos deve ser mudado: maiorminutos = minutos. Mas, ao se alterar o valor do maiorminutos, o contador de assinantes que o atingiram
deve ser retornado para 1, pois este seria o primeiro assinante que o utilizou: quantos = 1.
Resta, agora, contar a quantidade de assinantes que atingiram o valor mximo de minutos. Isso deve
ser feito atravs de outra comparao. Cada vez que o valor do maior nmero de minutos for encontrado novamente, deve-se somar 1 ao contador:
if (minutos == maiorminutos)
++quantos;

No entanto, esses 2 trechos devem ser unidos num nico comando if, pois no se deve somar +1 ao
contador quantos quando ocorre a troca do valor de maiorminutos, seno o contador ficaria sempre
com um 1 a mais. Para manter os dois trechos separados, o contador quantos teria que ser inicializado
com zero. Faa alguns testes voc mesmo(a) para entender melhor essa explicao.

if (minutos > maiorminutos)


{ maiorminutos = minutos;
quantos = 1;
}
else if (minutos == maiorminutos)
++quantos;

Passo 8 (impresso dos resultados)


if (maiorminutos !=0)
{
printf(\nO maior numero de minutos foi: %i , maiorminutos);
printf(\nAssinantes que atingiram o maior nro de minutos: %i,
quantos);
}
else printf (\nNenhum valor valido foi fornecido);

98

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Passo 9 (montagem do programa)


/* telefun.c: este programa l um conjunto de valores de minutos, seleciona o maior deles
e conta quantos assinantes atingiram este valor */
#include <stdio.h>
#include <conio.h>
int

minutos, maiorminutos=0, quantos=0;

int main()
{ printf(\nTelefun: quem fala mais ao telefone???\n);
while (1)
{
printf(\nDigite o numero de minutos (-1 finaliza): );
scanf(%i,&minutos);
if (minutos = -1)
break;
if (minutos > maiorminutos)
{ maiorminutos = minutos;
quantos = 1;
}
else if (minutos == maiorminutos)
++quantos;

}
if (maiorminutos !=0)
{ printf(\nO maior numero de minutos foi: %i , maiorminutos);
printf(\nAssinantes que atingiram o maior nro de minutos: %i, quantos);
}
else printf (\nNenhum valor valido foi fornecido);
printf(\nFim do programa);
getch();
return 0;

Passo 10 (fazer o teste de mesa do algoritmo)


Suponha os seguintes valores de entrada: 100, 50, 100, 150, 150, 10, 150 , -1
minutos

maior minutos

quantos

100

100

Resultados

50
100
150
150

2
150

1
2

10
150
-1

3
O maior nmero de minutos foi: 150
Nmero de assinantes que atingiram o maior
nmero de minutos: 3

Unisa | Educao a Distncia | www.unisa.br

99

Elisamara de Oliveira

Suponha o seguinte valor de entrada: -1


minutos

maiorminutos

quantos

Resultados

-1

Nenhum valor vlido foi fornecido

6.4 Exemplo do Preo Final de Automveis

O preo final de um automvel novo calculado da seguinte forma: ao preo de fbrica, so acrescidos 35% de IPI e sobre o preo j com o IPI acrescido 5% correspondente ao ICMS. Faa um programa
que leia o nome de vrios modelos de automveis (flag=FIM) e o seu preo de fbrica e calcule e imprima
o seu preo final.
Passo 1 (ler e entender o problema)
Suponhamos a seguinte entrada de dados:
BMW 70000.00
GOL

20000.00

FIM
O preo final do BMW seria assim calculado:
IPI

70000.00 x 0.35 = 24500.00

PRIPI 70000.00 + 24500.00=94500.00


FINAL

PRIPI x 1.05 = 99225.00

O preo final do GOL seria assim calculado:


IPI

20000.00 x 1.35 =

PRIPI 20000.00 + 7000.00=27000.00


FINAL PRIPI x 1.05 = 28350.00

100

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Passo 2 (dados de entrada)


1. Nome do modelo do automvel
2. Preo de fbrica do automvel
Passo 3 (dados de sada)
1. Preo final do automvel
Passo 4 (variveis auxiliares)
1. Valor do IPI
2. Preo do automvel com o IPI
(para se chegar a essa concluso, o raciocnio foi o seguinte: dado o preo de fbrica, primeiramente calcula-se o preo com o IPI numa varivel auxiliar; depois feito o clculo do preo do
carro com o valor do IPI, gerando duas variveis auxiliares)
Passo 5 (declarar as variveis)

char nome[20];
float prFabrica, IPI,

prIPI, prFinal;

(uma varivel para cada entrada, uma para cada sada, uma para cada auxiliar: total de 5 variveis)
Passo 6 (inicializar as variveis)

printf(\nForneca o nome do modelo do automovel: );


gets (nome);
printf(\nForneca o preco de fabrica do automovel: );
scanf (%f,&prFabrica);
(variveis de entrada: inicializadas com comandos de leitura)
(as outras variveis no precisam de valores iniciais, pois o IPI, o preo com o IPI e o preo final
sero calculados diretamente)

Unisa | Educao a Distncia | www.unisa.br

101

Elisamara de Oliveira

Passo 7 (escrever o cdigo para calcular as sadas)


H apenas uma varivel de sada, ento um trecho de algoritmo a ser construdo. Para se chegar
ao preo final, no entanto, primeiramente necessrio calcular o preo com o IPI.

IPI = prFabrica * 0.35;


prIPI = prFabrica + IPI;
prFinal = prIPI * 1.05;

Aqui so apresentadas 2 formas diferentes de se fazer o clculo de porcentagem. No caso do IPI, isso foi
feito em 2 passos: primeiramente, calcula-se o IPI e depois soma-se esse valor ao preo de fbrica para se
obter o preo com IPI. No caso do ICMS, foi feito um nico clculo multiplicando-se o preo com IPI por
1.05. Nesse caso, o valor 1 na parte inteira faz com que seja somado ao preo com IPI o valor do ICMS!
Passo 8 (impresso dos resultados)
printf(\nIPI= R$%.2f ICMS= R$%.2f,IPI,prIPI*0.05);
printf (\nO preco final do automovel %s= R$ %.2f ,
nome, prFinal);

102

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Passo 9 (montagem do algoritmo)


/* zerokm.C: este programa le o nome e o preco de fabrica de varios automoveis e
calcula seu preo final. */
#include
#include
#include
#include

<stdio.h>
<conio.h>
<string.h>
<stdlib.h>

char nome[20];
float prFabrica, IPI, prIPI, prFinal;
int main()
{ printf(\nOlha o tanto de imposto que pagamos nos carros!!!);
while (1)
{
printf(\nForneca o nome do modelo do automvel (FIM para terminar): );
gets (nome);
if (strcmp(nome,FIM)==0)
break;

printf(\nForneca o preco de fabrica do automovel: );


scanf (%f,&prFabrica);
IPI = prFabrica * 0.35;
prIPI = PrFabrica + IPI;
prFinal = prIPI * 1.05;
printf(\nIPI= R$%.2f ICMS= R$%.2f,IPI,prIPI*0.05);
printf (\nPreco final do automovel %s= R$ %.2f ,nome, prFinal);
fflsuh(stdin); //limpa o teclado para evitar erros na leitura de strings

puts (\nFim do programa);


getch();
return 0;

Passo 10 (fazer o teste de mesa do programa)


Suponha os seguintes valores de entrada:
FOX 30000.00
SCOOTER 10000.00
MILLE 12000.00
CIVIC 50000.00
FIM

Unisa | Educao a Distncia | www.unisa.br

103

Elisamara de Oliveira
nome

prFabrica

IPI

prIPI

prFinal

Resultados

FOX

30000.00

10500.00

40500.00

42525.00

IPI= R$ 10500.00 ICMS=2025.00


Preco final do automovel FOX= R$42525.00

SCOOTER

10000.00

3500.00

13500.00

14175.00

IPI= R$ 3500.00 ICMS=675.00


Preco final do automovel SCOOTER= R$14175.00

MILLE

12000.00

4200.00

16200.00

17010.00

IPI= R$ 4200.00 ICMS=810.00


Preco final do automovel MILLE= R$17010.00

CIVIC

50000.00

17500.00

67500.00

70875.00

IPI= R$ 17500.00 ICMS=3375.00


Preco final do automovel CIVIC= R$70875.00

FIM

Fim do programa

6.5 Exemplo da Eleio

Existem 3 candidatos a uma vaga no senado. Durante a eleio, os votos so computados eletronicamente atravs do seguinte cdigo:
1, 2, 3 votos para os candidatos 1, 2 e 3

0 voto em branco

0,1,2,3 voto nulo


-1 fim dos votos
Fazer um programa que compute os votos da eleio, fornea o nmero do candidato vencedor, a
quantidade de votos nulos e brancos e a quantidade de eleitores que participaram da eleio. Suponha
que no haver empates.
Passo 1 (ler e entender o problema)
Vamos simular a eleio e computar seus resultados. Esses foram os votos:
0,2,3,2,3,1,1,1,3,2,0,1,1,0,3,5,1,9,3,-1.
Votos do candidato 1: 6, votos do candidato 2: 3, votos do candidato 3: 5, votos em branco: 3, votos nulos: 2, total de eleitores: 19.
Resultados: Candidato vencedor: 1 Quantidade de votos brancos: 3
Quantidade de votos nulos: 2 Total de eleitores: 19
Passo 2 (dados de entrada)
1. Votos

104

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Passo 3 (dados de sada)


1. Candidato vencedor
2. Votos brancos
3. Votos nulos
4. Total de eleitores
Passo 4 (variveis auxiliares)
1. Contador de votos para o candidato 1
2. Contador de votos para o candidato 2
3. Contador de votos para o candidato 3
Passo 5 (declarar as variveis)
int
int
int

voto;
vencedor, brancos, nulos, eleitores;
cont1, cont2, cont3;

Passo 6 (inicializar as variveis)

printf(\nDigite o seu voto (1,2,3 ou 0(branco)): );


scanf (%i,&voto);

(varivel de entrada: inicializada com scanf)

brancos=nulos=eleitores=cont1=cont2=cont3=0;

(contadores: inicializados com zero. Em C, possvel inicializar vrias variveis com o mesmo valor
num nico comando de atribuio mltipla!)

Unisa | Educao a Distncia | www.unisa.br

105

Elisamara de Oliveira

Passo 7 (escrever o cdigo para calcular as sadas)


Para se saber quem foi o candidato vencedor, necessrio, primeiramente, computar os votos:
++eleitores;
if (voto == 1)
++cont1;
else if (voto == 2)
++cont2;
else if (voto == 3)
++cont3;
else if (voto == 0)
++brancos;
else ++nulos;

Existe outra maneira muito mais prtica de realizar essa comparao. Basta usar o comando de
seleo mltipla switch. Veja como fica a soluo.

++eleitores;
switch (voto)
{ case 0:
++brancos;
break;
case 1:
++cont1;
break;
case 2:
++cont2;
break;
case 3:
++cont3;
break;
default: ++nulos;
}

Note que os dois trechos de cdigo fazem exatamente a mesma coisa, mas de formas diferentes.
Escolha a que achar mais fcil.
Ao se computar os votos, as sadas 2, 3 e 4 foram obtidas; resta agora obter o candidato vencedor.

if ((cont1 > cont2) && (cont1 > cont3))


vencedor = 1;
else if ((cont2 > cont1) && (cont2 > cont3))
vencedor = 2;
else vencedor = 3;

106

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Passo 8 (impresso dos resultados)


printf(\nO candidato vencedor foi: %i , vencedor);
printf(\nNumero de votos em branco: %i ,brancos);
printf(\nNumero de votos nulos: %i ,nulos);
printf(\nNumero de eleitores: %i ,eleitores);

Passo 9 (montagem do programa)


/* Eleicoes.c: computa os votos de uma eleio e divulga os nmeros obtidos e
o candidato vencedor.*/
#include <stdio.h>
#include <conio.h>
int

voto, vencedor, brancos, nulos, eleitores, cont1, cont2, cont3;

int main ()
{ printf(\nEleicoes Ficha Limpa por um Brasil melhor!\n);
brancos=nulos=eleitores=cont1=cont2=cont3= 0;
while (1)
{
printf (\nDigite o seu voto (1,2,3 ou 0(branco) -1 finaliza): );
scanf (%i,&voto);
if (voto==-1)
break;
++eleitores;
switch (voto)

{ case 0: ++brancos;
break;

case 1: ++cont1;
break;

case 2: ++cont2;
break;

case 3: ++cont3;
break;

default: ++nulos;
}
}
if ((cont1 > cont2) && (cont1 > cont3))
vencedor = 1;
else if ((cont2 > cont1) && (cont2 > cont3))
vencedor = 2;
else vencedor = 3;
printf
printf
printf
printf

(\nO candidato vencedor foi: %d , vencedor);


(\nNumero de votos em branco: %d , brancos);
(\nNumero de votos nulos: %d ,nulos);
(\nNumero de eleitores: %d ,eleitores);

puts(\nFim do programa);
getch();
return 0;

Unisa | Educao a Distncia | www.unisa.br

107

Elisamara de Oliveira

Passo 10 (fazer o teste de mesa do algoritmo)


Suponha os seguintes valores de entrada: 1, 2, 2, 0, 2, 1, 3, -1

voto
1
2
2
0
2
1
3

cont1

cont2

cont3

brancos

nulos

0
1

1
2
1
3
2
1

-1

eleitores
0
1
2
3
4
5
6
7

vencedor

Resultados

O candidato vencedor foi: 2


Numero de votos em branco:
1
Numero de votos nulos: 0
Numero de eleitores: 7
Fim do programa

6.6 Exemplo da Srie Numrica

Escreva um programa que leia N e calcule e imprima o valor de S dado por:

Passo 1 (ler e entender o problema)


Vamos simular um determinado valor inicial de N = 5. A srie S resultante seria:

Passo 2 (dados de entrada)


1. Valor de N

108

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Passo 3 (dados de sada)


1. Valor de S
Passo 4 (variveis auxiliares)
1. Contador de termos
2. Numerador
3. Denominador
Passo 5 (declarar as variveis)

int N, cont, num, den;


float termo, S;

Passo 6 (inicializar as variveis)

printf(\nDigite a quantidade de termos da serie: );


scanf (%i,&N);

(varivel de entrada: inicializada com scanf)

S=cont=0;

(contadores e somadores: inicializados com zero. Em C, possvel inicializar vrias variveis com o
mesmo valor num nico comando de atribuio mltipla!)
num = 1;
den = N;

(o primeiro numerador comea com 1 e o primeiro denominador comea com N)

Unisa | Educao a Distncia | www.unisa.br

109

Elisamara de Oliveira

Passo 7 (escrever o cdigo para calcular as sadas)


Para se calcular a sada, necessrio gerar os N termos da srie. Cada termo formado pelo numerador dividido pelo denominador. O prximo numerador ganha 1 (soma 1) e o prximo denominador perde 1 (subtrai 1). Observe na soluo a converso para float do resultado de num/den (o
resultado seria inteiro pois envolve operandos inteiros).


for (cont=0; cont < N; cont++)

{
termo = (float) num / den;

printf(\n %i / %i , num, den);
S = S + termo;
++num;

--den;
}

Passo 8 (impresso dos resultados)

printf (\n\nO valor da serie S= %.5f \n, S);

110

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Passo 9 (montagem do programa)

/* ..........................................
serieS.c: Gera a serie S assim formada:

S = 1/N + 2/N-1 + ... + N/1
.............................................*/
#include <stdio.h>
#include <conio.h>
int
float

N, cont, num, den;


termo, S;

int main( )
{
printf(Gera a serie S \n);

printf(\nForneca o numero de termos da serie: );
scanf(%d,&N);
num = 1;
den = N;

for (cont=0; cont < N; cont++)

{
termo = (float) num / den;

printf(\n %i / %i , num, den);
S = S + termo;
++num;

--den;
}
printf (\n\nO valor da serie S= %.5f \n, S);
getch();
return 0;

Passo 10 (fazer o teste de mesa do algoritmo)


Suponha o seguinte valor de entrada: 4
N

cont

num

den

termo

Resultados

1/4

0 + 1/4

1/4

2/3

0 + 1/4 + 2/3

2/3

3/2

0 + 1/4 + 2/3 + 3/2

3/2

4/1

0 + 1/4 + 2/3 + 3/2 + 4/1

4/1
O valor da serie S= 6.41667

Unisa | Educao a Distncia | www.unisa.br

111

Elisamara de Oliveira

6.7 Resumo do Captulo

Caro(a) aluno(a), aprendemos a usar o comando repetitivo e a resolver problemas que envolvam
flags. Flag vem do ingls e significa sinal ou bandeira. Um flag em programao representa um valor
que usado para indicar o final da entrada de dados. Como j foi dito antes, um algoritmo usado para
resolver problemas finitos. Se algum pede que faamos um programa para ler uma quantidade indeterminada de nmeros..., aparentemente no poderamos escrever um algoritmo para resolv-lo.

6.8 Atividades Propostas

Vamos praticar um pouco mais agora. A minha forte recomendao, novamente, que voc faa os
exerccios sozinho(a), consultando os exemplos dados para ajud-lo(a). Somente depois da sua tentativa
que voc deve conferir as respostas. Boa sorte!
1. Escreva um programa em C que leia e imprima o nome e as duas notas de vrios alunos. O ltimo aluno ter o nome=FIM.
2. Escreva um programa em C que leia 10 nmeros, calcule e imprima a sua soma.
3. Escreva um programa em C que calcule e imprima N nmeros pares, comeando do zero. Pergunte ao usurio quantos nmeros ele deseja (ou seja, pea-lhe para fornecer o valor de N).
4. Quais os resultados produzidos pelo programa?

#include <stdio.h>
int
X, Y;
int main()
{
Y = 0;
X = -1;
while (Y != 4)
{
X = X * -1;
++Y;
if (X > 0) /* X positivo? */
printf(\n%i,Y);
else
printf(\n%i,-Y);
}
return 0;
}

112

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Para que seja possvel voc acompanhar a execuo do programa em C, vamos criar uma tabela
para fazer o chamado teste de mesa de um programa em C. A tabela deve ter uma coluna para cada
varivel e uma coluna especial para a impresso dos resultados. O programa em C deve ser seguido
comando a comando e os valores das variveis devem ser alterados de acordo com as instrues.
X

Resultados

5. Faa o teste de mesa do programa seguir e construa a tabela com os valores das variveis e os
resultados do programa.
#include <stdio.h>
int numero, cont;
main()
{
numero = 2;
for (cont=0; cont < 5; cont++)
{
printf(%i,numero);
printf(%i\n,-numero);
numero = numero + 2;
}
return 0;
}

numero

cont

Resultado

Unisa | Educao a Distncia | www.unisa.br

113

Elisamara de Oliveira

6. Fazer um programa que leia vrios valores de ngulos (flag=-1) e verifique a qual quadrante
pertence esse ngulo.

7. Fazer um programa que leia vrios pares de nmeros N1 e N2 (Flag=N1=0), calcule e imprima:
a) N1 * N2
b) N1 / N2
c) N1 - N2
d) N1 + N2
e) 10% de N1
f) 25% de N2
g) raiz quadrada de N1
h) raiz quadrada de N2
i) a unidade de N1
j) a dezena de N2
k) o resto da diviso inteira de N1 por N2
l) N1 elevado a 3
m) N2 elevado a 2
n) N1 elevado a N2
8. Fazer um programa para realizar uma pesquisa de opinio sobre um tema de sua escolha. Devem ser lidas a resposta 1-A favor 2- Contra ou 0-Finaliza e o sexo (1=feminino, 2=masculino)
dos participantes; calcular e imprimir:
a) o nmero de mulheres e o percentual;
b) o nmero de homens e o percentual;
c) nmero de votos a favor e percentual;
d) nmero de votos contra e percentual.

114

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

9. Fazer um programa para ler vrios pares de nmeros inteiros e calcular sua soma, subtrao,
multiplicao e diviso. Usar n1=0 como flag.
10. Fazer um programa que leia o NOME, a ALTURA, o PESO e a IDADE de vrios candidatas a modelo (flag=NOME=fim) e verifique se elas podem ser aprovadas ou no para serem modelos:
1.70 <= ALTURA <= 1.85
50 <= PESO <= 60
18 <= IDADE <= 21
11. Fazer um programa que leia o nmero de termos desejados e gere as sequncias numricas
(uma de cada vez, mas ambas no mesmo programa):
2, 4, 8, 16, 32, 64...
1, -1, 2, -2, 3, -3, 4, -4...
12. O preo final de um automvel calculado pelo preo de fbrica, mais o valor do IPI = 40%
sobre o preo de fbrica, mais a porcentagem da concessionria = 10% sobre o preo j com o
IPI. Faa um programa que leia o NOME de vrios modelos de automveis (flag=NOME=jegue)
e o preo de fbrica, calcule e imprima o seu preo final.
13. Faa um programa em C para calcular o valor a ser pago pelo perodo de estacionamento do
automvel. O usurio entra com os seguintes dados: hora e minuto de entrada, hora e minuto
de sada. Sabe-se que esse estacionamento cobra hora cheia, ou seja, se passar um minuto ele
cobra a hora inteira. O valor cobrado pelo estacionamento :
R$ 4,00 para 1 hora de estacionamento;
R$ 6,00 para 2 horas de estacionamento;
R$ 1,00 por hora adicional (acima de 2 horas).
14. Faa um programa que leia o cdigo de um livro (* finaliza) e apresente a categoria do livro,
conforme a tabela a seguir:
Cdigo do Livro

Categoria

Fico

Romance

Documentrio

Audiolivro

Tcnico

Unisa | Educao a Distncia | www.unisa.br

115

Elisamara de Oliveira

15. Fazer um programa que leia vrios pares de coordenadas X e Y (flag=X=1000) e verifique a qual
quadrante pertence esse ponto (X,Y). A seta indica o sentido positivo dos eixos.

16. Fazer um programa para calcular e imprimir o valor de H, dado pela seguinte srie:
H = 1 - 2 + 4 - 8 + 16 - ... + 16.384
225 196 169 144 121
1
17. Fazer um programa para calcular a mdia de um conjunto de nmeros inteiros (flag = -1).
18. Fazer um programa para calcular as razes de uma equao do 2 grau. Os valores dos coeficientes A, B e C sero fornecidos pelo usurio. Voc deve perguntar se o usurio deseja fornecer
outros dados at que ele responda N no.
19. Fazer um programa para gerar todos os nmeros potncia de 2 menores que 1000000 e todos
os nmeros mpares menores que 100. Dica: utilize o tipo bsico long int.
20. Fazer um programa para calcular o valor aproximado de p, utilizando os N primeiros termos (N
dever ser lido) da srie:
= 4 - 4 + 4 - 4 + 4 ...
3 5 7 9
21. Fazer um programa para ler uma sequncia de nmeros inteiros de 5 dgitos (flag = -1), calcular
o seu dgito verificador (DV) e imprimir o nmero lido e seu DV separado por um hfen. O DV
calculado somando-se os 5 dgitos do nmero, dividindo essa soma por 11 e obtendo o resto
dessa diviso inteira. Quando o DV for 10, deve-se imprimir X.
Exemplo:
Nmero lido: 12819

Nmero impresso: 12819 - X

116

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

22. Nmeros palndromos so aqueles que tm o mesmo valor se lidos da esquerda para a direita
ou da direita para a esquerda, como: 44, 232, 1001, 838 etc. Fazer um programa que leia vrios
nmeros inteiros de 4 dgitos (flag= -1) e imprima o nmero lido e uma frase dizendo se ele
palndromo ou no.
23. Fazer um programa para calcular o Imposto de Renda (IR) de um grupo de contribuintes, sabendo que:
a) devero ser lidos o CPF e a renda anual de cada contribuinte (ltimo contribuinte tem o CPF = 0);
b) o IR dever ser calculado de acordo com a tabela:
Renda Anual

Alquota para clculo do IR

at 5000,00

isento

de 5000,01 at 50000,00

10 %

acima de 50000,01

15 %

c) dever ser impressa uma frase com o CPF do contribuinte, sua renda anual e o valor do IR.
24. Fazer um programa que leia vrios conjuntos de dados com: o NOME de um produto, seu preo
de CUSTO, seu preo de VENDA e a QUANTIDADE vendida do produto (ltimo conjunto lido
tem NOME do produto=fim) e calcule o lucro obtido com o produto. No final, o programa
deve imprimir o NOME do produto que deu mais lucro.
25. Fazer um programa que leia vrios nmeros que representem um determinado nmero de
ms do ano (flag=-1), escreva o nome do ms por extenso e o nmero de dias. Se o ms no
existir, imprimir uma frase de erro.
26. Certo produto custa R$ 100,00 e concedido um desconto de 10% se a compra for acima de
10 unidades, 15% se for acima de 40 unidades e 25% se for acima de 100 unidades. Faa um
programa que leia a quantidade desejada por vrios clientes (flag=quantidade=0) e calcule e
imprima o preo sem desconto, o valor do desconto (se no houver desconto, imprima 0) e o
valor a ser pago com o desconto.
27. Faa um programa que leia a distncia em quilmetros percorrida por vrios carros (flag=0), a
quantidade de combustvel consumida e calcule e imprima o consumo mdio de combustvel
(consumo= distncia/combustvel).
28. Faa um programa que leia vrias temperaturas em graus Fahrenheit (flag=1000) e calcule e
imprima a temperatura em graus Celsius (Celsius = (Fahrenheit-32) * (5/9)).
29. Faa um programa que leia vrios pares de valores N1 e N2 (flag=N1=0), imprima uma frase
dizendo se eles so iguais, qual o maior e qual o menor e, aps terminar a leitura de todos
os nmeros, selecione e imprima o maior e o menor de todos.

Unisa | Educao a Distncia | www.unisa.br

117

Elisamara de Oliveira

30. Fazer um programa que leia vrios nmeros inteiros (flag=0) e verifique se o nmero primo
ou no. Um nmero primo s divisvel por 1 e por ele mesmo (sugesto: tente dividir o nmero por 2, 3, 4, 5... at o valor do nmero; se alguma diviso resultar em zero, ele no primo...).
31. Faa um programa que apresente o menu de livros venda numa livraria:
Cdigo do Livro

Ttulo

Preo

Informtica para Concursos

87,00

Java como Programar

219,00

Use a cabea: C#

99,00

finaliza

Para cada opo vlida de livro (rejeitar escolhas invlidas), oferecer as formas de pagamento.
Cdigo da forma de pagamento

Condio de pagamento

vista, com 10% de desconto

Em 2 vezes, preo normal de etiqueta sem juros

Imprimir todos os valores de acordo com a escolha do usurio. Rejeitar formas de pagamento
invlidas.
32. Faa um programa que leia o cdigo de um determinado produto (0 finaliza) e mostre a sua
classificao, utilizando a seguinte tabela:

118

Cdigo do Produto (CP)

Classificao

Alimento no perecvel

2, 3 ou 4

Alimento perecvel

5 ou 6

Vesturio

Higiene pessoal

8 ou 9

Limpeza e utenslios domsticos

Qualquer outro cdigo

Invlido

Unisa | Educao a Distncia | www.unisa.br

OUTROS PROGRAMAS EM C

/*CoresnoDevC.c: mostra como usar cores de texto e de fundo no DevC++ */


#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main()
{
system (cls); // limpa a tela
system (color 0B); // cor de fundo preta e letras azuis brilhantes
printf (\n\n\t\t\tTESTE: AZUL);
getch();
system (cls); // limpa a tela
system (color 4C); // cor de fundo vermelha e letras vermelhas brilhantes
printf (\n\n\t\t\tTESTE: VERMELHO);
getch();
system (cls); // limpa a tela
system (color 5D); // cor de fundo roxa e letras lilases brilhantes
printf (\n\n\t\t\tTESTE: LILAS);
getch();
system (cls); // limpa a tela
system (color 0E); // cor de fundo preta e letras amarelas brilhantes
printf (\n\n\t\t\tTESTE: AMARELO);
getch();

system (cls); // limpa a tela


system (color 1B); // cor de fundo azul e letras azuis claras
printf (\n\n\n);
system (color /? |more);
getch();

Unisa | Educao a Distncia | www.unisa.br

119

Elisamara de Oliveira

//for.c - ilustra o uso do comando for e de #define


#include <stdio.h>
#include <conio.h>
#define MAXINT 100
#define MAXLONG 1000000
#define clrscr(); system(cls);
int num, contnum;
long int numlong, quadrado;
int main()
{
clrscr();
printf(\n Sequencia de numeros impares menores que %i, MAXINT);
printf(\n =============================================\n\n);
for (num=1; num<=MAXINT; num=num+2)
{
printf(%i\t,num);
}
getch();
clrscr();
printf(\n Sequencia de numeros pares menores que %i,MAXINT);
printf(\n ===========================================\n\n);
contnum=1;
num=0;
for (; num<=MAXINT; num+=2)
{ printf(%i\t,num);
if (contnum==20)
{ getch();
contnum=0;
}
++contnum;
}
clrscr();
printf(\n Sequencia de numeros multiplos de 3 menores que %i,MAXINT);
printf(\n ====================================================\n\n);
contnum=1;
num=3;
for ( ; ; )
{ printf(%i\t,num);
num=num+3;
if (num > MAXINT)
break;
}

120

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

getch();
clrscr();
printf(\n Sequencia de numeros potencia de 2 menores que %ld,MAXLONG);
printf(\n ======================================================\n\n);
for (numlong=2; numlong<=MAXLONG; numlong=numlong*2)
{ printf(%ld\t,numlong);
}
getch();
clrscr();
printf(\n Sequencia de quadrados perfeitos menores que %ld,MAXLONG);
printf(\n ====================================================\n\n);
quadrado=1;
for (numlong=1; quadrado<=MAXLONG; numlong++)
{ quadrado=numlong*numlong;
printf(%ld\t,quadrado);
}
getch();
printf (\n\n\n\n
getch();
return 0;

Fim do programa);

/*Multiplos3.c: gera multiplos de 3 menores que 500 */


#include <stdio.h>
#include <conio.h>
int num, contnum;
int main()
{
printf(\n Sequencia de numeros multiplos de 3 menores que 500);
printf(\n ========================================\n\n);
contnum=0;
num=3;
while (num<500)
{
printf(%i\t,num);

num = num + 3;
if (contnum==20)

{ getch();
contnum=0;

}

++contnum;
}

Unisa | Educao a Distncia | www.unisa.br

121

Elisamara de Oliveira

printf (\n\n\n\n Fim do programa);


getch();
return 0;
}
/*Compara.c: mostra como se apresenta um menu e se comparam
meros */
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
char str1[20], str2[20];
int num1, num2, opcao;

strings e nu-

int main()
{
while ( 1 )
{ printf(\n 1- Compara strings );
printf(\n 2- Compara numeros );
printf(\n 0- Finaliza );
printf(\n\n Escolha sua opcao: );
scanf (%i, &opcao);
if (opcao == 0)
{
printf (\n Bye, bye!

getch();

break;
}

Pressione ENTER...);

switch (opcao)
{ case 1:

printf (\n Forneca o primeiro nome: );
gets(str1);

printf (\n Forneca o segundo nome: );
gets(str2);

if (strcmp(str1,str2) > 0)

printf (\n %s vem depois de %s , str1, str2);

else if (strcmp(str1,str2) < 0)

printf (\n %s vem antes de %s , str1, str2);

else printf (\n Os nomes so iguais.);
getch();
break;

case 2:

printf (\n Forneca um numero inteiro: );
scanf(%d, &num1);

122

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao


printf (\n Forneca outro numero inteiro: );
scanf(%d, &num2);
if (num1>num2)

printf (\n %d eh maior que %d , num1, num2);

else if (num2>num1)
printf (\n %d eh maior que %d , num2, num1);

else printf (\n Os numeros sao iguais! );
getch();
break;

default:

printf (\n Opao de menu invalida. );
getch();
} // fim do switch
} // fim do while (1)
return 0;
}

// fim do main()

//loja.c: oferece 3 produtos e realiza as vendas com desconto

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define limpa;

system(cls);

int opcao, qtde;


int total1=0, total2=0, total3=0;
float fatura=0;
float preco, desc, precocomdesc;
int main()
{
while (1)
{ limpa;
printf(\nLojinha da 25 );
printf(\nNas compras acima de
printf(\n1- Celular R$
printf(\n2- Computador - R$
printf(\n3- Camera R$
printf(\n-1 Finaliza );

4 unidades ganhe 10%% de desconto!! );


500.00 );
950.00 );
600.00 );

Unisa | Educao a Distncia | www.unisa.br

123

Elisamara de Oliveira

printf(\nEscolha sua opcao: );


scanf(%i,&opcao);
if (opcao == -1)
break;
switch (opcao)
{ case 1: printf(\nVc esta comprando celulares!!!);
printf(\nQuantos celulares vc deseja?);
scanf(%i,&qtde);
if (qtde > 0)
{ total1=total1+qtde;
preco=500.00 * qtde;
if (qtde >=5)
{
desc = preco * 0.10;
precocomdesc = preco - desc;
printf(\nVc obteve R$ %.2f de desconto e vai pagar
R$ %.2f,desc,precocomdesc);
fatura=fatura+precocomdesc;
}
else
{
printf(\nSua compra totalizou R$ %.2f,preco);
fatura=fatura+preco;
}
}
else
printf(\nQuantidade invalida. Venda cancelada.);
break;
case 2: printf(\nVc esta comprando computadores!!!);
printf(\nQuantos computadores vc deseja?);
scanf(%i,&qtde);
if (qtde > 0)
{
total2=total2+qtde;
preco=950.00 * qtde;
if (qtde >=5)
{
desc = preco * 0.10;
precocomdesc = preco - desc;
printf(\nVc obteve R$ %.2f de desconto e vai pagar
R$ %.2f,desc,precocomdesc);
fatura=fatura+precocomdesc;
}
else
{
printf(\nSua compra totalizou R$ %.2f,preco);
fatura=fatura+preco;

124

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

}
else
printf(\nQuantidade invalida. Venda cancelada.);
break;
case 3: printf(\nVc esta comprando cameras!!!);
printf(\nQuantas cameras vc deseja?);
scanf(%i,&qtde);
if (qtde > 0)
{
total3=total3+qtde;
preco=600.00 * qtde;
if (qtde >=5)
{
desc = preco * 0.10;
precocomdesc = preco - desc;
printf(\nVc obteve R$ %.2f de desconto e vai pagar
R$ %.2f,desc,precocomdesc);
fatura=fatura+precocomdesc;
}
else
{
printf(\nSua compra totalizou R$ %.2f,preco);
fatura=fatura+preco;
}
}
else
printf(\nQuantidade invalida. Venda cancelada.);
break;
default: printf(\n\nOpcao invalida\n);

}//switch

getch();
//while

printf(\n\n\nQuantidade vendida de celulares= %i, total1);


printf(\n\n\nQuantidade vendida de computadores= %i, total2);
printf(\n\n\nQuantidade vendida de cameras= %i, total3);
printf(\n\n\nFaturamento da Lojinha 25 R$ %.2f, fatura);

Unisa | Educao a Distncia | www.unisa.br

125

Elisamara de Oliveira

printf(\n\n\nFim do programa);
getch(); //para a tela
return 0;

}//main
printf(\n\n\nFim do programa);
getch(); //para a tela
return 0;

}//main

126

Unisa | Educao a Distncia | www.unisa.br

PRTICA EM LABORATRIO

8.1 Estudo Dirigido

1. Crie uma pasta com seu nome no diretrio do seu computador, em que voc armazenar os
programas em C deste curso, seguindo as instrues:
Entre no Windows Explorer ou na pasta Meu computador do desktop:
Clique em <Arquivo> <Novo> <Pasta>
Substitua o nome nova pasta criado, pelo seu primeiro nome
2. Faa o download gratuito do compilador Dev-C++ para que possa comear a escrever seus
programas.
3. No sistema Windows, localize o compilador Dev-C++ e execute o programa.
<Iniciar> <Programas><Dev-C++>
4. No DevC++, crie um novo arquivo
<Arquivo> <Novo> <Arquivo Fonte>

Unisa | Educao a Distncia | www.unisa.br

127

Elisamara de Oliveira

5. Edite o seguinte programa no editor.


/* nota.c: le a nota de um aluno e verifica se ele foi aprovado ou reprovado */
#include <stdio.h>
#include <conio.h>
float nota;
char nome[20];
int main()
{
printf (\nQual eh seu nome? );
gets(nome);
printf (\nDigite sua nota final: );
scanf(%f,&nota);

if (nota >= 6.0)



printf (\n%s, voce foi aprovado! ,nome);
else
printf (\n%s, voce foi reprovado... ,nome);

printf(\n\nFim do programa.);
getch();
return 0;

6. A qualquer momento que desejar, salve o seu arquivo. Clique em <Arquivo> <Salvar Como>.
V para o diretrio E:\EXECUTAVEIS LIBERADOS\seunome e salve seu arquivo como nota.c e
v salvando seu programa enquanto edita.
7. Compile e execute seu programa. Conserte os erros que o compilador apontar antes de executar.
Clique em <Executar> <Compilar&Executar>
Execute o programa vrias vezes para diferentes valores.

128

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

8. Edite o programa C a seguir, salve-o, compile-o e execute-o seguindo os passos ensinados no


programa anterior. Para abrir um arquivo novo: <Arquivo> <Novo><Arquivo Fonte>. Salve
seu arquivo como menor.c.
/* menor.c: Este programa seleciona o menor numero em uma sequencia de
numeros inteiros */
#include <stdio.h>
#include <conio.h>
int

valor, menor;

int main ()
{ printf (\nDigite um numero inteiro:
);
scanf (%i, &valor);
menor = valor;
while (valor != -1)
{ if (valor < menor)
menor = valor;
printf(\nDigite um numero inteiro (1 para terminar):
scanf (%i, &valor);
}
printf (\nO menor valor lido foi: %i , menor);
printf(\n\nFim do programa);
getch();
return 0;
}

Unisa | Educao a Distncia | www.unisa.br

);

129

CONSIDERAES FINAIS

E chegamos ao final deste curso bsico de Algoritmos e Linguagem de Programao C! Espero que
voc, aluno(a), j esteja conseguindo fazer seus primeiros programas de computador nessa linguagem
to moderna, avanada e instigante, que a linguagem C.
De acordo com nossa metodologia, voc aprendeu a escrever os primeiros algoritmos utilizando o
PortuC, uma pseudolinguagem que o(a) ajudou a quebrar a primeira barreira da linguagem C, que so
seus comandos escritos em ingls. Rapidamente passamos traduo desses algoritmos para a linguagem-alvo e, em seguida, j pudemos ir para o computador fazer nossos primeiros testes.
Espero que voc no pare por aqui, caro(a) aluno(a).
H muitos problemas do mundo real que esperam por solues automatizadas. O desafio grande,
mas sua capacidade de aprendizado e de superao maior ainda!
Como falamos no captulo inicial, a linguagem C inspirou e foi a base de plataformas e linguagens
de programao modernas e atuais, como o Java e o C#. Assim, voc j tem a base para encarar desafios
maiores e se tornar um grande desenvolvedor.
A gente se encontra, ento, no mundo profissional da nossa rea, trocando informaes, aprendendo juntos e trabalhando bastante, pois o mercado profissional amplo e vasto e conta conosco!
Qualquer dvida, entre em contato por e-mail comigo: elisaoli@uol.com.br.

Unisa | Educao a Distncia | www.unisa.br

131

RESPOSTAS COMENTADAS DAS


ATIVIDADES PROPOSTAS

Caro(a) aluno(a), aqui voc encontrar respostas de uma parte dos exerccios das atividades propostas. Voc deve tentar fazer sozinho(a) primeiramente, antes de olhar a resposta. Os outros exerccios
voc j tem condies de resolver sem ajuda, mas, caso restem dvidas, use os chats e fruns para solicitar a ajuda de seu professor! Boa sorte!
Captulo 1
1. Qual o padro de comportamento utilizado para gerar as sequncias:
1, 5, 9, 13, 17, 21, 25 ...
A srie de nmeros comea com 1 (primeiro termo);
Para se gerar qualquer um dos outros termos da srie, basta somar 4 ao nmero imediatamente
anterior;
Esta uma srie infinita. Seu fim deve ser determinado por uma condio do tipo gerar os
10 primeiros termos da srie ou gerar todos os termos da srie menores que 100.
1, 1, 2, 3, 5, 8, 13, 21, 34 ...
A srie de nmeros comea com 1 (primeiro termo);
O segundo termo tambm 1;
Para se gerar qualquer um dos outros termos da srie, basta somar os dois termos imediatamente anteriores:
Exemplos: 1 (primeiro termo) + 1 (segundo termo) =2 (terceiro termo)

1 (segundo termo) + 2 (terceiro termo) = 3 (quarto termo)

2 (terceiro termo) + 3 (quarto termo) = 5 (quinto termo)
Esta uma srie infinita, conhecida como srie de Fibonacci. Seu fim deve ser determinado
por uma condio do tipo gerar os 10 primeiros termos da srie ou gerar todos os termos
da srie menores que 100.

Unisa | Educao a Distncia | www.unisa.br

133

Elisamara de Oliveira

Captulo 3
1. O exerccio pede que voc escreva um algoritmo que leia e imprima o nome e as duas notas de
um aluno. Para a soluo desse problema, so necessrias apenas 3 variveis: uma para o nome do
aluno, uma para a nota da prova 1 e outra para a nota da prova 2. O nome uma cadeia de caracteres e as notas so do tipo real, pois o aluno pode tirar uma nota 7.5, por exemplo. Veja a soluo
completa, analise e reflita. Caso haja dvidas, participe dos chats e dos fruns com seu professor!
/* notas.c: programa que le e imprime 2 notas */
caractere nome[20];
real
nota1, nota2;
principal()
{
imprima (Qual eh o seu nome?
leia (%s,nome);

);

imprima (Digite a primeira nota do aluno: );


leia (%f,&nota1);
imprima (Digite a segunda nota do aluno:
leia(%f,&nota2);

);

imprima (%s, sua 1a nota foi: %1.2f e a sua 2a nota foi: %1.2f ,
nome,nota1,nota2);
imprima (Fim do programa);
}

2. Voc deve escrever apenas o comando que calcule a mdia das duas notas lidas no exerccio
anterior. Isso simples: basta somar as duas notas e dividir a soma por 2. Observe os parnteses
envolvendo a soma das duas notas!
media = (nota1 + nota2) / 2;

3. Voc deve escrever um comando que verifique se a mdia calculada no exerccio anterior
maior ou igual a 7. Para isso, voc deve usar o comando condicional se. Caso a mdia seja superior ou igual a 7, vamos imprimir uma frase dizendo que o aluno foi aprovado, caso contrrio,
imprimimos uma frase dizendo que foi reprovado. Veja a soluo:

se (media >= 7.0)


imprima (Voce foi aprovado! );
seno

imprima (Voce foi reprovado...);

134

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

4. Aqui voc deve acrescentar ao algoritmo inicial os comandos para clculo da mdia e critrios
de aprovao! Dessa maneira, a soluo fica completa. Voc ter escrito um algoritmo que l o
nome e as duas notas de um aluno, calcula a mdia das notas e imprime uma frase dizendo se
ele foi aprovado (mdia maior ou igual a 7.0) ou reprovado.
/* media.c: programa que calcula a media de 2 notas e verifica a aprovacao
do aluno */
caractere nome[20];
real
nota1, nota2, media;
principal()
{
imprima (Qual eh o seu nome?
leia (%s,nome);

);

imprima (Digite a primeira nota do aluno: );


leia (%f,&nota1);
imprima (Digite a segunda nota do aluno:
leia(%f,&nota2);

);

media = (nota1 + nota2) / 2;


se (media >= 7.0)
imprima (%s voce foi aprovado! ,nome);
seno
imprima (%s voce foi reprovado..., nome);
}

imprima(Fim do programa );

5. Vamos repetir o trecho de comandos se aninhado e depois resolver cada uma das situaes
propostas. Observe, nesse trecho, que temos apenas 2 comandos: um comando se que possui
outros comandos se dentro dele e o comando C5, ou seja, o comando C5 est fora do ninho de
comandos se, por isso, ser sempre executado, independentemente dos valores de B1, B2 e B3!

Unisa | Educao a Distncia | www.unisa.br

135

Elisamara de Oliveira

a) Se B1 verdadeiro, o comando C1 do primeiro se ser executado e o ninho de comandos


se ser finalizado (lembre-se que o seno no poder ser executado, pois a condio se
B1 foi avaliada como verdadeira!). Finalizado o ninho de comandos se, o prximo comando a ser executado o C5.
Resposta: C1 e C5
b) Se B1 falso, o seno do primeiro se ser executado e a condio do segundo comando
se ser avaliada. Como B2 verdadeiro, o segundo se ser executado e a condio do
terceiro comando se ser avaliada. Como B3 falso, o seno do terceiro se ser executado, ou seja, os comandos C3 e C4 sero executados e o ninho de comandos se ser finalizado. Finalizado o ninho de comandos se, o prximo comando a ser executado o C5.
Resposta: C3, C4 e C5
c) Se B1 falso, o seno do primeiro se ser executado e a condio do segundo comando
se ser avaliada. Como B2 verdadeiro, o segundo se ser executado e a condio do
terceiro comando se ser avaliada. Como B3 verdadeiro, o comando C2 do terceiro se
ser executado e o ninho de comandos se ser finalizado. Finalizado o ninho de comandos se, o prximo comando a ser executado o C5.
Resposta: C2 e C5
d) Se B1 falso, o seno do primeiro se ser executado e a condio do segundo comando
se ser avaliada. Como B2 falso e no existe o seno do segundo se, o ninho de comandos se ser finalizado. Finalizado o ninho de comandos se, o nico comando a ser
executado o C5!
Resposta: B1 = Falso, B2= Falso e B3 no precisa ser definido.
6. Dado um conjunto de respostas sim ou no de vrias pessoas e seu sexo (F=feminino,
M=masculino), voc deve escrever comandos em PortuC para calcular:
a) o nmero de mulheres que responderam SIM
se (sexo == F e resposta == sim)
ContMulSim = ContMulSim + 1;

b) o nmero de homens que responderam NO


se (sexo == M e resposta == nao)
ContMulSim = ContMulSim + 1;

136

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

c) o nmero de mulheres e homens que responderam NO


se (resposta == nao)
ContNao = ContNao + 1;

Ateno! Todos os contadores utilizados nos trechos de algoritmo devem ser previamente inicializados
com 0 (zero).
As comparaes com F, M, sim e nao s vo funcionar se o usurio, claro, escrever as respostas exatamente dessa forma. Se o programador quiser que o programa aceite outros tipos de
grafia envolvendo letras maisculas e minsculas, isso deve ser includo no cdigo. Por exemplo,
para aceitar F ou f, o trecho da letra a ficaria assim:
se ( (sexo==F ou sexo==f) e (resposta==sim ou resposta=SIM) )
7. Qual o valor de L aps a execuo desse algoritmo?

Aps a inicializao das variveis, a condio do comando se deve ser avaliada. Como esta no
uma condio simples, vamos analis-la por partes, lembrando que 0 avaliado como Falso
e qualquer outro valor avaliado como Verdadeiro.
C Falso
(X+Y > 5) (1.5 + 3.2 = 4.7 ... 4.7 > 5 ?) como 4.7 no maior que 5, o resultado Falso.
O resultado da expresso fica assim:
Falso ou Falso ou Verdadeiro que Verdadeiro!
Como a condio do comando se foi avaliada como verdadeira, o comando L=0 ser executado e o algoritmo ser finalizado!
Resposta: L=0

Unisa | Educao a Distncia | www.unisa.br

137

Elisamara de Oliveira

8. Voc deve escrever os trechos de algoritmo em PortuC que ajudem o IBGE a fazer o censo populacional de certa cidade, sabendo-se que os seguintes dados foram pedidos aos cidados: SEXO
(H= homem, M= mulher) e RENDA (nmero de salrios-mnimos sm). Vamos soluo dos
trechos de algoritmo:
a) o total de homens
se (sexo == H ou sexo == h)
++contHomens;

b) o total de mulheres
se (sexo == M ou sexo == m)
++contMulheres;

c) o total de pessoas da classe C (at 4 sm), da classe B (at 20 sm) e da classe A (acima de 20
sm)
se (renda <= 4)
++contClasseC;
seno se (renda <= 20)
++contClasseB;
seno ++contClasseA;

O trecho da letra c pode ser escrito em 3 comandos se separados. Voc deve escolher aquele
que voc considera mais fcil de entender para usar, ok? Ficaria assim:
se (renda<= 4)
++contClasseC;
se (renda > 4 e renda <= 20)
++contClasseB;
se (Renda > 20)
++contClasseA;
Ateno! Todos os contadores utilizados nos trechos de algoritmo devem ser previamente inicializados
com 0 (zero).

138

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

9. Fornecidos os dados das candidatas a modelo, voc deve escrever um trecho de algoritmo para
verificar se os dados se enquadram nos seguintes limites: ALTURA: de 1.70 a 1.85 m, PESO: de
48.0 a 60.0 Kg e IDADE: de 17 a 21 anos. Se os dados da candidata corresponderem aos limites
anteriores, deve ser impressa uma frase dizendo que ela foi aprovada, caso contrrio, que no
foi aprovada. muito simples, basta checar cada um dos quesitos num nico comando se,
unindo-os pelo operador lgico e. O uso do e indica que, somente se todos os quesitos forem
verdadeiros, a candidata ser aprovada.

se ( (altura >= 1.70 e altura <= 1.85) e


(peso >= 48 e peso <= 60) e
(idade >=17 e idade <= 21) )
imprima(Candidata aprovada);
seno
imprima(Candidata reprovada);

10. Voc deve modificar o exerccio anterior para que uma frase seja impressa aps a verificao de
cada quesito dizendo se a candidata foi aprovada ou no em cada um deles e uma frase final
dizendo se foi aprovada ou no como modelo. Observe a estratgia que eu utilizei para saber
se a candidata foi reprovada em algum quesito: eu usei uma varivel inteira que funciona como
uma varivel lgica aprovada. Essa varivel foi inicializada com verdadeiro (1) e somente no
caso de algum quesito ser reprovado, ou seja, no caso de algum seno ser executado, essa
varivel passaria a ter o valor falso (0), indicando a reprovao da candidata. Mas existem outras solues, claro. Uma delas foi criada por um aluno que usou um contador: cada vez que
um quesito era aprovado, ele somava 1 ao contador; no final, se o contador fosse igual a 3, a
candidata estaria aprovada, caso contrrio, teria sido reprovada.
aprovada = 1;
se (altura >= 1.70 e altura <= 1.85)
imprima (quesito altura aprovado!);
seno
{ imprima (reprovada no quesito altura);
aprovada = 0;
}
se (peso >=48 e peso <=60)
imprima(quesito peso aprovado!)
seno
{ imprima(reprovada no quesito peso.);
aprovada = 0;
}
se (idade >=17 e idade <= 21)
imprima(quesito idade aprovado!)
seno
{ imprima(reprovada no quesito idade);
aprovada = 0;
}
se (aprovada)
imprima(Candidata aprovada);
seno
imprima(Candidata reprovada);

Unisa | Educao a Distncia | www.unisa.br

139

Elisamara de Oliveira

Captulo 4
1.
Passo 1: ler e entender
Passo 2: variveis de entrada

- comprimento
- largura

Passo 3: variveis de sada


- rea da sala

- permetro da sala

Passo 4: variveis auxiliares


- no tem

Passo 5: declarar todas as variveis


real compr, larg, area, perimetro;

Passo 6: inicializar as variveis


imprima (Digite o comprimento da sala: );
leia(%f, &compr);

imprima (Digite a largura da sala: );


leia(%f, &larg);

Passo 7: calcular as sadas


area = compr * larg;

perimetro = (2*compr) + (2*larg);

Passo 8: imprimir os resultados


imprima(A sala tem %f de area e %f de perimetro , area,


perimetro);

Passo 9: montar o algoritmo


/*Exerc411.c: Le o comprimento e a largura de uma sala e calcula
sua area e perimetro*/
real compr, larg, area, perimetro;
principal ()
{

imprima (Digite o comprimento da sala: );



leia(%f, &compr);

imprima (Digite a largura da sala: );



leia(%f, &larg);

140

area = compr * larg;

perimetro = (2*compr) + (2*larg);

imprima(A sala tem %f de area e %f de perimetro , area,

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

perimetro);

imprima(Fim do programa);

Passo 10: testes de mesa


compr

larg

2.5

5.0

compr

larg

-1.0

area
12.5
area

perimetro

Sada Tela

10.0

A sala tem 12.5 de area e 10.0 de perimetro

perimetro

Sada Tela

-2.0

A sala tem 0 de area e -2.0 de perimetro

Nesses dois testes de mesa, podemos observar um comportamento esperado para dados vlidos e
um comportamento estranho para dados no esperados. O certo seria fazer uma consistncia dos
dados, j que no faz sentido ter valores negativos nem o valor zero para o comprimento e largura
das paredes de uma sala, mas isso no importante agora. O importante, caro(a) aluno(a0, voc
conseguir encontrar a soluo sem se preocupar com usurios, digamos, pouco honestos.
3.
Passo 1: ler e entender
Passo 2: variveis de entrada

- valor em dlares
- cotao do dlar

Passo 3: variveis de sada


- valor em reais

Passo 4: variveis auxiliares


- no tem

Passo 5: declarar todas as variveis


real dolares, reais, cotacao;

Passo 6: inicializar as variveis


imprima (Digite o valor em dolares a ser convertido
para reais: );
leia(%f, &dolares);

imprima (Digite a cotacao do dolar: );


leia(%f, &cotacao);

Passo 7: calcular as sadas


reais = dolares*cotacao;

Unisa | Educao a Distncia | www.unisa.br

141

Elisamara de Oliveira

Passo 8: imprimir os resultados


imprima(O valor %f em dolares corresponde a R$ %f,


dolares, reais);

Passo 9: montar o algoritmo


/*Exerc413.c: Le o valor em dolares e a cotacao do dolar e calcula
o valor convertido para reais*/
real dolares, reais, cotacao;
principal ()
{

imprima (Digite o valor em dolares a ser convertido


para reais: );

leia(%f, &dolares);

imprima (Digite a cotacao do dolar: );



leia(%f, &cotacao);

reais = dlares*cotacao;

imprima(O valor %f em dolares corresponde a R$ %f,


dolares, reais);
imprima(Fim do programa);

Passo 10: testes de mesa


dolares

cotacao

1000.00

1.75

reais

Sada Tela

1750.00

dolares

cotacao

1000.00

1.66

reais

O valor 1000.00 em dlares corresponde a R$ 1750.00


Sada Tela

1660.00

O valor 1000.00 em dlares corresponde a R$ 1660.00

7.
Passo 1: ler e entender
Passo 2: variveis de entrada

142

- v0
- ngulo

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Passo 3: variveis de sada


- S, que o alcance do projtil

Passo 4: variveis auxiliares


- g, que a gravidade

Passo 5: declarar todas as variveis


real v0, teta, g, S;

Passo 6: inicializar as variveis


imprima (Digite o valor de v0: );
leia(%f, &v0);

imprima (Digite o angulo teta em radianos: );


leia(%f, &teta);
g = 9.8;

Passo 7: calcular as sadas


Aqui, algo importante seria saber qual operador do PortuC calcula o seno de um ngulo. Nesse
caso, voc teria que perguntar ao seu professor, mas aqui vai a dica: a funo que calcula o seno
sin(angulo_em_radianos) e o ngulo deve estar em radianos!

S = ((v0 * v0) / g) * sin (2*teta);

Passo 8: imprimir os resultados


imprima(O alcance do projetil eh %f , S);

Passo 9: montar o algoritmo


/*Exerc417.c: Le o valor de v0 e do ngulo e calcula o alcance de
um projetil*/
real v0, teta, g, S;
principal ()
{

imprima (Digite o valor de v0: );


leia(%f, &v0);

imprima (Digite o angulo teta em radianos: );


leia(%f, &teta);
g = 9.8;

S = ((v0 * v0) / g) * sin (2*teta);

imprima(O alcance do projetil eh %f , S);


imprima(Fim do programa);

Unisa | Educao a Distncia | www.unisa.br

143

Elisamara de Oliveira

Passo 10: testes de mesa


Para procedermos ao teste de mesa, primeiramente, temos que recorrer aos valores do seno, dados
os ngulos mais comuns, mas, para facilitar a nossa vida, seguem os valores nas tabelas a seguir,
considerando que ou Pi = 3.14 e que Pi corresponde a um ngulo de 180 graus:

v0

teta

Sada Tela

300.0

3.14

9.8

O alcance do projetil eh 0

v0

teta

Sada Tela

300.0

0.785

9.8

9183.67

O alcance do projetil eh 9183.67

9.
Passo 1: ler e entender
Passo 2: variveis de entrada

- preo do produto

Passo 3: variveis de sada


- desconto
- preo final com desconto

Passo 4: variveis auxiliares


- no tem

Passo 5: declarar todas as variveis


real precoini, desconto, precofinal;

Passo 6: inicializar as variveis


imprima (Digite o valor do produto );
leia(%f, &precoini);

144

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Passo 7: calcular as sadas


desconto = precoini * 0.05;

precofinal = precoini desconto;

Passo 8: imprimir os resultados


imprima(Preo inicial do produto R$ %f , precoini);

imprima(Valor do desconto R$ %f , desconto);

imprima(Preo final do produto com desconto R$ %f ,


precofinal);

Passo 9: montar o algoritmo


/*Exerc419.c: Le o valor de um produto, concede desconto de 5% e apresenta o preo com
desconto e o desconto */
real precoini, desconto, precofinal;
principal ()
{

imprima (Digite o valor do produto );


leia(%f, &precoini);

desconto = precoini * 0.05;

precofinal = precoini desconto;

imprima(Preco inicial do produto R$ %f , precoini);

imprima(Valor do desconto R$ %f , desconto);

imprima(Preco final do produto com desconto R$ %f ,


precofinal);
imprima(Fim do programa);

Unisa | Educao a Distncia | www.unisa.br

145

Elisamara de Oliveira

Passo 10: testes de mesa


precoini
300.00

precoini
1000.00

desconto
15.00

desconto
50.00

precofinal

285.00

precofinal

950.00

Sada Tela

Preco inicial do produto R$ 300.00


Valor do desconto R$ 15.00
Preco final do produto com desconto R$ 285.00
Sada Tela

Preco inicial do produto R$ 1000.00


Valor do desconto R$ 50.00
Preco final do produto com desconto R$ 950.00

11.
Passo 1: ler e entender
Passo 2: variveis de entrada

-A

-B
Passo 3: variveis de sada

- no tem
Passo 4: variveis auxiliares

- varivel para guardar o valor de A
Passo 5: declarar todas as variveis

inteiro A, B, auxA;
Passo 6: inicializar as variveis
imprima (Digite o valor do primeiro numero inteiro );
leia(%i, &A);

imprima (Digite o valor do segundo numero inteiro );
leia(%i, &B);
Passos 7 e 8: calcular as sadas e imprimir os resultados

imprima (Valores antes da troca A=%i B=%i , A, B);

auxA = A; // valor de A eh salvo na variavel auxA
A = B; // valor de B eh copiado para A
B = auxA; // valor de A eh copiado para B

imprima (Valores depois da troca A=%i B=%i , A, B);
Passo 9: montar o algoritmo
/*Exerc4111.c: Le dois inteiros A e B e troca seus valores */
inteiro A, B, auxA;

146

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

principal ()
{

imprima (Digite o valor do primeiro numero inteiro

);

leia(%i, &A);

imprima (Digite o valor do segundo numero inteiro );

imprima (Valores antes da troca A=%i B=%i , A, B);

leia(%i, &B);

auxA = A;

A = B;

B = auxA;

// valor de A eh salvo na variavel auxA


// valor de B eh copiado para A
// valor de A eh copiado para B

imprima (Valores depois da troca A=%i B=%i , A, B);


imprima(Fim do programa);

Passo 10: testes de mesa


A
3

B
15

15

auxA

Sada Tela
Valores antes da troca A=3 B=15

A
-4

Valores depois da troca A=15 B=3

B
4

auxA
4

-4

Sada Tela
Valores antes da troca A=-4 B=4

Valores depois da troca A=4 B=-4

14.
Passo 1: ler e entender
Passo 2: variveis de entrada

- temperatura (leitura do termmetro)

Passo 3: variveis de sada


- no tem

Passo 4: variveis auxiliares


- no tem

Passo 5: declarar todas as variveis


inteiro temp;

Unisa | Educao a Distncia | www.unisa.br

147

Elisamara de Oliveira

Passo 6: inicializar as variveis


imprima (Digite o valor da temperatura lida no termometro);
leia(%i, &temp);
Passos 7 e 8: calcular as sadas e imprimir os resultados

se (temp < 100)


imprima (Temperatura muito baixa );
seno se (temp >=100 e temp <= 200)

imprima (Temperatura baixa );

seno se (temp > 200 e temp < 500)

imprima (Temperatura normal );

seno imprima (Temperatura muito alta );

Passo 9: montar o algoritmo


/*Exerc4114.c: Le a temperatura e imprime mensagem de acordo com o
valor */
inteiro temp;
principal ()
{ imprima (Digite o valor da temperatura lida no termometro);
leia(%i, &temp);

se (temp < 100)


imprima (Temperatura muito baixa );
seno se (temp >=100 e temp <= 200)

imprima (Temperatura baixa );


seno se (temp > 200 e temp < 500)

imprima (Temperatura normal );

seno imprima (Temperatura muito alta );

imprima(Fim do programa);
}

148

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Passo 10: testes de mesa


temp
-200

Sada Tela

temp
200

Sada Tela

temp
500

Sada Tela

temp
300

Sada Tela

Temperatura muito baixa

Temperatura baixa

Temperatura muito alta

Temperatura normal

16.
Passo 1: ler e entender
Passo 2: variveis de entrada

- tipo do combustvel que o carro usa


- capacidade do tanque do carro

Passo 3: variveis de sada


- valor gasto para encher o tanque do carro

Passo 4: variveis auxiliares


- no tem

Passo 5: declarar todas as variveis


char tipo;
inteiro tanque;

real preco;

Passo 6: inicializar as variveis


imprima (Digite o tipo de combustivel do carro
G=gasolina ou A=alcool );
leia(%c, tipo);

imprima (Digite a capacidade do tanque de combustivel: );


leia(%i, &tanque);

Passos 7 e 8: calcular as sadas e imprimir os resultados


se (tipo == G ou tipo == g)

{ preco = tanque * 2.60;


imprima (Voce gastara R$ %f para encher o tanque de
gasolina , preco);

seno se (tipo == A ou tipo == a)

Unisa | Educao a Distncia | www.unisa.br

149

Elisamara de Oliveira

{ preco = tanque * 1.80;


imprima (Voce gastara R$ %f para encher o tanque de
alcool , preco);

}
seno imprima(Tipo de combustivel invalido);

Passo 9: montar o algoritmo


/*Exerc4116.c: Le o tipo de combustivel, a capacidade do tanque e calcula o valor a ser pago para encher o tanque*/
char tipo;
inteiro tanque;
real preco;
principal ()
{ imprima (Digite o tipo de combustivel do carro
G=gasolina ou A=alcool );
leia(%c, tipo);

imprima (Digite a capacidade do tanque de combustivel: );


leia(%i, &tanque);
se (tipo == G ou tipo == g)

{ preco = tanque * 2.60;


imprima (Voce gastara R$ %f para encher o tanque de
gasolina , preco);

seno se (tipo == A ou tipo == a)

{ preco = tanque * 1.80;


imprima (Voce gastara R$ %f para encher o tanque de
alcool , preco);

}
seno imprima(Tipo de combustivel invalido);
imprima(Fim do programa);

150

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Passo 10: testes de mesa


tipo
A

tanque
100

preco

Sada Tela

180.00

Voce gastara R$180.00 para encher o tanque de alcool

tipo
g

tanque
45

preco

Sada Tela

117.00

Voce gastara R$117.00 para encher o tanque de gasolina

tipo
y

tanque
70

preco

Sada Tela
Tipo de combustivel invalido

Captulo 5
1.
/* Eleicoes.c: este programa computa os votos de uma eleio e divulga
os
numeros obtidos e o candidato vencedor.*/

#include <stdio.h>
#include <conio.h>
int

voto, vencedor, brancos, nulos, eleitores, cont1, cont2, cont3;

int main()
{

printf(\nDigite o seu voto (1,2,3 ou 0(branco) -1 finaliza): );


scanf (%i,&voto);

brancos=nulos=eleitores=cont1=cont2=cont3=0;
while
{

(voto != -1)

++eleitores;
if

(voto == 1)

++cont1;

else if (voto == 2)
++cont2;

else if (voto == 3)
++cont3;

else if (voto == 0)
++brancos;

else ++nulos;

printf(\n Digite o seu voto (1,2,3 ou 0(branco) 1 finaliza): );


}

scanf (%i,&voto);

if ((cont1 > cont2) && (cont1 > cont3))

Unisa | Educao a Distncia | www.unisa.br

151

Elisamara de Oliveira

vencedor = 1;

else if ((cont2 > cont1) && (cont2 > cont3))


vencedor = 2;

else vencedor = 3;

printf(\n O candidato vencedor foi: %i , vencedor);

printf(\n Numero de votos em branco: %i , brancos);


printf(\n Numero de votos nulos: %i ,nulos);

printf(\n Numero de eleitores: %i ,eleitores);


printf(\nFim do programa);
getch();

return 0;

2.
/* Eleicoes2.c: computa os votos de uma eleio e divulga os numeros
obtidos e o candidato vencedor usando o comando switch.*/
#include <stdio.h>
#include <conio.h>
int

voto, vencedor, brancos, nulos, eleitores, cont1, cont2, cont3;

int main ()
{

brancos=nulos=eleitores=cont1=cont2=cont3= 0;
while

(1)

printf (\nDigite o seu voto (1,2,3 ou 0(branco) -1 finaliza): );


scanf (%d,&voto);
if (voto==-1)
break;

++eleitores;

152

switch (voto)
case 0:

++brancos;

case 1:

++cont1;

case 2:

++cont2;

case 3:

++cont3;

break;
break;
break;

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

break;

default:

++nulos;

if ((cont1 > cont2) && (cont1 > cont3))


vencedor = 1;

else if ((cont2 > cont1) && (cont2 > cont3))


vencedor = 2;

else vencedor = 3;

printf (\nO candidato vencedor foi: %d , vencedor);


printf (\nNumero de votos em branco: %d , brancos);
printf (\nNumero de votos nulos: %d ,nulos);

printf (\nNumero de eleitores: %d ,eleitores);


puts(\nFim do programa);
getch();

return 0;

3. Este exerccio j foi resolvido passo a passo em PortuC na quato 3 do captulo 4!


/*exerc513.c: le valor em dolares e converte para reais*/
#include <stdio.h>
#include <conio.h>
float dolares, reais, cotacao;
int main()
{
printf(\nPrograma para converter dolares em reais\n);
printf(\nQual eh a cotacao do dolar? );
scanf(%f,&cotacao);
printf(\nQuantos dolares devem ser convertidos para reais? );
scanf(%f,&dolares);
reais = dolares*cotacao;

Unisa | Educao a Distncia | www.unisa.br

153

Elisamara de Oliveira

printf(\n%.2f USD convertidos para reais = R$ %.2f


,dolares,reais);

printf(\n\nFim do programa);
getch();
return 0;

4. Aqui a estratgia a seguinte: hora de entrada, de sada, minuto de entrada e de sada so 4


variveis inteiras diferentes. Se a hora de sada menor que a hora de entrada, h um erro! Caso
contrrio, temos que verificar se o minuto de sada maior que o minuto de entrada. Se for, o
usurio paga mais 1 hora pela frao.
/*exerc514.c: calcula o valor a ser pago num estacionamento*/
#include <stdio.h>
#include <conio.h>
int horaent, minent, horasai, minsai, tempo;
float valoraserpago;
int main()
{
printf(\nPrograma para calcular o valor a ser pago num
estacionamento\n);
printf(\nValor do estacionamento: 10.00 por hora ou fracao\n\n);
printf(\nQual eh a hora de entrada? );
scanf(%i,&horaent);
printf(\nQual eh o minuto de entrada? );
scanf(%i,&minent);
printf(\nQual eh a hora de saida? );
scanf(%i,&horasai);
printf(\nQual eh o minuto de saida? );
scanf(%i,&minsai);
if (horasai >= horaent)
{

154

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

tempo = (horasai - horaent);


if (minsai > minent)
++tempo;

hora

// fracao de minutos implica na cobranca de mais 1

valoraserpago = tempo * 10.00;

%.2f,

printf(\nTotal a ser pago por %i hora(s) de estacionamento R$


tempo,valoraserpago);

}
else printf(\nErro nos valores de hora de entrada e saida.);
printf(\n\nFim do programa);
getch();
return 0;
}

5. A estratgia ler o salrio do funcionrio e verificar se vlido. Se for, calculamos o aumento


do salrio de acordo com as faixas informadas. Depois, somamos o aumento no salrio original
e calculamos o novo salrio, dando a boa notcia ao trabalhador!
/*exerc515.c: calcula o novo valor do salario de um funcionario*/
#include <stdio.h>
#include <conio.h>
float salario, aumento, novosalario;
int main()
{
printf(\nPrograma para calcular o valor do novo salario reajustado de um funcionario\n);

printf(\nQual eh o valor de seu salario atual? );


scanf(%f,&salario);

Unisa | Educao a Distncia | www.unisa.br

155

Elisamara de Oliveira

if (salario > 0)
{
if (salario < 500.00)
aumento = salario * 0.15;
else if (salario >=500.00 && salario <= 1000.00)
aumento = salario * 0.10;
else

aumento = salario * 0.05;

novosalario = salario + aumento;


printf(\nVoce teve um reajuste de %.2f e seu novo salrio eh
R$ %.2f,
aumento,novosalario);
}
else printf(\nErro no valor do salario. Nao existe salario igual
a zero ou negativo.);

printf(\n\nFim do programa);
getch();
return 0;
}

6. Este problema um caso tpico de uso do comando switch para verificar em qual caso certo
valor se enquadra!
/*exerc516.c: apresenta a regiao de procedencia de um produto*/
#include <stdio.h>
#include <conio.h>
float preco;
int codigo;
int main()
{

156

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

printf(\nPrograma para apresentar a regiao de origem de um


produto\n);

printf(\nQual eh o preco do produto? );


scanf(%f,&preco);
printf(\nQual eh o codigo da regiao de origem do produto? (1 a
5): );
scanf(%i,&codigo);
switch (codigo)
{ case 1: printf(\nPreco do produto = R$ %.2f - Regiao de origem
= SUL,
preco);
break;
case 2: printf(\nPreco do produto = R$ %.2f - Regiao de origem =
SUDESTE, preco);
break;
case 3: printf(\nPreco do produto = R$ %.2f - Regiao de origem =
CENTRO-OESTE, preco);
break;
case 4: printf(\nPreco do produto = R$ %.2f - Regiao de origem =
NORTE,
preco);
break;
case 5: printf(\nPreco do produto = R$ %.2f - Regiao de origem =
NORDESTE, preco);
break;

default: printf(\nCodigo da regiao invalido\n);

Unisa | Educao a Distncia | www.unisa.br

157

Elisamara de Oliveira

}
printf(\n\nFim do programa);
getch();

return 0;

Captulo 6
1. Voc deve escrever um programa que leia e imprima o nome e as duas notas de vrios alunos.
O ltimo aluno ter o nome=FIM. O nico fator um pouco chato na soluo deste problema
simples a leitura de strings em C, que deve ser feita usando-se funes da biblioteca <string.h>.
/* notas.c: programa que le e imprime 2 notas de vrios alunos */
#include
#include
#include
#include

<stdio.h>
<conio.h>
<string.h>
<stdlib.h>

char nome[15];
float nota1, nota2;
int main()
{
while (1)
{ printf(\nQual o seu nome? FIM finaliza );
gets(nome);
if (strcmp(nome,FIM) == 0)
break;
printf(\nDigite a primeira nota do aluno: );
scanf(%f,&nota1);
printf(\nDigite a segunda nota do aluno: );
scanf(%f,&nota2);
printf(\n%s, sua 1a nota foi: %1.2f e a sua 2a nota foi:

%1.2f,
}

nome,nota1,nota2);
fflush(stdin); //para no dar problema na leitura de strings

puts(\nFim do programa);
getch();
return 0;
}

158

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

2. Voc deve escrever um programa que leia 10 nmeros e calcule e imprima a sua soma. A estratgia usar o comando for, pois j sabemos que sero lidos 10 nmeros. importante
aplicarmos a regra bsica da programao: TODO SOMADOR E TODO CONTADOR DEVEM SER
INICIALIZADOS COM ZERO! Alm disso, importante notar que a impresso da soma dos nmeros feita FORA do comando for. Isso porque preciso terminar a leitura dos dados para
que a soma final tenha sido calculada e possa ser impressa.

/* soma10.c: Programa que le e soma 10 numeros */


#include <stdio.h>
#include <conio.h>
int numero, soma, cont;
int main()
{
cont=soma=0;
for ( ; cont < 10; cont++)
{
printf(\nDigite um numero inteiro:
scanf(%i,&numero);
soma = soma + numero;
}

);

printf(\nA soma dos 10 numeros eh: %i,soma);


puts(\nFim do programa);
getch();
return 0;
}

Unisa | Educao a Distncia | www.unisa.br

159

Elisamara de Oliveira

3. Voc deve escrever um programa que calcule e imprima N nmeros pares, comeando do zero.
Voc deve perguntar ao usurio quantos nmeros ele deseja gerar (ou seja, pea-lhe para fornecer o valor de N). Nesse caso, vamos tambm usar o comando for, pois sabemos que o
usurio quer gerar N nmeros pares!

/* Pares.c: programa que gera e imprime N numeros pares */


#include <stdio.h>
#include <conio.h>
int n, numeropar, cont;
int main()
{
pritnf(\nQuantos nmeros pares devem ser impressos?
);
scanf(%i,&n);
numeropar = 0;
for (cont=0; cont < n; cont++)
{
printf(\n%i,numeropar);
numeropar = numeropar + 2;
}

puts(\nFim do programa);
getch();
return 0;

Note como os nmeros pares so gerados: inicializa-se a varivel numeropar com zero e depois
vai adicionando-se 2 a ela. Dessa forma, so gerados 0, 2, 4, 6... Fcil, no ?
4.
X

Resultados

-1

-1

-2

-1

-4

Este exemplo, apesar de simples, mostra claramente como fazer um teste de mesa. Na primeira
linha da coluna, mostram-se apenas os valores iniciais das variveis X e Y. Na segunda linha, a
condio do comando while foi avaliada como verdadeira (0 != 4=Verdadeiro) e os comandos delimitados por { e } do while foram executados: em X, foi colocado o resultado de *-1

160

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

(-1*-1=1), Y foi acrescido de 1 (0+1=1) e a condio do comando if foi avaliada como verdadeira, implicando a impresso do valor de Y (1), o que foi mostrado na coluna Resultado. As outras
linhas correspondem execuo do lao do comando while.
5.
numero

cont

Resultado

2 -2

4 -4

6 -6

8 -8

10

10 10

12

A cada lao do comando for so impressos 2 nmeros numa mesma linha: positivo e negativo.
O nmero comea de 2 e vai sendo incrementado de 2. cont comea com zero e vai at 5.
6.
/*exerc621.c: le o angulo e informa o quadrante*/
#include <stdio.h>
#include<conio.h>
int angulo;
int quadrante;
int main()
{
printf(\nPrograma para apresentar a qual quadrante um angulo
pertence\n);
while (1)
{

printf(\nDigite o valor do angulo (0 a 360) -1 finaliza: );


scanf(%i,&angulo);
if (angulo== -1)
break;
if (angulo >= 0 && angulo < 90)

Unisa | Educao a Distncia | www.unisa.br

161

Elisamara de Oliveira

printf(\nO angulo %i pertence ao quadrante 1\n, angulo);


else

if (angulo >= 90 && angulo < 180)


printf(\nO angulo %i pertence ao quadrante 2\n,

angulo);

else if (angulo >= 180 && angulo < 270)


printf(\nO angulo %i pertence ao quadrante

3\n, angulo);

else
drante 4\n, angulo);

if (angulo >= 270 && angulo <= 360)


printf(\nO angulo %i pertence ao quaelse printf(\nValor de angulo invalido.\n

);
}

printf(\n\nFim do programa);
getch();
return 0;
}

8.
/*exerc623.c: realiza uma pesquisa de opinio, computando votos em numero e em percentual */
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
int

opcao, sexo, afavor=0, contra=0, homens=0,mulheres=0, total;

float porcent;
int

main()

while (1)

{ system(cls); // limpa a tela


printf (\nReferendo sobre a internacionalizacao da
Amazonia. Qual eh sua opiniao?);

162

printf (\n1 - A favor);

printf (\n2 - Contra);

printf (\n0 - Finaliza);

printf (\nDigite a opcao desejada:

);

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

scanf

if (opcao == 0)

no: );

(%i,&opcao);
break;

while (1)

printf(\nInforme o seu sexo 1=masculino

scanf(%i, &sexo);

if (sexo == 1)

2=femini-

++homens;
break;
}

else if (sexo == 2)

{ ++mulheres;

break;

else
printf(\nSexo invalido. Por fa-

vor, digite 1 ou 2.\n);


}

switch (opcao)
{

case 1:

printf(\nObrigada, voto computado!);

++afavor;

break;

case 2:

printf(\nObrigada, voto computado!);

++contra;
break;

default: printf(\nOpcao invalida.);


}

getch();
} // while 1
total = mulheres + homens;
printf(\nResultados da pesquisa\n);
printf(----------------------);
printf(\n\n%i votante(s) do sexo masculino., homens);

Unisa | Educao a Distncia | www.unisa.br

163

Elisamara de Oliveira

if (total > 0)
{

porcent = (float) homens/total;


printf(\n%.1f %% dos votantes sao homens,porcent*100);

}
printf(\n\n%i votante(s) do sexo feminino., mulheres);
if (total > 0)
{

porcent = (float) mulheres/total;


printf(\n%.1f %% dos votantes sao mulheres,porcent*100);

}
total = afavor + contra;
printf(\n\n%i votante(s) a favor., afavor);
if (total > 0)
{ porcent = (float) afavor/total;
printf(\n%.1f %% dos votantes sao a favor,porcent*100);
}
printf(\n\n%i votante(s) contra., contra);
if (total > 0)
{ porcent = (float) contra/total;
printf(\n%.1f %% dos votantes sao contra,porcent*100);
}

getch();
printf(\n\n\nFim do programa);
getch();
return 0;

9.
/*exerc624.c: le n1,n2 e realiza as 4 operacoes*/
#include<stdio.h>
#include<conio.h>
int n1,n2,soma,subtr,mult;
float divisao;
int main()
{

164

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

while (1)
{
printf(\nDigite um numero inteiro ou -1 para finalizar:

);

scanf(%i,&n1);
if (n1 == -1)
break;
printf(\nDigte outro numero inteiro );
scanf(%i,&n2);
soma=n1+n2;

printf(\na soma de %i+%i=%i,n1,n2,soma);

subtr=n1-n2;

printf(\na subtracao de %i-%i,n1,n2,subtr);

mult=n1*n2;

printf(\na multiplicacao de %i+%i=%i,n1,n2,mult);

if (n2!=0)

{ divisao=n1/n2;

printf(\na divisao de %i/%i=.3f,n1,n2,divisao);

}
else

printf(\nnao existe divisao por zero);

}
}
printf(\n\nfim do programa);
getch();
return 0;
}

Unisa | Educao a Distncia | www.unisa.br

165

Elisamara de Oliveira

11.
/*exerc626.c: gera sequencias numericas*/
#include <stdio.h>
#include<conio.h>

int n, cont, termo;


int main()
{

printf(\nPrograma para gerar sequencias numericas\n);

printf(\nDigite o numero de termos da sequencia de potencias de


2: );
scanf(%i,&n);
termo = 2;
for (cont=0; cont<n; cont++)
{

printf( %i
}

,termo);

termo = termo*2;

printf(\n\n);
printf(\nDigite o numero de termos da sequencia de positivos e
negativos: );
scanf(%i,&n);
cont = 1;

termo = 1;
while (cont<=n)
{

printf( %i ,termo);
termo = termo*-1;
++cont;

if (cont % 2 == 1)
++ termo;

166

// cont eh impar?

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

}
printf(\n\n);

printf(\n\nFim do programa);
getch();

return 0;

17.
/* exerc6212.c:
sua media */

Este programa le varios numeros inteiros e calcula

#include <stdio.h>
#include<conio.h>
int

Soma=0, Valor, Cont=0;

float

Media;

int main( )
{ printf(\nPrograma que le varios numeros inteiros e calcula sua
media\n\n);

while (1)
{

printf(Forneca um valor inteiro (flag= -1): );


scanf(%d,&Valor);
Soma = Soma + Valor;
++Cont;

}
if (Cont > 0)
{

Media = Soma/Cont;


printf(\nValor da Media dos:
\n,Cont, Media);

%i nmeros = %.2f

}
else
printf(\nNenhum valor foi fornecido);
printf(\nFim do programa... );

Unisa | Educao a Distncia | www.unisa.br

167

Elisamara de Oliveira

getch(); /* para a tela */


return 0;
}

18.
/*exerc6213.c: calcula as razes de uma equao do 2o grau*/
#include <stdio.h>
#include <conio.h>
#include <math.h>
float

a, b, c; // coeficientes da equacao

float delta, raiz1, raiz2;


char resp;

int
{

main()
printf(\nCalcula as raizes de equacoes do 2o grau\n);
for ( ;
{

; )

printf(\nDigite o coeficiente a: );
scanf(%f, &a);
printf(\nDigite o coeficiente b: );
scanf(%f, &b);
printf(\nDigite o coeficiente c: );
scanf(%f, &c);
if ( a == 0)

eh zero);

printf(\nNao eh equacao do 2o grau, pois o coeficiente a

else {
delta = b*b (4*a*c);
if (delta >= 0)
{

raiz1 = - b + sqrt(delta) / (2*a);


raiz2 = - b - sqrt(delta) / (2*a);

raiz2);

168

printf(\nRaiz 1 = %.2f

Raiz2=%.2f, raiz1,

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

}
else
printf(\nNao existem raizes reais);
}
printf(\nVoce deseja fornecer novos dados? S/N );
resp = getche();
if (resp==n || resp==N)
break;
}
printf (\n\n\n\n

Fim do programa);

getch();
return 0;
}

19.
/*exerc6214.c: mostra nmeros potencia de 2 menores que 1000000 usando
long int e
gera numeros impares menores que 100 */
#include <stdio.h>
#include <conio.h>
long int numlong;
int num;

int main()
{
printf(\n Sequencia de numeros potencia de 2 menores que
1000000);
printf(\n ===========================================n\n);
numlong=2;
while (numlong<1000000)
{

printf(%ld\t,numlong);

// \t corresponde a tabulacao

numlong = numlong * 2;
}

Unisa | Educao a Distncia | www.unisa.br

169

Elisamara de Oliveira

printf(\n Sequencia de numeros impares menores que 100);


printf(\n ===================================\n\n);
num=1;
while (num<100)
{ printf(%i\t,num);
num = num + 2;

if

(num%10==1)

getch();
}

printf (\n\n\n\n

Fim do programa);

getch();
return 0;
}

20.
/*exerc6215.c: aproxima o numero Pi atraves de uma serie */
#include <stdio.h>
#include <conio.h>
double pi, termo;
float

num, den;

long int n, cont=0;

int main()
{
printf(\n Aproxima o valor de Pi por uma serie numerica);
printf(\n =================================n\n);
pi=0;
printf(\nDigite o numero de termos da serie: );
scanf(%ld,&n);

170

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

num = 4;
den = 1;
for (cont=0; cont < n; cont++)
{

termo = num/den;

if (cont % 2 == 0)
ciona o termo

// se o contador de termos for par, adi-

pi = pi + termo;
else
pi = pi termo;
den = den + 2;
}
printf(\nO valor de Pi aproximado pela serie com %ld termos =
%lf, n, pi));
printf (\n\n\n\n

Fim do programa);

getch();
return 0;
}

21.
/*exerc6216.c: le numeros e calcula o digito verificador*/
#include <stdio.h>
#include<conio.h>
long int n;
int d1,d2,d3,d4,d5,dv;
int main()
{
printf(\nPrograma para ler numeros e calcular o digito
verificador\n);
while (1)
{

printf(\nDigite um numero inteiro de 5 digitos (-1 finaliza):

Unisa | Educao a Distncia | www.unisa.br

171

Elisamara de Oliveira

);
scanf(%ld,&n);
if (n == -1)
break;

gitos

if (n >= 10000 && n<=99999) // verifica se o numero tem 5 d{


d1 = n / 10000;
d2 = (n % 10000) / 1000;
d3 = (n % 1000) / 100;
d4 = (n % 100) / 10;
d5 = n % 10;

printf(\nd1= %i d2=%i d3=%i d4=%i


d5=%i,d1,d2,d3,d4,d5);
dv = (d1 + d2 + d3 + d4 + d5) % 11;
if (dv == 10)
printf(\n\n%ld - x , n);
else
printf(\n\n%ld - %i,n, dv);
printf(\n\n);
}
else printf(\nEste numero nao tem 5 digitos.\n);
}
printf(\n\nFim do programa);
getch();
return 0;
}

172

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

32.
/*exerc6227.c: le o codigo do produto e apresenta sua classificacao*/
#include <stdio.h>
#include<conio.h>
int codigo;
int main()
{
printf(\nPrograma para apresentar a classificacao de
produtos\n);
while (1)
{
printf(\nQual eh o codigo do produto? (1 a 9 ou 0 para finalizar): );
scanf(%i,&codigo);
if (codigo == 0)
break;
switch (codigo)
{
case 1: printf(\nClassificacao do produto %i = ALIMENTO
NAO PERECIVEL, codigo);
break;
case 2:
case 3:
case 4: printf(\nClassificacao do produto %i = ALIMENTO
PERECIVEL, codigo);
break;
case 5:
RIO, codigo);

case 6: printf(\nClassificacao do produto %i = VESTUAbreak;

case 7: printf(\nClassificacao do produto %i = HIGIENE


PESSOAL, codigo);
break;

Unisa | Educao a Distncia | www.unisa.br

173

Elisamara de Oliveira

case 8:
case 9: printf(\nClassificacao do produto %i = LIMPEZA
E UTENS. DOMESTICOS,
codigo);
break;
default: printf(\nCodigo do produto invalido\n);
}
printf(\n);
} // while 1
printf(\n\nFim do programa);
getch();
return 0;
}

174

Unisa | Educao a Distncia | www.unisa.br

REFERNCIAS

AITKEN, P.; JONES, B. C Guia do Programador. Rio de Janeiro: Berkeley Brasil, 1994.
ASCENCIO, A. F. G.; VENERUCHI, E. A. Fundamentos da programao de computadores. So Paulo:
Prentice Hall, 2007.
CALVERT, C. Programando aplicaes em Windows com C e C++. Rio de Janeiro: Berkeley, 2004.
FORBELLONE, A. L.; BERSPACHER, H. Lgica de programao. 3. ed. So Paulo: Prentice Hall, 2005.
GOTTFRIED, B. S. Programando em C. So Paulo: Makron Books, 2003.
KERNIGHAN, B. W.; RITCHIE, D. M. C A linguagem de programao padro ANSI. Rio de Janeiro: Campus,
1989.
LOPES, A.; GARCIA, G. Introduo a programao: 500 algoritmos resolvidos. Rio de Janeiro: Campus,
2002.
MANZANO, J. A. M. G.; OLIVEIRA, J. F. Algoritmos: lgica para desenvolvimento de programas de
computador. 22. ed. So Paulo: rica, 2009.
MIZRAHI, V. V. Treinamento em linguagem C. Mdulo 1. 2. ed. So Paulo: Makron Books, 2006.
______. Treinamento em linguagem C. Mdulo 2. 2. ed. So Paulo: Makron Books, 2006.
SCHILDT, H. C completo e total. So Paulo: Makron Books, 1997.
SEBESTA, R. W. Conceitos de linguagens de programao. 4. ed. Porto Alegre: Bookman, 2000.
TENEMBAUM, A. M. Estruturas de dados usando C. So Paulo: Pearson, 1995.

Unisa | Educao a Distncia | www.unisa.br

175

Você também pode gostar