Escolar Documentos
Profissional Documentos
Cultura Documentos
Algoritmos e
Linguagem de
Programao
APRESENTAO
com satisfao que a Unisa Digital oferece a voc, aluno(a), esta apostila de Algoritmos e Linguagem de Programao, parte integrante de um conjunto de materiais de pesquisa voltado ao aprendizado
dinmico e autnomo que a educao a distncia exige. O principal objetivo desta apostila propiciar
aos(s) alunos(as) uma apresentao do contedo bsico da disciplina.
A Unisa Digital oferece outras formas de solidificar seu aprendizado, por meio de recursos multidisciplinares, como chats, fruns, aulas web, material de apoio e e-mail.
Para enriquecer o seu aprendizado, voc ainda pode contar com a Biblioteca Virtual: www.unisa.br,
a Biblioteca Central da Unisa, juntamente s bibliotecas setoriais, que fornecem acervo digital e impresso,
bem como acesso a redes de informao e documentao.
Nesse contexto, os recursos disponveis e necessrios para apoi-lo(a) no seu estudo so o suplemento que a Unisa Digital oferece, tornando seu aprendizado eficiente e prazeroso, concorrendo para
uma formao completa, na qual o contedo aprendido influencia sua vida profissional e pessoal.
A Unisa Digital assim para voc: Universidade a qualquer hora e em qualquer lugar!
Unisa Digital
SUMRIO
INTRODUO................................................................................................................................................ 5
1 ALGORITMOS............................................................................................................................................ 7
1.1 O que um Algoritmo?..................................................................................................................................................7
1.2 Conceitos Bsicos da Programao de Computadores.....................................................................................9
1.3 Etapas da Programao de Computadores.........................................................................................................12
1.4 Expresso de Algoritmos ...........................................................................................................................................13
1.5 Os Algoritmos sero Expressos em Pseudolinguagem..................................................................................18
1.6 Resumo do Captulo.....................................................................................................................................................19
1.7 Atividade Proposta........................................................................................................................................................19
2.1 Identificadores................................................................................................................................................................21
2.2 Tipos Bsicos e Declarao de Variveis................................................................................................................22
2.3 Comando de Atribuio..............................................................................................................................................23
2.4 Operadores Aritmticos .............................................................................................................................................24
2.5 Operadores Lgicos .....................................................................................................................................................25
2.6 Operadores Relacionais..............................................................................................................................................28
2.7 Comando Condicional.................................................................................................................................................29
2.8 Comando de Repetio..............................................................................................................................................31
2.9 Comandos de Entrada e Sada..................................................................................................................................33
2.10 Separador de Comandos ........................................................................................................................................37
2.11 Comentrios..................................................................................................................................................................37
2.12 Bloco de Programa.....................................................................................................................................................38
2.13 Resumo do Captulo..................................................................................................................................................41
9 CONSIDERAES FINAIS..............................................................................................................131
RESPOSTAS COMENTADAS DAS ATIVIDADES PROPOSTAS....................................133
REFERNCIAS............................................................................................................................................175
INTRODUO
Esta apostila se refere disciplina Algoritmos e Linguagem de Programao do curso de Engenharia de Produo, na modalidade a distncia, da Unisa.
O objetivo desta disciplina capacitar voc, caro(a) aluno(a), a fazer os primeiros programas de
computador utilizando uma linguagem de programao. Escrever programas de computador uma tarefa muito interessante, instigante e desafiadora! Vamos comear entendendo o que um algoritmo,
que um roteiro com instrues sequenciais para se resolver um problema ou se realizar alguma tarefa.
como uma receita de bolo, que indica os ingredientes e as instrues para se fazer o bolo passo a passo.
Usando essa analogia, os ingredientes seriam os dados, os passos seriam as instrues do programa e o
forno para assar o bolo seria o computador!
O universo dos computadores muito simples, muito limitado, mas muito poderoso: tudo se baseia na base 2, que possui apenas 2 algarismos: 0 e 1. Esses dois dgitos binrios, ou bits, formam a linguagem de mquina, que a nica linguagem que o computador digital entende. Mas ns vamos aprender
a escrever as instrues dos nossos programas numa linguagem de programao chamada C, que mais
prxima da nossa linguagem de comunicao. Ns nos comunicamos em Portugus, certo? Ento vamos
comear a escrever nossos primeiros algoritmos em PortuC, uma pseudolinguagem, e depois traduzi-los para um programa em linguagem C. Isso ainda no resolve nosso problema: para que o computador
possa executar nosso programa em C, ele precisa ser traduzido para linguagem de mquina! Mas isso
ser feito facilmente pelo compilador C, um programa que faz exatamente isso: traduz programas em C
para instrues binrias (linguagem de mquina).
Como voc pode ver, ser um belo desafio! Ento, caro(a) aluno(a), afie seu raciocnio lgico e prepare-se para entrar num mundo em que a lgica ser o carro-chefe! No tema nada, pois tudo ser
ensinado de forma simples e didtica... Mais algumas pginas frente e voc j estar programando seu
computador!
Profa. Dra. Elisamara de Oliveira
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.
Vamos, juntos, entender o que so algoritmos, utilizando inicialmente alguns conceitos j definidos
na literatura tcnica da rea:
Ateno
Programar construir algoritmos.
Programa = algoritmo + estruturas de dados.
No processo de construo de programas, a formulao do algoritmo e a definio das estruturas de dados esto
intimamente ligadas.
Alm dessas importantes definies, acrescentemos que, num algoritmo, podem-se observar os
seguintes aspectos:
ao: evento que ocorre num perodo de tempo finito;
estado: propriedades de um objeto numa dada situao;
processo: sequncia temporal de aes;
padro de comportamento: toda vez que seguido, um evento ocorre.
Elisamara de Oliveira
Saiba mais
Exemplo de um algoritmo
Apesar de muito simples, algumas observaes importantes podem ser notadas nesse algoritmo:
o tempo verbal est na forma imperativa (faa, traga, frite etc.);
h um sequenciamento das aes, que esto separadas por um ponto e vrgula;
o avental no usado toda vez: existe um motivo para coloc-lo, ou seja, h uma condio para
que o avental seja colocado;
o nmero de batatas descascadas varia; a ao de descascar uma batata repete-se at que a
condio de parada (ser suficiente para alimentar as pessoas que iro jantar) seja alcanada;
a ordem das aes importante: primeiro descasca-se a batata, pica-se a batata, para depois frit-la...
Exemplos de algoritmos conhecidos:
Qual o algoritmo que voc descreve para vir estudar?
Qual o algoritmo para se fazer uma feijoada?
Qual o algoritmo para se trocar uma lmpada?
Apesar de receitas culinrias e trajetos rotineiramente percorridos encaixarem-se perfeitamente no
conceito inicial de algoritmo, no nosso curso, estamos interessados num tipo de algoritmo especial, que
seja capaz de ser executado por um computador. Para tanto, necessrio que identifiquemos problemas
do mundo real que possam ser traduzidos em aes primitivas finitas e dos quais se possa extrair um
padro de comportamento.
Com base nos exemplos apresentados at aqui, estamos prontos para definir o que um algoritmo.
Um algoritmo a descrio de um padro de comportamento, expresso em termos de um
repertrio bem definido e finito de aes primitivas que podem ser executadas.
Analise a definio e veja como coerente com o que apresentamos; no mesmo? Alm disso,
importante observar que, num algoritmo, distinguem-se claramente dois aspectos:
aspecto esttico: que corresponde ao texto;
aspecto dinmico: que corresponde sua execuo (a partir de valores iniciais).
O curso de Algoritmos e Linguagem de Programao , na realidade, um curso de Programao de
Computadores para alunos(as) que iniciam cursos superiores na rea de Engenharia e Informtica. Sei
que voc est curioso(a) para conhecer um algoritmo, mas, para comear a construir seus algoritmos e
fazer seus primeiros programas de computador, necessrio que voc domine uma srie de conceitos
bsicos, que so apresentados a seguir, a comear pelo prprio computador!
Fonte: http://evotecinformatica.blogspot.com/p/como-cuidar-do-seu-computador.html.
Computador: uma mquina capaz de seguir uma espcie de algoritmo chamado programa, que
est escrito em linguagem de mquina.
Linguagem de mquina: internamente, o computador executa uma srie de instrues que ficam
armazenadas em sua memria principal em cdigo binrio, ou seja, em linguagem de mquina (zeros (0)
e uns (1), que so os dgitos binrios ou bits).
Linguagem de alto nvel: para escrever os programas de computador, os programadores utilizam
linguagens que esto mais prximas da linguagem humana, que so chamadas linguagens de alto nvel
ou, simplesmente, linguagens de programao. Exemplos de linguagens de programao (alto nvel)
so: C, C++, C#, Pascal, Delphi, Java, Basic, VisualBasic, Fortran, Cobol, entre muitas outras.
Elisamara de Oliveira
Numa ponta da Figura 1, est a linguagem de mquina e, no outro extremo, esto as linguagens
humanas. Quanto mais prxima da linguagem de mquina, mais de baixo nvel a linguagem; em contrapartida, quanto mais prxima das linguagens humanas, mais alto nvel. As linguagens de programao fazem uma espcie de ponte entre a linguagem binria, ou linguagem que o computador entende,
e a linguagem que ns humanos utilizamos.
Linguagem de programao: Uma linguagem de programao uma linguagem utilizada por
uma pessoa para expressar um processo atravs do qual o computador possa resolver um problema.
(SEBESTA, 2000). Pessoas que possuem uma compreenso limitada da linguagem natural tendem a ser
mais limitadas para expressar seus pensamentos, especialmente em termos de capacidade de abstrao.
Programadores que tiveram pouca educao formal em disciplinas de Computao tendem a continuar
a usar a mesma linguagem de programao, mesmo que esta esteja em desuso. A aprendizagem contnua fundamental. necessrio que os programadores conheam os fundamentos das linguagens
de programao para que possam ler, entender e aprender com os manuais e livros tcnicos das novas
linguagens e os novos paradigmas que venham a surgir.
Compilador: permite que os programadores utilizem linguagens de alto nvel para escrever os
programas de computador, pois se encarrega de traduzi-los para linguagem de mquina. O compilador
um programa que traduz uma determinada linguagem de programao para linguagem de mquina.
Dessa forma, existem diversos compiladores especficos para cada uma das linguagens de programao
e para cada sistema operacional, conforme ilustra a Figura 2.
10
Figura 2 Os compiladores so especficos para cada linguagem e para cada sistema operacional.
11
Elisamara de Oliveira
12
facilitar a escrita;
facilitar o entendimento;
permitir a verificao;
facilitar a alterao e a manuteno dos programas de computador.
O principal objetivo da metodologia de programao estruturada reduzir a complexidade dos
problemas. Essa metodologia, quando utilizada, induz o programador a produzir programas:
confiveis;
de fcil manuteno;
flexveis;
documentados;
legveis.
Sendo assim, caro(a) aluno(a), vamos aprender a programar da melhor maneira possvel: utilizando
as regras da programao estruturada!
Os algoritmos podem ser expressos atravs de diagramas, de pseudolinguagens ou da prpria linguagem de programao. Vamos examinar cada uma dessas trs opes e, no final deste captulo, vamos
optar por uma delas, para que possamos comear a fazer nossos primeiros algoritmos!
Expresso de Algoritmos Atravs de Diagramas
A utilizao de diagramas para a expresso de algoritmos foi bastante utilizada at a dcada de
1980. Diagramas de Chapin e fluxogramas foram os principais mtodos utilizados ento. Nos mtodos
baseados em diagramas, uma grande variedade de formas geomtricas, como quadrados, retngulos,
hexgonos, pentgonos etc., utilizada para representar as instrues de leitura e impresso de dados,
assim como os comandos condicionais, de repetio etc. Alm disso, uma srie de regras para a disposio dessas formas e/ou setas para representar o sequenciamento das instrues fazem parte desses
mtodos.
Apesar de terem sido utilizados largamente pelas primeiras geraes de programadores, esses mtodos apresentam uma srie de inconvenincias, tais como:
o programador tem que memorizar todas as formas geomtricas e conhecer as regras de inter-relacionamento entre elas;
o programador perde um tempo considervel para fazer e refazer desenhos, tendo que possuir
diversas rguas com os smbolos dos diagramas;
para algoritmos muito grandes, os desenhos comeam a ocupar muitas pginas, tornando im-
13
Elisamara de Oliveira
14
15
Elisamara de Oliveira
grficos, para manipulao de bancos de dados etc. e linguagens para o ensino de programao!
Veja a Figura 6. um cdigo escrito em Pascal.
Figura 6 Algoritmo expresso na linguagem de programao Pascal.
16
17
Elisamara de Oliveira
Em funo de tudo o que foi dito e aps conhecermos as 3 formas de expresso de algoritmos, usaremos pseudolinguagem para escrever nossos primeiros algoritmos! As justificativas dessa nossa escolha so muitas e foram j fundamentadas. A pseudolinguagem PortuC utiliza o portugus, numa forma
estruturada, e tem estrutura, sintaxe e semntica muito semelhantes s da linguagem de programao
C.
Apesar de o Pascal ter se consagrado como uma linguagem adequada para o ensino da programao aos estudantes que a iniciam, ou seja, como primeira linguagem de programao, a linguagem
C, antes restrita comunidade cientfica, ganhou uma popularidade inquestionvel na dcada de 1990
que se estende aos dias atuais, pois a base de novas linguagens, como o Java, o C# e at o Android. Em
funo disso, a linguagem C passou a ser alvo do interesse dos estudantes. A resistncia, que j existiu,
18
em utiliz-la como primeira linguagem de programao pelos professores se deveu, em parte, ao fato de
seus criadores, Dennis Ritchie e Brian Kernighan, terem afirmado que C retm a filosofia bsica de que
os programadores sabem o que esto fazendo (KERNIGHAN; RITCHIE, 1989). Bem, se considerarmos que
programadores iniciantes no tm condies de saber com segurana o que esto fazendo, exatamente
pelo fato de serem inexperientes, a adoo da linguagem seria realmente questionvel.
No entanto, as linguagens de programao evoluram bastante e as mais utilizadas hoje, como o
Java e o C#, tm como base a linguagem C. Alm disso, a adoo de um mtodo adequado e coerente
para o ensino da programao de computadores pode atuar como um facilitador do processo de aprendizagem, permitindo que uma linguagem mais complexa, como o C, possa ser ensinado sem oferecer
obstculos aprendizagem.
Assim, a adoo do PortuC, nossa pseudolinguagem, e da metodologia de ensino proposta pela
professora viabiliza a adoo da linguagem de programao C como primeira linguagem. Isso vai ao encontro das expectativas dos estudantes e coloca o ensino da programao na direo da atual tendncia
da programao de computadores, que vem utilizando, cada vez mais, o C como base dos novos e modernos paradigmas de programao.
Caro(a) aluno(a), o PortuC, alm de oferecer o conforto de utilizar nossa lngua ptria, o que o
torna muito familiar ao programador, no requer a memorizao das abominveis formas geomtricas
e setas e mais setas dos diagramas. Fique tranquilo, meu(minha) estudante, mais duas lies e voc j
estar fazendo seus primeiros programas de computador!
19
PSEUDOLINGUAGEM DE
PROGRAMAO: PORTUC
Caro(a) aluno(a), suponha que voc ganhou de presente uma viagem para os Estados Unidos. O
que voc deveria fazer antes de ir para l? Estudar ingls! J que os americanos falam essa lngua, claro.
Ento, neste nosso curso, voc est ganhando a chance nica de aprender a programar. Este captulo
o convida a aprender PortuC, que a lngua que os algoritmos (que so as bases dos programas de
computador) falam! O PortuC , basicamente, uma traduo da linguagem C para Portugus. Assim,
aprendendo bem o PortuC, voc j estar se preparando para aprender a prpria linguagem C, de forma
simples e fcil!
2.1 Identificadores
Todo programa de computador manipula dados, que so armazenados em variveis. Uma varivel
precisa ter um nome que a identifique de forma nica no programa: o identificador.
Ateno
Um identificador em PortuC formado por caracteres alfanumricos;
O primeiro caractere tem que ser uma letra; os outros caracteres podem ser:
letras: A-Z, a-z;
dgitos: 0-9;
sublinhado: _ .
No pode haver dois identificadores iguais.
Letras minsculas e letras maisculas so diferentes.
Os identificadores no podem ser acentuados.
No pode haver espao em branco num identificador.
O caractere no pode ser usado num identificador.
Um identificador no pode ter o mesmo nome das palavras reservadas do PortuC (como: principal, se, seno,
inteiro, real etc.).
21
Elisamara de Oliveira
PreoTotal
Pessoa+Alta
Preco-caro
(caractere - no permitido)
Total_dos_salrios
inteiro
(palavra acentuada)
(palavra reservada do PortuC)
22
SOMA;
O contedo das variveis do programa pode ser determinado atravs de dois tipos de comandos:
comando de atribuio e comando de leitura. O comando de atribuio permite que um determinado
valor seja armazenado numa varivel.
Ateno
O smbolo do comando de atribuio = .
No se deve atribuir a uma varivel um valor que NO seja compatvel com o tipo bsico dessa varivel, ou seja,
nmeros inteiros devem ser atribudos a variveis do tipo inteiro; nmeros reais devem ser atribudos a variveis do
tipo real; frases e letras devem ser atribudas a variveis do tipo caractere.
Caso no haja compatibilidade entre o dado e o tipo da varivel, podem acontecer efeitos indesejados. Ento,
muito cuidado, pois nesse tipo de atribuio ocorre a CONVERSO AUTOMTICA DE TIPOS e o que chega
na varivel de destino pode ser um desastre!
Toda varivel deve ter um valor a ela atribudo antes de ser usada no programa;
Em variveis reais, S EXISTE PONTO DECIMAL; no se pode usar vrgula decimal.
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;
soma = 10.0;
(numa varivel do tipo inteiro,como o caso da varivel soma, no pode haver parte decimal;
esse caso est sujeito converso automtica)
soma := 0;
23
Elisamara de Oliveira
Saiba mais
Os operadores aritmticos bsicos so:
+ (adio);
- (subtrao);
* (multiplicao);
/ (diviso real);
++ (adiciona 1);
-- (subtrai 1).
Alguns operadores aritmticos mais avanados so:
% (resto da diviso inteira);
/ (quociente da diviso inteira);
sqrt( ) (raiz quadrada);
abs( ) (valor absoluto).
24
(os operadores * e + so didicos, envolvem sempre dois operadores, portanto no podem ser
utilizados juntos)
nome = nome * 3;
(em variveis do tipo caractere s pode ser feita adio ou subtrao de caracteres)
contador = *1;
Os operadores lgicos permitem que os trs principais operadores da lgebra de Boole possam ser
utilizados num programa: E, OU e NO. O estado dos operandos e o resultado de uma operao lgica
so sempre FALSOS (avaliados como zero) ou VERDADEIROS (avaliados como diferentes de zero).
Saiba mais
Os operadores lgicos so:
e (conjuno);
ou (disjuno);
! (negao).
O operador binrio e envolve sempre dois operandos e o resultado VERDADEIRO somente quando ambos os
operandos forem VERDADEIROS, ou seja, basta que um operando seja FALSO para que o resultado seja FALSO.
O operador binrio ou envolve sempre dois operandos e o resultado FALSO somente quando ambos os operandos forem FALSOS, ou seja, basta que um operando seja VERDADEIRO para que o resultado seja VERDADEIRO.
O operador unrio ! muda o estado do operando de FALSO para VERDADEIRO ou de VERDADEIRO para FALSO.
Caro(a) aluno(a), aqui cabe uma explicao um pouco mais detalhada para melhorar o entendimento dos operadores lgicos E, OU e ! (no):
uma varivel lgica aquela que pode assumir apenas os valores VERDADEIRO ou FALSO;
na prtica, as variveis lgicas so utilizadas para descrever o funcionamento de um sistema,
como um circuito formado por uma bateria e uma lmpada:
25
Elisamara de Oliveira
a representao dos nveis lgicos (1=verdadeiro e 0=falso) pode ser melhor entendida atravs
de chaves que representam um circuito. Se a chave est fechada (valor 1 ou valor VERDADEIRO), a corrente pode passar, o que pode permitir que a lmpada se acenda. Se a chave est
aberta (valor 0 ou valor FALSO), a corrente no pode passar, o que pode impedir que a lmpada
se acenda;
uma funo E resulta em 1=VERDADEIRO se, e somente se, todas as variveis lgicas de entrada tiverem valor 1=VERDADEIRO. Em outras palavras, a lmpada do circuito s acende se
ambas as chaves estiverem fechadas, o que caracteriza um circuito com chaves em sequncia,
como o mostrado a seguir (na funo E, somente se ambas as entradas forem verdadeiras a
expresso avaliada como verdadeira);
26
uma funo OU resulta em 1=VERDADEIRO se, pelo menos, uma das variveis lgicas de entrada tiver valor 1=VERDADEIRO. Em outras palavras, a lmpada acende se uma das chaves
estiver fechada ou quando as duas estiverem fechadas (forem verdadeiras), o que caracteriza
um circuito com chaves em paralelo, como o mostrado a seguir (na funo OU, basta que uma
entrada seja verdadeira para a expresso ser avaliada como verdadeira);
uma funo ! (no) uma operao de inverso. Ela converte o estado ou valor de uma varivel lgica em seu inverso lgico: de VERDADEIRO para FALSO e de FALSO para VERDADEIRO.
No caso do circuito, funciona assim: se a chave est aberta, ela se fecha e acende a luz, e, se est
fechada, ela se abre e apaga a luz.
27
Elisamara de Oliveira
(a varivel idade deveria ser repetida para obter o resultado lgico da comparao)
(resposta ==
(resposta ==
(resposta !=
(sexo == F
S)
S ou resposta == s)
S e resposta != s)
e altura <= 1.50)
S)
(o smbolo do operador diferente est errado: no pode haver espao em branco entre o ! e
o =)
se (altura <
= 1.50)
(o smbolo do operador menor que est errado: no pode haver espao em branco entre o <
e o =)
28
se (resposta = S)
Ateno
A sintaxe do comando condicional :
se (<condio>)
{
<bloco de comandos 1>
}
seno
{
<bloco de comandos 2>
}
A semntica (como funciona) do comando condicional :
a <condio> avaliada como VERDADEIRA (valor diferente de zero) ou FALSA (valor igual a zero);
se a <condio> for VERDADEIRA, o <bloco de comandos 1> executado e o comando condicional finalizado;
se a <condio> for FALSA, o <bloco de comandos 2> executado e o comando condicional finalizado.
seno clusula do comando se, ou seja, no comando, apenas faz parte do comando se.
A clusula seno pode no existir num comando se. Nesse caso, (quando no existe a clusula seno), quando
a <condio> avaliada como FALSA, nenhum comando executado e o comando se finalizado.
Os delimitadores de incio { e de fim } so obrigatrios quando existe mais de um comando no <bloco de
comandos 1> ou mais de um comando no <bloco de comandos 2>. Quando existir apenas um comando, os
delimitadores ficam opcionais.
29
Elisamara de Oliveira
30
31
Elisamara de Oliveira
Ateno
A sintaxe do comando de repetio :
enquanto (condio)
{
<bloco de comandos>
}
numero = 1;
enquanto (numero <= 50)
{ se (numero % 2 == 0)
++contapar;
seno
++contaimpar;
++numero;
32
numero = 1;
enquanto (numero <= 50)
se (numero % 2 == 0)
++contapar;
seno
++contaimpar;
++numero;
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!)
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.
33
Elisamara de Oliveira
Ateno
A sintaxe do comando de entrada :
leia(%letra, [&] varivel);
em que:
%letra representa os especificadores de formato e depende do tipo associado varivel:
%d ou %i
%f
%c
%s
O smbolo & deve ser utilizado apenas para os tipos numricos, ou seja, para variveis declaradas como inteiras ou
reais.
A semntica (como funciona) do comando de entrada :
a varivel tem que ter sido previamente declarada;
o usurio vai utilizar o teclado para fornecer o dado e, depois que ele teclar <ENTER>, tudo o que ele tiver digitado ser armazenado na varivel automaticamente.
Recomenda-se utilizar o comando leia para ler uma s <varivel> de cada vez.
A tabela a seguir mostra um exemplo de declarao de variveis de tipos bsicos e a forma correta
de leitura.
Declarao
Leitura
Exemplos de contedos
inteiro numero;
leia(%i, &numero);
numero = -5;
numero = 2002;
real valor;
leia(%f, &valor);
valor = -5.867;
valor = 2002.50;
caractere ch;
leia(%c, ch);
ch = 5;
ch = s;
ch = #;
caractere nome[20];
leia(%s, nome);
nome = Maria;
nome = fim;
34
Ateno
A sintaxe do comando de sada :
imprima( frase e %letra [, lista de variveis] );
Entre aspas, podem ser escritas frases formadas por palavras intercaladas pelos especificadores de formato %s, %c,
%i, %d ou %f, descritos no comando leia. Para cada especificador utilizado, a varivel do tipo correspondente deve
constar da lista de variveis.
A lista de variveis opcional; deve existir somente quando um especificador de formato colocado na frase entre
aspas e, nesse caso, deve haver uma vrgula separando a frase da lista de variveis e vrgulas separando as variveis
da lista.
A semntica (como funciona) do comando de sada :
pode ser impressa qualquer frase e qualquer varivel dentro de um comando imprima, desde que a frase esteja
entre aspas e as variveis estejam devidamente listadas aps a vrgula que separa a frase da lista de variveis;
a frase entre aspas copiada integralmente para a tela e os especificadores de formato so substitudos pelas
variveis da lista de variveis;
quando existe uma varivel, o seu contedo copiado para a tela;
a ordem em que as palavras da frase e as variveis aparecem no comando imprima mantida quando impressa na tela.
35
Elisamara de Oliveira
(faltou o especificador de formato da varivel Media (%f) aps o = na frase entre aspas)
(no pode haver & na leituras de variveis do tipo caractere (%c e %s) )
Saiba mais
36
2.11 Comentrios
Os comentrios no pertencem s instrues dos algoritmos, mas so teis para que o programador explique o que est sendo feito.
Saiba mais
Os comentrios podem vir delimitados entre
/* */
Ou podem ser comentrios de linha
//
Exemplos de comentrios:
/* Este trecho calcula a media de notas */
desc = preco*0.15; // calcula desconto de 15%
37
Elisamara de Oliveira
38
39
Elisamara de Oliveira
sexo, caractere[20];
principal ( )
{
imprima (Qual eh o seu nome? );
leia(%s,caractere);
imprima (Qual eh o seu sexo? (F/M) );
leia (%c,sexo);
se (sexo == F)
imprima (%s voce eh do sexo feminino. ,caractere);
seno
imprima (%s voc eh do sexo masculino. ,caractere);
}
real nota;
{
imprima (Digite sua nota final: );
leia(%f,¬a);
se (nota >= 6.0)
imprima (Voce foi aprovado! );
seno
imprima (Voce foi reprovado... );
imprima(Fim do programa.);
}
real nota;
nota = 7.5;
principal()
{
imprima (Digite sua nota final: );
leia(%f,¬a);
se (nota >= 6.0)
imprima (Voce foi aprovado! );
seno
imprima (Voce foi reprovado... );
imprima( Fim do programa.);
}
40
inteiro N;
principal()
{
imprima (Digite um numero inteiro: );
leia(%i,&n);
se (n % 2 == 0)
imprima (O numero %i eh par , n);
seno
imprima (O numero %i eh impar , n);
imprima( Fim do programa.);
}
(no foi declarada a varivel n ou foi declarada errada (N maisculo diferente de n minsculo))
Caro(a) aluno(a), este captulo foi um convite a aprender PortuC, que a lngua que os algoritmos (que so as bases dos programas de computador) falam! O PortuC , basicamente, uma traduo
da linguagem C para Portugus. Assim, aprendendo bem o PortuC, voc j estar se preparando para
aprender a prpria linguagem C, de forma simples e fcil!
41
CONSTRUO DE ALGORITMOS
EM PORTUC: PRATICANDO OS
COMANDOS E FAZENDO CLCULOS
Saiba mais
Ao invs de usar %f para apresentar a altura, usamos %.2f
O que isso significa? Que ns queremos apresentar a altura com apenas 2 dgitos na parte decimal! Afinal, a forma tradicional de se apresentar uma altura com 2 dgitos apenas, como 1.75, 1.62, 1.88 etc., no mesmo?
43
Elisamara de Oliveira
6. Escreva comandos para pedir, ler e imprimir o nome e a idade de uma pessoa.
8. Escreva um comando para verificar se a idade lida no exerccio 6 corresponde a uma criana
(menor que 13 anos). Se for, imprima uma frase dizendo que uma criana.
9. Escreva um comando para verificar se a idade lida no exerccio 6 corresponde a um adolescente (entre 13 e 17 anos). Se for, imprima uma frase dizendo que um adolescente.
10. Escreva um nico comando capaz de classificar uma pessoa pela faixa etria e ainda verificar
se a idade vlida.
44
11. Transforme o exerccio 6 num algoritmo, ou seja, construa o Bloco de Programa em PortuC.
12. Escreva um algoritmo que leia o nome e a idade de uma pessoa e imprima uma frase dizendo
se a pessoa uma criana, um adolescente, um adulto ou se a idade invlida.
45
Elisamara de Oliveira
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.
Para evitarmos a diviso eventual por zero, usamos o comando se. Somente se n2 for diferente de
zero que a diviso ser calculada; caso contrrio, uma mensagem impressa para comunicar ao
usurio o motivo pelo qual o clculo no foi efetuado. O resultado da diviso um nmero real.
16. Escreva um comando para calcular o quadrado de um nmero inteiro n1 e tambm n1 elevado a 3.
Com certeza, muito mais fcil do que voc pensava, no ? So pequenos truques da programao. Mas se quisermos calcular n1 elevado a 1000 ou n1 elevado a um nmero qualquer, teremos
que escrever um pequeno trecho de algoritmo. Depois eu mostro como fazer.
46
Novamente, para evitarmos um erro tentando calcular a raiz de um nmero negativo, usamos o
comando se. Observe que sqrt( ) um operador aritmtico cuja sintaxe diferente dos outros vistos nos exerccios anteriores. Esse tipo de operador, na verdade, uma funo que recebe n1 como
parmetro e devolve a sua raiz quadrada calculada. Existem muitas outras funes e elas sero
apresentadas na medida em que se fizer necessria a sua utilizao.
18. Escreva comandos para fornecer o quociente e o resto da diviso inteira de n1 por n2.
No caso da diviso inteira de n1 (numerador) por um nmero n2 (denominador), tambm necessrio que o denominador seja diferente de zero.
Nesse caso, importante voc notar que ambos os nmeros (n1 e n2) tm que ser inteiros para
que os operadores / (quociente da diviso) e % (resto da diviso inteira) possam ser utilizados!
Como voc pode notar, no existe um operador especfico para o quociente da diviso inteira; usa-se o / (que da diviso real), mas, como n1 e n2 so inteiros, haver uma converso automtica
de tipos, com o truncamento da parte fracionria do resultado, o que nos fornece o quociente da
diviso inteira. Isso um trunfo do PortuC: nunca se esquea disso!
Se n1 for 7 e n2 for 3, por exemplo, quais seriam os valores de quociente e resto? (7 dividido por 3
d 2 (quociente) e sobra 1 (resto), no ?)
Saiba mais
Qual a diferena entre diviso real e diviso inteira?
3.5 este o resultado da diviso real
7 / 2 = 3 (quociente da diviso inteira)
7 % 2 = 1 (resto da diviso inteira)
47
Elisamara de Oliveira
21. Escreva comandos para separar os dgitos de um nmero inteiro menor que 100 em dezena
e unidade.
Vamos entender, primeiramente, o que se quer: dado um nmero menor que 100, por exemplo,
29, deseja-se obter o dgito 2 (dezena) separado do dgito 9 (unidade); no caso de um nmero de
um s dgito, por exemplo, 3, o resultado seria 0 (dezena) e 3 (unidade). Bem, este um problema
muito comum na programao e muito fcil de ser resolvido tambm! Basta usar os operadores
/ e % com nmeros inteiros.
Vamos fazer um pequeno teste: 29 dividido por 10 d 2 e sobra 9, certo? 2 a dezena de 29 e coincide com o quociente da diviso inteira; 9 a unidade de 29 e coincide com o resto da diviso inteira
por 10! No caso de n1 ser igual a 3, ficaria assim: 3 dividido por 10 d 0 e sobra 3. Nesse caso, 0 a
dezena (/) e 3 a unidade (%).
Um bom teste aqui seria voc responder: como poderamos separar os 3 dgitos de nmeros entre
100 e 999?
Se no conseguir resolver, esta uma boa pergunta para o frum!
48
22. Suponha que, numa certa universidade, os alunos tm um nmero de 5 dgitos que os identificam. Desses 5 dgitos, os 2 primeiros indicam o ano em que o aluno entrou na universidade.
Escreva comandos para separar os 2 primeiros dgitos de um nmero inteiro de 5 dgitos que
representa a identificao do aluno.
Vamos entender o que se quer: dado um nmero de 5 dgitos, por exemplo, 99211, se deseja obter
os 2 primeiros dgitos, no caso, 99 (que indicaria que o aluno entrou em 1999 na universidade).
Mas e se o aluno entrou em 2000 ou 2009? O resultado teria que ser ano de entrada = 0. Vamos
fazer, agora, os testes. Vejamos: n1 00211. 00211 dividido por 1000 d ZERO (que o quociente)
e sobra 211. Pode parecer estranho, mas pense: quando se divide um nmero por 1000, o menor
resto zero e o maior resto pode ser 999. Como queremos apenas o quociente da diviso inteira, o
resultado ser anoentrada = 0 (que, no caso, representaria 2000). Funciona!
Outro teste: n1 igual a 10231. 10231 dividido por 1000 d 10 e sobra 231, certo? 10 o quociente,
o que resulta em anoentrada= 10 (que seria 2010)! Funciona mesmo!
Faa outros testes e verifique que d certo. E como o clculo simples, no?
Observe que 0 pode ser considerado um nmero positivo e todo nmero menor que 0 negativo.
24. Escreva um comando para verificar se um nmero par ou mpar.
Um nmero par aquele que, dividido por 2, tem resto zero: 0, 2, 4, 6, 8, 10..., e um nmero mpar
aquele que, dividido por 2, tem resto diferente de zero: 1, 3, 5, 7, 9...
49
Elisamara de Oliveira
Para se verificar se um nmero est entre dois limites, so necessrias duas comparaes: uma
para o limite inferior e outra para o limite superior, e essas comparaes tm que estar ligadas
pelo conectivo lgico e, quer dizer, somente quando as duas comparaes forem verdadeiras, o
nmero est dentro dos limites. No como na Matemtica, que usamos uma expresso do tipo
10 n1 100!
27. Suponha que certo clube esportivo quer selecionar atletas para o time de basquete. As exigncias so: ter 1.85 m de altura ou mais, ter menos de 21 anos e ter, pelo menos, o primeiro
grau completo. Escreva um comando para verificar se um candidato pode ser ou no aprovado para o time de basquete. O grau de instruo definido como: 0= sem instruo, 1=primeiro grau, 2=segundo grau, 3=superior.
Observe que, ao se fazer a comparao da altura, no se faz referncia unidade de medida metros, quer dizer, estaria errada uma comparao do tipo altura >= 1.85 m. O mesmo acontece
com a idade, em que os anos foram (e devem) ser omitidos.
50
28. Suponha que o clube esportivo deseje, agora, formar um time masculino (sexo == m) e outro
feminino (sexo == f) e tenha mudado um pouco seus critrios. As exigncias passaram a ser:
ter 1.85m de altura ou mais para os homens e 1.75 ou mais para as mulheres e ter menos de
21 anos. Escreva um comando para verificar se um candidato ou candidata pode ser ou no
aprovado(a) para o time de basquete.
Observe que surgiu o conectivo ou ligando as comparaes de altura para os sexos diferentes,
que continuaram a ser ligados pelo conectivo e na comparao de idade! Pense por que assim.
Caro(a) aluno(a), este captulo foi uma excelente oportunidade para exercitarmos a linguagem de
programao.
Agora hora de voc praticar um pouco sozinho(a)! A minha forte recomendao que voc faa
os exerccios sozinho(a), consultando os exemplos anteriores para ajud-lo(a). Somente depois da sua
tentativa, que voc deve conferir as respostas. Boa sorte!
1. Escreva um algoritmo que leia e imprima o nome e as duas notas de um aluno.
2. Escreva um comando que calcule a mdia das duas notas lidas no exerccio 3.1.1.
3. Escreva um comando que verifique se a mdia calculada no exerccio 3.1.2 maior ou igual a
7.0; se for, imprima uma frase dizendo que o aluno foi aprovado, caso contrrio, imprima uma
frase dizendo que foi reprovado.
4. Escreva um algoritmo que leia o nome e as duas notas de um aluno, calcule a mdia das notas
e imprima uma frase dizendo se ele foi aprovado (mdia maior ou igual a 7.0) ou reprovado.
51
Elisamara de Oliveira
C5;
seno
{
C3;
C4;
}
Em PortuC, no existe uma varivel do tipo lgico a qual se possa atribuir um valor verdadeiro ou falso. No entanto, o PortuC considera o valor 0 (zero) como sendo falso e qualquer
outro valor diferente de zero como sendo verdadeiro. Nos exerccios que se seguem, considere
que os valores de B1, B2 e B3 representam valores verdadeiros (diferentes de zero) ou falsos
(iguais a zero) e responda pergunta: quais comandos sero executados.
a) Se B1= Verdadeiro B2 =Verdadeiro e B3=Falso?
b) Se B1=Falso B2= Verdadeiro e B3= Falso?
c) Se B1=Falso B2=Verdadeiro e B3=Verdadeiro?
d) Quais os valores de B1, B2 e B3 para que somente o comando C5 seja executado?
6. Dado um conjunto de respostas sim ou no de vrias pessoas e seu sexo (F=feminino,
M=masculino), escreva comandos em PortuC para calcular:
a) o nmero de mulheres que responderam sim;
b) o nmero de homens que responderam no;
c) o nmero de mulheres e homens que responderam no.
52
L = 0;
seno
L = 1;
8. Escreva trechos de algoritmo em PortuC que ajudem o Instituto Brasileiro de Geografia e Estatstica (IBGE) a fazer o censo populacional de uma certa cidade. Sabendo-se que os seguintes dados foram pedidos aos cidados: SEXO (H= homem, M= mulher) e RENDA (nmero de
salrios-mnimos sm), os trechos de algoritmo devem fornecer:
a) o total de homens;
b) o total de mulheres;
c) o total de pessoas da classe C (at 4 sm), da classe B (at 20 sm) e da classe A (acima de 20 sm).
9. Fornecidos os dados das candidatas a modelo: ALTURA, PESO e IDADE, escreva um trecho de
algoritmo para verificar se os dados se enquadram nos seguintes limites:
ALTURA: de 1.70 a 1.85 m
PESO: de 48.0 a 60.0 kg
IDADE: de 17 a 21 anos
Se os dados da candidata corresponderem a esses limites, deve ser impressa uma frase dizendo
que ela foi aprovada; caso contrrio, que no foi aprovada.
10. Modifique o exerccio anterior para que uma frase seja impressa aps a verificao de cada
quesito, dizendo se a candidata foi aprovada ou no em cada um deles e uma frase final dizendo se foi aprovada ou no como modelo.
53
Neste captulo, caro(a) aluno(a), voc aprender uma metodologia que facilitar o processo de desenvolvimento de solues algortmicas para os problemas que sero propostos para voc resolver. A
metodologia composta de uma sequncia de passos, cujo principal objetivo ajud-lo(la) a resolver
problemas dividindo-os por partes, diminuindo, assim, a sua complexidade. Como ficar bem claro logo
adiante, resolvendo cada parte do problema por vez, consegue-se chegar a solues completas e complexas a partir de solues simples, que j foram, muitas vezes, encontradas para diversos outros problemas semelhantes.
Voc conhecer os passos da metodologia e vrios exemplos prticos sero fornecidos de maneira
a familiariz-lo(la) com o mtodo. importante ressaltar que a metodologia um processo dinmico.
Voc pode estar num passo mais adiante e identificar uma varivel auxiliar e voltar aos passos anteriores
e alter-los, por exemplo. Portanto, no se detenha aos detalhes, pelo contrrio, sinta-se livre para criar
suas solues. O mtodo pretende ajud-lo(la) e no engess-lo(LA)! Vamos em frente!
55
Elisamara de Oliveira
56
serve apenas de orientao. Cada problema deve, no entanto, ser analisado logicamente para chegar ao
seu algoritmo.
Ateno
/* Nome do Programa e o que ele faz */
<passo 5 declarar todas as variveis do programa>
principal()
{ <passo 6 inicializar as variveis do programa >
<passo 7 calcular cada uma das sadas do programa>
Passo 10: Fazer o teste de mesa do programa a partir de diferentes valores iniciais
O teste de mesa consiste na execuo de todas as instrues do programa a partir de conjuntos
de valores iniciais. Os valores iniciais devem ser escolhidos de maneira que as condies de contorno
do problema sejam verificadas. Por exemplo, num programa que trabalhe com flags, deve ser testada a
condio em que o valor do flag seja fornecido como dado inicial; num programa que s leia nmeros
positivos, devem ser fornecidos nmeros negativos e zero; entre outras situaes possveis.
A estratgia que utilizaremos nesta seo propor uma lista de exerccios e resolver alguns deles usando a metodologia, deixando outros para que voc, utilizando solues semelhantes, resolva-os
sozinho(a), ok? Ento, vamos l!
Neste captulo, caro(a) aluno(a), voc aprendeu uma metodologia que facilitar o processo de desenvolvimento de solues algortmicas para os problemas que sero propostos para voc resolver. A
metodologia composta de uma sequncia de passos, cujo principal objetivo ajud-lo a resolver problemas dividindo-os por partes, diminuindo, assim, a sua complexidade. Como ficar bem claro logo
adiante, resolvendo cada parte do problema por vez, consegue-se chegar a solues completas e complexas a partir de solues simples que j foram, muitas vezes, encontradas para diversos outros problemas semelhantes.
Voc conhecer os passos da metodologia e vrios exemplos prticos sero fornecidos de maneira
a familiariz-lo com o mtodo.
57
Elisamara de Oliveira
1. Escreva um algoritmo em PortuC para calcular e imprimir a rea e o permetro de uma sala
retangular, sendo que os comprimentos das paredes (comprimento e largura) so fornecidos
pelo usurio.
2. Escreva um algoritmo em PortuC para calcular e imprimir a rea de uma esfera. O raio da esfera ser fornecido pelo usurio. Obs.: A = 3.14*R2.
3. Escreva um algoritmo em PortuC que calcule e imprima o valor em reais correspondente aos
dlares que um turista possui no cofre do hotel. O programa deve solicitar os seguintes dados:
quantidade de dlares guardada no cofre e cotao do dlar naquele dia.
4. Escreva um algoritmo em PortuC que leia um nmero e informe se ele par ou mpar.
5. Escreva um algoritmo em PortuC que leia 2 nmeros e diga qual deles o maior.
6. Escreva um algoritmo em PortuC que calcule e imprima a quantidade de tijolos iguais necessria para construir uma determinada parede. So dados de entrada do programa: dimenses
do tijolo (comprimento e largura) e dimenses da parede a ser construda (comprimento e
largura).
7. Escreva um algoritmo em PortuC que calcule S, o alcance de um projtil, dados a velocidade
inicial v0 e o ngulo entre o cano do canho e o solo. O valor de g corresponde gravidade
que de 9.8 m/s2. A frmula a ser utilizada :
8. Escreva um algoritmo em PortuC que calcule a rea A de um tringulo pela frmula de Hero,
lendo os valores de entrada s, que o semipermetro, e a, b e c, que so os lados do tringulo:
9. Escreva um algoritmo em PortuC para calcular o valor do desconto, sendo que o preo do
produto fornecido pelo usurio e o desconto de 5%. Apresentar o preo do produto, o valor
do desconto e o preo final com o desconto.
58
10. Escreva um algoritmo em PortuC para calcular e imprimir qual foi a porcentagem de desconto
dada em um determinado produto, sabendo-se o preo original do produto e o preo que foi
cobrado por ele depois do desconto sero fornecidos pelo usurio.
11. Escreva um algoritmo em PortuC que receba dois valores inteiros nas variveis A e B. O programa deve trocar os valores entre as variveis (ou seja, ao trmino do programa, a varivel A deve
ter o valor inicial de B e vice-versa). Apresentar as duas variveis no final.
12. Escreva um algoritmo em PortuC para calcular e imprimir o valor a ser pago pelo perodo de estacionamento do automvel. O usurio entra com os seguintes dados: hora e minuto de entrada, hora e minuto de sada. Sabe-se que esse estacionamento cobra R$ 10,00 por hora ou frao.
13. Escreva um algoritmo em PortuC que leia o valor de uma conta de luz e, caso o valor seja
maior que R$ 50,00, apresente a mensagem: Voc est gastando muito. Caso contrrio, exiba
a mensagem: Seu gasto foi normal, parabns.
14. Escreva um algoritmo em PortuC que receba a leitura do termmetro. Caso a temperatura
esteja abaixo de 100 C, apresentar a mensagem de que a temperatura est muito baixa. Caso
a temperatura esteja entre 100 e 200 C, apresentar a mensagem de que a temperatura est
baixa. Caso a temperatura esteja acima de 200 C e inferior a 500 C, apresentar a mensagem de
que a temperatura est normal. Caso contrrio, apresentar a mensagem de que a temperatura
est muito alta.
15. Escreva um algoritmo em PortuC que leia o valor do salrio atual, calcule e imprima o valor
do novo salrio de um funcionrio. Considere que o funcionrio dever receber um reajuste de
15% caso seu salrio seja menor que R$ 500.00. Se o salrio for maior ou igual a 500, mas menor
ou igual a R$ 1000.00, o reajuste deve ser de 10%. Caso o salrio seja maior que R$ 1000.00, o
reajuste deve ser de 5%.
16. Escreva um algoritmo em PortuC que determine quanto ser gasto para encher o tanque de
um carro, sabendo-se que o preo da gasolina R$ 2.60 e o preo do lcool R$ 1.80. O usurio
fornecer os seguintes dados: tipo de carro (as opes como tipo de carro so a letra G gasolina ou a letra A lcool; rejeitar valores invlidos) e capacidade do tanque em litros.
59
A LINGUAGEM DE PROGRAMAO C
Neste captulo, voc, caro(a) aluno(a), poder comear a traduzir seus primeiros algoritmos para a
linguagem de programao C. Isso o(a) capacitar a realizar as primeiras aulas prticas em laboratrio.
Recomenda-se que voc prepare em seu computador um ambiente adequado programao em C e
comece a trabalhar sozinho(a), fazendo os programas da lista 4.1 como atividades extraclasse. O interessante em se utilizar o PortuC como pseudolinguagem que ele segue quase totalmente as mesmas
regras da linguagem C. Assim, comear a programar em C ser muito fcil, voc ver!
Saiba mais
Um identificador em C formado por caracteres alfanumricos.
O primeiro caractere tem que ser _ ou uma letra; os outros caracteres podem ser:
letras: A-Z, a-z;
dgitos: 0-9;
sublinhado: _ .
No pode haver dois identificadores iguais.
Letras minsculas e letras maisculas so diferentes.
Os identificadores no podem ser acentuados.
No pode haver espao em branco num identificador.
O caractere no pode ser usado num identificador.
Um identificador no pode ter o mesmo nome das palavras reservadas do C (como main, if, else, int, char).
Na linguagem C, h 5 tipos bsicos (int, float, double, char e void) e quatro modificadores de tipos (long, short, signed
e unsigned), o que amplia muito os tipos de variveis, mas, neste curso, usaremos apenas 3 tipos bsicos:
int;
float;
char.
O tipo de dados double (%Lf ) corresponde ao float, mas com maior capacidade de armazenamento.
Para se declarar uma varivel, escreve-se o nome de seu tipo, salta-se um espao em branco, em seguida o nome do
seu identificador e ponto e vrgula para finalizar a declarao.
Se mais de uma varivel for do mesmo tipo bsico, elas podem ser declaradas juntas, apenas separadas por vrgulas.
Pode-se inicializar uma varivel na sua declarao atribuindo-se a ela um valor inicial compatvel com
seu tipo.
Toda varivel precisa ser declarada antes de ser utilizada.
No pode haver duas variveis com mesmo nome, mesmo que tenham tipos bsicos diferentes, a menos que algum
caractere maisculo ou minsculo as diferencie.
61
Elisamara de Oliveira
Ateno
O operador de atribuio : = .
H os operadores de atribuio compostos:
+=
-=
*=
/=
Os operadores aritmticos bsicos so:
+ (adio);
- (subtrao);
* (multiplicao);
/ (quociente da diviso real);
++ ( adiciona 1);
-- (subtrai 1).
Alguns operadores aritmticos mais avanados so:
% (resto da diviso inteira);
/ (quociente da diviso inteira);
sqrt( ) (raiz quadrada);
abs( ) (valor absoluto).
Os operadores relacionais so:
> (maior que);
>= (maior ou igual a);
< (menor que);
<= (menor ou igual a);
== (igual a);
!= (diferente de).
Os operadores lgicos so:
&& (operador e conjuno);
|| (operador ou disjuno);
! (operador no negao).
62
Ao
&&
(e)
||
(ou)
Avalia como 1 (verdadeiro) se pelo menos uma expresso for verdadeira, caso contrrio, avalia como 0 (falso).
!
(no)
Avalia como 1 (verdadeiro) se a expresso for falsa e 0 (falso) se a expresso for verdadeira, ou seja, troca verdadeiro por falso e vice-versa.
Exemplos:
(5 > 2) && (3 != 2)
(3 >= 2) || (4 == 2)
(3 <= 2) || (4==2)
! (4==2)
! (4>3)
escolaridade >= 2)
|| foidispensado == 1)
s)
s)
(muito cuidado com este tipo de expresso: cont=0 uma atribuio e no uma
comparao, mas em C pode-se fazer atribuio num comando if!)
63
Elisamara de Oliveira
64
salario = totaldehoras *+ 32.50;
Contador =
*1;
Ateno
A sintaxe do comando condicional :
if (condio)
{
<bloco de comandos 1>
}
else
{
<bloco de comandos 2>
}
A semntica (como funciona) do comando condicional if :
a <condio> avaliada como VERDADEIRA (valor diferente de zero) ou FALSA (valor igual a zero);
se a <condio> for VERDADEIRA, o <bloco de comandos 1> executado e o comando condicional finalizado;
se a <condio> for FALSA, o <bloco de comandos 2> executado e o comando condicional finalizado.
else clusula do comando if, ou seja, no comando, apenas faz parte do comando if.
A clusula else pode no existir num comando if. Nesse caso (no existe a clusula else), quando a <condio>
avaliada como FALSA, nenhum comando executado e o comando if finalizado.
Os delimitadores de { e } so obrigatrios quando existe mais de um comando no <bloco de comandos 1> ou
mais de um comando no <bloco de comandos 2>. Quando existir apenas um comando, os delimitadores
ficam opcionais.
65
Elisamara de Oliveira
66
positivo);
< 0)
negativo);
zero);
if (numero % 2 == 0);
++contapar;
else
++contaimpar;
(no pode-se colocar ; depois da condio do comando if, pois o ; finaliza o comando)
67
Elisamara de Oliveira
Ateno
Comando de seleo mltipla que testa sucessivamente o valor de uma expresso contra uma lista de valores do
tipo inteiro ou de caracteres. Quando o valor coincide, os comandos associados quele valor so executados. A
sintaxe do comando de seleo mltipla switch :
switch (expresso)
{ case valor1:
<comandos_1>;
break;
case valor2:
<comandos_2>;
break;
...
case valorn:
<comandos_n>;
break;
default:
comandos_default;
}
A expresso deve resultar num valor inteiro do tipo long, int ou char. Compara-se esse resultado com o
valor1 at valorn:
se for encontrada alguma equivalncia, o programa passa a executar os comandos a partir deste ponto, at
encontrar uma instruo break;
se nenhuma equivalncia for encontrada, os comandos relativos a default so executados;
caso no haja a opo default, nenhum comando executado;
caso a instruo break no seja encontrada, todos os comandos vo sendo executados at se chegar ao final
do comando switch.
68
switch (sexo)
{
case f:
case F:
printf(\nVoce eh do sexo feminino);
break;
case m:
case M:
printf(\nVoce eh do sexo masculino);
break;
default:
printf(\nValor de sexo invalido.);
}
para maisculo
{
letra = toupper(letra);
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);
}
69
Elisamara de Oliveira
switch (voto)
{ case 1: printf(\n Voce votou no candidato 1);
++cont1;
break;
case 2: printf(\n Voce votou no candidato 2);
++cont2;
break;
case 3: printf(\n Voce votou no candidato 3);
++cont3;
break;
default:
printf(\n Voto invalido);
}
scanf(%f,&temp);
switch (temp)
{ case 36.0:
case 36.5: printf(\nVoce no tem febre. Temperatura normal.);
break;
case 37.0:
case 37.5: printf(\nVoce esta levemente febril.);
break;
default: if (temp > 37.5)
printf(\nVoce esta febril. Procure um medico);
else
printf(\nEsta temperatura esta fora dos valores normais);
}
(o comando switch no aceita valores do tipo real!!! Este comando totalmente invlido)
switch (sexo)
{
case f:
case F:
printf(\nVoce eh do sexo feminino);
case m:
case M:
printf(\nVoce eh do sexo masculino);
default:
printf(\nSexo invalido.);
}
(falta o comando break dentro dos cases, ento todos os printf sero executados)
70
Ateno
A sintaxe do comando de repetio while :
while (condio)
{
<bloco de comandos>
}
A semntica (como funciona) do comando de repetio while :
a condio avaliada como VERDADEIRA (diferente de zero) ou FALSA (igual a zero);
se a condio for VERDADEIRA, o <bloco de comandos> executado e, ao chegar ao delimitador de fim } ou final
do comando, automaticamente se retorna avaliao da condio;
se a condio for FALSA, o comando de repetio finalizado.
Entre os comandos do <bloco de comandos>, ESSENCIAL que exista um comando que altere a <condio> que
constantemente avaliada, pois, caso contrrio, o comando enquanto NUNCA TERMINAR!
Caso haja um comando break; dentro do comando while, este finaliza imediatamente o comando while quando for executado.
Os delimitadores { e } so obrigatrios quando existe mais de um comando no <bloco de comandos>. Quando
existir apenas um comando, os delimitadores ficam opcionais e o ; funcionar como delimitador de fim,
indicando o final do comando while.
71
Elisamara de Oliveira
contador <= 10
++contador;
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;
O comando de repetio for permite que um comando ou um bloco de comandos seja executado
um nmero determinado de vezes. um comando de repetio, como os comandos while (j apresentado)
e do while (que no apresentaremos nesta apostila). A diferena entre eles que o comando for utiliza um
mecanismo de contagem automtica, dentro de um intervalo definido pelo usurio. muito til para controlar a leitura e a impresso de vetores e matrizes (estruturas que sero estudadas no futuro).
72
Ateno
A sintaxe do comando de repetio for :
for (inicial; condio; incremento ou decremento)
{
<bloco de comandos>
}
As expresses inicial e incremento ou decremento so, em geral, atribuies varivel de controle e condio
uma expresso relacional que envolve a mesma varivel de controle.
A semntica do comando for :
A expresso inicial avaliada, consistindo geralmente na inicializao de uma varivel de controle;
Em seguida, avaliada a condio:
se a condio for verdadeira, o <bloco de comandos> executado e, ao chegar ao delimitador } ou final do
comando for, automaticamente se incrementa ou se decrementa a varivel de controle e se retorna avaliao da condio;
quando a condio ficar falsa, ou seja, o incremento/decremento fizer a varivel de controle chegar no limite
da condio, o comando de repetio finalizado.
Os delimitadores { e } so obrigatrios quando existe mais de um comando no <bloco de comandos>.
Quando existir apenas um comando, os delimitadores ficam opcionais e o ; funcionar como delimitador
de fim, indicando o final do comando for.
73
Elisamara de Oliveira
Note que, quando o corpo da instruo for consistir de mais de um comando, necessrio que
estes sejam colocados entre os delimitadores { }.
A expresso condio pode ser constituda por expresses conectadas por operadores lgicos.
for(i=0; (i<10 && aux!=0); i++)
{
printf(\n %d, aux);
--aux;
}
achou= i= 0;
for( ; (i<10 && achou==0); i++)
{
printf(\n Digite um inteiro: );
scanf(%i, &aux);
achou = (aux == -1);
}
Usando vrgulas, pode-se criar expresses constitudas de duas subexpresses, de forma a realizar duas tarefas. As subexpresses sero avaliadas da esquerda para a direita e toda a expresso ser avaliada como o valor da expresso da direita.
for(i=0, j=10; i<10; i++, j--)
printf(\n%d, %d, i, j);
A instruo for pode ser aninhada, ou seja, executada dentro de outra instruo for.
for(linha=0; linha<10; linha++)
{ for(coluna=0; coluna<10; coluna++)
printf(\n%d, matriz[linha][coluna]);
}
Podem-se omitir as trs expresses: inicial, condio e incremento:
for( ; ; )
Tendo-se, ento, um loop infinito, que pode, no entanto, ser interrompido dentro do corpo da instruo for por um comando break.
74
i=10;
for( ; ; )
{ if (i==0)
break;
--i;
}
i= soma = 0;
for ( ; i < 10; i++)
{
printf(\nDigite o valor da nota do aluno %i= ,i);
scanf(%f,¬a);
soma = soma + nota;
}
(o comando for no ser executado nenhuma vez, pois o valor inicial menor que o valor final
e i-- indica contagem decrescente)
for
(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)
75
Elisamara de Oliveira
(o comando for no vai parar nunca, pois a condio nunca vai ser falsa; o certo seria usar
j++ e no j--)
Ateno
Na linguagem C, h diversos comandos de leitura e cada um deles mais adequado aos diferentes tipos
bsicos.
Para a leitura de nmeros, o comando deve ser scanf.
Para a leitura de caractere nico, o melhor comando o getche().
Para a leitura de strings (cadeia de caracteres), o melhor comando gets().
A sintaxe dos comandos de entrada :
scanf(%letra, & varivel);
em que %letra representa os especificadores de formato e depende do tipo associado varivel: %d ou %i, para
variveis do tipo int, e %f, para variveis do tipo float.
76
varivel = getche();
gets(varivel);
A tabela a seguir mostra um exemplo de declarao de variveis de tipos bsicos, a forma correta
de leitura e as bibliotecas do C a serem includas.
Declarao
Leitura
int numero;
stdio.h
float valor;
scanf(%f, &valor);
valor = -5.867;
valor = 2002.50;
stdio.h
c=getche();
c = 5;
c = s;
c = #;
conio.h
gets(nome);
char c;
char nome[20];
Exemplos de contedos
Saiba mais
A sintaxe dos comandos de sada :
printf(\n frase
puts(\n frase);
No comando printf, entre as aspas podem ser escritas somente frases ou frases formadas por palavras intercaladas
pelos especificadores de formato %s, %c, %i, %d ou %f, descritos nos comandos de leitura. Caso haja especificadores,
para cada especificador utilizado, a varivel do tipo correspondente deve constar da <lista de variveis>.
A lista de variveis opcional; deve existir somente quando um especificador de formato colocado na frase entre
aspas e, nesse caso, deve haver uma vrgula separando a frase da lista de variveis e vrgulas separando as variveis
da lista.
Os nmeros do tipo float podem ser impressos com formato, no comando printf, para evitar a forma cientfica, ou
seja, para serem impressos em forma estendida. A parte fracionria truncada caso haja mais casas fracionrias do
que a delimitada pelo formato, mas a parte inteira nunca truncada. Exemplos: %.2f (2 casas na parte fracionria),
%3.0f (no mnimo 3 casas na parte inteira, mas no ocorre truncamento nunca, e nenhuma casa na parte fracionria).
\n um cdigo de barra invertida que salta uma linha na tela. Pode ser usado em qualquer posio dentro das aspas
em ambos os comandos, puts e printf, e opcional.
O comando puts salta uma linha aps a impresso da frase, mesmo sem \n, e no imprime variveis.
77
Elisamara de Oliveira
Ateno
Explicao adicional Passo a passo do comando de impresso:
printf (frase varivel1 varivel2 varivel3);
(entre a frase e a varivel e entre as variveis deve haver uma vrgula separando-as)
printf (frase , varivel1, varivel2, varivel3);
(a frase deve vir entre aspas)
printf (\nfrase , varivel1, varivel2, varivel3);
(dentro da frase deve vir um formato para cada varivel, compatvel com o seu tipo bsico)
printf (\nfrase %s %i %f ,varivel1,varivel2,varivel3);
Exemplo:
printf (\nVc se chama %s, tem %i anos e %.2f metros de altura ,
nome, idade, altura);
gets(nome);
media);
78
5.8 Comentrios em C
Os comentrios no pertencem s instrues do programa C, mas so teis para que o programador explique o que est sendo feito.
Saiba mais
Os comentrios podem vir delimitados entre
/* */
Ou podem ser comentrios de linha
//
Exemplos de comentrios:
/* Este trecho calcula a media de notas */
desc = preco*0.15; // calcula desconto de 15%
Ateno
O Bloco de Programa em C tem a forma:
/* comentrios */
<incluso de bibliotecas>
<declarao de variveis>
void main()
{
<bloco de comandos>
}
Apesar de opcional, todo programa C deve comear com o nome do arquivo .c em um comentrio dizendo o que
o programa faz.
Em seguida, devem ser includas as bibliotecas .h, que sero utilizadas no programa, atravs da diretiva #include
< >.
Em seguida, devem ser declaradas todas as variveis que sero utilizadas no <bloco de comandos>.
Aps a declarao das variveis, deve-se escrever a palavra main( ) ou int main() ou void main(), que delimita a
seo em que os comandos podem ser utilizados.
O <bloco de comandos> pode conter todos os comandos vlidos em C, separados por ponto e vrgula, e estes
devem estar contidos entre os delimitadores { e }. Nenhum comando pode ser usado fora dessa seo, a no ser o
comando de atribuio para inicializar variveis na sua declarao.
importante notar que letras maisculas e minsculas alteram os identificadores e as palavras reservadas do C.
Alguns compiladores C no aceitam void main( ), mas int main() ou apenas main(). Nesses casos,
necessrio colocar o comando return 0; antes de finalizar o programa.
79
Elisamara de Oliveira
80
switch(opcao)
{ case 1:
printf(\nVoce precisa ler mais sobre a historia grega !);
break;
case 2:
printf(\nEle chegou nos paises vizinhos...);
break;
case 3:
printf(\n Naturalmente voce eh um f da carta do descobrimento!);
break;
case 4:
printf(\n Resposta certissima !);
break;
default: printf(\nVoce nao escolheu nenhuma das alternativas validas.);
}
printf(\n Fim do programa );
getch();
return 0;
}
Caro(a) aluno(a), a linguagem C fornece uma srie de funes teis que pertencem a diferentes bibliotecas. Segue uma pequena lista das principais funes que voc poder usar quando se fizer necessrio.
Funes da biblioteca string.h:
strcat (destino, fonte);
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>.
81
Elisamara de Oliveira
strchr(string, caractere);
tamanho = strlen(string);
strrev(string);
strupr(string);
strlwr(string);
letra=tolower(letra);
Limpa a tela.
textcolor(cor);
textbackground(cor);
gotoxy(coluna, linha);
82
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()
log10()
Potenciao
pow()
Retorna o valor da base elevada ao expoente. Recebe dois argumentos do tipo double:
o primeiro a base e o segundo o expoente. Por exemplo: se quisermos saber o resultado da operao 210, faramos pow (2, 10).
sqrt()
Retorna o valor da raiz quadrada. Recebe como argumento um double do qual ele
deve extrair a raiz.
Arredondamento
ceil()
Retorna o primeiro float sem casas decimais acima. Recebe um float como argumento. Exemplo: ceil (45.98561) resultaria em 46.
floor()
Retorna o primeiro float sem casas decimais abaixo. Recebe um float como argumento. Exemplo: floor (45.98561) resultaria em 45.
83
Elisamara de Oliveira
Limpa a tela.
system(pause);
system(color 0B);
Como voc viu, caro(a) aluno(a), aprender PortuC ajuda bastante a aprender C! Use a tabela a seguir
para ajud-lo(la) na traduo de comandos do PortuC para C!
Saiba mais
Comandos/Tipos
PortuC
Atribuio
inteiro
int
inteiro longo
long int
real
float
caractere
char
inteiro
%i ou %d
real
%f
caractere nico
%c
string
%s
inteiro longo
%ld
Condicional
se seno
if else
Seleo mltipla
escolha
switch
Leitura de caracteres
leia
getche()
Leitura de strings
leia
gets
Leitura de nmeros
leia
scanf
Escrita
imprima
printf
Escrita
imprima
puts
&&
ou
||
no
Tipos bsicos
Formatos
Operadores lgicos
84
Caro(a) aluno(a), voc deve implementar todos os programas em C usando o compilador de sua
preferncia. No final da apostila, eu indico um compilador que fcil de ser encontrado na internet,
gratuito e fcil de usar (o compilador Dev C++).
/* sexo.c: le o nome e o sexo de uma pessoa e imprime uma frase
dizendo se masculino, feminino ou invalido */
caractere nome[20], sexo;
principal ( )
{
imprima (Qual eh o seu nome? );
leia(%s,nome);
imprima (Qual eh o seu sexo? (f/m) );
leia (%c,sexo);
se (sexo == f ou sexo == F)
imprima (%s voce eh do sexo feminino. ,nome);
seno se (sexo == m ou sexo == M)
imprima (%s voce eh do sexo masculino. ,nome);
seno imprima (Voce digitou um sexo invalido );
imprima(Fim do programa.);
85
Elisamara de Oliveira
return 0;
86
%i anos , idade);
puts(\nFim do programa.);
getch();
return 0;
se (n % 2 == 0)
imprima (O numero %i eh par , n);
seno
imprima (O numero %i eh impar , n);
imprima( Fim do programa.);
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;
87
Elisamara de Oliveira
88
Neste captulo, caro(a) aluno(a), voc aprendeu uma metodologia que facilitar o processo de desenvolvimento de solues algortmicas para os problemas que sero propostos para voc resolver. A
metodologia composta de uma sequncia de passos, cujo principal objetivo ajud-lo a resolver problemas dividindo-os por partes, diminuindo, assim, a sua complexidade.
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);
}
89
Elisamara de Oliveira
2. Crie uma nova verso do programa em C do exerccio 5.1.1 utilizando o comando switch no
lugar do ninho de comandos if.
3. Faa um programa em C que calcule e imprima o valor em reais correspondente aos dlares
que um turista possui no cofre do hotel. O programa deve solicitar os seguintes dados: quantidade de dlares guardada no cofre e cotao do dlar naquele dia.
4. Faa um programa em C para calcular e imprimir o valor a ser pago pelo perodo de estacionamento do automvel. O usurio entra com os seguintes dados: hora e minuto de entrada, hora
e minuto de sada. Sabe-se que esse estacionamento cobra R$ 10.00 por hora ou frao.
5. Faa um programa em C que leia o valor do salrio atual, calcule e imprima o valor do novo
salrio de um funcionrio. Considere que o funcionrio dever receber um reajuste de 15%
caso seu salrio seja menor que R$ 500.00. Se o salrio for maior ou igual a R$ 500, mas menor
ou igual a R$ 1000.00, o reajuste deve ser de 10%. Caso o salrio seja maior que R$ 1000.00, o
reajuste deve ser de 5%.
6. Faa um programa em C tendo como dados de entrada o preo de um produto e seu cdigo de
origem; apresente o preo e a sua procedncia, de acordo com a tabela a seguir:
90
Cdigo de Origem
Procedncia
Sul
Sudeste
Centro-Oeste
Norte
Nordeste
Aqui voc vai aprender a usar o comando repetitivo e a resolver problemas que envolvam flags.
Flag vem do ingls e significa sinal ou bandeira. Um flag em programao representa um valor que usado para indicar o final da entrada de dados. Como j foi dito antes, um algoritmo usado para resolver
problemas finitos. Se algum pede que faamos um programa para ler uma quantidade indeterminada
de nmeros, aparentemente no poderamos escrever um algoritmo para resolv-lo, mas, se um flag
informado, a soluo se torna possvel: faa um programa para ler uma quantidade indeterminada de dados, sabendo-se que o ltimo valor ser -1. Veja bem: a quantidade de nmeros continua indeterminada,
isto , no sabemos se sero 5, 20, 2 ou 2000 nmeros, mas sabemos que o ltimo -1! Assim, -1 o flag
e os nmeros sero lidos at que seja fornecido o -1, quando o programa ir parar de ler os nmeros.
Vamos ver isso na prtica!
1. Escreva comandos para ler e imprimir vrios nmeros inteiros. O ltimo nmero 0 (flag=0).
importante que voc observe a lgica de um trecho de algoritmo que trabalha com flag. Antes de o
nmero n ser processado, necessrio verificar se ele o flag ou no. Por isso, feita uma leitura ANTES do incio do comando de repetio while. No entanto, necessrio que o nmero n seja lido novamente dentro do comando while para que a condio que determina a finalizao do comando
seja modificada (seno o comando while nunca para) e tambm para que a leitura indeterminada
de dados prossiga; essa nova leitura feita no FINAL do comando while!
No pretendo aqui dar uma receita de bolo para voc seguir, mas apenas chamar a sua ateno
para a lgica desse tipo de problema que poder ser utilizada, com certeza, em muitos outros problemas que envolvam o uso de flags.
91
Elisamara de Oliveira
2. Escreva comandos para ler e imprimir vrios nmeros inteiros e contar a quantidade de nmeros lidos. O ltimo nmero 0 (flag=0). Imprima, tambm, a quantidade de nmeros.
importante que voc observe a lgica para se contar a quantidade de nmeros fornecidos.
Quando o flag utilizado, sabe-se que a entrada de dados indeterminada. Quando se deseja
saber quantos valores vlidos foram fornecidos, necessrio usar um contador (neste algoritmo
o cont). O contador tem que ser inicializado com zero. Cada vez que uma repetio realizada (ou
seja, cada vez que o comando while executado), soma-se mais 1 ao contador. A impresso do
contedo do contador s pode ser feita aps o final do comando while, quando temos a certeza
de que a entrada de dados foi finalizada (ou seja, o flag foi fornecido).
3. Escreva comandos para ler e somar vrios nmeros inteiros. O ltimo nmero -1 (flag= -1).
92
4. Escreva comandos para ler e imprimir a idade e o nome de vrias pessoas (ltima idade=0).
Temos, neste exemplo, um caso em que h mais de uma varivel a ser lida e apenas uma dessas
variveis vai funcionar como flag. Nesse caso, a lgica tem que ser um pouco alterada: a varivel
que ser utilizada como flag deve ser lida ANTES do comeo do comando while e sua leitura deve
ser repetida DENTRO do comando imediatamente ANTES DO FINAL do comando while (observe
os comandos em destaque); todas as outras variveis devem ser lidas apenas uma vez, DENTRO do
comando while, bem no seu incio!
5. Escreva comandos para ler e imprimir a idade, o nome e a altura de vrias pessoas (ltima
idade=0). Crie uma forma alternativa.
Observe que, neste exemplo, o comando while no para nunca, pois a condio sempre 1, ou
seja, sempre verdadeira. Para finalizar o comando while, foi utilizado o comando break, ou
seja, quando o usurio digitar 0 para a idade, o comando while finalizado pelo break. Isso
pode ser feito, sim, sem problemas!
93
Elisamara de Oliveira
Voc vai continuar usando um comando repetitivo, mas para resolver problemas que envolvam
contadores. Ao contrrio do que vimos na seo 6.1, em que entradas indeterminadas de dados foram
tratadas, aqui estudaremos os problemas cuja entrada de dados DETERMINADA. Se algum pede que
faamos um programa para ler um conjunto de 10 nmeros, seria necessrio que contssemos de 1 at
10 e, a cada contagem, lssemos um dos nmeros do conjunto para que, no final, todos os 10 valores
tivessem sido lidos. Esse tipo de problema requer o uso de contadores para facilitar a contagem dos dados de entrada. Existe um comando especfico para fazer essa contagem, que o comando for, embora
tambm possamos usar o comando while. Vamos ver isso na prtica!
6. Escreva comandos para ler e imprimir o nome de 5 pessoas.
Novamente, importante que voc observe a lgica de um trecho de programa que trabalha com entrada determinada de dados. Antes de o nome ser lido, necessrio zerar o contador cont. Da, utiliza-se o comando while, cuja condio exatamente o contador ser menor do que o nmero de dados
a serem lidos (cont < 5, neste caso). DENTRO do comando while feita, uma nica vez, a leitura do
nome, o nome impresso e somente no FINAL do comando while o contador incrementado de 1.
No entanto, este mesmo trecho pode ser escrito com um comando mais adequado, que o
comando for! Vejamos:
Percebeu como mais fcil? O comando for comea do zero e vai somando 1 varivel de controle cont at que cont fique igual a 5! DENTRO do comando for feita, uma nica vez, a
leitura do nome e o nome impresso.
94
Observe que, quando h mais de uma varivel a ser lida, todas elas devem ser lidas apenas uma
vez DENTRO do comando for. A contagem fica como antes. Fcil, no ?
8. Escreva comandos para pedir ao usurio o nmero de dados que ele deseja fornecer (N),
leia e imprima o nome e a quantidade que ele forneceu.
Note que a nica mudana na soluo deste tipo de problema a leitura da quantidade de dados
ANTES do comando for e a mudana na condio de finalizao para (cont < n).
9. Reescreva o trecho 8 usando while (1).
95
Elisamara de Oliveira
A empresa TELEFUN est interessada em saber qual foi o maior nmero de minutos gastos no ms
entre os assinantes e quantos assinantes atingiram esse valor. Faa um programa que leia os valores dos
minutos (o ltimo valor ser -1) e imprima os resultados desejados pela empresa.
Passo 1 (ler e entender o problema)
Certa companhia telefnica quer saber qual foi o maior nmero de minutos gastos num certo ms
e quantos assinantes empataram atingindo esse valor mximo. Por exemplo, se o conjunto de minutos
fornecido:
200, 150, 300, 200, 300, -1
O resultado seria: 300 foi o maior nmero de minutos e 2 assinantes atingiram o valor mximo.
Passo 2 (dados de entrada)
1. Valor dos minutos
Passo 3 (dados de sada)
1. Maior nmero de minutos
2. Quantos assinantes atingiram o maior nmero de minutos
96
(uma varivel para cada entrada, sada e auxiliar: total de 3 variveis. Todas do tipo int.)
Passo 6 (inicializar as variveis)
(quando se deseja selecionar o maior valor, uma estratgia possvel considerar o primeiro valor lido como
sendo o maior ou ento como sendo zero e depois fazer a comparao dos outros valores com este)
quantos = 0;
97
Elisamara de Oliveira
No caso de essa comparao ser verdadeira, o maior valor dos minutos deve ser mudado: maiorminutos = minutos. Mas, ao se alterar o valor do maiorminutos, o contador de assinantes que o atingiram
deve ser retornado para 1, pois este seria o primeiro assinante que o utilizou: quantos = 1.
Resta, agora, contar a quantidade de assinantes que atingiram o valor mximo de minutos. Isso deve
ser feito atravs de outra comparao. Cada vez que o valor do maior nmero de minutos for encontrado novamente, deve-se somar 1 ao contador:
if (minutos == maiorminutos)
++quantos;
No entanto, esses 2 trechos devem ser unidos num nico comando if, pois no se deve somar +1 ao
contador quantos quando ocorre a troca do valor de maiorminutos, seno o contador ficaria sempre
com um 1 a mais. Para manter os dois trechos separados, o contador quantos teria que ser inicializado
com zero. Faa alguns testes voc mesmo(a) para entender melhor essa explicao.
98
int main()
{ printf(\nTelefun: quem fala mais ao telefone???\n);
while (1)
{
printf(\nDigite o numero de minutos (-1 finaliza): );
scanf(%i,&minutos);
if (minutos = -1)
break;
if (minutos > maiorminutos)
{ maiorminutos = minutos;
quantos = 1;
}
else if (minutos == maiorminutos)
++quantos;
}
if (maiorminutos !=0)
{ printf(\nO maior numero de minutos foi: %i , maiorminutos);
printf(\nAssinantes que atingiram o maior nro de minutos: %i, quantos);
}
else printf (\nNenhum valor valido foi fornecido);
printf(\nFim do programa);
getch();
return 0;
maior minutos
quantos
100
100
Resultados
50
100
150
150
2
150
1
2
10
150
-1
3
O maior nmero de minutos foi: 150
Nmero de assinantes que atingiram o maior
nmero de minutos: 3
99
Elisamara de Oliveira
maiorminutos
quantos
Resultados
-1
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
20000.00 x 1.35 =
100
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)
101
Elisamara de Oliveira
Aqui so apresentadas 2 formas diferentes de se fazer o clculo de porcentagem. No caso do IPI, isso foi
feito em 2 passos: primeiramente, calcula-se o IPI e depois soma-se esse valor ao preo de fbrica para se
obter o preo com IPI. No caso do ICMS, foi feito um nico clculo multiplicando-se o preo com IPI por
1.05. Nesse caso, o valor 1 na parte inteira faz com que seja somado ao preo com IPI o valor do ICMS!
Passo 8 (impresso dos resultados)
printf(\nIPI= R$%.2f ICMS= R$%.2f,IPI,prIPI*0.05);
printf (\nO preco final do automovel %s= R$ %.2f ,
nome, prFinal);
102
<stdio.h>
<conio.h>
<string.h>
<stdlib.h>
char nome[20];
float prFabrica, IPI, prIPI, prFinal;
int main()
{ printf(\nOlha o tanto de imposto que pagamos nos carros!!!);
while (1)
{
printf(\nForneca o nome do modelo do automvel (FIM para terminar): );
gets (nome);
if (strcmp(nome,FIM)==0)
break;
103
Elisamara de Oliveira
nome
prFabrica
IPI
prIPI
prFinal
Resultados
FOX
30000.00
10500.00
40500.00
42525.00
SCOOTER
10000.00
3500.00
13500.00
14175.00
MILLE
12000.00
4200.00
16200.00
17010.00
CIVIC
50000.00
17500.00
67500.00
70875.00
FIM
Fim do programa
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
104
voto;
vencedor, brancos, nulos, eleitores;
cont1, cont2, cont3;
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!)
105
Elisamara de Oliveira
Existe outra maneira muito mais prtica de realizar essa comparao. Basta usar o comando de
seleo mltipla switch. Veja como fica a soluo.
++eleitores;
switch (voto)
{ case 0:
++brancos;
break;
case 1:
++cont1;
break;
case 2:
++cont2;
break;
case 3:
++cont3;
break;
default: ++nulos;
}
Note que os dois trechos de cdigo fazem exatamente a mesma coisa, mas de formas diferentes.
Escolha a que achar mais fcil.
Ao se computar os votos, as sadas 2, 3 e 4 foram obtidas; resta agora obter o candidato vencedor.
106
int main ()
{ printf(\nEleicoes Ficha Limpa por um Brasil melhor!\n);
brancos=nulos=eleitores=cont1=cont2=cont3= 0;
while (1)
{
printf (\nDigite o seu voto (1,2,3 ou 0(branco) -1 finaliza): );
scanf (%i,&voto);
if (voto==-1)
break;
++eleitores;
switch (voto)
{ case 0: ++brancos;
break;
case 1: ++cont1;
break;
case 2: ++cont2;
break;
case 3: ++cont3;
break;
default: ++nulos;
}
}
if ((cont1 > cont2) && (cont1 > cont3))
vencedor = 1;
else if ((cont2 > cont1) && (cont2 > cont3))
vencedor = 2;
else vencedor = 3;
printf
printf
printf
printf
puts(\nFim do programa);
getch();
return 0;
107
Elisamara de Oliveira
voto
1
2
2
0
2
1
3
cont1
cont2
cont3
brancos
nulos
0
1
1
2
1
3
2
1
-1
eleitores
0
1
2
3
4
5
6
7
vencedor
Resultados
108
S=cont=0;
(contadores e somadores: inicializados com zero. Em C, possvel inicializar vrias variveis com o
mesmo valor num nico comando de atribuio mltipla!)
num = 1;
den = N;
109
Elisamara de Oliveira
for (cont=0; cont < N; cont++)
{
termo = (float) num / den;
printf(\n %i / %i , num, den);
S = S + termo;
++num;
--den;
}
110
/* ..........................................
serieS.c: Gera a serie S assim formada:
S = 1/N + 2/N-1 + ... + N/1
.............................................*/
#include <stdio.h>
#include <conio.h>
int
float
int main( )
{
printf(Gera a serie S \n);
printf(\nForneca o numero de termos da serie: );
scanf(%d,&N);
num = 1;
den = N;
for (cont=0; cont < N; cont++)
{
termo = (float) num / den;
printf(\n %i / %i , num, den);
S = S + termo;
++num;
--den;
}
printf (\n\nO valor da serie S= %.5f \n, S);
getch();
return 0;
cont
num
den
termo
Resultados
1/4
0 + 1/4
1/4
2/3
0 + 1/4 + 2/3
2/3
3/2
3/2
4/1
4/1
O valor da serie S= 6.41667
111
Elisamara de Oliveira
Caro(a) aluno(a), aprendemos a usar o comando repetitivo e a resolver problemas que envolvam
flags. Flag vem do ingls e significa sinal ou bandeira. Um flag em programao representa um valor
que usado para indicar o final da entrada de dados. Como j foi dito antes, um algoritmo usado para
resolver problemas finitos. Se algum pede que faamos um programa para ler uma quantidade indeterminada de nmeros..., aparentemente no poderamos escrever um algoritmo para resolv-lo.
Vamos praticar um pouco mais agora. A minha forte recomendao, novamente, que voc faa os
exerccios sozinho(a), consultando os exemplos dados para ajud-lo(a). Somente depois da sua tentativa
que voc deve conferir as respostas. Boa sorte!
1. Escreva um programa em C que leia e imprima o nome e as duas notas de vrios alunos. O ltimo aluno ter o nome=FIM.
2. Escreva um programa em C que leia 10 nmeros, calcule e imprima a sua soma.
3. Escreva um programa em C que calcule e imprima N nmeros pares, comeando do zero. Pergunte ao usurio quantos nmeros ele deseja (ou seja, pea-lhe para fornecer o valor de N).
4. Quais os resultados produzidos pelo programa?
#include <stdio.h>
int
X, Y;
int main()
{
Y = 0;
X = -1;
while (Y != 4)
{
X = X * -1;
++Y;
if (X > 0) /* X positivo? */
printf(\n%i,Y);
else
printf(\n%i,-Y);
}
return 0;
}
112
Para que seja possvel voc acompanhar a execuo do programa em C, vamos criar uma tabela
para fazer o chamado teste de mesa de um programa em C. A tabela deve ter uma coluna para cada
varivel e uma coluna especial para a impresso dos resultados. O programa em C deve ser seguido
comando a comando e os valores das variveis devem ser alterados de acordo com as instrues.
X
Resultados
5. Faa o teste de mesa do programa seguir e construa a tabela com os valores das variveis e os
resultados do programa.
#include <stdio.h>
int numero, cont;
main()
{
numero = 2;
for (cont=0; cont < 5; cont++)
{
printf(%i,numero);
printf(%i\n,-numero);
numero = numero + 2;
}
return 0;
}
numero
cont
Resultado
113
Elisamara de Oliveira
6. Fazer um programa que leia vrios valores de ngulos (flag=-1) e verifique a qual quadrante
pertence esse ngulo.
7. Fazer um programa que leia vrios pares de nmeros N1 e N2 (Flag=N1=0), calcule e imprima:
a) N1 * N2
b) N1 / N2
c) N1 - N2
d) N1 + N2
e) 10% de N1
f) 25% de N2
g) raiz quadrada de N1
h) raiz quadrada de N2
i) a unidade de N1
j) a dezena de N2
k) o resto da diviso inteira de N1 por N2
l) N1 elevado a 3
m) N2 elevado a 2
n) N1 elevado a N2
8. Fazer um programa para realizar uma pesquisa de opinio sobre um tema de sua escolha. Devem ser lidas a resposta 1-A favor 2- Contra ou 0-Finaliza e o sexo (1=feminino, 2=masculino)
dos participantes; calcular e imprimir:
a) o nmero de mulheres e o percentual;
b) o nmero de homens e o percentual;
c) nmero de votos a favor e percentual;
d) nmero de votos contra e percentual.
114
9. Fazer um programa para ler vrios pares de nmeros inteiros e calcular sua soma, subtrao,
multiplicao e diviso. Usar n1=0 como flag.
10. Fazer um programa que leia o NOME, a ALTURA, o PESO e a IDADE de vrios candidatas a modelo (flag=NOME=fim) e verifique se elas podem ser aprovadas ou no para serem modelos:
1.70 <= ALTURA <= 1.85
50 <= PESO <= 60
18 <= IDADE <= 21
11. Fazer um programa que leia o nmero de termos desejados e gere as sequncias numricas
(uma de cada vez, mas ambas no mesmo programa):
2, 4, 8, 16, 32, 64...
1, -1, 2, -2, 3, -3, 4, -4...
12. O preo final de um automvel calculado pelo preo de fbrica, mais o valor do IPI = 40%
sobre o preo de fbrica, mais a porcentagem da concessionria = 10% sobre o preo j com o
IPI. Faa um programa que leia o NOME de vrios modelos de automveis (flag=NOME=jegue)
e o preo de fbrica, calcule e imprima o seu preo final.
13. Faa um programa em C para calcular o valor a ser pago pelo perodo de estacionamento do
automvel. O usurio entra com os seguintes dados: hora e minuto de entrada, hora e minuto
de sada. Sabe-se que esse estacionamento cobra hora cheia, ou seja, se passar um minuto ele
cobra a hora inteira. O valor cobrado pelo estacionamento :
R$ 4,00 para 1 hora de estacionamento;
R$ 6,00 para 2 horas de estacionamento;
R$ 1,00 por hora adicional (acima de 2 horas).
14. Faa um programa que leia o cdigo de um livro (* finaliza) e apresente a categoria do livro,
conforme a tabela a seguir:
Cdigo do Livro
Categoria
Fico
Romance
Documentrio
Audiolivro
Tcnico
115
Elisamara de Oliveira
15. Fazer um programa que leia vrios pares de coordenadas X e Y (flag=X=1000) e verifique a qual
quadrante pertence esse ponto (X,Y). A seta indica o sentido positivo dos eixos.
16. Fazer um programa para calcular e imprimir o valor de H, dado pela seguinte srie:
H = 1 - 2 + 4 - 8 + 16 - ... + 16.384
225 196 169 144 121
1
17. Fazer um programa para calcular a mdia de um conjunto de nmeros inteiros (flag = -1).
18. Fazer um programa para calcular as razes de uma equao do 2 grau. Os valores dos coeficientes A, B e C sero fornecidos pelo usurio. Voc deve perguntar se o usurio deseja fornecer
outros dados at que ele responda N no.
19. Fazer um programa para gerar todos os nmeros potncia de 2 menores que 1000000 e todos
os nmeros mpares menores que 100. Dica: utilize o tipo bsico long int.
20. Fazer um programa para calcular o valor aproximado de p, utilizando os N primeiros termos (N
dever ser lido) da srie:
= 4 - 4 + 4 - 4 + 4 ...
3 5 7 9
21. Fazer um programa para ler uma sequncia de nmeros inteiros de 5 dgitos (flag = -1), calcular
o seu dgito verificador (DV) e imprimir o nmero lido e seu DV separado por um hfen. O DV
calculado somando-se os 5 dgitos do nmero, dividindo essa soma por 11 e obtendo o resto
dessa diviso inteira. Quando o DV for 10, deve-se imprimir X.
Exemplo:
Nmero lido: 12819
116
22. Nmeros palndromos so aqueles que tm o mesmo valor se lidos da esquerda para a direita
ou da direita para a esquerda, como: 44, 232, 1001, 838 etc. Fazer um programa que leia vrios
nmeros inteiros de 4 dgitos (flag= -1) e imprima o nmero lido e uma frase dizendo se ele
palndromo ou no.
23. Fazer um programa para calcular o Imposto de Renda (IR) de um grupo de contribuintes, sabendo que:
a) devero ser lidos o CPF e a renda anual de cada contribuinte (ltimo contribuinte tem o CPF = 0);
b) o IR dever ser calculado de acordo com a tabela:
Renda Anual
at 5000,00
isento
de 5000,01 at 50000,00
10 %
acima de 50000,01
15 %
c) dever ser impressa uma frase com o CPF do contribuinte, sua renda anual e o valor do IR.
24. Fazer um programa que leia vrios conjuntos de dados com: o NOME de um produto, seu preo
de CUSTO, seu preo de VENDA e a QUANTIDADE vendida do produto (ltimo conjunto lido
tem NOME do produto=fim) e calcule o lucro obtido com o produto. No final, o programa
deve imprimir o NOME do produto que deu mais lucro.
25. Fazer um programa que leia vrios nmeros que representem um determinado nmero de
ms do ano (flag=-1), escreva o nome do ms por extenso e o nmero de dias. Se o ms no
existir, imprimir uma frase de erro.
26. Certo produto custa R$ 100,00 e concedido um desconto de 10% se a compra for acima de
10 unidades, 15% se for acima de 40 unidades e 25% se for acima de 100 unidades. Faa um
programa que leia a quantidade desejada por vrios clientes (flag=quantidade=0) e calcule e
imprima o preo sem desconto, o valor do desconto (se no houver desconto, imprima 0) e o
valor a ser pago com o desconto.
27. Faa um programa que leia a distncia em quilmetros percorrida por vrios carros (flag=0), a
quantidade de combustvel consumida e calcule e imprima o consumo mdio de combustvel
(consumo= distncia/combustvel).
28. Faa um programa que leia vrias temperaturas em graus Fahrenheit (flag=1000) e calcule e
imprima a temperatura em graus Celsius (Celsius = (Fahrenheit-32) * (5/9)).
29. Faa um programa que leia vrios pares de valores N1 e N2 (flag=N1=0), imprima uma frase
dizendo se eles so iguais, qual o maior e qual o menor e, aps terminar a leitura de todos
os nmeros, selecione e imprima o maior e o menor de todos.
117
Elisamara de Oliveira
30. Fazer um programa que leia vrios nmeros inteiros (flag=0) e verifique se o nmero primo
ou no. Um nmero primo s divisvel por 1 e por ele mesmo (sugesto: tente dividir o nmero por 2, 3, 4, 5... at o valor do nmero; se alguma diviso resultar em zero, ele no primo...).
31. Faa um programa que apresente o menu de livros venda numa livraria:
Cdigo do Livro
Ttulo
Preo
87,00
219,00
Use a cabea: C#
99,00
finaliza
Para cada opo vlida de livro (rejeitar escolhas invlidas), oferecer as formas de pagamento.
Cdigo da forma de pagamento
Condio de pagamento
Imprimir todos os valores de acordo com a escolha do usurio. Rejeitar formas de pagamento
invlidas.
32. Faa um programa que leia o cdigo de um determinado produto (0 finaliza) e mostre a sua
classificao, utilizando a seguinte tabela:
118
Classificao
Alimento no perecvel
2, 3 ou 4
Alimento perecvel
5 ou 6
Vesturio
Higiene pessoal
8 ou 9
Invlido
OUTROS PROGRAMAS EM C
119
Elisamara de Oliveira
120
getch();
clrscr();
printf(\n Sequencia de numeros potencia de 2 menores que %ld,MAXLONG);
printf(\n ======================================================\n\n);
for (numlong=2; numlong<=MAXLONG; numlong=numlong*2)
{ printf(%ld\t,numlong);
}
getch();
clrscr();
printf(\n Sequencia de quadrados perfeitos menores que %ld,MAXLONG);
printf(\n ====================================================\n\n);
quadrado=1;
for (numlong=1; quadrado<=MAXLONG; numlong++)
{ quadrado=numlong*numlong;
printf(%ld\t,quadrado);
}
getch();
printf (\n\n\n\n
getch();
return 0;
Fim do programa);
121
Elisamara de Oliveira
strings e nu-
int main()
{
while ( 1 )
{ printf(\n 1- Compara strings );
printf(\n 2- Compara numeros );
printf(\n 0- Finaliza );
printf(\n\n Escolha sua opcao: );
scanf (%i, &opcao);
if (opcao == 0)
{
printf (\n Bye, bye!
getch();
break;
}
Pressione ENTER...);
switch (opcao)
{ case 1:
printf (\n Forneca o primeiro nome: );
gets(str1);
printf (\n Forneca o segundo nome: );
gets(str2);
if (strcmp(str1,str2) > 0)
printf (\n %s vem depois de %s , str1, str2);
else if (strcmp(str1,str2) < 0)
printf (\n %s vem antes de %s , str1, str2);
else printf (\n Os nomes so iguais.);
getch();
break;
case 2:
printf (\n Forneca um numero inteiro: );
scanf(%d, &num1);
122
printf (\n Forneca outro numero inteiro: );
scanf(%d, &num2);
if (num1>num2)
printf (\n %d eh maior que %d , num1, num2);
else if (num2>num1)
printf (\n %d eh maior que %d , num2, num1);
else printf (\n Os numeros sao iguais! );
getch();
break;
default:
printf (\n Opao de menu invalida. );
getch();
} // fim do switch
} // fim do while (1)
return 0;
}
// fim do main()
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define limpa;
system(cls);
123
Elisamara de Oliveira
124
}
else
printf(\nQuantidade invalida. Venda cancelada.);
break;
case 3: printf(\nVc esta comprando cameras!!!);
printf(\nQuantas cameras vc deseja?);
scanf(%i,&qtde);
if (qtde > 0)
{
total3=total3+qtde;
preco=600.00 * qtde;
if (qtde >=5)
{
desc = preco * 0.10;
precocomdesc = preco - desc;
printf(\nVc obteve R$ %.2f de desconto e vai pagar
R$ %.2f,desc,precocomdesc);
fatura=fatura+precocomdesc;
}
else
{
printf(\nSua compra totalizou R$ %.2f,preco);
fatura=fatura+preco;
}
}
else
printf(\nQuantidade invalida. Venda cancelada.);
break;
default: printf(\n\nOpcao invalida\n);
}//switch
getch();
//while
125
Elisamara de Oliveira
printf(\n\n\nFim do programa);
getch(); //para a tela
return 0;
}//main
printf(\n\n\nFim do programa);
getch(); //para a tela
return 0;
}//main
126
PRTICA EM LABORATRIO
1. Crie uma pasta com seu nome no diretrio do seu computador, em que voc armazenar os
programas em C deste curso, seguindo as instrues:
Entre no Windows Explorer ou na pasta Meu computador do desktop:
Clique em <Arquivo> <Novo> <Pasta>
Substitua o nome nova pasta criado, pelo seu primeiro nome
2. Faa o download gratuito do compilador Dev-C++ para que possa comear a escrever seus
programas.
3. No sistema Windows, localize o compilador Dev-C++ e execute o programa.
<Iniciar> <Programas><Dev-C++>
4. No DevC++, crie um novo arquivo
<Arquivo> <Novo> <Arquivo Fonte>
127
Elisamara de Oliveira
6. A qualquer momento que desejar, salve o seu arquivo. Clique em <Arquivo> <Salvar Como>.
V para o diretrio E:\EXECUTAVEIS LIBERADOS\seunome e salve seu arquivo como nota.c e
v salvando seu programa enquanto edita.
7. Compile e execute seu programa. Conserte os erros que o compilador apontar antes de executar.
Clique em <Executar> <Compilar&Executar>
Execute o programa vrias vezes para diferentes valores.
128
valor, menor;
int main ()
{ printf (\nDigite um numero inteiro:
);
scanf (%i, &valor);
menor = valor;
while (valor != -1)
{ if (valor < menor)
menor = valor;
printf(\nDigite um numero inteiro (1 para terminar):
scanf (%i, &valor);
}
printf (\nO menor valor lido foi: %i , menor);
printf(\n\nFim do programa);
getch();
return 0;
}
);
129
CONSIDERAES FINAIS
E chegamos ao final deste curso bsico de Algoritmos e Linguagem de Programao C! Espero que
voc, aluno(a), j esteja conseguindo fazer seus primeiros programas de computador nessa linguagem
to moderna, avanada e instigante, que a linguagem C.
De acordo com nossa metodologia, voc aprendeu a escrever os primeiros algoritmos utilizando o
PortuC, uma pseudolinguagem que o(a) ajudou a quebrar a primeira barreira da linguagem C, que so
seus comandos escritos em ingls. Rapidamente passamos traduo desses algoritmos para a linguagem-alvo e, em seguida, j pudemos ir para o computador fazer nossos primeiros testes.
Espero que voc no pare por aqui, caro(a) aluno(a).
H muitos problemas do mundo real que esperam por solues automatizadas. O desafio grande,
mas sua capacidade de aprendizado e de superao maior ainda!
Como falamos no captulo inicial, a linguagem C inspirou e foi a base de plataformas e linguagens
de programao modernas e atuais, como o Java e o C#. Assim, voc j tem a base para encarar desafios
maiores e se tornar um grande desenvolvedor.
A gente se encontra, ento, no mundo profissional da nossa rea, trocando informaes, aprendendo juntos e trabalhando bastante, pois o mercado profissional amplo e vasto e conta conosco!
Qualquer dvida, entre em contato por e-mail comigo: elisaoli@uol.com.br.
131
Caro(a) aluno(a), aqui voc encontrar respostas de uma parte dos exerccios das atividades propostas. Voc deve tentar fazer sozinho(a) primeiramente, antes de olhar a resposta. Os outros exerccios
voc j tem condies de resolver sem ajuda, mas, caso restem dvidas, use os chats e fruns para solicitar a ajuda de seu professor! Boa sorte!
Captulo 1
1. Qual o padro de comportamento utilizado para gerar as sequncias:
1, 5, 9, 13, 17, 21, 25 ...
A srie de nmeros comea com 1 (primeiro termo);
Para se gerar qualquer um dos outros termos da srie, basta somar 4 ao nmero imediatamente
anterior;
Esta uma srie infinita. Seu fim deve ser determinado por uma condio do tipo gerar os
10 primeiros termos da srie ou gerar todos os termos da srie menores que 100.
1, 1, 2, 3, 5, 8, 13, 21, 34 ...
A srie de nmeros comea com 1 (primeiro termo);
O segundo termo tambm 1;
Para se gerar qualquer um dos outros termos da srie, basta somar os dois termos imediatamente anteriores:
Exemplos: 1 (primeiro termo) + 1 (segundo termo) =2 (terceiro termo)
1 (segundo termo) + 2 (terceiro termo) = 3 (quarto termo)
2 (terceiro termo) + 3 (quarto termo) = 5 (quinto termo)
Esta uma srie infinita, conhecida como srie de Fibonacci. Seu fim deve ser determinado
por uma condio do tipo gerar os 10 primeiros termos da srie ou gerar todos os termos
da srie menores que 100.
133
Elisamara de Oliveira
Captulo 3
1. O exerccio pede que voc escreva um algoritmo que leia e imprima o nome e as duas notas de
um aluno. Para a soluo desse problema, so necessrias apenas 3 variveis: uma para o nome do
aluno, uma para a nota da prova 1 e outra para a nota da prova 2. O nome uma cadeia de caracteres e as notas so do tipo real, pois o aluno pode tirar uma nota 7.5, por exemplo. Veja a soluo
completa, analise e reflita. Caso haja dvidas, participe dos chats e dos fruns com seu professor!
/* notas.c: programa que le e imprime 2 notas */
caractere nome[20];
real
nota1, nota2;
principal()
{
imprima (Qual eh o seu nome?
leia (%s,nome);
);
);
imprima (%s, sua 1a nota foi: %1.2f e a sua 2a nota foi: %1.2f ,
nome,nota1,nota2);
imprima (Fim do programa);
}
2. Voc deve escrever apenas o comando que calcule a mdia das duas notas lidas no exerccio
anterior. Isso simples: basta somar as duas notas e dividir a soma por 2. Observe os parnteses
envolvendo a soma das duas notas!
media = (nota1 + nota2) / 2;
3. Voc deve escrever um comando que verifique se a mdia calculada no exerccio anterior
maior ou igual a 7. Para isso, voc deve usar o comando condicional se. Caso a mdia seja superior ou igual a 7, vamos imprimir uma frase dizendo que o aluno foi aprovado, caso contrrio,
imprimimos uma frase dizendo que foi reprovado. Veja a soluo:
134
4. Aqui voc deve acrescentar ao algoritmo inicial os comandos para clculo da mdia e critrios
de aprovao! Dessa maneira, a soluo fica completa. Voc ter escrito um algoritmo que l o
nome e as duas notas de um aluno, calcula a mdia das notas e imprime uma frase dizendo se
ele foi aprovado (mdia maior ou igual a 7.0) ou reprovado.
/* media.c: programa que calcula a media de 2 notas e verifica a aprovacao
do aluno */
caractere nome[20];
real
nota1, nota2, media;
principal()
{
imprima (Qual eh o seu nome?
leia (%s,nome);
);
);
imprima(Fim do programa );
5. Vamos repetir o trecho de comandos se aninhado e depois resolver cada uma das situaes
propostas. Observe, nesse trecho, que temos apenas 2 comandos: um comando se que possui
outros comandos se dentro dele e o comando C5, ou seja, o comando C5 est fora do ninho de
comandos se, por isso, ser sempre executado, independentemente dos valores de B1, B2 e B3!
135
Elisamara de Oliveira
136
Ateno! Todos os contadores utilizados nos trechos de algoritmo devem ser previamente inicializados
com 0 (zero).
As comparaes com F, M, sim e nao s vo funcionar se o usurio, claro, escrever as respostas exatamente dessa forma. Se o programador quiser que o programa aceite outros tipos de
grafia envolvendo letras maisculas e minsculas, isso deve ser includo no cdigo. Por exemplo,
para aceitar F ou f, o trecho da letra a ficaria assim:
se ( (sexo==F ou sexo==f) e (resposta==sim ou resposta=SIM) )
7. Qual o valor de L aps a execuo desse algoritmo?
Aps a inicializao das variveis, a condio do comando se deve ser avaliada. Como esta no
uma condio simples, vamos analis-la por partes, lembrando que 0 avaliado como Falso
e qualquer outro valor avaliado como Verdadeiro.
C Falso
(X+Y > 5) (1.5 + 3.2 = 4.7 ... 4.7 > 5 ?) como 4.7 no maior que 5, o resultado Falso.
O resultado da expresso fica assim:
Falso ou Falso ou Verdadeiro que Verdadeiro!
Como a condio do comando se foi avaliada como verdadeira, o comando L=0 ser executado e o algoritmo ser finalizado!
Resposta: L=0
137
Elisamara de Oliveira
8. Voc deve escrever os trechos de algoritmo em PortuC que ajudem o IBGE a fazer o censo populacional de certa cidade, sabendo-se que os seguintes dados foram pedidos aos cidados: SEXO
(H= homem, M= mulher) e RENDA (nmero de salrios-mnimos sm). Vamos soluo dos
trechos de algoritmo:
a) o total de homens
se (sexo == H ou sexo == h)
++contHomens;
b) o total de mulheres
se (sexo == M ou sexo == m)
++contMulheres;
c) o total de pessoas da classe C (at 4 sm), da classe B (at 20 sm) e da classe A (acima de 20
sm)
se (renda <= 4)
++contClasseC;
seno se (renda <= 20)
++contClasseB;
seno ++contClasseA;
O trecho da letra c pode ser escrito em 3 comandos se separados. Voc deve escolher aquele
que voc considera mais fcil de entender para usar, ok? Ficaria assim:
se (renda<= 4)
++contClasseC;
se (renda > 4 e renda <= 20)
++contClasseB;
se (Renda > 20)
++contClasseA;
Ateno! Todos os contadores utilizados nos trechos de algoritmo devem ser previamente inicializados
com 0 (zero).
138
9. Fornecidos os dados das candidatas a modelo, voc deve escrever um trecho de algoritmo para
verificar se os dados se enquadram nos seguintes limites: ALTURA: de 1.70 a 1.85 m, PESO: de
48.0 a 60.0 Kg e IDADE: de 17 a 21 anos. Se os dados da candidata corresponderem aos limites
anteriores, deve ser impressa uma frase dizendo que ela foi aprovada, caso contrrio, que no
foi aprovada. muito simples, basta checar cada um dos quesitos num nico comando se,
unindo-os pelo operador lgico e. O uso do e indica que, somente se todos os quesitos forem
verdadeiros, a candidata ser aprovada.
10. Voc deve modificar o exerccio anterior para que uma frase seja impressa aps a verificao de
cada quesito dizendo se a candidata foi aprovada ou no em cada um deles e uma frase final
dizendo se foi aprovada ou no como modelo. Observe a estratgia que eu utilizei para saber
se a candidata foi reprovada em algum quesito: eu usei uma varivel inteira que funciona como
uma varivel lgica aprovada. Essa varivel foi inicializada com verdadeiro (1) e somente no
caso de algum quesito ser reprovado, ou seja, no caso de algum seno ser executado, essa
varivel passaria a ter o valor falso (0), indicando a reprovao da candidata. Mas existem outras solues, claro. Uma delas foi criada por um aluno que usou um contador: cada vez que
um quesito era aprovado, ele somava 1 ao contador; no final, se o contador fosse igual a 3, a
candidata estaria aprovada, caso contrrio, teria sido reprovada.
aprovada = 1;
se (altura >= 1.70 e altura <= 1.85)
imprima (quesito altura aprovado!);
seno
{ imprima (reprovada no quesito altura);
aprovada = 0;
}
se (peso >=48 e peso <=60)
imprima(quesito peso aprovado!)
seno
{ imprima(reprovada no quesito peso.);
aprovada = 0;
}
se (idade >=17 e idade <= 21)
imprima(quesito idade aprovado!)
seno
{ imprima(reprovada no quesito idade);
aprovada = 0;
}
se (aprovada)
imprima(Candidata aprovada);
seno
imprima(Candidata reprovada);
139
Elisamara de Oliveira
Captulo 4
1.
Passo 1: ler e entender
Passo 2: variveis de entrada
- comprimento
- largura
- rea da sala
- permetro da sala
- no tem
140
perimetro);
imprima(Fim do programa);
larg
2.5
5.0
compr
larg
-1.0
area
12.5
area
perimetro
Sada Tela
10.0
perimetro
Sada Tela
-2.0
Nesses dois testes de mesa, podemos observar um comportamento esperado para dados vlidos e
um comportamento estranho para dados no esperados. O certo seria fazer uma consistncia dos
dados, j que no faz sentido ter valores negativos nem o valor zero para o comprimento e largura
das paredes de uma sala, mas isso no importante agora. O importante, caro(a) aluno(a0, voc
conseguir encontrar a soluo sem se preocupar com usurios, digamos, pouco honestos.
3.
Passo 1: ler e entender
Passo 2: variveis de entrada
- valor em dlares
- cotao do dlar
- valor em reais
- no tem
reais = dolares*cotacao;
141
Elisamara de Oliveira
reais = dlares*cotacao;
cotacao
1000.00
1.75
reais
Sada Tela
1750.00
dolares
cotacao
1000.00
1.66
reais
1660.00
7.
Passo 1: ler e entender
Passo 2: variveis de entrada
142
- v0
- ngulo
- g, que a gravidade
143
Elisamara de Oliveira
v0
teta
Sada Tela
300.0
3.14
9.8
O alcance do projetil eh 0
v0
teta
Sada Tela
300.0
0.785
9.8
9183.67
9.
Passo 1: ler e entender
Passo 2: variveis de entrada
- preo do produto
- desconto
- preo final com desconto
- no tem
144
145
Elisamara de Oliveira
precoini
1000.00
desconto
15.00
desconto
50.00
precofinal
285.00
precofinal
950.00
Sada Tela
11.
Passo 1: ler e entender
Passo 2: variveis de entrada
-A
-B
Passo 3: variveis de sada
- no tem
Passo 4: variveis auxiliares
- varivel para guardar o valor de A
Passo 5: declarar todas as variveis
inteiro A, B, auxA;
Passo 6: inicializar as variveis
imprima (Digite o valor do primeiro numero inteiro );
leia(%i, &A);
imprima (Digite o valor do segundo numero inteiro );
leia(%i, &B);
Passos 7 e 8: calcular as sadas e imprimir os resultados
imprima (Valores antes da troca A=%i B=%i , A, B);
auxA = A; // valor de A eh salvo na variavel auxA
A = B; // valor de B eh copiado para A
B = auxA; // valor de A eh copiado para B
imprima (Valores depois da troca A=%i B=%i , A, B);
Passo 9: montar o algoritmo
/*Exerc4111.c: Le dois inteiros A e B e troca seus valores */
inteiro A, B, auxA;
146
principal ()
{
);
leia(%i, &A);
leia(%i, &B);
auxA = A;
A = B;
B = auxA;
B
15
15
auxA
Sada Tela
Valores antes da troca A=3 B=15
A
-4
B
4
auxA
4
-4
Sada Tela
Valores antes da troca A=-4 B=4
14.
Passo 1: ler e entender
Passo 2: variveis de entrada
- no tem
- no tem
inteiro temp;
147
Elisamara de Oliveira
imprima(Fim do programa);
}
148
Sada Tela
temp
200
Sada Tela
temp
500
Sada Tela
temp
300
Sada Tela
Temperatura baixa
Temperatura normal
16.
Passo 1: ler e entender
Passo 2: variveis de entrada
- no tem
char tipo;
inteiro tanque;
real preco;
149
Elisamara de Oliveira
}
seno imprima(Tipo de combustivel invalido);
}
seno imprima(Tipo de combustivel invalido);
imprima(Fim do programa);
150
tanque
100
preco
Sada Tela
180.00
tipo
g
tanque
45
preco
Sada Tela
117.00
tipo
y
tanque
70
preco
Sada Tela
Tipo de combustivel invalido
Captulo 5
1.
/* Eleicoes.c: este programa computa os votos de uma eleio e divulga
os
numeros obtidos e o candidato vencedor.*/
#include <stdio.h>
#include <conio.h>
int
int main()
{
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;
scanf (%i,&voto);
151
Elisamara de Oliveira
vencedor = 1;
else vencedor = 3;
return 0;
2.
/* Eleicoes2.c: computa os votos de uma eleio e divulga os numeros
obtidos e o candidato vencedor usando o comando switch.*/
#include <stdio.h>
#include <conio.h>
int
int main ()
{
brancos=nulos=eleitores=cont1=cont2=cont3= 0;
while
(1)
++eleitores;
152
switch (voto)
case 0:
++brancos;
case 1:
++cont1;
case 2:
++cont2;
case 3:
++cont3;
break;
break;
break;
break;
default:
++nulos;
else vencedor = 3;
return 0;
153
Elisamara de Oliveira
printf(\n\nFim do programa);
getch();
return 0;
154
hora
%.2f,
}
else printf(\nErro nos valores de hora de entrada e saida.);
printf(\n\nFim do programa);
getch();
return 0;
}
155
Elisamara de Oliveira
if (salario > 0)
{
if (salario < 500.00)
aumento = salario * 0.15;
else if (salario >=500.00 && salario <= 1000.00)
aumento = salario * 0.10;
else
printf(\n\nFim do programa);
getch();
return 0;
}
6. Este problema um caso tpico de uso do comando switch para verificar em qual caso certo
valor se enquadra!
/*exerc516.c: apresenta a regiao de procedencia de um produto*/
#include <stdio.h>
#include <conio.h>
float preco;
int codigo;
int main()
{
156
157
Elisamara de Oliveira
}
printf(\n\nFim do programa);
getch();
return 0;
Captulo 6
1. Voc deve escrever um programa que leia e imprima o nome e as duas notas de vrios alunos.
O ltimo aluno ter o nome=FIM. O nico fator um pouco chato na soluo deste problema
simples a leitura de strings em C, que deve ser feita usando-se funes da biblioteca <string.h>.
/* notas.c: programa que le e imprime 2 notas de vrios alunos */
#include
#include
#include
#include
<stdio.h>
<conio.h>
<string.h>
<stdlib.h>
char nome[15];
float nota1, nota2;
int main()
{
while (1)
{ printf(\nQual o seu nome? FIM finaliza );
gets(nome);
if (strcmp(nome,FIM) == 0)
break;
printf(\nDigite a primeira nota do aluno: );
scanf(%f,¬a1);
printf(\nDigite a segunda nota do aluno: );
scanf(%f,¬a2);
printf(\n%s, sua 1a nota foi: %1.2f e a sua 2a nota foi:
%1.2f,
}
nome,nota1,nota2);
fflush(stdin); //para no dar problema na leitura de strings
puts(\nFim do programa);
getch();
return 0;
}
158
2. Voc deve escrever um programa que leia 10 nmeros e calcule e imprima a sua soma. A estratgia usar o comando for, pois j sabemos que sero lidos 10 nmeros. importante
aplicarmos a regra bsica da programao: TODO SOMADOR E TODO CONTADOR DEVEM SER
INICIALIZADOS COM ZERO! Alm disso, importante notar que a impresso da soma dos nmeros feita FORA do comando for. Isso porque preciso terminar a leitura dos dados para
que a soma final tenha sido calculada e possa ser impressa.
);
159
Elisamara de Oliveira
3. Voc deve escrever um programa que calcule e imprima N nmeros pares, comeando do zero.
Voc deve perguntar ao usurio quantos nmeros ele deseja gerar (ou seja, pea-lhe para fornecer o valor de N). Nesse caso, vamos tambm usar o comando for, pois sabemos que o
usurio quer gerar N nmeros pares!
puts(\nFim do programa);
getch();
return 0;
Note como os nmeros pares so gerados: inicializa-se a varivel numeropar com zero e depois
vai adicionando-se 2 a ela. Dessa forma, so gerados 0, 2, 4, 6... Fcil, no ?
4.
X
Resultados
-1
-1
-2
-1
-4
Este exemplo, apesar de simples, mostra claramente como fazer um teste de mesa. Na primeira
linha da coluna, mostram-se apenas os valores iniciais das variveis X e Y. Na segunda linha, a
condio do comando while foi avaliada como verdadeira (0 != 4=Verdadeiro) e os comandos delimitados por { e } do while foram executados: em X, foi colocado o resultado de *-1
160
(-1*-1=1), Y foi acrescido de 1 (0+1=1) e a condio do comando if foi avaliada como verdadeira, implicando a impresso do valor de Y (1), o que foi mostrado na coluna Resultado. As outras
linhas correspondem execuo do lao do comando while.
5.
numero
cont
Resultado
2 -2
4 -4
6 -6
8 -8
10
10 10
12
A cada lao do comando for so impressos 2 nmeros numa mesma linha: positivo e negativo.
O nmero comea de 2 e vai sendo incrementado de 2. cont comea com zero e vai at 5.
6.
/*exerc621.c: le o angulo e informa o quadrante*/
#include <stdio.h>
#include<conio.h>
int angulo;
int quadrante;
int main()
{
printf(\nPrograma para apresentar a qual quadrante um angulo
pertence\n);
while (1)
{
161
Elisamara de Oliveira
angulo);
3\n, angulo);
else
drante 4\n, angulo);
);
}
printf(\n\nFim do programa);
getch();
return 0;
}
8.
/*exerc623.c: realiza uma pesquisa de opinio, computando votos em numero e em percentual */
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
int
float porcent;
int
main()
while (1)
printf (\nReferendo sobre a internacionalizacao da
Amazonia. Qual eh sua opiniao?);
162
);
scanf
if (opcao == 0)
no: );
(%i,&opcao);
break;
while (1)
scanf(%i, &sexo);
if (sexo == 1)
2=femini-
++homens;
break;
}
else if (sexo == 2)
{ ++mulheres;
break;
else
printf(\nSexo invalido. Por fa-
switch (opcao)
{
case 1:
++afavor;
break;
case 2:
++contra;
break;
getch();
} // while 1
total = mulheres + homens;
printf(\nResultados da pesquisa\n);
printf(----------------------);
printf(\n\n%i votante(s) do sexo masculino., homens);
163
Elisamara de Oliveira
if (total > 0)
{
}
printf(\n\n%i votante(s) do sexo feminino., mulheres);
if (total > 0)
{
}
total = afavor + contra;
printf(\n\n%i votante(s) a favor., afavor);
if (total > 0)
{ porcent = (float) afavor/total;
printf(\n%.1f %% dos votantes sao a favor,porcent*100);
}
printf(\n\n%i votante(s) contra., contra);
if (total > 0)
{ porcent = (float) contra/total;
printf(\n%.1f %% dos votantes sao contra,porcent*100);
}
getch();
printf(\n\n\nFim do programa);
getch();
return 0;
9.
/*exerc624.c: le n1,n2 e realiza as 4 operacoes*/
#include<stdio.h>
#include<conio.h>
int n1,n2,soma,subtr,mult;
float divisao;
int main()
{
164
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;
subtr=n1-n2;
mult=n1*n2;
if (n2!=0)
{ divisao=n1/n2;
}
else
}
}
printf(\n\nfim do programa);
getch();
return 0;
}
165
Elisamara de Oliveira
11.
/*exerc626.c: gera sequencias numericas*/
#include <stdio.h>
#include<conio.h>
printf( %i
}
,termo);
termo = termo*2;
printf(\n\n);
printf(\nDigite o numero de termos da sequencia de positivos e
negativos: );
scanf(%i,&n);
cont = 1;
termo = 1;
while (cont<=n)
{
printf( %i ,termo);
termo = termo*-1;
++cont;
if (cont % 2 == 1)
++ termo;
166
// cont eh impar?
}
printf(\n\n);
printf(\n\nFim do programa);
getch();
return 0;
17.
/* exerc6212.c:
sua media */
#include <stdio.h>
#include<conio.h>
int
float
Media;
int main( )
{ printf(\nPrograma que le varios numeros inteiros e calcula sua
media\n\n);
while (1)
{
scanf(%d,&Valor);
Soma = Soma + Valor;
++Cont;
}
if (Cont > 0)
{
Media = Soma/Cont;
printf(\nValor da Media dos:
\n,Cont, Media);
%i nmeros = %.2f
}
else
printf(\nNenhum valor foi fornecido);
printf(\nFim do programa... );
167
Elisamara de Oliveira
18.
/*exerc6213.c: calcula as razes de uma equao do 2o grau*/
#include <stdio.h>
#include <conio.h>
#include <math.h>
float
a, b, c; // coeficientes da equacao
int
{
main()
printf(\nCalcula as raizes de equacoes do 2o grau\n);
for ( ;
{
; )
printf(\nDigite o coeficiente a: );
scanf(%f, &a);
printf(\nDigite o coeficiente b: );
scanf(%f, &b);
printf(\nDigite o coeficiente c: );
scanf(%f, &c);
if ( a == 0)
eh zero);
else {
delta = b*b (4*a*c);
if (delta >= 0)
{
raiz2);
168
printf(\nRaiz 1 = %.2f
Raiz2=%.2f, raiz1,
}
else
printf(\nNao existem raizes reais);
}
printf(\nVoce deseja fornecer novos dados? S/N );
resp = getche();
if (resp==n || resp==N)
break;
}
printf (\n\n\n\n
Fim do programa);
getch();
return 0;
}
19.
/*exerc6214.c: mostra nmeros potencia de 2 menores que 1000000 usando
long int e
gera numeros impares menores que 100 */
#include <stdio.h>
#include <conio.h>
long int numlong;
int num;
int main()
{
printf(\n Sequencia de numeros potencia de 2 menores que
1000000);
printf(\n ===========================================n\n);
numlong=2;
while (numlong<1000000)
{
printf(%ld\t,numlong);
// \t corresponde a tabulacao
numlong = numlong * 2;
}
169
Elisamara de Oliveira
if
(num%10==1)
getch();
}
printf (\n\n\n\n
Fim do programa);
getch();
return 0;
}
20.
/*exerc6215.c: aproxima o numero Pi atraves de uma serie */
#include <stdio.h>
#include <conio.h>
double pi, termo;
float
num, den;
int main()
{
printf(\n Aproxima o valor de Pi por uma serie numerica);
printf(\n =================================n\n);
pi=0;
printf(\nDigite o numero de termos da serie: );
scanf(%ld,&n);
170
num = 4;
den = 1;
for (cont=0; cont < n; cont++)
{
termo = num/den;
if (cont % 2 == 0)
ciona 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;
}
21.
/*exerc6216.c: le numeros e calcula o digito verificador*/
#include <stdio.h>
#include<conio.h>
long int n;
int d1,d2,d3,d4,d5,dv;
int main()
{
printf(\nPrograma para ler numeros e calcular o digito
verificador\n);
while (1)
{
171
Elisamara de Oliveira
);
scanf(%ld,&n);
if (n == -1)
break;
gitos
172
32.
/*exerc6227.c: le o codigo do produto e apresenta sua classificacao*/
#include <stdio.h>
#include<conio.h>
int codigo;
int main()
{
printf(\nPrograma para apresentar a classificacao de
produtos\n);
while (1)
{
printf(\nQual eh o codigo do produto? (1 a 9 ou 0 para finalizar): );
scanf(%i,&codigo);
if (codigo == 0)
break;
switch (codigo)
{
case 1: printf(\nClassificacao do produto %i = ALIMENTO
NAO PERECIVEL, codigo);
break;
case 2:
case 3:
case 4: printf(\nClassificacao do produto %i = ALIMENTO
PERECIVEL, codigo);
break;
case 5:
RIO, codigo);
173
Elisamara de Oliveira
case 8:
case 9: printf(\nClassificacao do produto %i = LIMPEZA
E UTENS. DOMESTICOS,
codigo);
break;
default: printf(\nCodigo do produto invalido\n);
}
printf(\n);
} // while 1
printf(\n\nFim do programa);
getch();
return 0;
}
174
REFERNCIAS
AITKEN, P.; JONES, B. C Guia do Programador. Rio de Janeiro: Berkeley Brasil, 1994.
ASCENCIO, A. F. G.; VENERUCHI, E. A. Fundamentos da programao de computadores. So Paulo:
Prentice Hall, 2007.
CALVERT, C. Programando aplicaes em Windows com C e C++. Rio de Janeiro: Berkeley, 2004.
FORBELLONE, A. L.; BERSPACHER, H. Lgica de programao. 3. ed. So Paulo: Prentice Hall, 2005.
GOTTFRIED, B. S. Programando em C. So Paulo: Makron Books, 2003.
KERNIGHAN, B. W.; RITCHIE, D. M. C A linguagem de programao padro ANSI. Rio de Janeiro: Campus,
1989.
LOPES, A.; GARCIA, G. Introduo a programao: 500 algoritmos resolvidos. Rio de Janeiro: Campus,
2002.
MANZANO, J. A. M. G.; OLIVEIRA, J. F. Algoritmos: lgica para desenvolvimento de programas de
computador. 22. ed. So Paulo: rica, 2009.
MIZRAHI, V. V. Treinamento em linguagem C. Mdulo 1. 2. ed. So Paulo: Makron Books, 2006.
______. Treinamento em linguagem C. Mdulo 2. 2. ed. So Paulo: Makron Books, 2006.
SCHILDT, H. C completo e total. So Paulo: Makron Books, 1997.
SEBESTA, R. W. Conceitos de linguagens de programao. 4. ed. Porto Alegre: Bookman, 2000.
TENEMBAUM, A. M. Estruturas de dados usando C. So Paulo: Pearson, 1995.
175