Você está na página 1de 180

Algoritmos e Lgica de

Programao
Cincia da Computao
Sistemas de Informao

2016

Profa. Dra. Elisamara de Oliveira


2

Da autora para voc, aluno!


Esta apostila se refere disciplina Algoritmos e Lgica de Programao, geralmente
ministrada no 1 semestre dos cursos superiores da rea de Computao e Engenharia.
O objetivo desta disciplina capacitar voc, caro aluno, 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 esta 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. Este 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 na linguagem de programao
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 aluno, afie seu raciocnio lgico e
prepare-se para entrar em um 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


profaelisa@uol.com.br
3

Sumrio
Da autora para voc, aluno!...................................................................................................... 2
Captulo 1 ................................................................................................................................... 5
Algoritmos .................................................................................................................................. 5
1.1. O que um algoritmo? ...............................................................................................5
1.2. Conceitos Bsicos da Programao de Computadores ..............................................8
1.3. Etapas da Programao de Computadores ..............................................................11
1.4. Expresso de Algoritmos ..........................................................................................12
1.4.1. Expresso de Algoritmos atravs de Diagramas ................................................12
1.4.2. Expresso de Algoritmos atravs de Linguagem de Programao ....................13
1.4.3. Expresso de Algoritmos atravs de Pseudolinguagem ....................................16
1.5. Os algoritmos sero expressos em Pseudolinguagem ............................................17
Lista de Exerccios 1.1 .....................................................................................................19
Captulo 2 ................................................................................................................................. 24
Pseudolinguagem de Programao: PortuC ....................................................................... 24
2.1. Identificadores ...........................................................................................................24
2.2. Tipos Bsicos e Declarao de Variveis .................................................................25
2.3. Comando de Atribuio.............................................................................................26
2.4. Operadores Aritmticos ............................................................................................27
2.5. Operadores Lgicos ..................................................................................................28
2.6. Operadores Relacionais............................................................................................32
2.7. Comando Condicional ...............................................................................................33
2.8. Comando de Repetio ............................................................................................35
2.9. Comandos de Entrada e Sada .................................................................................38
2.10. Separador de comandos .........................................................................................41
2.11. Comentrios ............................................................................................................42
2.12. Bloco de Programa .................................................................................................42
Captulo 3 ................................................................................................................................. 47
Construo de Algoritmos em PortuC: Praticando os comandos e fazendo clculos ... 47
3.1. Declarao de variveis, comandos leia e imprima .............................................47
3.2. Comando condicional se ........................................................................................48
3.3. Bloco de Programa ...................................................................................................49
Lista de exerccios 3.1 ....................................................................................................51
3.4. Operaes Bsicas com Nmeros: soma, subtrao, multiplicao, diviso, raiz
quadrada, porcentagem, potncia, diviso inteira ............................................................52
3.5. Operaes com Operadores Lgicos e Relacionais .................................................56
Lista de Exerccios 3.2 .....................................................................................................58
Captulo 4 ................................................................................................................................. 60
A Linguagem de Programao C ........................................................................................... 60
4.1. Tipos Bsicos e Declarao de Variveis em C........................................................60
4.2. Comando Condicional em C (if) ................................................................................61
4.3. Operadores de Atribuio, Aritmticos, Relacionais e Lgicos (Binrios) em C .......64
4.4. Comando de Repetio em C (while) .......................................................................67
4

4.5. Comandos de Leitura e Escrita em C .......................................................................69


4.6. Comentrios em C ....................................................................................................71
4.7. Bloco de Programa em C ..........................................................................................72
4.8. Operaes Bsicas com Nmeros: +, -, *, /, ++, --, %,sqrt() .....................................74
4.9. Operaes com Operadores Lgicos e Relacionais: &&, ||, !, >, >=, <, <=, ==, != ....75
4.10. Traduo de PortuC para a Linguagem C ............................................................77
Lista de Exerccios 4.1 .....................................................................................................82
Captulo 5 ................................................................................................................................. 83
Metodologia para Construo de Algoritmos ....................................................................... 83
5.1. Os 10 passos da metodologia ..................................................................................83
5.2. Soluo de exerccios utilizando a metodologia.......................................................85
Lista de Exerccios 5.1 ....................................................................................................86
Captulo 6 ............................................................................................................................... 100
Mais sobre a Linguagem de Programao C ...................................................................... 100
6.1. Comando de Seleo Mltipla em C (switch)..........................................................100
6.2. Comando de Repetio em C (for) .........................................................................103
6.3. Funes teis em C ................................................................................................107
6.3.1. Funes da biblioteca string.h: .........................................................................107
6.3.2. Funes da biblioteca ctype.h: .........................................................................107
6.3.3. Funes da biblioteca conio.h ..........................................................................108
6.3.4. Funes da biblioteca math.h ...........................................................................108
6.3.5. Funes da biblioteca stdlib.h ..........................................................................109
6.4. Exemplos de programas usando funes teis em C .............................................110
Captulo 7 ............................................................................................................................... 119
Usando Comandos de Repetio em C ............................................................................... 119
7.1. Comando de repetio entrada indeterminada de dados (uso de flags) .............119
7.2. Comando de repetio entrada de dados determinada .......................................122
Lista de exerccios 7.1 ...................................................................................................125
7.3. Exemplo dos Minutos Telefnicos...........................................................................127
7.4. Exemplo do Preo Final de Automveis .................................................................130
7.5. Exemplo da Eleio ................................................................................................133
7.6. Exemplo da Srie Numrica ...................................................................................137
Lista de Exerccios 7.2 ..................................................................................................140
1 aula Prtica em Laboratrio ............................................................................................. 145
Estudo Dirigido ...................................................................................................................... 145
Respostas das Listas de Exerccios .................................................................................... 149
Da autora para o aluno-programador! ................................................................................. 179
Bibliografia ............................................................................................................................. 180
5

Captulo 1
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:

"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 destas 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
6

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


neste 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?
7

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.
Exerccio 1: Por falar em padro de comportamento...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 ...

Os dois exemplos do exerccio 1 so problemas do mundo real que, por serem


finitos (ou para os quais se possa determinar uma condio de parada), e por
possurem um padro de comportamento, podem ser resolvidos atravs de um
programa de computador. No entanto, antes de se chegar ao programa de computador,
o 1 passo fazer um algoritmo que seja capaz de solucionar o problema em
questo....

Com base nos exemplos apresentados at aqui, estamos prontos para definirmos 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 observarmos 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 Lgica de Programao , na realidade, um curso de


Programao de Computadores para alunos que iniciam cursos superiores na rea de
Engenharia e Informtica. Sei que voc est curioso 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!
8

1.2. Conceitos Bsicos da Programao de Computadores

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).

Fonte:http://www.shadowandy.net/2
011/06/apple-imac-27-the-ultimate-
Linguagem de alto nvel: para escrever os programas
all-in-one-computer.htm
de computador, os programadores utilizam linguagens
que esto mais prximas da linguagem humana, que so chamadas de 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, dentre muitas outras.

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. Neste 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 de linguagem de baixo nvel.

A figura 1 mostra a relao entre as linguagens discutidas anteriormente.

Linguagens de Alto Nvel

Linguagem Linguagens
de Mquina Humanas

Linguagem
Assembly
Figura 1
Relao entre linguagens de baixo e de alto nvel
9

Em uma 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 limitados 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. Desta forma, existem diversos compiladores
especficos para cada uma das linguagens de programao e especficos para cada
sistema operacional, conforme ilustra a figura 2.

Programa escrito em linguagem de alto nvel

Compilador para o Compilador para o Compilador para o


Sistema Sistema Sistema
Operacional X Operacional Y Operacional Z

Programa em Programa em Programa em


Linguagem de Linguagem de Linguagem de
Mquina para o Mquina para o Mquina para o
computador X computador Y computador Z

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

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 de assembler.

Caro aluno, dadas estas explicaes bsicas, como unir todas estas 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 deste ciclo explicado a seguir.

editor cdigo compilador cdigo


algoritmo fonte objeto

arquivos de
biblioteca
linker

cdigo
executvel
Figura 3
Do algoritmo execuo de um programa de computador

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 um 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.
11

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 este processo, caro aluno, vamos precisar passar por 5 etapas:
primeiro obter um problema a ser resolvido, depois escrever um algoritmo em pseudo-
linguagem para solucionar este problema, depois traduzir o algoritmo para a linguagem de
programao C e finalmente, editar este programa e usar um compilador C para testarmos
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 este ciclo de etapas com sucesso, quer dizer, para conseguirmos
fazer programas de computador com qualidade e confiveis, muito importante a
utilizao de tcnicas programao como a programao estruturada. A programao
estruturada uma metodologia de projeto e desenvolvimento, que pretende:
- 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. Esta metodologia, quando utilizada, induz o programador a
produzir programas:
- confiveis
- de fcil manutenibilidade
- flexveis
- documentados
- legveis

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

1.4. Expresso de Algoritmos


Os algoritmos podem ser expressos atravs de diagramas, atravs de pseudo-
linguagens ou atravs da prpria linguagem de programao. Vamos examinar cada uma
destas trs opes e, no final deste captulo, vamos optar por uma delas para que
possamos comear a fazer nossos primeiros algoritmos!

1.4.1. 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., so utilizadas
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, estes mtodos apresentam uma srie de inconvenincias 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 impraticvel 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
13

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 este
algoritmo faz? Quais as variveis que ele utiliza e de que tipo bsico elas so? (Dica: este
algoritmo faz a mesma coisa que o expresso pelo diagrama de Chapin da figura 4).

Figura 5
Algoritmo expresso atravs de
um Fluxograma

1.4.2. 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
aprenderem a programar se forem direto s instrues da linguagem de programao...
14

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 de 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 um
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 recebem alguns rtulos por isso, como linguagens
para aplicaes cientficas, linguagens para desenvolvimento de software bsico,
linguagens para utilizao intensiva de recursos grficos, para manipulao de bancos de
dados, etc, etc, e... linguagens para o ensino de programao!
Veja a figura 6. um cdigo escrito em Pascal.

PROGRAM MenorValor;
{ Este programa seleciona o menor nmero em uma sequncia de nmeros
inteiros}

VAR Valor, Menor: INTEGER;

BEGIN
WRITE(Fornea um nmero inteiro: );
READLN(Valor);
Menor := Valor;
WHILE Valor <> -1 DO
BEGIN
IF Valor < Menor
THEN Menor := Valor;
WRITE(Fornea um nmero inteiro (flag=-1): );
READLN(Valor);
END; {while}
WRITELN(O menor valor lido foi: , Menor);
END.
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
este algoritmo faz? Quais as variveis que ele utiliza e de que tipo bsico elas so? (Dica:
este 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.
15

/* Este programa seleciona o menor nmero em uma sequncia de


nmeros inteiros */

#include <stdio.h>

int valor, menor;

void main (void){


printf (\n Fornea um nmero inteiro: );
scanf (%i, &valor);
menor = valor;
while (valor != -1){
if (valor < menor)
menor = valor;
printf(\nFornea um nmero inteiro (1 para terminar): );
scanf (%i, &valor);
}
printf (O menor valor lido foi: %i , menor);
}
Figura 7
Algoritmo expresso na Linguagem de Programao C

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 este algoritmo faz?
Quais as variveis que ele utiliza e de que tipo bsico elas so? (Dica: este 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 adequada 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 o que se aprender de lgica de
programao! Garanto que no final do curso este programa vai parecer muito, muito fcil
para voc!
16

1.4.3. 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
pseudo-linguagem, 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 pseudo-linguagem, 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
pseudo-linguagem, 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 lado, tem a liberdade de expressar seu raciocnio sem esbarrar em
limitaes de contexto;
Uma vez estando pronto o algoritmo na pseudo-linguagem, 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.

Veja o exemplo de um algoritmo escrito na Pseudolinguagem PortuC, apresentado


na figura 8.
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
este algoritmo faz? Quais as variveis que ele utiliza e de que tipo bsico elas so? (Dica:
este 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).
Este algoritmo em C corresponde ao programa em C mostrado na figura 7. Observe
a grande semelhana entre eles. Essa semelhana proposital, com certeza. O PortuC
quase que 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!
17

/* Este programa seleciona o menor nmero em uma sequncia de


nmeros inteiros */

int valor, menor;

principal( ){
imprima (Fornea um nmero inteiro: );
leia (%i, &valor);
menor = valor;
enquanto (valor != -1){
se (valor < menor)
menor = valor;
imprima (Fornea um nmero inteiro(1 para terminar): );
leia (%i, &valor);
}
imprima(O menor valor lido foi: %i , menor);
}

Figura 8
Algoritmo expresso na Pseudolinguagem de PortuC

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 escrevermos nossos primeiros algoritmos! As
justificativas dessa nossa escolha so muitas e foram j fundamentadas. A
Pseudolinguagem C utiliza o portugus, numa forma estruturada, e tem estrutura, sintaxe e
semntica muito semelhantes s da linguagem de programao C.
Apesar do 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#, o Objective C e at para programar apps
para o Android.
18

Em funo disto, a linguagem C passou a ser alvo do interesse dos estudantes. A


resistncia, que j existiu, 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 fazendo1. 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 pseudo-linguagem, 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.
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 estudante, mais
duas lies e voc j estar fazendo seus primeiros programas de computador!

1
Kernighan, B. , Ritchie, D. C- A Linguagem de Programao Padro ANSI, So Paulo: Campus, 1989.
19

Lista de Exerccios 1.1

1.1.1)
1. Tambm houve 21 de Abril de 1984 no Brasil??

2. Quantos aniversrios teve uma pessoa que viveu 50 anos?

3. Alguns meses tem 31 dias, quantos tm 28?

4. Quantos noves (9) existem entre 0 e 100?

5. correto que um homem se case com a irm de sua viva?

6. Divida 30 por 1/2 e some 10. Qual o resultado?

7. Se h 3 mas e pega em 2, quantas tem?

8. Um mdico receita trs comprimidos e diz para tomar um a cada meia hora, quantos minutos duram os
comprimidos?

9. Um pastor tem 17 ovelhas. Todas morrem, menos 9. Quantas ficam?

10. Quantos animais de cada espcie Moiss colocou na arca?

11. Quantos selos de sessenta centavos h numa dzia?

1.1.2)
01. Meu pai tem 42 anos de idade. Meu cachorro tem 8. Se fosse um ser humano, a idade de meu cachorro
seria 56 anos. Quantos anos teria meu pai se ele fosse um cachorro?
a. 5
b. 6
c. 7
d. 8
e. 9

02. Um senhor, olhando para um retrato, diz: O pai deste homem o pai de meu filho.
Ele est olhando para:
a. seu prprio retrato
b. retrato de seu pai
c. retrato de seu filho
d. retrato de seu av
e. retrato de seu neto

03. No segundo domingo do ms de maio, comemora-se o dia das mes. Este dia, poder cair:
a. de 7 a 14 de maio
b. de 8 a 15 de maio
c. de 8 a 14 de maio
d. de 6 a 15 de maio
e. de 7 a 13 de maio
20

04. Certa bactria se multiplica to rapidamente que seu nmero dobra a cada minuto. Num caco de vidro ela
se multiplica de tal maneira que, em 60 minutos enche a metade do mesmo. Em quanto tempo estar cheio
totalmente?
a. 61 min
b. 90min
c. 120min
d. 180 min
e. 240 min

05. Em uma jarra cabem um litro mais meia jarra. A capacidade da jarra :
a. 1 litro
b. 1,5 litros
c. 2 litros
d. 2,5 litros
e. 3 litros

06. Numa rvore pousam pssaros. Se pousarem 2 pssaros em cada galho, fica um galho sem pssaros.
Se pousar um pssaro em cada galho, fica um pssaro sem galho. O nmero de pssaros :
a. 2
b. 3
c. 4
d. 5
e. 6

07. Sabendo-se que seis raposas, em seis minutos, pegam seis galinhas, pergunta-se: quantas raposas em
cem minutos pegaro cem galinhas ?
a. 100
b. 36
c. 18
d. 6
e. 1

08. Uma pessoa que gosta somente das pessoas que no gostam de si mesmas:
a. gosta de si mesma
b. no gosta de si mesma
c. gosta de algum
d. no gosta de ningum
e. no existe

09. Em uma urna existem 38 bolas que se diferenciam apenas pela cor: 15 vermelhas, 15 amarelas e 8
azuis. Uma pessoa com os olhos vendados retira uma bola de cada vez da caixa. Qual o nmero mnimo de
bolas que deve ser retirado para que ela tenha certeza que saram duas bolas da mesma cor?
a. 16
b. 9
c. 8
d. 4
e. 3
21

10. Dispem-se de alguns livros de Fsica do autor A, outros do autor B e outros do autor C. Da mesma
forma, temos alguns livros de Qumica do mesmo autor A, outros de B e outros de C. Todos os livros devem
ser colocados em duas caixas com o seguinte critrio: na primeira caixa deve-se colocar todos os livros que
satisfaam a seguinte condio: "se for do autor A, ento no pode ser de Fsica". Na segunda caixa, os
livros que no satisfaam a essa proposio. A primeira caixa deve conter exatamente:

a. todos os livros de Fsica ou de Qumica dos autores B e C mais todos os livros de Qumica do autor A.
b. todos os livros de Qumica do autor A mais todos os livros de Fsica dos autores B e C.
c. todos os livros de Fsica dos autores B e C.
d. todos os livros de Fsica do autor A.
e. todos os livros de Qumica dos autores A, B e C.

11. Escreva o nmero seguinte nessa seqncia 0, 1, 1, 2, 3, 5, 8,


a. 9
b. 10
c. 11
d. 12
e. 13

12. Guilherme, lvaro e Man acabaram de terminar um lanche. Um dos trs rapazes comeu um lanche de
presunto, outro um lanche de peru, e o terceiro, um lanche de frango. Apenas uma das afirmaes abaixo
verdadeira:
Guilherme comeu o lanche de peru
Guilherme no comeu o lanche de frango
lvaro no comeu o lanche de frango
lvaro no comeu o lanche de presunto
Ento, Guilherme, lvaro e Man comeram respectivamente, os lanches de:

a. presunto, frango, peru


b. presunto, peru, frango
c. peru, frango, presunto
d. peru, presunto, frango
e. frango, presunto, peru

13. Escreva o nmero seguinte nessa seqncia 0, 1 , 1 , 2, 4, 7, 13, 24,


a. 44
b. 45
c. 46
d. 47
e. 48

14. Um missionrio foi capturado por canibais em uma floresta. Os canibais ento fizeram-lhe a
seguinte proposta:
- Se fizer uma declarao verdadeira, ser cozido com batatas.
- Se fizer uma declarao falsa, ser assado na churrasqueira.
Como o missionrio usar a lgica, podemos concluir que:
a. ser cozido
b. ser assado
c. no poder ser cozido nem assado
d. ser cozido e assado ao mesmo tempo
e. Dir: " ruim, hein?"
22

15. O algarismo das unidades do nmero N =1 x 3 x 5 x 7 x 9 x ...... x 999


a. 1
b. 3
c. 5
d. 7
e. 9

16. Continuando a seqncia de letras F, N, G, M, H . . ..., ..., temos, respectivamente:


a. O, P.
b. I, O.
c. E, P.
d. L, I.
e. D, L.

17. Continuando a sequncia 4, 10, 28, 82, ..., temos:


a. 236
b. 244
c. 246
d. 254
e. 256

18. Em uma avenida reta, a padaria fica entre o posto de gasolina e a banca de jornal, e o posto de gasolina
fica entre a banca de jornal e a sapataria. Logo:
a. a sapataria fica entre a banca de jornal e a padaria.
b. a banca de jornal fica entre o posto de gasolina e a padaria.
c. o posto de gasolina fica entre a padaria e a banca de jornal.
d. a padaria fica entre a sapataria e o posto de gasolina.
e. o posto de gasolina fica entre a sapataria e a padaria.

19. Um tcnico de futebol, animado com as vitrias obtidas pela sua equipe nos ltimos quatro jogos, decide
apostar que essa equipe tambm vencer o prximo jogo. Indique a Informao adicional que tornaria menos
provvel a vitria esperada.

a. Sua equipe venceu os ltimos seis jogos, em vez de apenas quatro.


b. Choveu nos ltimos quatro jogos e h previso de que no chover no prximo jogo.
c. Cada um dos ltimos quatro jogos foi ganho por uma diferena de mais de um gol.
d.O artilheiro de sua equipe recuperou-se do estiramento muscular.
e. Dois dos ltimos quatro jogos foram realizados em seu campo e os outros dois, em campo adversrio.

20. Todos os que conhecem Joo e Maria admiram Maria. Alguns que conhecem Maria no a
admiram. Logo:
a. todos os que conhecem Maria a admiram.
b. ningum admira Maria.
c. alguns que conhecem Maria no conhecem Joo.
d. quem conhece Joo admira Maria.
e. s quem conhece Joo e Maria conhece Maria.
23

Resposta do Exerccio 1

Exerccio 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
24

Captulo 2
Pseudolinguagem de Programao:
PortuC

Caro aluno, 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 esta lngua,
claro. Ento, neste nosso curso, voc est
ganhando a chance nica de aprender a
programar...ento 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.

Um identificador em PortuC formado por caracteres alfanumricos.


O primeiro caracter 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 caracter 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...).
25

Exemplos de identificadores vlidos:


NOME, raiz1, letra4, Total_dos_Salarios, Nome_de_Familia

Exemplos de identificadores invlidos:


4pontos (comea com nmero)
CUSTO FINAL (tem espao em branco)
PreoTotal (caracter no pode ser usado)
Pessoa+Alta (caracter + no pode ser usado)
Preco-caro (caracter - no permitido)
Total_dos_salrios (palavra acentuada)
inteiro (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.

H trs tipos bsicos que podem ser associados s variveis:


inteiro
real
caracter
Para se 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 caracter maisculo ou minsculo as diferencie.

Exemplos de declarao de variveis vlidos:


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

Exemplos de declarao de variveis INVLIDOS:


caracter 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)
carater Nome_de_Familia[30]; (o nome do tipo bsico est errado)
real SOMA; (a varivel SOMA j foi declarada: um identificador no pode ser duplicado)
26

2.3. Comando de Atribuio


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

O smbolo do comando de atribuio =


No se deve atribuir a uma varivel um valor que NO seja compatvel com o tipo bsico
desta 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 caracter.
Caso no haja compatibilidade de entre o dado e o tipo da varivel, podem acontecer efeitos
indesejados. Ento, muito cuidado, pois neste 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 )

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; este caso est sujeito converso automtica)

soma := 0;
(o smbolo do comando de atribuio = e no :=)
27

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.

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);
28

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 caracter 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 sempre FALSO (avaliado como zero) ou
VERDADEIRO (avaliado como diferente de zero).

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 so 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 so 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 aluno, aqui cabe uma explicao um pouco mais detalhada para melhorar o
entendimento dos operadores lgicos E, OU e ! (no):
29

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:

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 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.
30

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 abaixo. (Na funo E
somente se ambas as entradas forem verdadeiras, a expresso avaliada como
verdadeira).

Uma funo OU resulta em 1=VERDADEIRO se pelo menos uma das variveis


lgicas de entrada tiverem 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 abaixo. (Na funo OU basta que uma entrada seja verdadeira para a
expresso ser avaliada como verdadeira).
31

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)

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 se obter o resultado
lgico da comparao)
32

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).

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 ==


que significa comparao!

Exemplos de expresses relacionais vlidas:


se (resposta == S)
se (resposta == S ou resposta == s)
se (resposta != S e resposta != s)
se (sexo == F 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: operador no pode haver espao em
branco entre o < e o =)

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!)
33

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, neste exemplo, a pessoa avalia a
condio do tempo antes de decidir se sair de
carro ou de bicicleta e no h possibilidade
dela sair com ambos os meios de transporte!

A sintaxe do comando condicional :


se (<condio>){

<bloco de comandos 1>


}
seno {

<bloco de comandos 2>


}

A semntica (como funciona) do comando condicional :


1. A <condio> avaliada como VERDADEIRA (valor diferente de zero) ou FALSA
(valor igual a zero);
2. Se a <condio> for VERDADEIRA, o <bloco de comandos 1> executado e o
comando condicional finalizado;
3. 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. Neste 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.
34

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 )


35

se (media >= 7.0)


aprovado = 1
seno
aprovado = 0;
(faltou ; depois do comando aprovado = 1)

se (media >= 7.0){


aprovado = 1;
++contadoraprovados;
}
seno
aprovado = 0
(novamente faltou ; aps o comando aprovado = 0)

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


aprovado = 1;
++contadoraprovados;
}
seno
aprovado = 0;
++contadorreprovados;
}
(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.
36

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, neste 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.

A sintaxe do comando de repetio :


enquanto (condio){

<bloco de comandos>
}

A semntica (como funciona) do comando de repetio :


1. A condio avaliada como VERDADEIRA (diferente de zero) ou FALSA (igual
a zero);
2. Se a condio for VERDADEIRA, o <bloco de comandos> executado e, ao se
chegar ao delimitador de fim } ou final do comando, automaticamente se retorna
avaliao da condio;
3. Se a condio for FALSA, o comando de repetio finalizado.

Dentre 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;
}
37

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;

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

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!)
38

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.

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 para variveis do tipo inteiro (integer)
%f para variveis do tipo real (float)
%c para variveis do tipo caracter (nico) (character)
%s para variveis do tipo caracter (cadeia ou string)

O smbolo & deve ser utilizado apenas para os tipos numricos, ou seja, para variveis declaradas
como inteiro ou real.

A semntica (como funciona) do comando de entrada :


1. A varivel tem que ter sido previamente declarada;
2. O usurio vai se utilizar do 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.
39

A tabela abaixo 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;
caracter ch; leia(%c, ch); ch = 5;
ch = s;
ch = #;
caracter nome[20]; leia(%s, nome); nome = Maria;
nome = fim;

Observe na tabela a diferena entre a declarao, leitura e


atribuio de valores a um caracter nico (%c) e a uma cadeia de
caracteres ou string (%s). Um nico caracter vem entre apstrofos e
um string entre aspas !

A sintaxe do comando de sada :

imprima( frase e %letra [, lista de variveis] );

Entre 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, neste 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 :


1. Pode ser impressa qualquer frase e qualquer varivel dentro de um comando imprima, desde
que a frase esteja entre aspas e as variveis estejam devidadmente listadas aps a vrgula que
separa a frase da lista de variveis;
2. A frase entre aspas copiada integralmente para a tela e os especificadores de formato so
substitudos pelas variveis da lista de variveis;
3. Quando existe uma varivel, o seu contedo copiado para a tela;
4. A ordem em que as palavras da frase e as variveis aparecem no comando imprima
mantida quando impressa na tela.
40

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)

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 caracter (%c e %s) )
41

Explicao 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

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);

2.10. Separador de comandos


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

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!)
42

2.11. Comentrios
Os comentrios no pertencem s instrues do algoritmos, mas so teis para que
o programador explique o que est sendo feito.

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%

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 C pode ser visto abaixo.

O Bloco de Programa em PortuC tem a forma:

/* comentrios */

<declarao de variveis>;

principal(){

<bloco de comandos>;
}

desejvel que todo algoritmo escrito em PortuC deva comear 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 ;
e estes devem estar contidos entre os delimitadores { e }. Nenhum comando pode ser usado fora
desta seo.
importante notar que letras maisculas e minsculas alteram os identificadores e as palavras
reservadas do PortuC.
43

Exemplos de programas escritos em C vlidos:

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


dizendo se masculino, feminino ou invalido */

caracter 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.);
}

/* 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.);


}
44

/* 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.);


}
45

Exemplos de programas INVLIDOS:

caracter sexo, caracter[20];

principal ( ){
imprima (Qual eh o seu nome? );
leia(%s,caracter);
imprima (Qual eh o seu sexo? (F/M) );
leia (%c,sexo);

se (sexo == F)
imprima (%s voce eh do sexo feminino. ,caracter);
seno
imprima (%s voc eh do sexo masculino. ,caracter);
}
(A varivel caracter tem o mesmo nome da palavra reservada caracter)

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)
46

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!)

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)
47

Captulo 3
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.

leia (%i,&numero);

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

imprima(Forneca um numero inteiro: );


leia (%i,&numero);

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

imprima(Forneca um numero inteiro: );


leia (%i,&numero);
imprima(O numero lido foi: %i, numero);

4) Repita o exerccio 3 para um nmero real.

imprima(Digite a sua altura: );


leia (%f,&altura);
imprima(A altura digitada foi: %.2f , altura);

Explicao adicional: 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?
48

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


inteiro numero;
real altura;

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

imprima(Qual eh o seu nome? );


leia(%s,nome);
imprima(Qual eh a sua idade? );
leia (%i,&idade);
imprima(Nome lido: %s e idade lida: %i ,nome,idade);

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.

se (idade > 17)


imprima(Voce eh um adulto(a) );

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.

se (idade < 13)


imprima(Voce eh uma crianca );

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...

se (idade >= 13 e idade <= 17)


imprima(Voce eh um adolescente );
49

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

se (idade >= 0 e idade <= 12)


imprima(Faixa etaria: criana );
seno se (idade >=13 e idade <= 17)
imprima (Faixa etaria: adolescente);
seno se (idade >= 18 e idade <=120)
imprima (Faixa etaria: adulto(a));
seno imprima (Idade invalida );

3.3. Bloco de Programa

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


PortuC.
/* nomeidade.c: programa que l o nome e a idade de uma pessoa */

caracter nome[20];
inteiro idade;

principal(){
imprima(Qual eh o seu nome? );
leia(%s,nome);
imprima(Qual eh a sua idade? );
leia(%i,&idade);
imprima(Nome lido: %s e idade lida: %i ,nome,idade);
imprima(Fim do programa );
}
50

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.

/* fxetaria.c: programa que define a faixa etaria de uma pessoa */

caracter nome[20];
inteiro idade;

principal(){

imprima(Qual eh o seu nome? );


leia(%s,nome);
imprima(Qual eh a sua idade? );
leia (%i,&idade);
imprima(Nome lido: %s e idade lida: %i ,nome,idade);

se (idade >= 0 e idade <= 12)


imprima(Faixa etaria: crianca );
seno se (idade >=13 e idade <= 17)
imprima (Faixa etaria: adolescente);
seno se (idade >= 18 e idade <=120)
imprima (Faixa etaria: adulto(a));
seno imprima (Idade invalida );

imprima(Fim do programa );

}
51

Lista de exerccios 3.1

Com os 12 exerccios anteriores, voc deve ter j uma boa base... Agora hora de
voc praticar um pouco sozinho! A minha forte recomendao que voc faa os
exerccios sozinho, consultando os exemplos anteriores para ajud-lo... Somente
depois da sua tentativa que voc deve conferir as respostas... Boa sorte!

3.1.1) Escreva um algoritmo que leia e imprima o nome e as duas notas de um aluno.

3.1.2) Escreva um comando que calcule a mdia das duas notas lidas no exerccio
3.1.1.

3.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.

3.1.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.

3.1.5) Escreva um algoritmo que leia o nome e as duas notas de um aluno. Valide se
as notas esto entre 0 e 10. Se estiverem, calcule a mdia das notas e imprima uma
frase dizendo se ele foi aprovado (mdia maior ou igual a 7.0) ou reprovado. Se no
estiverem apenas envie uma mensagem de erro e finalize o programa.
52

3.4. Operaes Bsicas com Nmeros: soma, subtrao, multiplicao,


diviso, raiz quadrada, porcentagem, potncia, diviso inteira

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

soma = n1 + 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.

subtracao = n1 - n2;
multiplicacao = n1 * n2;

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

15) Escreva um comando para dividir dois nmeros n1 por 22.

Antes de dividir um nmero n1 (numerador) por um nmero n2 (denominador)


necessrio que verifiquemos primeiro 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...

se (n2 != 0){
divisao = n1/n2;
imprima(%i dividido por %i = %f,n1,n2,divisao);
}
seno
imprima(Divisao por zero nao existe! );

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.

quadrado = n1*n1;
cubo = n1*n1*n1;
53

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...

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

se (n1 > 0) {
raiz = sqrt(n1);
imprima(Raiz quadrada de %i = %f,n1,raiz);
}
seno
imprima(Nao existe raiz de numero negativo! );

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. Este 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
se da diviso
(n2 != 0)inteira
{ de n1 (numerador) por um nmero n2 (denominador)
tambm quociente
necessrio que
= on1denominador
/ n2; seja diferente de zero.
resto = n1 % n2;
imprima(divisao inteira de %i por %i tem quociente = %i e
resto = %i ,n1,n2,quociente, resto);
}
seno
imprima(Divisao por zero nao existe! );

Neste 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 ?)
54

Explicao adicional: Qual a diferena entre diviso real e diviso


inteira?

7 / 2 = 3.5 3.5 este o resultado da diviso real

7 2 7 / 2 = 3 (quociente da diviso inteira)


-6 3 7 % 2 = 1 (resto da diviso inteira)
1

19) Escreva um comando para calcular 10% de um valor. E outro para acrescentar os 10%
ao valor original.

porc = valor * 0.10;


valorfinal = valor * 1.10;
// ou valorfinal = valor + porc;

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%, 0.15 para 15%, 0.06 para 6%, etc.

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.

desconto = preco * 0.05;

precofinal = preco desconto;


55

21) Escreva comandos para separar os dgitos de um nmero inteiro menor que 100 em
dezena e unidade.

Vamos entender primeiro 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.

dezena = n1 / 10;
unidade = n1 % 10;

Vamos fazer um pequeno teste: 29 dividido por 10 d 2 e sobram 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 sobram 3. Neste 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?

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 em 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 sobram 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 sobram 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?

anoentrada = n1 / 1000;
56

3.5. Operaes com Operadores Lgicos e Relacionais

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

se (n1 > 0)
imprima(%i eh positivo. , n1);
seno se (n1 < 0)
imprima(%i eh negativo. , n1);
seno
imprima (Numero eh zero);

24) Escreva um comando para verificar se um nmero par ou mpar.

Um nmero par aquele que dividido por 2 o resto zero: 0, 2, 4, 6, 8, 10.... e um


nmero mpar aquele que dividido por 2 o resto diferente de zero: 1, 3, 5, 7, 9...

se (n1 % 2 == 0)
imprima(%i eh par. , n1);
seno
imprima(%i eh impar. , n1);

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

se (n1 > 100)


imprima(%i eh maior que 100,n1);
seno
imprima(%i eh menor ou igual a 100 ,n1);

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

se (n1 >= 0 e n1 <= 10)


imprima(%i esta entre 0 e 10,n1);
seno
imprima(%i nao esta entre 0 e 10,n1);

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!
57

27) Suponha que um certo clube esportivo quer selecionar atletas para o time de basquete.
As exigncias so: ter 1.85m 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.

se (altura >= 1.85 e idade < 21 e instrucao >= 1)


imprima(Candidato aprovado para o basquete.);
seno
imprima(Candidato reprovado para o basquete.);

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.85m. O mesmo acontece com a idade, em que os anos foram (e devem) ser
omitidos.

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.

se (((sexo == m e altura>=1.85) ou (sexo == f e altura>=1.75))


e idade < 21)
imprima(Candidato/a aprovado/a para o basquete.);
seno
imprima(Candidato/a reprovado/a para o 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 porqu assim...
58

Lista de Exerccios 3.2

3.2.1) Considere o trecho de algoritmo em PortuC:


se (B1)
C1;
seno se (B2)
se (B3)
C2;
seno
{ C3;
C4;
}

C5;

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?

3.2.2) Dado um conjunto de respostas sim ou no de vrias pessoas e seu sexo


(F=feminino, M=masculino), escreva comandos em PortuC para:
a) verificar se mulher e respondeu sim
b) verificar se homem e respondeu no
c) verificar se mulher ou homem e respondeu no

3.2.3) Observe o algoritmo abaixo. Qual o valor de L aps a execuo desse 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;
}
59

3.2.4) Escreva os trechos de algoritmo em PortuC que ajudem o IBGE a fazer o senso
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 -
s.m.), 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 s.m.), da classe B (at 20 s.m.) e da classe
A (acima de 20 s.m.)

3.2.5) 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 aos limites acima, deve ser impressa uma frase
dizendo que ela foi aprovada, caso contrrio, que no foi aprovada.

3.2.6) 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.
60

Captulo 4
A Linguagem de Programao C
Neste captulo, voc, caro aluno, poder comear a traduzir seus primeiros
algoritmos para a linguagem de programao C. Isso o 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 fazendo os
programas da lista 4.1 como atividades extra-classe. O interessante em se utilizar o
PortuC como pseudo-linguagem, que ele segue quase totalmente as mesmas regras da
linguagem C. Assim, comear a programar em C ser muito fcil, voc ver!

4.1. Tipos Bsicos e Declarao de Variveis em C

Um identificador em C formado por caracteres alfanumricos.


O primeiro caracter 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 caracter 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 cinco 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
O tipo de dados long int (%ld) corresponde ao int, 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 ; 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 caracter maisculo ou minsculo as diferencie.
61

Exemplo de declarao de variveis vlido:


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;

4.2. Comando Condicional em C (if)

A sintaxe do comando condicional :


if (condio) {
<bloco de comandos 1>
}
else {
<bloco de comandos 2>
}
A semntica (como funciona) do comando condicional if :
1. A <condio> avaliada como VERDADEIRA (valor diferente de zero) ou
FALSA (valor igual a zero);
2. Se a <condio> for VERDADEIRA, o <bloco de comandos 1> executado e
o comando condicional finalizado;
3. 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. Neste 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.

Exemplos de comandos condicionais VLIDOS:


if (media >= 7.0)
aprovado = 1;

if (media >= 7.0){


aprovado = 1;
}
62

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 positivo);
else if (numero < 0)
printf(\nNumero negativo);
else
printf(\nNumero zero);
63

Exemplos de comandos condicionais INVLIDOS:


if media >= 7.0
aprovado = 1;
(faltou colocar parnteses na condio)

if (media >= 7.0) {


aprovado = 1;
++contadoraprovados;

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

if (media >= 7.0)


aprovado = 1
else
aprovado = 0;
(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)
64

4.3. Operadores de Atribuio, Aritmticos, Relacionais e Lgicos


(Binrios) em C

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)

Funcionamento dos operadores lgicos em C


Operador Lgico Ao

&& avalia como 1 (verdadeiro) se ambas expresses forem


(e) verdadeiras, caso contrrio, avalia como 0 (falso)
|| avalia como 1 (verdadeiro) se pelo menos uma expresso for
(ou) verdadeira, caso contrrio, avalia como 0 (falso)
! avalia como 1 (verdadeiro) se a expresso for falsa e 0 (falso) se
(no) a expresso for verdadeira, ou seja, troca verdadeiro por falso e
vice-versa
65

Expresses conectadas por operadores lgicos so avaliadas da esquerda para a


direita e a avaliao para to logo a veracidade ou falsidade do resultado for
reconhecida
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) /* avalia como 1 (verdadeiro) */
(3 >= 2) || (4 == 2) /* avalia como 1 (verdadeiro) */
(3 <= 2) || (4==2) /* avalia como 0 (falso) */
! (4==2) /* avalia como 1 (verdadeiro) */
! (4>3) /* avalia como 0 (falso) */

Exemplos de expresses lgicas e relacionais vlidas:


if (altura > 1.80 && idade < 21 && escolaridade >= 2)
if (idade >= 13 && idade <=20)
if ((media >= 7.0 && faltas <= 18) || foidispensado == 1)
if !(numero % 2 == 0)
if (resposta == S)
if (resposta == S || resposta == s)
if (resposta != S && resposta != s)
if (sexo == F && altura <= 1.50)
if (cont=0 && soma !=0)
(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!!)

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 =)
66

if (altura < = 1.50)


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

if 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); // sqrt() est na biblioteca <math.h>

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 que esto na biblioteca <string.h>)
67

4.4. Comando de Repetio em C (while)

A sintaxe do comando de repetio while :

while (condio) {
<bloco de comandos>
}

A semntica (como funciona) do comando de repetio while :


1. A condio avaliada como VERDADEIRA (diferente de zero) ou FALSA (igual a
zero);
2. Se a condio for VERDADEIRA, o <bloco de comandos> executado e, ao se
chegar ao delimitador de fim } ou final do comando, automaticamente se retorna
avaliao da condio;
4. Se a condio for FALSA, o comando de repetio finalizado.

Dentre 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
comado 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;
}
68

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

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!)
69

4.5. Comandos de Leitura e Escrita em C

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 caracter 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, & variavel);

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

variavel = getche(); //para variveis do tipo char (nico)

gets(variavel); //para variveis do tipo char (string)

A tabela abaixo 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 Exemplos de contedos Biblioteca a


ser includa
int numero; scanf(%i, &numero); numero = -5; stdio.h
numero = 2002;
float valor; scanf(%f, &valor); valor = -5.867; stdio.h
valor = 2002.50;
char c; c=getche(); c = 5; conio.h
c = s;
c = #;
char nome[20]; gets(nome); Atribuio somente conio.h
atravs de funo: string.h
strcpy(nome, Ana);
70

A sintaxe dos comandos de sada :

printf(\n frase %letra , <lista de variveis>);

puts(\n frase);

O comando puts imprime apenas frases (ou strings), no imprime variveis e no aceita
formatos.

No comando printf, entre 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, neste 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
Explicao passo-a-passo do comando de impresso printf:
posio dentro das aspas em ambos os comandos, puts e printf, e opcional.

printf (frase
O comando putsvarivel1 varivel2
salta uma linha varivel3);
aps a impresso da frase, mesmo sem \n e no
imprime variveis.
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

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);
71

Exemplos de comandos de entrada e sada vlidos:


puts (Qual eh o seu nome? );
gets(nome);
puts(\nSeu nome eh: );
puts(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);

4.6. 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.

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%
72

4.7. Bloco de Programa em C

O Bloco de Programa em C tem a forma:

/* comentrios */
<incluso de bibliotecas>

<declarao de variveis>

int 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 ; e estes
devem estar contidos entre os delimitadores { e }. Nenhum comando pode ser usado fora desta
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().
Nestes casos, necessrio colocar-se o comando return 0; antes de finalizar o programa.
73

Exemplo de programas escrito 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;
}

/* teste.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(%i,&opcao);

if (opcao == 1)
printf(\nVoce precisa ler mais sobre a historia grega !);
if (opcao == 2)
printf(\nEle chegou nos paises vizinhos...);
if (opcao == 3)
printf(\n Naturalmente voce eh um f da carta do descobrimento!);
if (opcao == 4)
printf(\n Resposta certissima !);
if (opcao < 1 || opcao > 4)
printf(\nVoce nao escolheu nenhuma das alternativas validas.);

printf(\n Fim do programa );


getch();
return 0;
}
74

4.8. Operaes Bsicas com Nmeros: +, -, *, /, ++, --, %,sqrt()


Caro aluno, aqui h uma srie de comandos em C que ilustram o uso dos principais
operadores aritmticos. A declarao das variveis fica por sua conta!

soma = n1 + n2;
subtracao = n1 - n2;
multiplicacao = n1 * n2;
--n1; //subtrai 1 de n1
++n1; // soma 1 a n1

quadrado = n1*n1;
cubo = n1*n1*n1;

if (n1 > 0){


raiz = sqrt(n1);
printf(\nRaiz quadrada de %i = %.4f,n1,raiz);
}
else
printf(\nNao existe raiz de numero negativo! );

if (n2 != 0){
quociente = n1 / n2;
resto = n1 % n2;
printf(\ndivisao inteira de %i por %i tem quociente = %i e
resto = %i ,n1,n2,quociente, resto);
}
else
printf(\nDivisao por zero nao existe! );

Explicao adicional: Qual a diferena entre diviso real e diviso


inteira?

7 / 2 = 3.5 3.5 este o resultado da diviso real

7 2 7 / 2 = 3 (quociente da diviso inteira)


-6 3 7 % 2 = 1 (resto da diviso inteira)
1

if (n2 != 0){
divisaoreal = (float) n1/n2;
printf(\n %i dividido por %i = %.4f,n1,n2,divisaoreal);
}
else
printf(\nDivisao por zero nao existe! );
75

porc = valor * 0.10; // calcula 10% de valor


valorfinal = valor * 1.10; // ou valorfinal = valor + porc;

desconto = preco * 0.05; // 5% de desconto


precofinal = preco desconto;

dezena = n1 / 10; //obtem a dezena de n1, que deve ter 2 dgitos


unidade = n1 % 10; //obtem a unidade de n1, que deve ter 2 dgitos

anoentrada = n / 1000;
//obtem os 2 primeiros digitos de n, que deve ter 5 digitos

4.9. Operaes com Operadores Lgicos e Relacionais: &&, ||, !, >, >=, <, <=,
==, !=

if (n1 > 0)
printf(\n%i eh positivo. , n1);
else if (n1 < 0)
printf(\n%i eh negativo. , n1);
else
printf(\nNumero eh zero);

if (n1 != 0 && n1 >= 1)


printf(\n%i eh positivo e diferente de zero,n1);
else
printf(\n%i eh zero ou negativo ,n1);

if (n1 % 2 == 0)
printf(\n%i eh par. , n1);
else
printf(\n%i eh impar. , n1);

if (n1 % 2)
printf(\n%i eh impar. , n1);
else
printf(\n%i eh par. , n1);
76

contpar=contimpar=0;

if ( !(n1 % 2)){
printf(\n%i eh par. , n1);
++contpar;
}
else {
printf(\n%i eh impar. , n1);
++contimpar;
}

if (n1 > 100)


printf(\n%i eh maior que 100,n1);
else
printf(\n%i eh menor ou igual a 100 ,n1);

if (n1 >= 0 && n1 <= 10)


printf(\n%i esta entre 0 e 10,n1);
else
printf(\n%i nao esta entre 0 e 10,n1);

if (altura >= 1.10 && altura <= 2.20)


printf(\n%%.2f eh uma altura valida,altura);
else
printf(\n%%.2f eh uma altura invalida,altura);

if (altura >= 1.85 && idade < 21 && instrucao >= 1)


printf(\nCandidato aprovado para o basquete.);
else
printf(\nCandidato reprovado para o basquete.);

if (((sexo == m && altura>=1.85) ||


(sexo == f && altura>=1.75)) &&
idade < 21)
printf(\nCandidato(a) aprovado(a) para o basquete.);
else
printf(\nCandidato(a) reprovado(a) para o basquete.);

_________________________________________________________________________

if (altura >= 1.85 && idade < 21 && instrucao >= 1)


aprovado = 1;
else
aprovado = 0;

if (! aprovado)
printf(\nCandidato reprovado para o basquete.);
else
printf(\nCandidato aprovado para o basquete.);
77

4.10. Traduo de PortuC para a Linguagem C


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

Comandos/Tipos PortuC C
Funo principal principal ( ) int main()
Retorno de funo return

Atribuio = =

Tipos bsicos inteiro int


inteiro longo long int
real float
caracter char

Formatos inteiro %i ou %d
real %f
caracter 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 sem variveis imprima puts

Repetio enquanto while

Operadores lgicos e &&


ou ||
no !
78

Caro aluno, voc deve implementar todos os programas em C dos exemplos a


seguir 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 */

caracter 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();
return 0;
}
79

/* 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 %i anos , idade);

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

/* 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;
}
81

/* 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;

int main(){
printf (\nDigite sua nota final: );
scanf(%f,&nota);

if (nota >= && nota <= 10)


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

printf(\n Fim do programa.);


getch();
return 0;

}
82

Lista de Exerccios 4.1

4.1.1. Traduzir o algoritmo em PortuC para C, implement-lo e test-lo:

/* Eleicoes.c: este programa computa os votos de uma eleio e divulga os nmeros


obtidos e o candidato vencedor. Considera que no h empate*/

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);
}

4.1.2 Faa um programa em C que tem como dado de entrada o nome e o cdigo de origem
de um produto e apresente seu nome e a regio de sua procedncia, de acordo com a
tabela abaixo:
Cdigo de Origem Regio de Procedncia
1 Sul
2 Sudeste
3 Centro-Oeste
4 Norte
5 Nordeste
83

Captulo 5
Metodologia para Construo de
Algoritmos
Neste captulo, caro aluno, 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 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. importante ressaltar que a
metodologia um processo dinmico. Voc pode estar em um 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 e no engess-lo! Vamos em frente!

5.1. Os 10 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.
84

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, em um problema em
que vrios nmeros sero lidos e sua mdia deva 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 se identificar as variveis auxiliares, basta analisar cada uma das
sadas e verificar se, dadas as estradas, 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 gera 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 podem 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 de entrada adequado
ao seu tipo (scanf, gets, geche)
Todo contador e todo somador deve ser inicializado com 0 ( zero)
Todo produtrio 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 programa pode seguir
um esquema bsico, mas vai depender muito da lgica de cada problema. Portanto, o
esquema abaixo serve apenas de uma orientao para o aluno. Cada problema deve, no
entanto, ser analisado logicamente para chegar ao seu algoritmo.
85

/* Nome do Programa e o que ele faz */


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>

<passo 5 declarar todas as variveis do programa>


int main(){
<passo 6 inicializar as variveis do programa >

<passo 7 calcular cada uma das sadas do programa>

<passo 8 imprimir os resultados do programa>


puts(Fim do programa); getch();
return 0;
}

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, em um programa
que trabalhe com flags, deve ser testada a condio em que o valor do flag seja fornecido
como dado inicial; em um programa que s leia nmeros positivos, devem ser fornecidos
nmeros negativos e zero; dentre outras situaes possveis.

5.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, ok? Ento vamos l!
86

Lista de Exerccios 5.1

5.1.1. Escreva um algoritmo em C 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.
5.1.2. Escreva um algoritmo em C para calcular e imprimir a rea de uma esfera. O raio da
esfera ser fornecido pelo usurio. Obs: A = 3.14*R2
5.1.3. Escreva um algoritmo 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 guardados no cofre e cotao do dlar naquele dia.
5.1.4. Escreva um algoritmo em C 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:

5.1.5. Escreva um algoritmo em C que calcule e imprima a quantidade de tijolos iguais


necessrios 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).
5.1.6. Escreva um algoritmo em C 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.
5.1.7. Escreva um algoritmo em C 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.
5.1.8. Escreva um algoritmo em C 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.
5.1.9. Escreva um algoritmo em C 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.
5.1.10. Escreva um algoritmo em C para calcular e imprimir o valor a ser pago pelo perodo de
estacionamento do automvel. O usurio entra com os seguintes dados inteiros: hora e
minuto de entrada, hora e minuto de sada. Sabe-se que este estacionamento cobra R$
10.00 por hora ou frao.
5.1.11. Escreva um algoritmo em C que receba a leitura do termmetro. Caso a temperatura
esteja abaixo de 100C, apresentar a mensagem de que a temperatura est muito
baixa. Caso a temperatura esteja entre 100C e 200C, apresentar a mensagem de que
a temperatura est baixa. Caso a temperatura esteja acima de 200C e inferior a 500C,
apresentar a mensagem de que a temperatura est normal. Caso contrrio, apresentar
a mensagem de que a temperatura est muito alta.
5.1.12. Escreva um programa em C que leia o valor do salrio atual e 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$2000.00. Se o salrio for maior ou
87

igual a 2001.00, mas menor ou igual a R$5000.00, o reajuste deve ser de 10%. Caso o
salrio seja maior que R$5001.00, o reajuste deve ser de 5%.
5.1.13. Escreva um programa em C que determine quanto ser gasto para encher um cilindro
de gs, sabendo-se que o preo do gs oxignio de R$ 250.00, o preo do gs hlio
de R$ 350.00 e o preo do gs nitrognio de R$ 300.00. O usurio fornecer os
seguintes dados: Tipo de gs (as opes como tipo de gs so a letra O oxignio ou
a letra H hlio ou a letra N-nitrognio; rejeitar valores invlidos) e Capacidade do
cilindro em metros cbicos.
88

Ento, caro aluno, vamos s solues passo a passo utilizando nossa metodologia!

Exerccio 5.1.1) Escreva um algoritmo em C 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.

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
float compr, larg, area, perimetro;
Passo 6: inicializar as variveis
printf (\nDigite o comprimento da sala: );
scanf(%f, &compr);
printf (\nDigite a largura da sala: );
scanf(%f, &larg);

Passo 7: calcular as sadas


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

Passo 8: imprimir os resultados


if (area > 0 && perimetro > 0)
printf(\nA sala tem %.1f de area e %.1f de perimetro ,
area,perimetro);
else
printf(\n Nao foi possivel calcular, pois ha dados invalidos.);
89

Passo 9: montar o algoritmo


/*Exerc511.c: Le o comprimento e a largura de uma sala e calcula
sua area e perimetro*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
float compr, larg, area, perimetro;

int main ()
{
printf (\nDigite o comprimento da sala: );
scanf(%f, &compr);
printf (\nDigite a largura da sala: );
scanf(%f, &larg);
area = compr * larg;
perimetro = (2*compr) + (2*larg);
if (area > 0 && perimetro > 0)
printf(\nA sala tem %.1f de area e %.1f de perimetro ,
area,perimetro);
else
printf(\n Nao foi possivel calcular, pois ha dados invalidos.);

printf(Fim do programa);
getch();
return 0;
}

Passo 10: testes de mesa

compr larg area perimetro Sada Tela


2.5 5.0 12.5 15.0

A sala tem 12.5 de area e 15.0 de perimetro

compr larg area perimetro Sada Tela


0 -1.0 0 -2.0 Nao foi possivel calcular, pois ha dados
invalidos.
90

Exerccio 5.1.3) Escreva um algoritmo 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 guardados
no cofre e cotao do dlar naquele dia.

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


printf (\nValor em dolares a ser convertido para reais: );
scanf(%f, &dolares);
printf (\nCotacao do dolar: );
scanf(%f, &cotacao);

Passo 7: calcular as sadas


reais = dolares*cotacao;

Passo 8: imprimir os resultados

if (dolares > 0 && reais > 0)


printf(\nO valor %.2f em dolares corresponde a R$ %.2f,
dolares, reais);
else
printf(\nNao foi possivel calcular, pois ha dados invalidos.);
91

Passo 9: montar o algoritmo


/*Exerc513.c: Le o valor em dolares e a cotacao do dolar e calcula
o valor convertido para reais*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
float dolares, reais, cotacao;

int main (){


printf (\nValor em dolares a ser convertido para reais: );
scanf(%f, &dolares);
printf (Digite a cotacao do dolar: );
scanf(%f, &cotacao);
reais = dolares*cotacao;
if (dolares > 0 && reais > 0)
printf(\nO valor %.2f em dolares corresponde a R$ %.2f,
dolares, reais);
else
printf(\nNao foi possivel calcular, pois ha dados invalidos.);

printf(Fim do programa);
getch();
return 0;
}

Passo 10: testes de mesa

dolares cotacao reais Sada Tela


1000.00 3.75 3750.00
O valor 1000.00 em dolares corresponde a R$ 3750.00

dolares cotacao reais Sada Tela


1000.00 4.66 4660.00
O valor 1000.00 em dolares corresponde a R$ 4660.00

dolares cotacao reais Sada Tela


-100.00 -2.88 288.00
Nao foi possivel calcular, pois ha dados invalidos.
92

Exerccio 5.1.8) Escreva um algoritmo em C 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.

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
float precoini, desconto, precofinal;

Passo 6: inicializar as variveis


printf (\nDigite o valor do produto: );
scanf(%f, &precoini);

Passo 7: calcular as sadas


desconto = precoini * 0.05;
precofinal = precoini desconto;

Passo 8: imprimir os resultados


printf(\nPreco inicial do produto R$ %f , precoini);
printf(\nValor do desconto R$ %.2f , desconto);
printf(\nPreco final do produto com desconto R$ %.2f ,
precofinal);
93

Passo 9: montar o algoritmo


/*Exerc518.c: Le o valor de um produto, concede desconto de 5% e
apresenta o preo com desconto e o desconto */
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
float precoini, desconto, precofinal;

int main (){


printf (\nDigite o valor do produto );
scanf(%f, &precoini);
if (precoini <= 0) {
printf (\nPreco invalido. );
else {
desconto = precoini * 0.05;
precofinal = precoini desconto;

printf(\nPreco inicial do produto R$ %f , precoini);


printf(\nValor do desconto R$ %f , desconto);
printf(\nPreco final do produto com desconto R$ %f ,
precofinal);
}
printf(\n\nFim do programa);
getch();
return 0;
}

Passo 10: testes de mesa

precoini desconto precofinal Sada Tela


300.00 15.00 285.00 Preco inicial do produto R$ 300.00
Valor do desconto R$ 15.00
Preco final do produto com desconto R$ 285.00

precoini desconto precofinal Sada Tela


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

precoini desconto precofinal Sada Tela


-100.00 Preco invalido
94

Exerccio 5.1.9) Escreva um programa em C 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.

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


int A, B, auxA;

Passo 6: inicializar as variveis


printf (\nDigite o valor do primeiro numero inteiro: );
scanf(%i, &A);
printf (\nDigite o valor do segundo numero inteiro: );
scanf(%i, &B);

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

printf (\nValores 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
printf (\nValores depois da troca A=%i B=%i , A, B);
95

Passo 9: montar o algoritmo


/*Exerc519.c: Le dois inteiros A e B e troca seus valores */
#include <stdio.h>
#include <conio.h>

int A, B, auxA;

int main (){


printf (\nDigite o valor do primeiro numero inteiro );
scanf(%i, &A);
printf (\nDigite o valor do segundo numero inteiro );
scanf(%i, &B);

printf (\nValores 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
printf (\nValores depois da troca A=%i B=%i , A, B);

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

Passo 10: testes de mesa

A B auxA Sada Tela


3 15 Valores antes da troca A=3 B=15
3
15
3
Valores depois da troca A=15 B=3

A B auxA Sada Tela


-4 4 Valores antes da troca A=-4 B=4
4
4
-4
Valores depois da troca A=4 B=-4
96

Exerccio 5.1.11) Escreva um algoritmo em C que receba a leitura do termmetro. Caso a


temperatura esteja abaixo de 100C, apresentar a mensagem de que a temperatura est
muito baixa. Caso a temperatura esteja entre 100C e 200C, apresentar a mensagem de
que a temperatura est baixa. Caso a temperatura esteja acima de 200C e inferior a
500C, apresentar a mensagem de que a temperatura est normal. Caso contrrio,
apresentar a mensagem de que a temperatura est muito alta.

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


int temp;

Passo 6: inicializar as variveis


printf (\nDigite o valor da temperatura lida no termometro: );
scanf(%i, &temp);

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


if (temp < 100)
printf (\nTemperatura muito baixa );
else if (temp >=100 && temp <= 200)
printf (\nTemperatura baixa );
else if (temp > 200 && temp < 500)
printf (\nTemperatura normal );
else printf (\nTemperatura muito alta );
97

Passo 9: montar o algoritmo


/*Exerc5111.c: Le a temperatura e imprime mensagem de acordo com o
valor */
#include <stdio.h>
#include <conio.h>

int temp;

int main (){


printf (\nDigite o valor da temperatura lida no termmetro: );
scanf(%i, &temp);
if (temp < 100)
printf (\nTemperatura muito baixa );
else if (temp >=100 && temp <= 200)
printf (\nTemperatura baixa );
else if (temp > 200 && temp < 500)
printf (\nTemperatura normal );
else printf (\nTemperatura muito alta );
printf(Fim do programa);
getch();
return 0;
}

Passo 10: testes de mesa

temp Sada Tela


-200 Temperatura muito baixa

temp Sada Tela


200 Temperatura baixa

temp Sada Tela


500 Temperatura muito alta

temp Sada Tela


300 Temperatura normal
98

Exerccio 5.1.13) Escreva um algoritmo em C que determine quanto ser gasto para
encher um cilindro de gs, sabendo-se que o preo do gs oxignio de R$ 250.00, o
preo do gs hlio de R$ 350.00 e o preo do gs nitrognio de R$ 300.00. O usurio
fornecer os seguintes dados: Tipo de gs (as opes como tipo de gs so O oxignio
ou H hlio ou N-nitrognio; rejeitar valores invlidos) e capacidade do cilindro em m3.

Passo 1: ler e entender


Passo 2: variveis de entrada
- tipo do gs
- capacidade do cilindro
Passo 3: variveis de sada
- valor gasto para encher o cilindro
Passo 4: variveis auxiliares
- no tem
Passo 5: declarar todas as variveis
char tipo;
int cilindro;
float preco;

Passo 6: inicializar as variveis


printf(\nDigite o tipo de gas O=oxigenio H=helio N=nitrogenio);
tipo= getche();
printf (\nDigite a capacidade do cilindro de gas: );
scanf(%i, &cilindro);

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


if (tipo == O || tipo == o){
preco = cilindro * 250.00;
printf (\nVoce gastara R$ %.2f para encher o cilindro de
oxigenio , preco);
}
else if (tipo == H || tipo == h){
preco = cilindro * 350.00;
printf (\nVoce gastara R$ %.2f para encher o cilindro
de helio, preco);
}
else if (tipo == N || tipo == n){
preco = cilindro * 300.00;
printf (\nVoce gastara R$ %.2f para encher o
cilindro de nitrogenio, preco);
}
else printf(\nTipo de gas invalido);
99

Passo 9: montar o algoritmo


/*Exerc5113.c: Le o tipo de gas, a capacidade do cilindro e calcula o
valor a ser pago para encher o cilindro*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
char tipo;
int cilindro;
float preco;

int main (){


printf(\nDigite o tipo de gas O=oxigenio H=helio N=nitrogenio);
tipo=getche();
printf (\nDigite a capacidade do cilindro de gas: );
scanf(%i, &cilindro);
if (cilindro <= 0) {
printf(\n Dado invalido. Programa sera finalizado. );
getch();
return 0;
}
if (tipo == O || tipo == o){
preco = cilindro * 250.00;
printf (\nVoce gastara R$ %.2f para encher o cilindro de
oxigenio , preco);
}
else if (tipo == H || tipo == h){
preco = cilindro * 350.00;
printf (\nVoce gastara R$ %.2f para encher o cilindro
de helio, preco);
}
else if (tipo == N || tipo == n){
preco = cilindro * 300.00;
printf (\nVoce gastara R$ %.2f para encher o
cilindro de nitrogenio, preco);
}
else printf(\nTipo de gas invalido);
}

Passo 10: testes de mesa

tipo cilindro preco Sada Tela


n 5 1500.00 Voce gastara R$1500.00 para encher o cilindro de
nitrogenio

tipo cilindro preco Sada Tela


h 8 2800.00 Voce gastara R$2800.00 para encher o cilindro de gas helio

tipo tanque preco Sada Tela


y 70 Tipo de gas invalido
100

Captulo 6
Mais sobre a Linguagem de
Programao C
Neste captulo, caro aluno, vamos avanar um pouco mais dando a voc mais
comandos e operadores teis em C!

6.1. Comando de Seleo Mltipla em C (switch)


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;
}

expresso deve resultar num valor inteiro do tipo long, int ou char. Compara-se
este 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.
Ateno: Caso a instruo break no seja encontrada, todos os
comandos vo sendo executados at se chegar ao final do comando
switch.
101

Exemplos de comandos de seleo mltipla vlidos:


sexo = getche();
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.);
}

letra = getche();
letra = toupper(letra); // toupper transforma o caracter para maisculo
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
102

printf(\nDigite o numero do candidato (1-2-3): );


scanf(%i,&voto);
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);
}

printf(\nEscolha uma opcao (1-2-3): );


scanf(%i,&opcao);
switch (opcao){
case 1: printf(\n Voce escolheu a opcao 1);
break;
case 2: printf(\n Voce escolheu a opcao 2);
break;
case 3: printf(\n Voce escolheu a opcao 3);
break;
default:
printf(\n Opcao invalida);
}

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 float!!! Este comando totalmente
invlido.)
103

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)

6.2. 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 se controlar a
leitura e a impresso de vetores e matrizes (estruturas que sero estudadas no futuro).

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 :


1. A expresso inicial avaliada, consistindo geralmente na inicializao de uma
varivel de controle.
2. Em seguida, avaliada condio:
2.1. Se a condio for verdadeira, o <bloco de comandos> executado e, ao se
chegar ao delimitador } ou final do comando for, automaticamente se incrementa
ou se decrementa a varivel de controle e se retorna avaliao da condio;
2.2. Quando a condio ficar falsa, ou seja, o incremento/decremento fazer 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.
104

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);

Neste caso, i a varivel de controle, inicial corresponde a i=3; condio corresponde a


i<=5; e incremento corresponde a se somar 1 varivel de controle i++.

Pode-se omitir a expresso inicial, se esta j tiver sido inicializada anteriormente no


programa, porm o ponto e vrgula deve permanecer.

i=3;
for ( ; i<=5; i++)
printf(O valor de i eh: %i\n, i);

A expresso inicial pode ser qualquer expresso vlida em C.

i=3;
for (printf(\nComecou) ; i<=5 ; i++)
printf(O valor de i : %d\n, i);

Pode-se, tambm, omitir a expresso incremento ou decremento, e atualiz-la no corpo da


instruo for. Novamente: os ponto e vrgula devem permanecer.

i=3;
for ( ;i <= 5; ){
printf(O valor de i e: %i\n, i);
i++;
}

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 de expresses conectadas por operadores


lgicos.

i=0;
for( ; (i<10 && aux!=0); i++){
printf(\n %d, aux);
--aux;
}
105

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

Usando vrgulas, podem-se criar expresses constitudas de duas sub-expresses, de forma


a se realizar duas tarefas. As sub-expresses 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.

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

Exemplos de comandos for vlidos:

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


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

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 )

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--)
107

6.3. Funes teis em C


Caro aluno, 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.

6.3.1. 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>

strchr(string, caracter);
verifica se o <caracter> se encontra na <string> e retorna a posio da primeira ocorrncia
do <caracter> no <string>; se o <caracter> 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.

6.3.2. Funes da biblioteca ctype.h:


letra=toupper(letra);
converte uma <letra> para maisculo.

letra=tolower(letra);
converte uma <letra> para minsculo.
108

6.3.3. Funes da biblioteca conio.h


textcolor(cor);
muda a cor da letra

textbackground(cor);
muda a cor do fundo

gotoxy(coluna, linha);
posiciona o cursor nas coordenadas especificadas

6.3.4. 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 resultado = pow (2, 10);

sqrt()
Retorna o valor da raiz quadrada. Recebe como argumento um valor do tipo double
do qual ele deve extrair a raiz. O resultado do tipo double tambm.
Exemplo: raiz = sqrt (25);
109

Arredondamento
ceil()
Retorna o primeiro float acima sem casas decimais. Recebe um float como
argumento. Exemplo: resultado = ceil (45.98561); // resultaria em 46.

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

6.3.5. Funes da biblioteca stdlib.h


break; finaliza um comando de repetio (no switch finaliza um case)

x= atoi(str); recebe o string str e retorna um inteiro em x, caso o string seja um nmero

atol() converte um string para long int

atof() converte um string para double

strtol() converte um long int para string

A funo system est na biblioteca <stdlib.h>

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

system ("color /? |more");


Mostra todas as cores e seu cdigo

system("calc");
Chama a calculadora

system("notepad");
Chama o bloco de notas

system("dir");
Mostra os arquivos do diretrio corrente

system ("ipconfig");
Mostra a configurao do ip
110

6.4. Exemplos de programas usando funes teis 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();
}
111

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

#include <stdio.h>
#include <conio.h>
#define MAXINT 100
#define MAXLONG 1000000
#define limpatela; system("cls");

int num, contnum;


long int numlong, quadrado;

int main() {

limpatela;
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();

limpatela;
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;
}
112

limpatela;
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;
}
getch();

limpatela;
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();

limpatela;
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 Fim do programa");


getch();
return 0;
}
113

/*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;
}

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


getch();
return 0;
}
114

/*Compara.c: mostra como se apresenta um menu e se comparam strings e numeros */


#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
char str1[20], str2[20];
int num1, num2, opcao;

int main() {

for ( ; ; ) {
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! Pressione ENTER...");
getch();
break;
}

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);
printf ("\n Forneca outro numero inteiro: ");
scanf("%d", &num2);
115

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 switch
} // fim for ( ; ; )
return 0;

} // fim do main()
116

/*..........................................
menu.c - Avalia o conhecimento do usurio. Ilustra o uso do comando "switch" e operacionaliza
um menu simples
............................................*/
#include <stdio.h>
#include <conio.h>

int opcao;

int main( ) {

for( ; ; ) {
system (cls); // limpa a tela
printf("\nTeste de avaliacao de conhecimento: \n");
printf("\nPergunta: Em que ano o Brasil foi descoberto?");
printf("\n1- Em 100 AC por Pitagoras");
printf("\n2- Em 1492 por um espanhol chamado Cristovao Colombo");
printf("\n3- Em 1500 por Pero Vaz de Caminha");
printf("\n4- Em 1500 por Pedro Alvares Cabral");
printf("\n0- Finalizar");

printf("\nQual a sua escolha? ");


scanf("%i",&opcao);

if (opcao == 0)
break; // sai do for forever

switch(opcao) {
case 1: printf("\n Voce precisa ler mais sobre a historia grega!");
break;

case 2: printf("\n Passou perto...ele chegou a America do Sul!");


break;

case 3: printf("\n Naturalmente voce eh um fa da carta do descobrimento!");


break;

case 4: printf("\n Resposta certissima !");


break;

default: printf("\nVoce nao escolheu nenhuma das alternativas validas.");


}
getch(); // para a tela
}

printf("\nFim do programa. Tchau!");


getch();
return 0;
}
117

/* 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;
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 (\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;
}
118

/*regiao2.c: apresenta a regiao de procedencia de um produto*/

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

float preco;
int codigo;

int main(){

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");

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

Captulo 7
Usando Comandos de Repetio em C
7.1. Comando de repetio entrada indeterminada de dados (uso de
flags)

Aqui voc vai aprender a usar um 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, isso , 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).

printf(\nDigite um numero inteiro: );


scanf(%i,&n);
while (n != 0) {
printf(\nNumero lido: %i , n);
printf(\nDigite outro numero inteiro (0 para terminar): );
scanf(%i,&n);
}

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!
120

No pretendo aqui dar uma receita de bolo para voc seguir, mas apenas chamar
a sua ateno para a lgica deste tipo de problema que poder ser utilizada, com
certeza, em muitos outros problemas que envolvam o uso de flags...

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.

printf(\nTecle um numero inteiro: );


scanf(%i,&n);
cont = 0;
while (n != 0){
printf(\n Numero lido: %i , n);
++cont;
printf(\nTecle outro numero inteiro (0 para terminar): );
scanf (%i,&n);
}
printf(\nA quantidade de numeros lidos foi: %i ,cont);

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).

soma = 0;
while (1){
printf(\nTecle um numero inteiro (-1 finaliza): );
scanf(%i,&n);
if (n == -1)
break;
soma = soma + n;
}
printf(\nA soma dos numeros= %i , soma);
121

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

printf(\nQual eh sua idade? );


scanf(%i,&idade);
while (idade != 0) {
printf(\nQual eh seu nome? );
gets(nome);
fflush (stdin); //limpa o teclado
printf(\n %s sua idade=%i anos ,nome,idade);
printf(\nQual eh sua idade? (0 para terminar): );
scanf(%i,&idade);
}

Temos, neste exemplo, um caso em que h mais de uma varivel a ser lida e
apenas uma dessas variveis vai funcionar como flag. Neste 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!
Caro aluno, a linguagem C apresenta um problema quando usamos o comando
gets() dentro de um comando de repetio: necessrio limpar o teclado para dar certo!
Isso feito atravs do comando fflush (stdin);

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

for (; ; ){
printf(\nQual eh sua idade? (0 para terminar): );
scanf(%i,&idade);
if (idade==0)
break;
fflush (stdin);
printf(\nQual eh seu nome? );
gets(nome);
printf(\nQual eh sua altura? );
scanf(%f,&altura);
printf(\n%s sua idade=%i anos e sua altura=%.2f m,
nome,idade, altura);
}
122

Observe que, neste exemplo, o comando for no para nunca. Para finalizar o
comando for, foi utilizado o comando break. Ou seja, quando o usurio digitar 0 para a
idade, o comando for finalizado pelo break. Isso pode ser feito, sim, sem problemas!

7.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 7.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. Este tipo de problema requer o uso de contadores para facilitar a
contagem dos dados de entrada. Existe um comando especfico para fazer esta 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.

cont = 0;
while (cont < 5){
fflush (stdin);
printf(\nQual eh seu nome? );
gets(nome);
printf(\nSeu nome : %s ,nome);
++cont;
}

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 e o contador incrementado de 1.
123

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

for (cont=0; cont < 5; cont++) {


fflush (stdin);
printf(\nQual eh seu nome? );
gets(nome);
printf(\nSeu nome : %s ,nome);
}

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.

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

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


fflush (stdin);
printf(\nQual eh seu nome? );
gets(nome);
printf(\nQual eh a sua idade? );
scanf(%i,&idade);
printf(\nQual eh a sua altura? );
scanf(%f,&altura);
printf(\n%s, voc tem %i anos e %1.2f de altura.,
nome,idade,altura);
}

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) e leia e imprima o nome e a quantidade que ele forneceu.

printf(\nQuantos dados voc deseja fornecer? );


scanf(%i,&n);
for (cont=0; cont < n; cont++ ) {
fflush (stdin);
printf(\nQual eh seu nome? );
gets(nome);
printf(\nSeu nome eh: %s ,nome);
}
printf(\nForam fornecidos %i dados,n);
124

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).

cont = 0;
printf(\nQuantos dados voc deseja fornecer? );
scanf(%i,&n);
while (1) {
fflush (stdin);
printf(\nQual eh seu nome? );
gets(nome);
printf(\nSeu nome eh: %s ,nome);
++cont;
if (cont==n)
break;
}
printf(\nForam fornecidos %i dados,n);

10) Escreva comandos para ler e imprimir o nome de vrias pessoas e perguntar ao
usurio se ele deseja continur ou finalizar.
while (1) {
fflush (stdin);
printf(\nDigite um nome: );
gets(nome);
printf(\nO nome eh: %s ,nome);
++cont;
printf(\nDeseja continuar? (s/n): );
resp=getche();
if (resp==n || resp ==N)
break;
}
printf(\nForam fornecidos %i dados,cont);
125

Lista de exerccios 7.1

Vamos praticar um pouco mais, agora. A minha forte recomendao, novamente, que
voc faa os exerccios sozinho, consultando os exemplos dados para ajud-lo... Somente
depois da sua tentativa que voc deve conferir as respostas... Boa sorte!

7.1.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.

7.1.2. Escreva um programa em C que leia 10 nmeros e calcule e imprima a sua soma.

7.1.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).

7.1.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;
}

Para que seja possvel voc acompanhar a execuo do programa em C, vamos criar
uma tabela para fazermos 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 ir sendo alterados de acordo com as instrues.

X Y Resultados
126

7.1.5. Faa o teste de mesa do programa abaixo 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


127

7.3. Exemplo dos Minutos Telefnicos

A empresa TELEFUN est interessada em saber qual


foi o maior nmero de minutos gastos no ms dentre 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)


Uma certa cia. telefnica quer saber qual foi o maior nmero de minutos gastos num
certo ms e quantos assinantes empataram atingindo este 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

Passo 4 (Variveis auxiliares)


- No h variveis auxiliares a serem geradas
(Para se chegar a esta 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, maiorminutos, quantos;

(Uma varivel para cada entrada, sada e cada 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)


128

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...)
(contador: inicializado com zero. Poderia ser inicializado na declarao tambm.)

Passo 7 (clculo das sadas)

quantos = 0;

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.

if (minutos > maiorminutos){


maiorminutos = minutos;
quantos = 1;
}

No caso dessa 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, estes 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
para entender melhor esta explicao.

if (minutos > maiorminutos){


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

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);

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 ou invalido finaliza): );
scanf(%i,&minutos);
if (minutos == -1 || minutos <=0)
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;
}
130

Passo 10 (Fazer o teste de mesa do algoritmo)


Suponha os seguintes valores de entrada: 100, 50, 100, 150, 150, 10, 150 , -1
minutos maiorminutos quantos Resultados
100 0 0
100 1
50
100 2
150 150 1
150 2
10
150 3
-1 O maior nmero de minutos foi: 150
Nmero de assinantes que atingiram o maior
nmero de minutos: 3

Suponha o seguinte valor de entrada: -1


minutos maiorminutos quantos Resultados
-1 0 0 Nenhum valor valido foi fornecido

7.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
131

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 esta concluso, o raciocnio foi o seguinte: dado o preo de fbrica,
primeiro 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)

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, primeiro necessrio calcular o preo com o IPI.

IPI = prFabrica * 0.35;


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

Aqui so apresentadas 2 formas diferentes de se fazer o clculo de porcentagem.


No caso do IPI, isso foi feito em 2 passos: primeiro calcula-se o IPI e depois soma-se este
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. Neste 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);

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 <stdio.h>
#include <conio.h>
#include <string.h>
#include <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);
if (prFabrica <= 0) printf (\n Preco de carro invalido);
else {
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);
}
fflush(stdin); //limpa o teclado para evitar erros na leitura de strings
}
puts (\nFim do programa);
getch();
return 0;
}
133

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

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

7.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.
134

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

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 voto;
int vencedor, brancos, nulos, eleitores;
int 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! )
135

Passo 7 (Escrever o cdigo para calcular as sadas)


Para se saber quem foi o candidato vencedor, necessrio, primeiro, 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 uma outra maneira muito mais prtica de se realizar esta 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;
136

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 (\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;
}
137

Passo 10 (Fazer o teste de mesa do algoritmo)


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

voto cont1 cont2 cont3 brancos nulos eleitores vencedor Resultados


0 0 0 0 0 0
1 1 1
2 1 2
2 2 3
0 1 4
2 3 5
1 2 6
3 1 7
-1 2 O candidato vencedor foi: 2
Numero de votos em branco: 1
Numero de votos nulos: 0
Numero de eleitores: 7
Fim do programa

7.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

Passo 3 (Dados de sada)


1) Valor de S

Passo 4 (Variveis auxiliares)


1) Contador de termos
2) Numerador
3) Denominador
138

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. m 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)

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);


139

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 N, cont, num, den;


float termo, S;

int main( ){
printf("Gera a serie S \n");
printf("\nForneca o numero de termos da serie: ");
scanf("%i",&N);

if (N <= 0) printf(\n Nro de termos invalido);


else {
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 S Resultados


4 0 1 4
1/4 0 + 1/4 1/4
1 2 3 2/3 0 + 1/4 + 2/3 2/3
2 3 2 3/2 0 + 1/4 + 2/3 + 3/2 3/2
3 4 1 4/1 0 + 1/4 + 2/3 + 3/2 + 4/1 4/1
O valor da serie S= 6.41667
140

Lista de Exerccios 7.2

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

20 10 00
1800
30 40 3600

2700

7.2.2. Fazer um programa que leia vrios pares de nmeros N1 e N2 (Flag=N1=0) e


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

7.2.3. 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 e 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

7.2.4. Fazer um programa para ler vrios pares de nmeros inteiros e calcular sua soma,
subtrao, multiplicao e diviso. Usar n1=0 como flag.

7.2.5. 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

7.2.6. 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....
141

7.2.7. 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 e calcule e imprima o seu preo final.

7.2.8. Faa um programa em C para calcular o valor a ser pago pelo perodo de
estacionamento de vrios automveis. O usurio entra com os seguintes dados: hora e
minuto de entrada, hora e minuto de sada. Sabe-se que este estacionamento cobra hora
cheia, ou seja, se passar um minuto ele cobra a hora inteira. Utilize um flag para finalizar a
entrada de dados. O valor cobrado pelo estacionamento :
o R$ 4,00 para 1 hora de estacionamento
o R$ 6,00 para 2 horas de estacionamento
o R$ 1,00 por hora adicional (acima de 2 horas)

7.2.9. Faa um programa que leia o cdigo de um livro (* finaliza) e apresente a categoria
do livro, conforme a tabela abaixo:
Cdigo do Livro Categoria
A Fico
B Romance
C Documentrio
D Audiolivro
E Tcnico

7.2.10. Fazer um programa que leia vrios pares de coordenadas X e Y (flag=X=1000) e


verifique a qual quadrante pertence este ponto (X,Y). A seta indica o sentido positivo dos
eixos.
Y

20 10
X
0 0
3 4

7.2.11. 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

7.2.12. Fazer um programa para calcular a mdia de um conjunto de nmeros inteiros


(flag = -1).
142

7.2.13. 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. Vc deve perguntar se o
usurio deseja fornecer outros dados at que ele responda N (no).

7.2.14. 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.

7.2.15. Fazer um programa para calcular o valor aproximado de , utilizando-se os N


primeiros termos (N dever ser lido) da srie:
= 4 - 4 + 4 - 4 + 4 ....
3 5 7 9
7.2.16. 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 esta soma por
11 e obtendo o resto desta diviso inteira. Quando o DV for 10, deve-se imprimir X.

Exemplo:
Nmero lido: 12819

DV = 1 + 2 + 8 + 1 + 9 = 21 11
-11 1
10

Nmero impresso: 12819 - X

7.2.17. 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.

7.2.18. 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 25000,00 isento
de 25000,01 at 200000,00 15 %
acima de 200000,01 25 %

c) Dever ser impressa uma frase com o CPF do contribuinte, sua renda anual e o
valor do IR.
143

7.2.19. 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.

7.2.20. Fazer um programa que leia vrios nmeros que representam 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.

7.2.21. Um 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.

7.2.22. 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)

7.2.23. Faa um programa que leia vrias temperaturas em graus Fahreinheit (flag=1000) e
calcule e imprima a temperatura em graus Celsius. (Celsius = (Fahreinheit-32) * (5/9))

7.2.24. 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.

7.2.25. 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...).

7.2.26. Faa um programa que leia o cdigo de um determinado produto (0 finaliza) e


mostre a sua classificao, utilizando a seguinte tabela:

Cdigo do Produto (CP) Classificao


1 Alimento no perecvel
2, 3 ou 4 Alimento perecvel
5 ou 6 Vesturio
7 Higiene Pessoal
8 ou 9 Limpeza e Utenslios Domsticos
Qualquer outro cdigo Invlido
144

7.2.27. Faa um programa que apresente o menu de livros venda numa livraria:

Cdigo do Livro Ttulo Preo


1 Informtica para 87,00
Concursos
2 Java como Programar 219,00
3 Use a cabea: C# 99,00
0 finaliza

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

Cdigo da forma de pagamento Condio de pagamento


1 vista com 10% de desconto
2 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.
145

1 aula Prtica em Laboratrio


Estudo Dirigido
1) No caso desta universidade, existe somente um diretrio permitido para execuo de
programas, por isso necessrio armazenar seus programas nele. Em sua casa, voc
poder usar o diretrio que quiser.
Entre no Windows Explorer ou na pasta Computador do desktop e escolha o diretrio
E:\EXECUTAVEIS LIBERADOS
Caso esta pasta no exista, voc deve cri-la com o nome exatamente como est
acima.

2) Em sua casa, faa o download gratuito do compilador Dev-C++ para que voc possa
comear a escrever seus programas.

3) No sistema Windows, localize o compilador Dev-C++ e execute o programa.

4) No DevC++, crie um novo arquivo


<Arquivo> <Novo> <Arquivo Fonte>
ou
<File> <New> <Source File>

5) Edite o seguinte programa no editor.


//nota.c: le a nota de um aluno e verifica se foi aprovado ou reprovado
#include <stdio.h>
#include <conio.h>

float nota;
char nome[20];

int main(){
printf (\nQual eh seu nome completo? );
gets(nome);
printf (\nDigite sua nota final: );
scanf(%f,&nota);
if (nota >= 6.0 && nota <= 10)
printf (\n%s, voce foi aprovado! ,nome);
else if (nota >= 0 && nota < 5.9)
printf (\n%s, voce foi reprovado... ,nome);
else
printf(\n %s, vc no digitou uma nota valida...);

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

6) A qualquer momento que desejar, salve o seu arquivo. Clique em <Arquivo> <Salvar
Como> ou <File> <Save As> . V para o diretrio E:\EXECUTAVEIS LIBERADOS 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> ou <Run> <Compile&Run>
Execute o programa vrias vezes para diferentes valores.

8) Feche o programa anterior e edite o novo programa C abaixo, 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 idade.c.

/* 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;


char nome[20];

int main(){
printf (\nQual eh o seu nome? );
gets(nome);

printf (\nQual eh o ano atual? );


scanf(%i,&anoatual);

printf (\nQual eh o seu ano de nascimento? );


scanf (%i,&anonasc);

idade = anoatual anonasc;


printf (\n%s, voce fez ou fara %i anos , nome, idade);

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

9) Feche o programa anterior e edite o programa C abaixo, 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 parimpar.c.
#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;
}

10) Feche o programa anterior, edite o programa C abaixo, 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 (\nPrograma para selecionar o menor numero digitado\n);
printf (\nDigite um numero inteiro: );
scanf (%i, &valor);
menor = valor;
while (valor != -1){
if (valor < menor)
menor = valor;
printf(\nOutro numero inteiro (digite 1 para terminar): );
scanf (%i, &valor);
}
printf (\nO menor valor lido foi: %i , menor);
printf(\n\nFim do programa);
getch();
return 0;
}
148

11) Feche o programa anterior, edite o programa C abaixo, 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 adivinha.c.

/* adivinha.c: O usurio tem que adivinhar o numero gerado pelo computador! */


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>

int segredo, valor, vezes=0;

int main (){


system("Color 1E");
printf ("\nPrograma para adivinhar o numero gerado pelo computador!!\n");
srand (time(NULL));
segredo = rand () % 200;

while (1){
printf ("\nDigite um numero inteiro: ");
scanf ("%i", &valor);
++vezes;

if (valor < segredo)


printf("\n Muito pequeno. Tente um maior. ");
else if (valor > segredo)
printf("\n Muito grande. Tente um menor. ");
else {
printf("\n Achou!!! Finalmente!!! Vc fez %i tentativas...",
vezes);
break;
}
}

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

Respostas das Listas de Exerccios


Respostas da Lista de Exerccios 1.1

1.1.1)

Exerccio para avaliar o seu nvel de inteligncia.


H 3 perguntas, voc tem que respond-las instantaneamente. Responda imediatamente, est bem?

Pergunta 1:
Est participando de uma corrida. Ultrapassa o segundo. Em que posio termina?

Resposta1:
Se vc respondeu que chega em primeiro, est absolutamente enganado.
Se vc ultrapassou o segundo e tomou o seu lugar, portanto chega na segunda
posio. Por favor, na segunda pergunta, nao demore tanto para responder....

Pergunta 2:
Se ultrapassa o ltimo, em que posio chega...?

Resposta 2:
Se vc respondeu que chega em penltimo, no tem mais uma vez razo.
Pensa um pouco... como pode ultrapassar o ltimo?
Se vc est atrs dele, ele no o ltimo. A pergunta impossvel.

Vamos fazer uma ltima tentativa.


Por favor, no use papel, caneta ou calculadora para resolver a esta pergunta!
E lembre que tem que responder na sua mente e de maneira rpida. Mas para ser rpido!

Pergunta 3:
Pensa no nmero 1000. Soma-lhe 40.
Acrescenta outros 1000.
Soma 30.
Mais 1000.
Agora 20.
Agora soma outros 1000.
Agora 10.
Qual o total?

Resposta 3
Deu 5000? A resposta correta 4100.

1.1.2)
1. Tambm houve 21 de Abril de 1984 no Brasil??
Sim, claro veio depois do dia 20 !!

2. Quantos aniversrios teve uma pessoa que viveu 50 anos? 50.

3. Alguns meses tem 31 dias, quantos tm 28?


12, todos tm 28 !!
150

4. Quantos noves (9) existem entre 0 e 100? 20 !!

5. correto que um homem se case com a irm de sua viva?


No, porque est morto !!

6. Divida 30 por 1/2 e some 10. Qual o resultado?


70, (30 dividido por 1/2 igual a 60 !!

7. Se h 3 mas e pega em 2, quantas tem?


2, foi as que tirou duas, lembra-se?

8. Um mdico receita trs comprimidos e diz para tomar um a cada meia hora, quantos minutos
duram os comprimidos?
60 - Inicia quando toma o primeiro, 30 minutos depois toma o segundo, logo, 30 minutos mais tarde toma o
terceiro...

9. Um pastor tem 17 ovelhas. Todas morrem, menos 9. Quantas ficam? 9

10. Quantos animais de cada espcie Moiss colocou na arca?


Moiss no tinha arca, era No !!

11. Quantos selos de sessenta centavos h numa dzia?


H doze selos numa dzia!

1.1.3)
01. Meu pai tem 42 anos de idade. Meu cachorro tem 8. Se fosse um ser humano, a idade de meu cachorro
seria 56 anos. Quantos anos teria meu pai se ele fosse um cachorro?
a. 5
b. 6
c. 7
d. 8
e. 9

02. Um senhor, olhando para um retrato, diz: O pai deste homem o pai de meu filho.
Ele est olhando para:
a. seu prprio retrato
b. retrato de seu pai
c. retrato de seu filho
d. retrato de seu av
e. retrato de seu neto

03. No segundo domingo do ms de maio, comemora-se o dia das mes. Este dia, poder cair:
a. de 7 a 14 de maio
b. de 8 a 15 de maio
c. de 8 a 14 de maio
d. de 6 a 15 de maio
e. de 7 a 13 de maio
151

04. Certa bactria se multiplica to rapidamente que seu nmero dobra a cada minuto. Num caco de vidro ela
se multiplica de tal maneira que, em 60 minutos enche a metade do mesmo. Em quanto tempo estar cheio
totalmente?
a. 61 min
b. 90min
c. 120min
d. 180 min
e. 240 min

05. Em uma jarra cabem um litro mais meia jarra. A capacidade da jarra :
a. 1 litro
b. 1,5 litros
c. 2 litros
d. 2,5 litros
e. 3 litros

06. Numa rvore pousam pssaros. Se pousarem 2 pssaros em cada galho, fica um galho sem pssaros.
Se pousar um pssaro em cada galho, fica um pssaro sem galho. O nmero de pssaros :
a. 2
b. 3
c. 4
d. 5
e. 6

07. Sabendo-se que seis raposas, em seis minutos, pegam seis galinhas, pergunta-se: quantas raposas em
cem minutos pegaro cem galinhas ?
a. 100
b. 36
c. 18
d. 6
e. 1

08. Uma pessoa que gosta somente das pessoas que no gostam de si mesmas:
a. gosta de si mesma
b. no gosta de si mesma
c. gosta de algum
d. no gosta de ningum
e. no existe

9. Em uma urna existem 38 bolas que se diferenciam apenas pela cor: 15 vermelhas, 15 amarelas e 8 azuis.
Uma pessoa com os olhos vendados retira uma bola de cada vez da caixa. Qual o nmero mnimo de bolas
que deve ser retirado para que ela tenha certeza que saram duas bolas da mesma cor?
a. 16
b. 9
c. 8
d. 4
e. 3
152

10. Dispem-se de alguns livros de Fsica do autor A, outros do autor B e outros do autor C. Da mesma
forma, temos alguns livros de Qumica do mesmo autor A, outros de B e outros de C. Todos os livros devem
ser colocados em duas caixas com o seguinte critrio: na primeira caixa deve-se colocar todos os livros que
satisfaam a seguinte condio: "se for do autor A, ento no pode ser de Fsica". Na segunda caixa, os
livros que no satisfaam a essa proposio. A primeira caixa deve conter exatamente:
a. todos os livros de Fsica ou de Qumica dos autores B e C mais todos os livros de Qumica do autor
A.
b. todos os livros de Qumica do autor A mais todos os livros de Fsica dos autores B e C.
c. todos os livros de Fsica dos autores B e C.
d. todos os livros de Fsica do autor A.
e. todos os livros de Qumica dos autores A, B e C.

11. Escreva o nmero seguinte nessa sequncia 0, 1, 1, 2, 3, 5, 8,


a. 9
b. 10
c. 11
d. 12
e. 13

12. Guilherme, lvaro e Man acabaram de terminar um lanche. Um dos trs rapazes comeu um lanche de
presunto, outro um lanche de peru, e o terceiro, um lanche de frango. Apenas uma das afirmaes abaixo
verdadeira:
Guilherme comeu o lanche de peru
Guilherme no comeu o lanche de frango
lvaro no comeu o lanche de frango
lvaro no comeu o lanche de presunto
Ento, Guilherme, lvaro e Man comeram respectivamente, os lanches de:
a. presunto, frango, peru
b. presunto, peru, frango
c. peru, frango, presunto
d. peru, presunto, frango
e. frango, presunto, peru

13. Escreva o nmero seguinte nessa seqncia 0, 1 , 1 , 2, 4, 7, 13, 24,


a. 44
b. 45
c. 46
d. 47
e. 48

14. Um missionrio foi capturado por canibais em uma floresta. Os canibais ento fizeram-lhe a seguinte
proposta:
- Se fizer uma declarao verdadeira, ser cozido com batatas.
- Se fizer uma declarao falsa, ser assado na churrasqueira.
Como o missionrio usar a lgica, podemos concluir que:
a. ser cozido
b. ser assado
c. no poder ser cozido nem assado basta dizer Serei assado na churrasqueira
d. ser cozido e assado ao mesmo tempo
e. Dir: " ruim, hein?"
153

15. O algarismo das unidades do nmero N =1 x 3 x 5 x 7 x 9 x ...... x 999


a. 1
b. 3
c. 5 5 multiplicado por mpar d 5 no final
d. 7
e. 9

16. Continuando a seqncia de letras F, N, G, M, H . . ..., ..., temos, respectivamente:


a. O, P.
b. I, O.
c. E, P.
d. L, I.
e. D, L.

17. Continuando a seqncia 4, 10, 28, 82, ..., temos:


a. 236
b. 244 //4 para 10 = 6 x 3 = 18; 10 para 28 = 18 x 3 = 54...
c. 246
d. 254
e. 256

18. Em uma avenida reta, a padaria fica entre o posto de gasolina e a banca de jornal, e o posto de
gasolina fica entre a banca de jornal e a sapataria. Logo:
a. a sapataria fica entre a banca de jornal e a padaria.
b. a banca de jornal fica entre o posto de gasolina e a padaria.
c. o posto de gasolina fica entre a padaria e a banca de jornal.
d. a padaria fica entre a sapataria e o posto de gasolina.
e. o posto de gasolina fica entre a sapataria e a padaria.

19. Um tcnico de futebol, animado com as vitrias obtidas pela sua equipe nos ltimos quatro jogos, decide
apostar que essa equipe tambm vencer o prximo jogo. Indique a Informao adicional que tornaria menos
provvel a vitria esperada.
a. Sua equipe venceu os ltimos seis jogos, em vez de apenas quatro.
b. Choveu nos ltimos quatro jogos e h previso de que no chover no prximo jogo.
c. Cada um dos ltimos quatro jogos foi ganho por uma diferena de mais de um gol.
d. O artilheiro de sua equipe recuperou-se do estiramento muscular.
e. Dois dos ltimos quatro jogos foram realizados em seu campo e os outros dois, em campo adversrio.

20. Todos os que conhecem Joo e Maria admiram Maria. Alguns que conhecem Maria no a
admiram.
Logo:
a. todos os que conhecem Maria a admiram.
b. ningum admira Maria.
c. alguns que conhecem Maria no conhecem Joo.
d. quem conhece Joo admira Maria.
e. s quem conhece Joo e Maria conhece Maria.
154

Respostas da Lista de Exerccios 3.1

3.1.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 deste 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.

/* notas.c: programa que le e imprime 2 notas */

caracter 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);

3.1.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;


155

3.1.3) Voc deve escrever um comando que verifique se a mdia calculada no exerccio
anterior maior ou igual a 7. Para isto, voc deve usar o comando condicional se. Caso a
media 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...);

3.1.4) Aqui voc deve acrescentar ao algoritmo inicial os comandos para clculo da mdia
e critrios de aprovao! Desta 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 */

caracter 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 );
}
156

Respostas da Lista de Exerccios 3.2

3.2.1) Vamos repetir o trecho de comandos se aninhados e depois resolver cada uma das
situaes propostas. Observe neste 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!

se (B1)
C1;
seno se (B2)
se (B3) comando se
C2;
seno
{ C3;
C4;
}

C5; comando C5

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
157

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...

3.2.2) Dado um conjunto de respostas sim ou no de vrias pessoas e seu sexo


(F=feminino, M=masculino), voc deve escrever comandos em C para verificar se:

a) mulher e respondeu SIM

se ((sexo==F ou sexo==f) e resposta == sim)


imprima (Voce eh mulher e respondeu sim);

b) homem e respondeu NO
se ((sexo==F ou sexo==f) e resposta == nao)
imprima (Voce eh homem e respondeu nao);

c) se mulher ou homem e respondeu NO


se ((sexo==F ou sexo==f) e (sexo==F ou sexo==f) e resposta == nao)
imprima (Voce eh homem ou mulher e respondeu nao);

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.

3.2.3) Qual o valor de L aps a execuo desse 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;
}
158

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
no (A e B) (no (Falso e Verdadeiro) que no(Falso)) que
Verdadeiro
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

3.2.4) Voc deve escrever os trechos de algoritmo em C que ajudem o IBGE a fazer o
senso 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 - s.m.). 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 s.m.), da classe B (at 20 s.m.) e da cl.


A (acima de 20 s.m.)

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;
159

Ateno! Todos os contadores utilizados nos trechos de algoritmo devem ser


previamente inicializados com 0 (zero).

3.2.5) 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 acima, 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);

3.2.6) 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);
160

Respostas da Lista de Exerccios 4.1


4.1.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))
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;
}
161

4.1.2. Faa um programa em C que tem como dado de entrada o nome e o cdigo de origem
de um produto e apresente seu nome e a regio de sua procedncia, de acordo com a
tabela abaixo:
Cdigo de Origem Regio de Procedncia
1 Sul
2 Sudeste
3 Centro-Oeste
4 Norte
5 Nordeste

/*exerc412.c: apresenta a regiao de procedencia de um produto*/


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

char nome[20];
int codigo;

int main(){

printf("\nPrograma para apresentar a regiao de origem de um produto\n");


printf("\nQual eh o nome do produto? ");
scanf("%s",nome);
printf("\nQual eh o codigo da regiao de origem do produto? (1 a 5): ");
scanf("%i",&codigo);

if (codigo == 1) printf("\nProduto %s tem regiao de origem = SUL", nome);


if (codigo == 2) printf("\nProduto %s tem regiao de origem = SUDESTE", nome);
if (codigo == 3) printf("\nProduto %s tem regiao de origem = CENTRO-OESTE",
nome);
if (codigo == 4) printf("\nProduto %s tem regiao de origem = NORTE", nome);
if (codigo == 5) printf("\nProduto %s tem regiao de origem = NORDESTE",
nome);
if (codigo< 1 || codigo > 5)
printf("\nCodigo de regiao de origem invalido.");

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

Respostas de alguns exerccios da lista 5.1

5.1.10. 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...

/*exerc5110.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)


{
tempo = (horasai - horaent);

if (minsai > minent)


++tempo; // fracao de minutos implica na cobranca de mais 1 hora

valoraserpago = tempo * 10.00;

printf("\nTotal a ser pago por %i hora(s) de estacionamento R$ %.2f",


tempo,valoraserpago);

}
else printf("\nErro nos valores de hora de entrada e saida.");

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

5.1.12. Escreva um programa em C que leia o valor do salrio atual e 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$2000.00. Se o salrio for maior ou igual a 2001.00,
mas menor ou igual a R$5000.00, o reajuste deve ser de 10%. Caso o salrio seja maior que
R$5001.00, o reajuste deve ser de 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!

/*exerc5112.c: calcula o novo valor do salario de um funcionario*/

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

float salario, aumento, novosalario;

int main(){

printf("\nCalcular o valor do novo salario reajustado de um funcionario\n");

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


scanf("%f",&salario);

if (salario > 0){


if (salario < 2000.00)
aumento = salario * 0.15;
else if (salario >=2001.00 && salario <= 5000.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;
}
164

Respostas de alguns exerccios da Lista 7.1

7.1.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 <stdio.h>
#include <conio.h>
#include <string.h>
#include <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;

}
165

7.1.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 DEVE SER INICIALIZADO 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;

}
166

7.1.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). Neste 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(){

printf(\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
?
167

7.1.4.
X Y Resultados
-1 0
1 1 1
-1 2 -2
1 3 3
-1 4 -4

Este exemplo, apesar de simples, mostra claramente como se 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 (-1*-1=1), Y foi acrescido de
1 (0+1=1) e a condio do comando if foi avaliada como verdadeira, implicando na
impresso do valor de Y (1), o que foi mostrado na coluna Resultado. As outras
linhas correspondem execuo do lao do comando while.

7.1.5.

numero cont Resultado


2 0 2 -2
4 1 4 -4
6 2 6 -6
8 3 8 -8
10 4 10 10
12 5

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.
168

Respostas de alguns exerccios da Lista 7.2

Caro aluno, aqui voc encontrar respostas de uma parte dos exerccios da lista 7.2. Voc
deve tentar fazer sozinho primeiro, antes de olhar a resposta. Os outros exerccios voc j
tem condies de resolver sem ajuda. Mas, caso restem dvidas, solicite a ajuda de seu
professor (a)! Boa sorte!

7.2.1)

/*exerc721.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)


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 if (angulo >= 270 && angulo <= 360)
printf("\nO angulo %i pertence ao quadrante 4\n", angulo);
else printf("\nValor de angulo invalido.\n ");

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

7.2.3.
/*exerc723.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() {
for (; ;) {
system("cls"); // limpa a tela
printf ("\nReferendo sobre a internacionalizacao da Amazonia. Qual eh sua opiniao?");
printf ("\n1 - A favor");
printf ("\n2 - Contra");
printf ("\n0 - Finaliza");
printf ("\nDigite a opcao desejada: ");
scanf ("%i",&opcao);
if (opcao == 0)
break;

while (1) {
printf("\nInforme o seu sexo 1=masculino 2=feminino: ");
scanf("%i", &sexo);
if (sexo == 1) {
++homens;
break;
}
else if (sexo == 2) {
++mulheres;
break;
}
else
printf("\nSexo invalido. Por favor, 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();
} // for (;;)
170

total = mulheres + homens;

printf("\nResultados da pesquisa\n");
printf("----------------------");
printf("\n\n%i votante(s) do sexo masculino.", homens);
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;
}
171

7.2.4.
/*exerc724.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() {
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;

}
172

7.2.6.
/*exerc726.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) // cont eh impar?


++ termo;
}
printf("\n\n");
printf("\n\nFim do programa");
getch();
return 0;
}
173

7.2.12.

/* exerc7212.c: Este programa le varios numeros inteiros e calcula sua media */

#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: %i nmeros = %.2f \n",Cont, Media);
}
else
printf(\nNenhum valor foi fornecido);

printf("\nFim do programa... ");


getch(); /* para a tela */
return 0;
}
174

7.2.13.
/*exerc7213.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)
printf(\nNao eh equacao do 2o grau, pois o coeficiente a eh zero);
else {
delta = b*b (4*a*c);
if (delta >= 0) {
raiz1 = - b + sqrt(delta) / (2*a);
raiz2 = - b - sqrt(delta) / (2*a);
printf(\nRaiz 1 = %.2f Raiz2=%.2f, raiz1, raiz2);
}
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;
}
175

7.2.14.

/*exerc7214.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;
}

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;

}
176

7.2.15.

/*exerc7215.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);

num = 4;
den = 1;

for (cont=0; cont < n; cont++) {


termo = num/den;
if (cont % 2 == 0) // se o contador de termos for par, adiciona o termo
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;

}
177

7.2.16)
/*exerc7216.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): ");
scanf("%ld",&n);

if (n == -1)
break;

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


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;
}
178

7.2.26)
/*exerc7226.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:
case 6: printf("\nClassificacao do produto %i = VESTUARIO", codigo);
break;

case 7: printf("\nClassificacao do produto %i = HIGIENE PESSOAL", codigo);


break;
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;
}
179

Da autora para o aluno-programador!


E chegamos ao final deste curso bsico de Algoritmos e Linguagem de Programao C!
Espero que voc, aluno, j esteja conseguindo fazer seus primeiros programas de computador
nesta linguagem to avanada e instigante, que a linguagem C. Assim, posso cham-lo, agora de
aluno-programador!
De acordo com nossa metodologia, voc aprendeu a escrever os primeiros algoritmos
utilizando o PortuC, uma Pseudolinguagem que o ajudou a quebrar a primeira barreira da
linguagem C que so seus comandos escritos em ingls. Rapidamente passamos traduo destes
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 aluno.
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, o C#, o Objective 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!

Abraos,
Profa. Elisamara de Oliveira, Dra
profaelisa@uol.com.br
180

Bibliografia

SCHILDT, H. C Completo e Total. So Paulo: Makron Books, 1997.

MIZRAHI, V.V. Treinamento em linguagem C. mdulo 1. 2 ed. So Paulo: Makron


Books, 2006.

MIZRAHI, V.V. Treinamento em linguagem C. mdulo 2. 2 ed. So Paulo: Makron


Books, 2006.

KERNIGHAN, B. W., RITCHIE, D. M. C- A Linguagem de Programao Padro ANSI.


Rio de Janeiro: Campus, 1989.

TENEMBAUM, A.M. Estruturas de dados usando C. So Paulo: Pearson, 1995.

ASCENCIO, Ana Fernanda Gomes; VENERUCHI, Edilene Aparecida. 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.

GOTTFRIED, B. S. Programando em C. So Paulo: Makron Books, 2003.

AITKEN, P., JONES, B. C - Guia do Programador. Rio de Janeiro: Berkeley Brasil, 1994.

FORBELLONE, A. L.; BERSPACHER, H. Lgica de programao. 3.ed. So Paulo:


Prentice Hall, 2005.

LOPES, A.; GARCIA, G. Introduo a programao: 500 algoritmos resolvidos. Rio


de Janeiro: Campus, 2002.

SEBESTA, R. W. Conceitos de linguagens de programao. 4 ed. Porto Alegre:


Bookman, 2000.

MANZANO, Jos A.M.G.; Oliveira, J.F. Algoritmos: lgica para desenvolvimento de


programas de computador. 22 ed. So Paulo: rica, 2009.

Você também pode gostar