Programao
Cincia da Computao
Sistemas de Informao
2016
Sumrio
Da autora para voc, aluno!...................................................................................................... 2
Captulo 1 ................................................................................................................................... 5
Algoritmos .................................................................................................................................. 5
1.1. O que um algoritmo? ...............................................................................................5
1.2. Conceitos Bsicos da Programao de Computadores ..............................................8
1.3. Etapas da Programao de Computadores ..............................................................11
1.4. Expresso de Algoritmos ..........................................................................................12
1.4.1. Expresso de Algoritmos atravs de Diagramas ................................................12
1.4.2. Expresso de Algoritmos atravs de Linguagem de Programao ....................13
1.4.3. Expresso de Algoritmos atravs de Pseudolinguagem ....................................16
1.5. Os algoritmos sero expressos em Pseudolinguagem ............................................17
Lista de Exerccios 1.1 .....................................................................................................19
Captulo 2 ................................................................................................................................. 24
Pseudolinguagem de Programao: PortuC ....................................................................... 24
2.1. Identificadores ...........................................................................................................24
2.2. Tipos Bsicos e Declarao de Variveis .................................................................25
2.3. Comando de Atribuio.............................................................................................26
2.4. Operadores Aritmticos ............................................................................................27
2.5. Operadores Lgicos ..................................................................................................28
2.6. Operadores Relacionais............................................................................................32
2.7. Comando Condicional ...............................................................................................33
2.8. Comando de Repetio ............................................................................................35
2.9. Comandos de Entrada e Sada .................................................................................38
2.10. Separador de comandos .........................................................................................41
2.11. Comentrios ............................................................................................................42
2.12. Bloco de Programa .................................................................................................42
Captulo 3 ................................................................................................................................. 47
Construo de Algoritmos em PortuC: Praticando os comandos e fazendo clculos ... 47
3.1. Declarao de variveis, comandos leia e imprima .............................................47
3.2. Comando condicional se ........................................................................................48
3.3. Bloco de Programa ...................................................................................................49
Lista de exerccios 3.1 ....................................................................................................51
3.4. Operaes Bsicas com Nmeros: soma, subtrao, multiplicao, diviso, raiz
quadrada, porcentagem, potncia, diviso inteira ............................................................52
3.5. Operaes com Operadores Lgicos e Relacionais .................................................56
Lista de Exerccios 3.2 .....................................................................................................58
Captulo 4 ................................................................................................................................. 60
A Linguagem de Programao C ........................................................................................... 60
4.1. Tipos Bsicos e Declarao de Variveis em C........................................................60
4.2. Comando Condicional em C (if) ................................................................................61
4.3. Operadores de Atribuio, Aritmticos, Relacionais e Lgicos (Binrios) em C .......64
4.4. Comando de Repetio em C (while) .......................................................................67
4
Captulo 1
Algoritmos
Em nosso dia-a-dia executamos mecanicamente uma srie de aes que so
seguidas sequencialmente e que provocam o acontecimento de algo. Por exemplo, temos
um trajeto frequente ao sairmos diariamente de casa em direo ao nosso trabalho ou
nossa universidade que, sempre que seguido, nos leva ao nosso destino. Isso um
algoritmo. Em outras palavras, um algoritmo descreve eventos com durao finita, que
envolvem um conjunto de objetos cujas caractersticas podem ser alteradas, atravs de
aes que ocorrem sequencialmente.
Exemplo de um algoritmo
Pique as batatas;
Esquente o leo da panela;
"Frite as batatas na panela";
Escorra o excesso de leo das batatas fritas;
"Coloque as batatas fritas numa vasilha com papel absorvente".
Com base nos exemplos apresentados at aqui, estamos prontos para definirmos o que
um algoritmo:
Fonte:http://www.shadowandy.net/2
011/06/apple-imac-27-the-ultimate-
Linguagem de alto nvel: para escrever os programas
all-in-one-computer.htm
de computador, os programadores utilizam linguagens
que esto mais prximas da linguagem humana, que so chamadas de linguagens de alto
nvel ou simplesmente linguagens de programao. Exemplos de linguagens de
programao (alto nvel) so C, C++, C#, Pascal, Delphi, Java, Basic, VisualBasic, Fortran,
Cobol, dentre muitas outras.
Linguagem Linguagens
de Mquina Humanas
Linguagem
Assembly
Figura 1
Relao entre linguagens de baixo e de alto nvel
9
Figura 2
Os compiladores so especficos para cada linguagem e
para cada sistema operacional
10
Caro aluno, dadas estas explicaes bsicas, como unir todas estas informaes para
comearmos a programar? A figura 3 vai nos ajudar, mostrando o ciclo completo da
elaborao do algoritmo execuo de um programa de computador. Cada um dos
componentes deste ciclo explicado a seguir.
arquivos de
biblioteca
linker
cdigo
executvel
Figura 3
Do algoritmo execuo de um programa de computador
Resumindo todo este processo, caro aluno, vamos precisar passar por 5 etapas:
primeiro obter um problema a ser resolvido, depois escrever um algoritmo em pseudo-
linguagem para solucionar este problema, depois traduzir o algoritmo para a linguagem de
programao C e finalmente, editar este programa e usar um compilador C para testarmos
seu funcionamento!
Sendo assim, caro aluno, vamos aprender a programar da melhor maneira possvel:
utilizando as regras da programao estruturada!
12
Figura 4
Algoritmo expresso atravs de um
diagrama de Chapin
13
Figura 5
Algoritmo expresso atravs de
um Fluxograma
PROGRAM MenorValor;
{ Este programa seleciona o menor nmero em uma sequncia de nmeros
inteiros}
BEGIN
WRITE(Fornea um nmero inteiro: );
READLN(Valor);
Menor := Valor;
WHILE Valor <> -1 DO
BEGIN
IF Valor < Menor
THEN Menor := Valor;
WRITE(Fornea um nmero inteiro (flag=-1): );
READLN(Valor);
END; {while}
WRITELN(O menor valor lido foi: , Menor);
END.
Figura 6
Algoritmo expresso na Linguagem de Programao Pascal
#include <stdio.h>
principal( ){
imprima (Fornea um nmero inteiro: );
leia (%i, &valor);
menor = valor;
enquanto (valor != -1){
se (valor < menor)
menor = valor;
imprima (Fornea um nmero inteiro(1 para terminar): );
leia (%i, &valor);
}
imprima(O menor valor lido foi: %i , menor);
}
Figura 8
Algoritmo expresso na Pseudolinguagem de PortuC
Um exerccio interessante para voc fazer agora, seria visitar os exemplos deste
algoritmo escritos no diagrama de Chapin e no fluxograma e compar-los com o PortuC...
Diga-me qual deles mais fcil de entender? Qual dessas formas de expresso de
algoritmos voc escolheria?
1
Kernighan, B. , Ritchie, D. C- A Linguagem de Programao Padro ANSI, So Paulo: Campus, 1989.
19
1.1.1)
1. Tambm houve 21 de Abril de 1984 no Brasil??
8. Um mdico receita trs comprimidos e diz para tomar um a cada meia hora, quantos minutos duram os
comprimidos?
1.1.2)
01. Meu pai tem 42 anos de idade. Meu cachorro tem 8. Se fosse um ser humano, a idade de meu cachorro
seria 56 anos. Quantos anos teria meu pai se ele fosse um cachorro?
a. 5
b. 6
c. 7
d. 8
e. 9
02. Um senhor, olhando para um retrato, diz: O pai deste homem o pai de meu filho.
Ele est olhando para:
a. seu prprio retrato
b. retrato de seu pai
c. retrato de seu filho
d. retrato de seu av
e. retrato de seu neto
03. No segundo domingo do ms de maio, comemora-se o dia das mes. Este dia, poder cair:
a. de 7 a 14 de maio
b. de 8 a 15 de maio
c. de 8 a 14 de maio
d. de 6 a 15 de maio
e. de 7 a 13 de maio
20
04. Certa bactria se multiplica to rapidamente que seu nmero dobra a cada minuto. Num caco de vidro ela
se multiplica de tal maneira que, em 60 minutos enche a metade do mesmo. Em quanto tempo estar cheio
totalmente?
a. 61 min
b. 90min
c. 120min
d. 180 min
e. 240 min
05. Em uma jarra cabem um litro mais meia jarra. A capacidade da jarra :
a. 1 litro
b. 1,5 litros
c. 2 litros
d. 2,5 litros
e. 3 litros
06. Numa rvore pousam pssaros. Se pousarem 2 pssaros em cada galho, fica um galho sem pssaros.
Se pousar um pssaro em cada galho, fica um pssaro sem galho. O nmero de pssaros :
a. 2
b. 3
c. 4
d. 5
e. 6
07. Sabendo-se que seis raposas, em seis minutos, pegam seis galinhas, pergunta-se: quantas raposas em
cem minutos pegaro cem galinhas ?
a. 100
b. 36
c. 18
d. 6
e. 1
08. Uma pessoa que gosta somente das pessoas que no gostam de si mesmas:
a. gosta de si mesma
b. no gosta de si mesma
c. gosta de algum
d. no gosta de ningum
e. no existe
09. Em uma urna existem 38 bolas que se diferenciam apenas pela cor: 15 vermelhas, 15 amarelas e 8
azuis. Uma pessoa com os olhos vendados retira uma bola de cada vez da caixa. Qual o nmero mnimo de
bolas que deve ser retirado para que ela tenha certeza que saram duas bolas da mesma cor?
a. 16
b. 9
c. 8
d. 4
e. 3
21
10. Dispem-se de alguns livros de Fsica do autor A, outros do autor B e outros do autor C. Da mesma
forma, temos alguns livros de Qumica do mesmo autor A, outros de B e outros de C. Todos os livros devem
ser colocados em duas caixas com o seguinte critrio: na primeira caixa deve-se colocar todos os livros que
satisfaam a seguinte condio: "se for do autor A, ento no pode ser de Fsica". Na segunda caixa, os
livros que no satisfaam a essa proposio. A primeira caixa deve conter exatamente:
a. todos os livros de Fsica ou de Qumica dos autores B e C mais todos os livros de Qumica do autor A.
b. todos os livros de Qumica do autor A mais todos os livros de Fsica dos autores B e C.
c. todos os livros de Fsica dos autores B e C.
d. todos os livros de Fsica do autor A.
e. todos os livros de Qumica dos autores A, B e C.
12. Guilherme, lvaro e Man acabaram de terminar um lanche. Um dos trs rapazes comeu um lanche de
presunto, outro um lanche de peru, e o terceiro, um lanche de frango. Apenas uma das afirmaes abaixo
verdadeira:
Guilherme comeu o lanche de peru
Guilherme no comeu o lanche de frango
lvaro no comeu o lanche de frango
lvaro no comeu o lanche de presunto
Ento, Guilherme, lvaro e Man comeram respectivamente, os lanches de:
14. Um missionrio foi capturado por canibais em uma floresta. Os canibais ento fizeram-lhe a
seguinte proposta:
- Se fizer uma declarao verdadeira, ser cozido com batatas.
- Se fizer uma declarao falsa, ser assado na churrasqueira.
Como o missionrio usar a lgica, podemos concluir que:
a. ser cozido
b. ser assado
c. no poder ser cozido nem assado
d. ser cozido e assado ao mesmo tempo
e. Dir: " ruim, hein?"
22
18. Em uma avenida reta, a padaria fica entre o posto de gasolina e a banca de jornal, e o posto de gasolina
fica entre a banca de jornal e a sapataria. Logo:
a. a sapataria fica entre a banca de jornal e a padaria.
b. a banca de jornal fica entre o posto de gasolina e a padaria.
c. o posto de gasolina fica entre a padaria e a banca de jornal.
d. a padaria fica entre a sapataria e o posto de gasolina.
e. o posto de gasolina fica entre a sapataria e a padaria.
19. Um tcnico de futebol, animado com as vitrias obtidas pela sua equipe nos ltimos quatro jogos, decide
apostar que essa equipe tambm vencer o prximo jogo. Indique a Informao adicional que tornaria menos
provvel a vitria esperada.
20. Todos os que conhecem Joo e Maria admiram Maria. Alguns que conhecem Maria no a
admiram. Logo:
a. todos os que conhecem Maria a admiram.
b. ningum admira Maria.
c. alguns que conhecem Maria no conhecem Joo.
d. quem conhece Joo admira Maria.
e. s quem conhece Joo e Maria conhece Maria.
23
Resposta do Exerccio 1
Captulo 2
Pseudolinguagem de Programao:
PortuC
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.
Se mais de uma varivel for do mesmo tipo bsico, elas podem ser declaradas juntas, apenas
separadas por vrgulas ,.
No pode haver duas variveis com mesmo nome, mesmo que tenham tipos bsicos diferentes, a
menos que algum caracter maisculo ou minsculo as diferencie.
NOME = Maria;
(o smbolo que delimita a cadeia de caracteres no pode ser apstrofo, devem-se usar aspas)
Total_dos_Salarios = 1275.50;
(o valor a ser atribudo a uma varivel numrica no pode estar entre apstrofos nem entre
aspas)
Total_dos_Salarios = 1275,50;
(no existe vrgula decimal, o certo usar ponto . decimal)
soma = 10.0;
(numa varivel do tipo inteiro (como o caso da varivel soma) no pode haver parte
decimal; este caso est sujeito converso automtica)
soma := 0;
(o smbolo do comando de atribuio = e no :=)
27
nome = nome * 3;
(em variveis do tipo caracter s pode ser feita adio ou subtrao de caracteres)
contador = *1;
(o operador * didico, tem que envolver dois operandos)
Caro aluno, aqui cabe uma explicao um pouco mais detalhada para melhorar o
entendimento dos operadores lgicos E, OU e ! (no):
29
Uma varivel lgica aquela que pode assumir apenas os valores VERDADEIRO
ou FALSO.
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.
se (resposta = S)
(o problema aqui o uso do smbolo = que do comando de atribuio e no == que
a igualdade... na verdade o comando no est errado, mas est sendo feita uma
atribuio e no uma comparao. Portanto, muito cuidado!)
33
seno clusula do comando se, ou seja, no comando, apenas faz parte do comando
se.
A clusula seno pode no existir num comando se. Neste caso, (quando no existe a
clusula seno), quando a <condio> avaliada como FALSA, nenhum comando executado
e o comando se finalizado.
<bloco de comandos>
}
numero = 1;
enquanto (numero <= 50){
se (numero % 2 == 0)
++contapar;
seno
++contaimpar;
++numero;
}
37
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;
numero = 1;
enquanto (numero <= 50);
{ se (numero % 2 == 0)
++contapar;
seno
++contaimpar;
++numero;
}
( como foi colocado ; aps a condio, o comando enquanto foi finalizado, a varivel
numero no ser alterada e o comando enquanto nunca vai parar!)
38
em que:
%letra representa os especificadores de formato e depende do tipo associado
varivel:
%d ou %i para variveis do tipo inteiro (integer)
%f para variveis do tipo real (float)
%c para variveis do tipo caracter (nico) (character)
%s para variveis do tipo caracter (cadeia ou string)
O smbolo & deve ser utilizado apenas para os tipos numricos, ou seja, para variveis declaradas
como inteiro ou real.
Recomenda-se utilizar o comando leia para ler uma s <varivel> de cada vez.
39
Entre podem ser escritas frases formadas por palavras intercaladas pelos especificadores de
formato %s, %c, %i, %d ou %f descritos no comando leia. Para cada especificador utilizado, a varivel
do tipo correspondente deve constar da lista de variveis.
A lista de variveis opcional; deve existir somente quando um especificador de formato colocado
na frase entre aspas e, neste caso, deve haver uma vrgula separando a frase da lista de variveis e
vrgulas separando as variveis da lista.
entre a frase e a varivel e entre as variveis deve haver uma vrgula separando-as
dentro da frase deve vir um formato para cada varivel, compatvel com o seu tipo bsico
Exemplo:
imprima (Vc se chama %s, tem %i anos e %f m de altura , nome, idade, altura);
O separador de comandos :
;
se (resposta != s);
{ <comandos>
}
(o ; depois da condio finaliza o comando se)
2.11. Comentrios
Os comentrios no pertencem s instrues do algoritmos, mas so teis para que
o programador explique o que est sendo feito.
Exemplos de comentrios:
/* Este trecho calcula a media de notas */
desc = preco*0.15; // calcula desconto de 15%
/* comentrios */
<declarao de variveis>;
principal(){
<bloco de comandos>;
}
desejvel que todo algoritmo escrito em PortuC deva comear com um comentrio
dizendo o que o programa faz, embora comentrios sejam opcionais.
Em seguida devem ser declaradas todas as variveis que sero utilizadas no <bloco de
comandos>.
Aps a declarao das variveis deve-se escrever a palavra principal( ), que delimita a seo
em que os comandos podem ser utilizados.
O <bloco de comandos> pode conter todos os comandos vlidos em PortuC, separados por ;
e estes devem estar contidos entre os delimitadores { e }. Nenhum comando pode ser usado fora
desta seo.
importante notar que letras maisculas e minsculas alteram os identificadores e as palavras
reservadas do PortuC.
43
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.);
}
real nota;
principal(){
imprima (Digite sua nota final: );
leia(%f,¬a);
se (nota >= 6.0)
imprima (Voce foi aprovado! );
seno
imprima (Voce foi reprovado... );
principal(){
imprima (Qual eh o ano atual? );
leia(%i,&anoatual);
imprima (Qual eh o seu ano de nascimento? );
leia (%i,&anonasc);
imprima(Fim do programa.);
}
inteiro n;
principal(){
imprima (Digite um numero inteiro: );
leia(%i,&n);
se (n % 2 == 0)
imprima (O numero %i eh par , n);
seno
imprima (O numero %i eh impar , n);
principal ( ){
imprima (Qual eh o seu nome? );
leia(%s,caracter);
imprima (Qual eh o seu sexo? (F/M) );
leia (%c,sexo);
se (sexo == F)
imprima (%s voce eh do sexo feminino. ,caracter);
seno
imprima (%s voc eh do sexo masculino. ,caracter);
}
(A varivel caracter tem o mesmo nome da palavra reservada caracter)
real nota;
{ imprima (Digite sua nota final: );
leia(%f,¬a);
imprima(Fim do programa.);
}
(Faltou a palavra principal( ) para dar incio seo de comandos)
46
real nota;
nota = 7.5;
principal(){
imprima (Digite sua nota final: );
leia(%f,¬a);
principal()
imprima(Fim do programa.);
}
(Faltou o delimitador { para iniciar a seo de comandos do programa)
47
Captulo 3
Construo de Algoritmos em
PortuC: Praticando os comandos e
fazendo clculos
3.1. Declarao de variveis, comandos leia e imprima
leia (%i,&numero);
6) Escreva comandos para pedir, ler e imprimir o nome e a idade de uma pessoa.
10) Escreva um nico comando capaz de classificar uma pessoa pela faixa etria e ainda
verificar se a idade vlida.
caracter nome[20];
inteiro idade;
principal(){
imprima(Qual eh o seu nome? );
leia(%s,nome);
imprima(Qual eh a sua idade? );
leia(%i,&idade);
imprima(Nome lido: %s e idade lida: %i ,nome,idade);
imprima(Fim do programa );
}
50
12) Escreva um algoritmo que leia o nome e a idade de uma pessoa e imprima uma frase
dizendo se a pessoa uma criana, um adolescente, um adulto ou se a idade invlida.
caracter nome[20];
inteiro idade;
principal(){
imprima(Fim do programa );
}
51
Com os 12 exerccios anteriores, voc deve ter j uma boa base... Agora hora de
voc praticar um pouco sozinho! A minha forte recomendao que voc faa os
exerccios sozinho, consultando os exemplos anteriores para ajud-lo... Somente
depois da sua tentativa que voc deve conferir as respostas... Boa sorte!
3.1.1) Escreva um algoritmo que leia e imprima o nome e as duas notas de um aluno.
3.1.2) Escreva um comando que calcule a mdia das duas notas lidas no exerccio
3.1.1.
3.1.4) Escreva um algoritmo que leia o nome e as duas notas de um aluno, calcule a
mdia das notas e imprima uma frase dizendo se ele foi aprovado (mdia maior ou
igual a 7.0) ou reprovado.
3.1.5) Escreva um algoritmo que leia o nome e as duas notas de um aluno. Valide se
as notas esto entre 0 e 10. Se estiverem, calcule a mdia das notas e imprima uma
frase dizendo se ele foi aprovado (mdia maior ou igual a 7.0) ou reprovado. Se no
estiverem apenas envie uma mensagem de erro e finalize o programa.
52
soma = n1 + n2;
subtracao = n1 - n2;
multiplicacao = n1 * n2;
se (n2 != 0){
divisao = n1/n2;
imprima(%i dividido por %i = %f,n1,n2,divisao);
}
seno
imprima(Divisao por zero nao existe! );
Para evitarmos a diviso eventual por zero, usamos o comando se. Somente se n2
for diferente de zero que a diviso ser calculada; caso contrrio uma mensagem
impressa para comunicar ao usurio o motivo pelo qual o clculo no foi efetuado. O
resultado da diviso um nmero real.
quadrado = n1*n1;
cubo = n1*n1*n1;
53
Com certeza muito mais fcil do que voc pensava, no ? So pequenos truques da
programao... Mas se quisermos calcular n1 elevado a 1000 ou n1 elevado a um nmero
qualquer, teremos que escrever um pequeno trecho de algoritmo. Depois eu mostro como
fazer...
se (n1 > 0) {
raiz = sqrt(n1);
imprima(Raiz quadrada de %i = %f,n1,raiz);
}
seno
imprima(Nao existe raiz de numero negativo! );
18) Escreva comandos para fornecer o quociente e o resto da diviso inteira de n1 por n2.
No caso
se da diviso
(n2 != 0)inteira
{ de n1 (numerador) por um nmero n2 (denominador)
tambm quociente
necessrio que
= on1denominador
/ n2; seja diferente de zero.
resto = n1 % n2;
imprima(divisao inteira de %i por %i tem quociente = %i e
resto = %i ,n1,n2,quociente, resto);
}
seno
imprima(Divisao por zero nao existe! );
Neste caso importante voc notar que ambos os nmeros n1 e n2 tm que ser
inteiros para que os operadores / (quociente da diviso) e % (resto da diviso
inteira) possam ser utilizados! Como voc pode notar, no existe um operador
especfico para o quociente da diviso inteira; usa-se o / (que da diviso real),
mas como n1 e n2 so inteiros, haver uma converso automtica de tipos, com o
truncamento da parte fracionria do resultado, o que nos fornece o quociente da
diviso inteira. Isso um trunfo do PortuC: nunca se esquea disso!
19) Escreva um comando para calcular 10% de um valor. E outro para acrescentar os 10%
ao valor original.
20) Suponha que um produto custe um determinado preo, mas, se pago vista, o cliente
ganha 5% de desconto. Escreva comandos para calcular o valor do desconto e o valor
final do produto.
21) Escreva comandos para separar os dgitos de um nmero inteiro menor que 100 em
dezena e unidade.
Vamos entender primeiro o que se quer: dado um nmero menor que 100, por
exemplo, 29, deseja-se obter o dgito 2 (dezena) separado do dgito 9 (unidade); no
caso de um nmero de um s dgito, por exemplo, 3, o resultado seria 0(dezena) e
3(unidade). Bem, este um problema muito comum na programao e muito fcil de
ser resolvido tambm! Basta usar os operadores / e % com nmeros inteiros.
dezena = n1 / 10;
unidade = n1 % 10;
Um bom teste aqui seria voc responder: como poderamos separar os 3 dgitos de
nmeros entre 100 e 999?
22) Suponha que numa certa universidade os alunos tm um nmero de 5 dgitos que os
identificam. Desses 5 dgitos, os 2 primeiros indicam o ano em que o aluno entrou na
universidade. Escreva comandos para separar os 2 primeiros dgitos de um nmero inteiro
de 5 dgitos que representa a identificao do aluno.
Vamos entender o que se quer: dado um nmero de 5 dgitos, por exemplo, 99211,
se deseja obter os 2 primeiros dgitos, no caso, 99 (que indicaria que o aluno entrou
em 1999 na universidade).
Mas, e se o aluno em entrou em 2000 ou 2009? O resultado teria que ser ano de
entrada = 0. Vamos fazer, agora, os testes. Vejamos: n1 00211. 00211 dividido por
1000 d ZERO (que o quociente) e sobram 211. Pode parecer estranho, mas
pense: quando se divide um nmero por 1000, o menor resto zero e o maior resto
pode ser 999... Como queremos apenas o quociente da diviso inteira, o resultado
ser anoentrada = 0 (que, no caso, representaria 2000). Funciona!
Outro teste: n1 igual a 10231. 10231 dividido por 1000 d 10 e sobram 231, certo?
10 o quociente, o que resulta em anoentrada= 10 (que seria 2010)! Funciona
mesmo!
Faa outros testes e verifique que d certo... e como o clculo simples, no?
anoentrada = n1 / 1000;
56
se (n1 > 0)
imprima(%i eh positivo. , n1);
seno se (n1 < 0)
imprima(%i eh negativo. , n1);
seno
imprima (Numero eh zero);
se (n1 % 2 == 0)
imprima(%i eh par. , n1);
seno
imprima(%i eh impar. , n1);
27) Suponha que um certo clube esportivo quer selecionar atletas para o time de basquete.
As exigncias so: ter 1.85m de altura ou mais, ter menos de 21 anos e ter, pelo menos, o
primeiro grau completo. Escreva um comando para verificar se um candidato pode ser ou
no aprovado para o time de basquete. O grau de instruo definido como: 0= sem
instruo, 1=primeiro grau, 2=segundo grau, 3=superior.
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.
C5;
Em PortuC no existe uma varivel do tipo lgico a qual se possa atribuir um valor
verdadeiro ou falso. No entanto, o PortuC considera o valor 0 (zero) como sendo falso
e qualquer outro valor diferente de zero como sendo verdadeiro. Nos exerccios que se
seguem, considere que os valores de B1, B2 e B3 representam valores verdadeiros
(diferentes de zero) ou falsos (iguais a zero) e responda pergunta Quais comandos
sero executados:
3.2.3) Observe o algoritmo abaixo. Qual o valor de L aps a execuo desse algoritmo?
inteiro A, B, C;
real X, Y;
inteiro L;
principal()
{ A = 0; /* falso */
B = 1; /* verdadeiro */
C = 0; /* falso */
X = 1.5;
Y = 3.2;
se (C ou (X+Y>5) ou no(A e B))
L = 0;
seno
L = 1;
}
59
3.2.4) Escreva os trechos de algoritmo em PortuC que ajudem o IBGE a fazer o senso
populacional de uma certa cidade. Sabendo-se que os seguintes dados foram pedidos aos
cidados: SEXO (H= homem, M= mulher) e RENDA (nmero de salrios mnimos -
s.m.), os trechos de algoritmo devem fornecer:
a) o total de homens
b) o total de mulheres
c) o total de pessoas da classe C (at 4 s.m.), da classe B (at 20 s.m.) e da classe
A (acima de 20 s.m.)
3.2.5) Fornecidos os dados das candidatas a modelo: ALTURA, PESO e IDADE, escreva
um trecho de algoritmo para verificar se os dados se enquadram nos seguintes limites:
ALTURA: de 1.70 a 1.85 m
PESO: de 48.0 a 60.0 Kg
IDADE: de 17 a 21 anos
Se os dados da candidata corresponderem aos limites acima, deve ser impressa uma frase
dizendo que ela foi aprovada, caso contrrio, que no foi aprovada.
3.2.6) Modifique o exerccio anterior para que uma frase seja impressa aps a verificao
de cada quesito dizendo se a candidata foi aprovada ou no em cada um deles e uma
frase final dizendo se foi aprovada ou no como modelo.
60
Captulo 4
A Linguagem de Programao C
Neste captulo, voc, caro aluno, poder comear a traduzir seus primeiros
algoritmos para a linguagem de programao C. Isso o capacitar a realizar as primeiras
aulas prticas em laboratrio. Recomenda-se que voc prepare em seu computador um
ambiente adequado programao em C e comece a trabalhar sozinho fazendo os
programas da lista 4.1 como atividades extra-classe. O interessante em se utilizar o
PortuC como pseudo-linguagem, que ele segue quase totalmente as mesmas regras da
linguagem C. Assim, comear a programar em C ser muito fcil, voc ver!
if (numero % 2 == 0)
++contapar;
else
++contaimpar;
if (numero > 0)
printf(\nNumero positivo);
else if (numero < 0)
printf(\nNumero negativo);
else
printf(\nNumero zero);
63
if (numero % 2 == 0);
++contapar;
else
++contaimpar;
(no pode-se colocar ; depois da condio do comando if, pois o ; finaliza o comando)
64
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)
Exemplos:
(5 > 2) && (3 != 2) /* avalia como 1 (verdadeiro) */
(3 >= 2) || (4 == 2) /* avalia como 1 (verdadeiro) */
(3 <= 2) || (4==2) /* avalia como 0 (falso) */
! (4==2) /* avalia como 1 (verdadeiro) */
! (4>3) /* avalia como 0 (falso) */
if (resposta ! = S)
(o smbolo do operador diferente est errado: no pode haver espao em branco entre o ! e o =)
66
if resposta == S
(faltaram parnteses delimitando a expresso)
while (condio) {
<bloco de comandos>
}
Caso haja um comando break; dentro do comando while, este finaliza imediatamente o
comado while quando for executado.
numero = 1;
while (numero <= 100) {
if (numero % 2 == 0)
++contapar;
else
++contaimpar;
numero += 3;
}
68
numero = 1;
while (1) {
if (numero % 2 == 0)
++contapar;
else
++contaimpar;
numero += 3;
if (numero >= 100)
break;
}
numero =1;
while (numero <= 100)
if (numero % 2 == 0)
++contapar;
else
++contaimpar;
numero += 3;
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;
puts(\n frase);
O comando puts imprime apenas frases (ou strings), no imprime variveis e no aceita
formatos.
No comando printf, entre podem ser escritas somente frases ou frases formadas por
palavras intercaladas pelos especificadores de formato %s, %c, %i, %d ou %f descritos
nos comandos de leitura. Caso haja especificadores, para cada especificador utilizado, a
varivel do tipo correspondente deve constar da <lista de variveis>.
Os nmeros do tipo float podem ser impressos com formato, no comando printf, para
evitar a forma cientfica, ou seja, para serem impressos em forma estendida. A parte fracionria
truncada caso haja mais casas fracionrias do que a delimitada pelo formato, mas a parte
inteira nunca truncada. Exemplos: %.2f (2 casas na parte fracionria), %3.0f (no mnimo
3 casas na parte inteira, mas no ocorre truncamento nunca, e nenhuma casa na parte
fracionria).
\n um cdigo de barra invertida que salta uma linha na tela. Pode ser usado em qualquer
Explicao passo-a-passo do comando de impresso printf:
posio dentro das aspas em ambos os comandos, puts e printf, e opcional.
printf (frase
O comando putsvarivel1 varivel2
salta uma linha varivel3);
aps a impresso da frase, mesmo sem \n e no
imprime variveis.
entre a frase e a varivel e entre as variveis deve haver uma vrgula separando-as
dentro da frase deve vir um formato para cada varivel, compatvel com o seu tipo bsico
Exemplo:
4.6. Comentrios em C
Os comentrios no pertencem s instrues do programa C, mas so teis para
que o programador explique o que est sendo feito.
Exemplos de comentrios:
/* Este trecho calcula a media de notas */
desc = preco*0.15; // calcula desconto de 15%
72
/* comentrios */
<incluso de bibliotecas>
<declarao de variveis>
int main(){
<bloco de comandos>
}
Em seguida devem ser includas as bibliotecas .h que sero utilizadas no programa, atravs da
diretiva #include < >
Em seguida devem ser declaradas todas as variveis que sero utilizadas no <bloco de
comandos>.
Aps a declarao das variveis deve-se escrever a palavra main( ), ou int main() ou
void main() que delimita a seo em que os comandos podem ser utilizados.
O <bloco de comandos> pode conter todos os comandos vlidos em C, separados por ; e estes
devem estar contidos entre os delimitadores { e }. Nenhum comando pode ser usado fora desta
seo, a no ser o comando de atribuio para inicializar variveis na sua declarao.
Alguns compiladores C no aceitam void main( ), mas int main() ou apenas main().
Nestes casos, necessrio colocar-se o comando return 0; antes de finalizar o programa.
73
if (sexo == F || sexo == f)
printf (\n%s, voce eh do sexo feminino. ,nome);
else
printf (\n%s, voce eh do sexo masculino. ,nome);
if (opcao == 1)
printf(\nVoce precisa ler mais sobre a historia grega !);
if (opcao == 2)
printf(\nEle chegou nos paises vizinhos...);
if (opcao == 3)
printf(\n Naturalmente voce eh um f da carta do descobrimento!);
if (opcao == 4)
printf(\n Resposta certissima !);
if (opcao < 1 || opcao > 4)
printf(\nVoce nao escolheu nenhuma das alternativas validas.);
soma = n1 + n2;
subtracao = n1 - n2;
multiplicacao = n1 * n2;
--n1; //subtrai 1 de n1
++n1; // soma 1 a n1
quadrado = n1*n1;
cubo = n1*n1*n1;
if (n2 != 0){
quociente = n1 / n2;
resto = n1 % n2;
printf(\ndivisao inteira de %i por %i tem quociente = %i e
resto = %i ,n1,n2,quociente, resto);
}
else
printf(\nDivisao por zero nao existe! );
if (n2 != 0){
divisaoreal = (float) n1/n2;
printf(\n %i dividido por %i = %.4f,n1,n2,divisaoreal);
}
else
printf(\nDivisao por zero nao existe! );
75
anoentrada = n / 1000;
//obtem os 2 primeiros digitos de n, que deve ter 5 digitos
4.9. Operaes com Operadores Lgicos e Relacionais: &&, ||, !, >, >=, <, <=,
==, !=
if (n1 > 0)
printf(\n%i eh positivo. , n1);
else if (n1 < 0)
printf(\n%i eh negativo. , n1);
else
printf(\nNumero eh zero);
if (n1 % 2 == 0)
printf(\n%i eh par. , n1);
else
printf(\n%i eh impar. , n1);
if (n1 % 2)
printf(\n%i eh impar. , n1);
else
printf(\n%i eh par. , n1);
76
contpar=contimpar=0;
if ( !(n1 % 2)){
printf(\n%i eh par. , n1);
++contpar;
}
else {
printf(\n%i eh impar. , n1);
++contimpar;
}
_________________________________________________________________________
if (! aprovado)
printf(\nCandidato reprovado para o basquete.);
else
printf(\nCandidato aprovado para o basquete.);
77
Comandos/Tipos PortuC C
Funo principal principal ( ) int main()
Retorno de funo return
Atribuio = =
Formatos inteiro %i ou %d
real %f
caracter nico %c
string %s
inteiro longo %ld
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.);
}
#include <stdio.h>
#include <conio.h>
int main(){
puts (Qual eh o seu nome? );
gets(nome);
puts (\nQual eh o seu sexo? (f/m) );
sexo = getche();
if (sexo == f || sexo == F)
printf (\n%s voce eh do sexo feminino. ,nome);
else if (sexo == m || sexo == M)
printf (\n%s voce eh do sexo masculino. ,nome);
else printf (\nVoce digitou um sexo invalido );
puts(\nFim do programa.);
getch();
return 0;
}
79
principal(){
imprima (Qual eh o ano atual? );
leia(%i,&anoatual);
imprima (Qual eh o seu ano de nascimento? );
leia (%i,&anonasc);
imprima(Fim do programa.);
}
#include <stdio.h>
#include <conio.h>
main(){
printf (\nQual eh o ano atual? );
scanf(%i,&anoatual);
printf (\nQual eh o seu ano de nascimento? );
scanf (%i,&anonasc);
puts(\nFim do programa.);
getch();
return 0;
}
80
inteiro n;
principal(){
imprima (\nDigite um numero inteiro: );
leia (%i,&n);
se (n % 2 == 0)
imprima (O numero %i eh par , n);
seno
imprima (O numero %i eh impar , n);
#include <stdio.h>
#include <conio.h>
int n;
int main(){
printf (\nDigite um numero inteiro: );
scanf(%i,&n);
if (n % 2 == 0)
printf (\nO numero %i eh par , n);
else
printf (\nO numero %i eh impar , n);
puts(\nFim do programa.);
getch();
return 0;
}
81
real nota;
principal(){
imprima (Digite sua nota final: );
scanf(%f,¬a);
#include <stdio.h>
#include <conio.h>
float nota;
int main(){
printf (\nDigite sua nota final: );
scanf(%f,¬a);
}
82
4.1.2 Faa um programa em C que tem como dado de entrada o nome e o cdigo de origem
de um produto e apresente seu nome e a regio de sua procedncia, de acordo com a
tabela abaixo:
Cdigo de Origem Regio de Procedncia
1 Sul
2 Sudeste
3 Centro-Oeste
4 Norte
5 Nordeste
83
Captulo 5
Metodologia para Construo de
Algoritmos
Neste captulo, caro aluno, voc aprender uma metodologia que facilitar o
processo de desenvolvimento de solues algortmicas para os problemas que sero
propostos para voc resolver. A metodologia composta de uma sequncia de passos,
cujo principal objetivo ajud-lo a resolver problemas dividindo-os por partes, diminuindo,
assim, a sua complexidade. Como ficar bem claro logo adiante, resolvendo cada parte do
problema por vez, consegue-se chegar a solues completas e complexas a partir de
solues simples que j foram, muitas vezes, encontradas para diversos outros problemas
semelhantes.
Voc conhecer os passos da metodologia e vrios exemplos prticos sero
fornecidos de maneira a familiariz-lo com o mtodo. importante ressaltar que a
metodologia um processo dinmico. Voc pode estar em um passo mais adiante e
identificar uma varivel auxiliar e voltar aos passos anteriores e alter-los, por exemplo.
Portanto, no se detenha aos detalhes, pelo contrrio, sinta-se livre para criar suas
solues. O mtodo pretende ajud-lo e no engess-lo! Vamos em frente!
Passo 7: Escrever o cdigo para calcular cada uma das sadas do programa
Os principais problemas a serem solucionados, na maior parte das vezes, resumem-se
no clculo das sadas do programa. Portanto, neste passo, cada uma das sadas deve ser
analisada individualmente e sua soluo encontrada separadamente.
5.1.1. Escreva um algoritmo em C para calcular e imprimir a rea e o permetro de uma sala
retangular, sendo que os comprimentos das paredes (comprimento e largura) so
fornecidos pelo usurio.
5.1.2. Escreva um algoritmo em C para calcular e imprimir a rea de uma esfera. O raio da
esfera ser fornecido pelo usurio. Obs: A = 3.14*R2
5.1.3. Escreva um algoritmo em C que calcule e imprima o valor em Reais correspondente aos
dlares que um turista possui no cofre do hotel. O programa deve solicitar os seguintes
dados: quantidade de dlares guardados no cofre e cotao do dlar naquele dia.
5.1.4. Escreva um algoritmo em C que calcule a rea A de um tringulo pela frmula de
Hero, lendo os valores de entrada s, que o semipermetro e a, b e c, que so os
lados do tringulo:
igual a 2001.00, mas menor ou igual a R$5000.00, o reajuste deve ser de 10%. Caso o
salrio seja maior que R$5001.00, o reajuste deve ser de 5%.
5.1.13. Escreva um programa em C que determine quanto ser gasto para encher um cilindro
de gs, sabendo-se que o preo do gs oxignio de R$ 250.00, o preo do gs hlio
de R$ 350.00 e o preo do gs nitrognio de R$ 300.00. O usurio fornecer os
seguintes dados: Tipo de gs (as opes como tipo de gs so a letra O oxignio ou
a letra H hlio ou a letra N-nitrognio; rejeitar valores invlidos) e Capacidade do
cilindro em metros cbicos.
88
Ento, caro aluno, vamos s solues passo a passo utilizando nossa metodologia!
int main ()
{
printf (\nDigite o comprimento da sala: );
scanf(%f, &compr);
printf (\nDigite a largura da sala: );
scanf(%f, &larg);
area = compr * larg;
perimetro = (2*compr) + (2*larg);
if (area > 0 && perimetro > 0)
printf(\nA sala tem %.1f de area e %.1f de perimetro ,
area,perimetro);
else
printf(\n Nao foi possivel calcular, pois ha dados invalidos.);
printf(Fim do programa);
getch();
return 0;
}
printf(Fim do programa);
getch();
return 0;
}
Exerccio 5.1.8) Escreva um algoritmo em C para calcular o valor do desconto, sendo que
o preo do produto fornecido pelo usurio e o desconto de 5%. Apresentar o preo do
produto, o valor do desconto e o preo final com o desconto.
Exerccio 5.1.9) Escreva um programa em C que receba dois valores inteiros nas variveis
A e B. O programa deve trocar os valores entre as variveis (ou seja, ao trmino do
programa a varivel A deve ter o valor inicial de B e vice-versa). Apresentar as duas
variveis no final.
int A, B, auxA;
printf(\nFim do programa);
getch();
return 0;
}
int temp;
Exerccio 5.1.13) Escreva um algoritmo em C que determine quanto ser gasto para
encher um cilindro de gs, sabendo-se que o preo do gs oxignio de R$ 250.00, o
preo do gs hlio de R$ 350.00 e o preo do gs nitrognio de R$ 300.00. O usurio
fornecer os seguintes dados: Tipo de gs (as opes como tipo de gs so O oxignio
ou H hlio ou N-nitrognio; rejeitar valores invlidos) e capacidade do cilindro em m3.
Captulo 6
Mais sobre a Linguagem de
Programao C
Neste captulo, caro aluno, vamos avanar um pouco mais dando a voc mais
comandos e operadores teis em C!
switch (expresso){
case valor1:
<comandos_1>;
break;
case valor2:
<comandos_2>;
break;
...
case valorn:
<comandos_n>;
break;
default:
comandos_default;
}
expresso deve resultar num valor inteiro do tipo long, int ou char. Compara-se
este resultado com o valor1 at valorn.
- Se for encontrada alguma equivalncia, o programa passa a executar os comandos a partir
deste ponto, at encontrar uma instruo break.
- Se nenhuma equivalncia for encontrada os comandos relativos a default so
executados.
- Caso no haja a opo default, nenhum comando executado.
Ateno: Caso a instruo break no seja encontrada, todos os
comandos vo sendo executados at se chegar ao final do comando
switch.
101
letra = getche();
letra = toupper(letra); // toupper transforma o caracter para maisculo
switch (letra){
case A:
case E:
case I:
case O:
case U:
printf(\n Voce digitou uma vogal);
break;
default:
printf(\n Voce digitou algo diferente de uma vogal);
}
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)
<bloco de comandos>
}
i=3;
for ( ; i<=5; i++)
printf(O valor de i eh: %i\n, i);
i=3;
for (printf(\nComecou) ; i<=5 ; i++)
printf(O valor de i : %d\n, i);
i=3;
for ( ;i <= 5; ){
printf(O valor de i e: %i\n, i);
i++;
}
i=0;
for( ; (i<10 && aux!=0); i++){
printf(\n %d, aux);
--aux;
}
105
achou= i= 0;
for( ; (i<10 && achou==0); i++){
printf(\n Digite um inteiro: );
scanf(%i, &aux);
achou = (aux == -1);
}
A instruo for pode ser aninhada, ou seja, executada dentro de outra instruo for.
for( ; ; )
tendo-se ento um loop infinito, que pode, no entanto, ser interrompido dentro do corpo da
instruo for por um comando break.
i=10;
for( ; ; ){
if (i==0)
break;
--i;
}
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 vai fazer nada, pois tem um ; indevido i-- ); que faz com que o for
finalize printf ser executado uma nica vez )
strcmp (string1,string2);
compara o <string1> com o <string 2> pela ordem alfabtica (conforme tabela ASCii),
resultando em: menor que 0: <string1> menor que <string2>
igual a 0: <string1> igual a <string2>
maior que 0: <string1> maior que <string2>
strchr(string, caracter);
verifica se o <caracter> se encontra na <string> e retorna a posio da primeira ocorrncia
do <caracter> no <string>; se o <caracter> no for encontrado, retorna NULL
tamanho = strlen(string);
retorna o <tamanho> de uma <string> em nmero de caracteres.
strrev(string);
retorna a <string> invertida, ou seja, os caracteres em ordem contrria.
strupr(string);
retorna a <string> convertida para letras maisculas.
strlwr(string);
retorna a <string> convertida para letras minsculas.
letra=tolower(letra);
converte uma <letra> para minsculo.
108
textbackground(cor);
muda a cor do fundo
gotoxy(coluna, linha);
posiciona o cursor nas coordenadas especificadas
Trigonomtricas
sin()
Retorna o valor do seno. Recebe como argumento o valor dos graus em double.
cos()
Retorna o valor do cosseno. Recebe como argumento o valor dos graus em double.
tan()
Retorna o valor da tangente. Recebe como argumento o valor dos graus em double.
Logartmicas
log()
Retorna o valor do logaritmo na base 2. Exige um argumento do tipo double.
log10()
Retorna o valor do logaritmo na base 10. Exige um argumento do tipo double.
Potenciao
pow()
Retorna o valor da base elevada ao expoente. Recebe dois argumentos do tipo double,
o primeiro a base e o segundo o expoente. Por exemplo: se quisermos saber o resultado da
operao 210, faramos resultado = pow (2, 10);
sqrt()
Retorna o valor da raiz quadrada. Recebe como argumento um valor do tipo double
do qual ele deve extrair a raiz. O resultado do tipo double tambm.
Exemplo: raiz = sqrt (25);
109
Arredondamento
ceil()
Retorna o primeiro float acima sem casas decimais. Recebe um float como
argumento. Exemplo: resultado = ceil (45.98561); // resultaria em 46.
floor()
Retorna o primeiro float sem casas decimais abaixo. Recebe um float como
argumento. Exemplo: resultado = floor (45.98561); // resultaria em 45.
x= atoi(str); recebe o string str e retorna um inteiro em x, caso o string seja um nmero
system(cls);
Limpa a tela
system(pause);
Faz uma pausa ou para a tela
system("color 0B");
Cor de fundo preta e letras azuis brilhantes
system("calc");
Chama a calculadora
system("notepad");
Chama o bloco de notas
system("dir");
Mostra os arquivos do diretrio corrente
system ("ipconfig");
Mostra a configurao do ip
110
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main() {
system ("cls"); // limpa a tela
system ("color 0B"); // cor de fundo preta e letras azuis brilhantes
printf ("\n\n\t\t\tTESTE: AZUL");
getch();
#include <stdio.h>
#include <conio.h>
#define MAXINT 100
#define MAXLONG 1000000
#define limpatela; system("cls");
int main() {
limpatela;
printf("\n Sequencia de numeros impares menores que %i", MAXINT);
printf("\n =============================================\n\n");
getch();
limpatela;
printf("\n Sequencia de numeros pares menores que %i",MAXINT);
printf("\n ===========================================\n\n");
contnum=1;
num=0;
for (; num<=MAXINT; num+=2) {
printf("%i\t",num);
if (contnum==20) {
getch();
contnum=0;
}
++contnum;
}
112
limpatela;
printf("\n Sequencia de numeros multiplos de 3 menores que %i",MAXINT);
printf("\n ====================================================\n\n");
contnum=1;
num=3;
for ( ; ; ) {
printf("%i\t",num);
num=num+3;
if (num > MAXINT)
break;
}
getch();
limpatela;
printf("\n Sequencia de numeros potencia de 2 menores que %ld",MAXLONG);
printf("\n ======================================================\n\n");
getch();
limpatela;
printf("\n Sequencia de quadrados perfeitos menores que %ld",MAXLONG);
printf("\n ====================================================\n\n");
quadrado=1;
for (numlong=1; quadrado<=MAXLONG; numlong++) {
quadrado=numlong*numlong;
printf("%ld\t",quadrado);
}
getch();
#include <stdio.h>
#include <conio.h>
int num, contnum;
int main() {
int main() {
for ( ; ; ) {
printf("\n 1- Compara strings ");
printf("\n 2- Compara numeros ");
printf("\n 0- Finaliza ");
printf("\n\n Escolha sua opcao: ");
scanf ("%i", &opcao);
if (opcao == 0) {
printf ("\n Bye, bye! Pressione ENTER...");
getch();
break;
}
switch (opcao) {
case 1:
printf ("\n Forneca o primeiro nome: ");
gets(str1);
printf ("\n Forneca o segundo nome: ");
gets(str2);
if (strcmp(str1,str2) > 0)
printf ("\n %s vem depois de %s ", str1, str2);
else if (strcmp(str1,str2) < 0)
printf ("\n %s vem antes de %s ", str1, str2);
else printf ("\n Os nomes so iguais.");
getch();
break;
case 2:
printf ("\n Forneca um numero inteiro: ");
scanf("%d", &num1);
printf ("\n Forneca outro numero inteiro: ");
scanf("%d", &num2);
115
if (num1>num2)
printf ("\n %d eh maior que %d ", num1, num2);
else if (num2>num1)
printf ("\n %d eh maior que %d ", num2, num1);
else
printf ("\n Os numeros sao iguais! ");
getch();
break;
default:
printf ("\n Opao de menu invalida. ");
getch();
} // fim switch
} // fim for ( ; ; )
return 0;
} // fim do main()
116
/*..........................................
menu.c - Avalia o conhecimento do usurio. Ilustra o uso do comando "switch" e operacionaliza
um menu simples
............................................*/
#include <stdio.h>
#include <conio.h>
int opcao;
int main( ) {
for( ; ; ) {
system (cls); // limpa a tela
printf("\nTeste de avaliacao de conhecimento: \n");
printf("\nPergunta: Em que ano o Brasil foi descoberto?");
printf("\n1- Em 100 AC por Pitagoras");
printf("\n2- Em 1492 por um espanhol chamado Cristovao Colombo");
printf("\n3- Em 1500 por Pero Vaz de Caminha");
printf("\n4- Em 1500 por Pedro Alvares Cabral");
printf("\n0- Finalizar");
if (opcao == 0)
break; // sai do for forever
switch(opcao) {
case 1: printf("\n Voce precisa ler mais sobre a historia grega!");
break;
#include <stdio.h>
#include <conio.h>
brancos=nulos=eleitores=cont1=cont2=cont3= 0;
while (1)
{ printf (\nDigite o seu voto (1,2,3 ou 0(branco) -1 finaliza): );
scanf (%d,&voto);
if (voto==-1)
break;
++eleitores;
switch (voto)
{ case 0: ++brancos;
break;
case 1: ++cont1;
break;
case 2: ++cont2;
break;
case 3: ++cont3;
break;
default: ++nulos;
}
}
puts(\nFim do programa);
getch();
return 0;
}
118
#include <stdio.h>
#include <conio.h>
float preco;
int codigo;
int main(){
switch (codigo)
{ case 1: printf("\nPreco do produto = R$ %.2f - Regiao de origem = SUL",
preco);
break;
printf("\n\nFim do programa");
getch();
return 0;
}
119
Captulo 7
Usando Comandos de Repetio em C
7.1. Comando de repetio entrada indeterminada de dados (uso de
flags)
Aqui voc vai aprender a usar um comando repetitivo e a resolver problemas que
envolvam flags. Flag vem do ingls e significa sinal ou bandeira. Um flag em programao
representa um valor que usado para indicar o final da entrada de dados. Como j foi dito
antes, um algoritmo usado para resolver problemas finitos. Se algum pede que faamos
um programa para ler uma quantidade indeterminada de nmeros... aparentemente no
poderamos escrever um algoritmo para resolv-lo. Mas se um flag informado, a soluo
se torna possvel: faa um programa para ler uma quantidade indeterminada de dados,
sabendo-se que o ltimo valor ser 1.... Veja bem: a quantidade de nmeros continua
indeterminada, isso , no sabemos se sero 5, 20, 2 ou 2000 nmeros, mas sabemos que
o ltimo 1! Assim, -1 o flag e os nmeros sero lidos at que seja fornecido o 1,
quando o programa ir parar de ler os nmeros... Vamos ver isso na prtica!
1) Escreva comandos para ler e imprimir vrios nmeros inteiros. O ltimo nmero
0 (flag=0).
importante que voc observe a lgica de um trecho de algoritmo que trabalha com
flag. Antes de o nmero n ser processado, necessrio verificar se ele o flag ou
no. Por isso feita uma leitura ANTES do incio do comando de repetio while. No
entanto, necessrio que o nmero n seja lido novamente dentro do comando while
para que a condio que determina a finalizao do comando seja modificada (seno o
comando while nunca para) e tambm para que a leitura indeterminada de dados
prossiga; essa nova leitura feita no FINAL do comando while!
120
No pretendo aqui dar uma receita de bolo para voc seguir, mas apenas chamar
a sua ateno para a lgica deste tipo de problema que poder ser utilizada, com
certeza, em muitos outros problemas que envolvam o uso de flags...
3) Escreva comandos para ler e somar vrios nmeros inteiros. O ltimo nmero
-1 (flag= -1).
soma = 0;
while (1){
printf(\nTecle um numero inteiro (-1 finaliza): );
scanf(%i,&n);
if (n == -1)
break;
soma = soma + n;
}
printf(\nA soma dos numeros= %i , soma);
121
4) Escreva comandos para ler e imprimir a idade e o nome de vrias pessoas (ltima
idade=0).
Temos, neste exemplo, um caso em que h mais de uma varivel a ser lida e
apenas uma dessas variveis vai funcionar como flag. Neste caso, a lgica tem que ser um
pouco alterada: a varivel que ser utilizada como flag deve ser lida ANTES do comeo do
comando while e sua leitura deve ser repetida DENTRO do comando imediatamente
ANTES DO FINAL do comando while (observe os comandos em destaque); todas as
outras variveis devem ser lidas apenas uma vez, DENTRO do comando while, bem no
seu incio!
Caro aluno, a linguagem C apresenta um problema quando usamos o comando
gets() dentro de um comando de repetio: necessrio limpar o teclado para dar certo!
Isso feito atravs do comando fflush (stdin);
5) Escreva comandos para ler e imprimir a idade, o nome e a altura vrias pessoas
(ltima idade=0). Crie uma forma alternativa.
for (; ; ){
printf(\nQual eh sua idade? (0 para terminar): );
scanf(%i,&idade);
if (idade==0)
break;
fflush (stdin);
printf(\nQual eh seu nome? );
gets(nome);
printf(\nQual eh sua altura? );
scanf(%f,&altura);
printf(\n%s sua idade=%i anos e sua altura=%.2f m,
nome,idade, altura);
}
122
Observe que, neste exemplo, o comando for no para nunca. Para finalizar o
comando for, foi utilizado o comando break. Ou seja, quando o usurio digitar 0 para a
idade, o comando for finalizado pelo break. Isso pode ser feito, sim, sem problemas!
Voc vai continuar usando um comando repetitivo, mas para resolver problemas que
envolvam contadores. Ao contrrio do que vimos na seo 7.1, em que entradas
indeterminadas de dados foram tratadas, aqui estudaremos os problemas cuja entrada de
dados DETERMINADA. Se algum pede que faamos um programa para ler um
conjunto de 10 nmeros... seria necessrio que contssemos de 1 at 10 e, a cada
contagem, lssemos um dos nmeros do conjunto para que, no final, todos os 10 valores
tivessem sido lidos. Este tipo de problema requer o uso de contadores para facilitar a
contagem dos dados de entrada. Existe um comando especfico para fazer esta contagem,
que o comando for, embora tambm possamos usar o comando while. Vamos ver isso
na prtica!
cont = 0;
while (cont < 5){
fflush (stdin);
printf(\nQual eh seu nome? );
gets(nome);
printf(\nSeu nome : %s ,nome);
++cont;
}
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.
Observe que quando h mais de uma varivel a ser lida, todas elas devem ser lidas
apenas uma vez DENTRO do comando for. A contagem fica como antes... Fcil, no ?
8) Escreva comandos para pedir ao usurio o nmero de dados que ele deseja
fornecer (N) e leia e imprima o nome e a quantidade que ele forneceu.
cont = 0;
printf(\nQuantos dados voc deseja fornecer? );
scanf(%i,&n);
while (1) {
fflush (stdin);
printf(\nQual eh seu nome? );
gets(nome);
printf(\nSeu nome eh: %s ,nome);
++cont;
if (cont==n)
break;
}
printf(\nForam fornecidos %i dados,n);
10) Escreva comandos para ler e imprimir o nome de vrias pessoas e perguntar ao
usurio se ele deseja continur ou finalizar.
while (1) {
fflush (stdin);
printf(\nDigite um nome: );
gets(nome);
printf(\nO nome eh: %s ,nome);
++cont;
printf(\nDeseja continuar? (s/n): );
resp=getche();
if (resp==n || resp ==N)
break;
}
printf(\nForam fornecidos %i dados,cont);
125
Vamos praticar um pouco mais, agora. A minha forte recomendao, novamente, que
voc faa os exerccios sozinho, consultando os exemplos dados para ajud-lo... Somente
depois da sua tentativa que voc deve conferir as respostas... Boa sorte!
7.1.1. Escreva um programa em C que leia e imprima o nome e as duas notas de vrios
alunos. O ltimo aluno ter o nome=FIM.
7.1.2. Escreva um programa em C que leia 10 nmeros e calcule e imprima a sua soma.
#include <stdio.h>
int X, Y;
int main()
{ Y = 0;
X = -1;
while (Y != 4)
{ X = X * -1;
++Y;
if (X > 0) /* X positivo? */
printf(\n%i,Y);
else
printf(\n%i,-Y);
}
return 0;
}
Para que seja possvel voc acompanhar a execuo do programa em C, vamos criar
uma tabela para fazermos o chamado teste de mesa de um programa em C. A
tabela deve ter uma coluna para cada varivel e uma coluna especial para a
impresso dos resultados. O programa em C deve ser seguido comando a comando
e os valores das variveis devem ir sendo alterados de acordo com as instrues.
X Y Resultados
126
7.1.5. Faa o teste de mesa do programa abaixo e construa a tabela com os valores das
variveis e os resultados do programa.
#include <stdio.h>
int numero, cont;
main()
{ numero = 2;
for (cont=0; cont < 5; cont++)
{ printf(%i,numero);
printf(%i\n,-numero);
numero = numero + 2;
}
return 0;
}
(Uma varivel para cada entrada, sada e cada auxiliar: total de 3 variveis. Todas do tipo
int.)
maiorminutos = 0;
quantos = 0;
No caso dessa comparao ser verdadeira, o maior valor dos minutos deve ser
mudado: maiorminutos = minutos. Mas, ao se alterar o valor do maiorminutos, o contador
de assinantes que o atingiram deve ser retornado para 1, pois este seria o primeiro
assinante que o utilizou: quantos = 1.
if (minutos == maiorminutos)
++quantos;
No entanto, estes 2 trechos devem ser unidos num nico comando if, pois no se
deve somar +1 ao contador quantos quando ocorre a troca do valor de maiorminutos,
seno o contador ficaria sempre com um 1 a mais. Para manter os dois trechos separados,
o contador quantos teria que ser inicializado com zero. Faa alguns testes voc mesmo
para entender melhor esta explicao.
if (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);
int main(){
printf(\nTelefun: quem fala mais ao telefone???\n);
while (1) {
printf(\nDigite o numero de minutos (-1 ou invalido finaliza): );
scanf(%i,&minutos);
if (minutos == -1 || minutos <=0)
break;
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)
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
char nome[20];
float prFabrica, IPI, prIPI, prFinal;
int main(){
printf(\nOlha o tanto de imposto que pagamos nos carros!!!);
while (1) {
printf(\nForneca o nome do modelo do automvel (FIM para terminar): );
gets (nome);
if (strcmp(nome,FIM)==0)
break;
Existe uma outra maneira muito mais prtica de se realizar esta comparao. Basta
usar o comando de seleo mltipla switch. Veja como fica a soluo.
++eleitores;
switch (voto)
{ case 0: ++brancos;
break;
case 1: ++cont1;
break;
case 2: ++cont2;
break;
case 3: ++cont3;
break;
default: ++nulos;
}
Note que os dois trechos de cdigo fazem exatamente a mesma coisa, mas de
formas diferentes. Escolha a que achar mais fcil.
#include <stdio.h>
#include <conio.h>
++eleitores;
switch (voto){
case 0: ++brancos;
break;
case 1: ++cont1;
break;
case 2: ++cont2;
break;
case 3: ++cont3;
break;
default: ++nulos;
}
}
puts(\nFim do programa);
getch();
return 0;
}
137
num = 1;
den = N;
int main( ){
printf("Gera a serie S \n");
printf("\nForneca o numero de termos da serie: ");
scanf("%i",&N);
7.2.1. Fazer um programa que leia vrios valores de ngulos (flag=-1) e verifique a qual
quadrante pertence este ngulo. 900
20 10 00
1800
30 40 3600
2700
7.2.3. Fazer um programa para realizar uma pesquisa de opinio sobre um tema de sua
escolha. Devem ser lidas a resposta 1-A favor 2- Contra ou 0-Finaliza e o sexo
(1=feminino, 2=masculino) dos participantes e calcular e imprimir:
a) o nmero de mulheres e o percentual
b) o nmero de homens e o percentual
c) nmero de votos a favor e percentual
d) nmero de votos contra e percentual
7.2.4. Fazer um programa para ler vrios pares de nmeros inteiros e calcular sua soma,
subtrao, multiplicao e diviso. Usar n1=0 como flag.
7.2.5. Fazer um programa que leia o NOME, a ALTURA, o PESO e a IDADE de vrios
candidatas a modelo (flag=NOME=fim) e verifique se elas podem ser aprovadas ou no
para serem modelos: 1.70 <= ALTURA <= 1.85
50 <= PESO <= 60
18 <= IDADE <= 21
7.2.6. Fazer um programa que leia o nmero de termos desejados e gere as sequncias
numricas (uma de cada vez, mas ambas no mesmo programa):
2, 4, 8, 16, 32, 64 ....
1, -1, 2, -2, 3, -3, 4, -4....
141
7.2.7. O preo final de um automvel calculado pelo preo de fbrica mais o valor do IPI
= 40% sobre o preo de fbrica, mais a porcentagem da concessionria= 10% sobre o
preo j com o IPI. Faa um programa que leia o NOME de vrios modelos de automveis
(flag=NOME=jegue) e o preo de fbrica e calcule e imprima o seu preo final.
7.2.8. Faa um programa em C para calcular o valor a ser pago pelo perodo de
estacionamento de vrios automveis. O usurio entra com os seguintes dados: hora e
minuto de entrada, hora e minuto de sada. Sabe-se que este estacionamento cobra hora
cheia, ou seja, se passar um minuto ele cobra a hora inteira. Utilize um flag para finalizar a
entrada de dados. O valor cobrado pelo estacionamento :
o R$ 4,00 para 1 hora de estacionamento
o R$ 6,00 para 2 horas de estacionamento
o R$ 1,00 por hora adicional (acima de 2 horas)
7.2.9. Faa um programa que leia o cdigo de um livro (* finaliza) e apresente a categoria
do livro, conforme a tabela abaixo:
Cdigo do Livro Categoria
A Fico
B Romance
C Documentrio
D Audiolivro
E Tcnico
20 10
X
0 0
3 4
7.2.11. Fazer um programa para calcular e imprimir o valor de H, dado pela seguinte srie:
H= 1 - 2 + 4 - 8 + 16 - .... + 16.384
225 196 169 144 121 1
7.2.14. Fazer um programa para gerar todos os nmeros potncia de 2 menores que
1000000 e todos os nmeros mpares menores que 100. Dica: utilize o tipo bsico long int.
Exemplo:
Nmero lido: 12819
DV = 1 + 2 + 8 + 1 + 9 = 21 11
-11 1
10
c) Dever ser impressa uma frase com o CPF do contribuinte, sua renda anual e o
valor do IR.
143
7.2.19. Fazer um programa que leia vrios conjuntos de dados com: o NOME de um
produto, seu preo de CUSTO, seu preo de VENDA e a QUANTIDADE vendida do
produto (ltimo conjunto lido tem NOME do produto=fim) e calcule o lucro obtido com o
produto. No final o programa deve imprimir o NOME do produto que deu mais lucro.
7.2.20. Fazer um programa que leia vrios nmeros que representam um determinado
nmero de ms do ano (flag=-1), escreva o nome do ms por extenso e o nmero de dias.
Se o ms no existir, imprimir uma frase de erro.
7.2.22. Faa um programa que leia a distncia em quilmetros percorrida por vrios carros
(flag=0), a quantidade de combustvel consumida e calcule e imprima o consumo mdio de
combustvel. (Consumo= distncia/combustvel)
7.2.23. Faa um programa que leia vrias temperaturas em graus Fahreinheit (flag=1000) e
calcule e imprima a temperatura em graus Celsius. (Celsius = (Fahreinheit-32) * (5/9))
7.2.24. Faa um programa que leia vrios pares de valores N1 e N2 (flag=N1=0), imprima
uma frase dizendo se eles so iguais, qual o maior e qual o menor e aps terminar a
leitura de todos os nmeros, selecione e imprima o maior e o menor de todos.
7.2.25. Fazer um programa que leia vrios nmeros inteiros (flag=0) e verifique se o
nmero primo ou no. Um nmero primo s divisvel por 1 e por ele mesmo. (Sugesto:
tente dividir o nmero por 2, 3, 4, 5...at o valor do nmero; se alguma diviso resultar em
zero, ele no primo...).
7.2.27. Faa um programa que apresente o menu de livros venda numa livraria:
Para cada opo vlida de livro (rejeitar escolhas invlidas), oferecer as formas de
pagamento.
2) Em sua casa, faa o download gratuito do compilador Dev-C++ para que voc possa
comear a escrever seus programas.
float nota;
char nome[20];
int main(){
printf (\nQual eh seu nome completo? );
gets(nome);
printf (\nDigite sua nota final: );
scanf(%f,¬a);
if (nota >= 6.0 && nota <= 10)
printf (\n%s, voce foi aprovado! ,nome);
else if (nota >= 0 && nota < 5.9)
printf (\n%s, voce foi reprovado... ,nome);
else
printf(\n %s, vc no digitou uma nota valida...);
printf(\n\nFim do programa.);
getch();
return 0;
}
146
6) A qualquer momento que desejar, salve o seu arquivo. Clique em <Arquivo> <Salvar
Como> ou <File> <Save As> . V para o diretrio E:\EXECUTAVEIS LIBERADOS e
salve seu arquivo como nota.c e v salvando seu programa enquanto edita.
7) Compile e execute seu programa. Conserte os erros que o compilador apontar antes de
executar.
Clique em <Executar> <Compilar&Executar> ou <Run> <Compile&Run>
Execute o programa vrias vezes para diferentes valores.
int main(){
printf (\nQual eh o seu nome? );
gets(nome);
puts(\nFim do programa.);
getch();
return 0;
}
147
int main(){
printf (\nDigite um numero inteiro: );
scanf(%i,&n);
if (n % 2 == 0)
printf (\nO numero %i eh par , n);
else
printf (\nO numero %i eh impar , n);
puts(\nFim do programa.);
getch();
return 0;
}
10) Feche o programa anterior, edite o programa C abaixo, salve-o, compile-o e execute-o
seguindo os passos ensinados no programa anterior. Para abrir um arquivo novo:
<Arquivo> <Novo><Arquivo Fonte>. Salve seu arquivo como menor.c.
11) Feche o programa anterior, edite o programa C abaixo, salve-o, compile-o e execute-o
seguindo os passos ensinados no programa anterior. Para abrir um arquivo novo:
<Arquivo> <Novo><Arquivo Fonte>. Salve seu arquivo como adivinha.c.
while (1){
printf ("\nDigite um numero inteiro: ");
scanf ("%i", &valor);
++vezes;
printf("\n\nFim do programa");
getch();
return 0;
}
149
1.1.1)
Pergunta 1:
Est participando de uma corrida. Ultrapassa o segundo. Em que posio termina?
Resposta1:
Se vc respondeu que chega em primeiro, est absolutamente enganado.
Se vc ultrapassou o segundo e tomou o seu lugar, portanto chega na segunda
posio. Por favor, na segunda pergunta, nao demore tanto para responder....
Pergunta 2:
Se ultrapassa o ltimo, em que posio chega...?
Resposta 2:
Se vc respondeu que chega em penltimo, no tem mais uma vez razo.
Pensa um pouco... como pode ultrapassar o ltimo?
Se vc est atrs dele, ele no o ltimo. A pergunta impossvel.
Pergunta 3:
Pensa no nmero 1000. Soma-lhe 40.
Acrescenta outros 1000.
Soma 30.
Mais 1000.
Agora 20.
Agora soma outros 1000.
Agora 10.
Qual o total?
Resposta 3
Deu 5000? A resposta correta 4100.
1.1.2)
1. Tambm houve 21 de Abril de 1984 no Brasil??
Sim, claro veio depois do dia 20 !!
8. Um mdico receita trs comprimidos e diz para tomar um a cada meia hora, quantos minutos
duram os comprimidos?
60 - Inicia quando toma o primeiro, 30 minutos depois toma o segundo, logo, 30 minutos mais tarde toma o
terceiro...
1.1.3)
01. Meu pai tem 42 anos de idade. Meu cachorro tem 8. Se fosse um ser humano, a idade de meu cachorro
seria 56 anos. Quantos anos teria meu pai se ele fosse um cachorro?
a. 5
b. 6
c. 7
d. 8
e. 9
02. Um senhor, olhando para um retrato, diz: O pai deste homem o pai de meu filho.
Ele est olhando para:
a. seu prprio retrato
b. retrato de seu pai
c. retrato de seu filho
d. retrato de seu av
e. retrato de seu neto
03. No segundo domingo do ms de maio, comemora-se o dia das mes. Este dia, poder cair:
a. de 7 a 14 de maio
b. de 8 a 15 de maio
c. de 8 a 14 de maio
d. de 6 a 15 de maio
e. de 7 a 13 de maio
151
04. Certa bactria se multiplica to rapidamente que seu nmero dobra a cada minuto. Num caco de vidro ela
se multiplica de tal maneira que, em 60 minutos enche a metade do mesmo. Em quanto tempo estar cheio
totalmente?
a. 61 min
b. 90min
c. 120min
d. 180 min
e. 240 min
05. Em uma jarra cabem um litro mais meia jarra. A capacidade da jarra :
a. 1 litro
b. 1,5 litros
c. 2 litros
d. 2,5 litros
e. 3 litros
06. Numa rvore pousam pssaros. Se pousarem 2 pssaros em cada galho, fica um galho sem pssaros.
Se pousar um pssaro em cada galho, fica um pssaro sem galho. O nmero de pssaros :
a. 2
b. 3
c. 4
d. 5
e. 6
07. Sabendo-se que seis raposas, em seis minutos, pegam seis galinhas, pergunta-se: quantas raposas em
cem minutos pegaro cem galinhas ?
a. 100
b. 36
c. 18
d. 6
e. 1
08. Uma pessoa que gosta somente das pessoas que no gostam de si mesmas:
a. gosta de si mesma
b. no gosta de si mesma
c. gosta de algum
d. no gosta de ningum
e. no existe
9. Em uma urna existem 38 bolas que se diferenciam apenas pela cor: 15 vermelhas, 15 amarelas e 8 azuis.
Uma pessoa com os olhos vendados retira uma bola de cada vez da caixa. Qual o nmero mnimo de bolas
que deve ser retirado para que ela tenha certeza que saram duas bolas da mesma cor?
a. 16
b. 9
c. 8
d. 4
e. 3
152
10. Dispem-se de alguns livros de Fsica do autor A, outros do autor B e outros do autor C. Da mesma
forma, temos alguns livros de Qumica do mesmo autor A, outros de B e outros de C. Todos os livros devem
ser colocados em duas caixas com o seguinte critrio: na primeira caixa deve-se colocar todos os livros que
satisfaam a seguinte condio: "se for do autor A, ento no pode ser de Fsica". Na segunda caixa, os
livros que no satisfaam a essa proposio. A primeira caixa deve conter exatamente:
a. todos os livros de Fsica ou de Qumica dos autores B e C mais todos os livros de Qumica do autor
A.
b. todos os livros de Qumica do autor A mais todos os livros de Fsica dos autores B e C.
c. todos os livros de Fsica dos autores B e C.
d. todos os livros de Fsica do autor A.
e. todos os livros de Qumica dos autores A, B e C.
12. Guilherme, lvaro e Man acabaram de terminar um lanche. Um dos trs rapazes comeu um lanche de
presunto, outro um lanche de peru, e o terceiro, um lanche de frango. Apenas uma das afirmaes abaixo
verdadeira:
Guilherme comeu o lanche de peru
Guilherme no comeu o lanche de frango
lvaro no comeu o lanche de frango
lvaro no comeu o lanche de presunto
Ento, Guilherme, lvaro e Man comeram respectivamente, os lanches de:
a. presunto, frango, peru
b. presunto, peru, frango
c. peru, frango, presunto
d. peru, presunto, frango
e. frango, presunto, peru
14. Um missionrio foi capturado por canibais em uma floresta. Os canibais ento fizeram-lhe a seguinte
proposta:
- Se fizer uma declarao verdadeira, ser cozido com batatas.
- Se fizer uma declarao falsa, ser assado na churrasqueira.
Como o missionrio usar a lgica, podemos concluir que:
a. ser cozido
b. ser assado
c. no poder ser cozido nem assado basta dizer Serei assado na churrasqueira
d. ser cozido e assado ao mesmo tempo
e. Dir: " ruim, hein?"
153
18. Em uma avenida reta, a padaria fica entre o posto de gasolina e a banca de jornal, e o posto de
gasolina fica entre a banca de jornal e a sapataria. Logo:
a. a sapataria fica entre a banca de jornal e a padaria.
b. a banca de jornal fica entre o posto de gasolina e a padaria.
c. o posto de gasolina fica entre a padaria e a banca de jornal.
d. a padaria fica entre a sapataria e o posto de gasolina.
e. o posto de gasolina fica entre a sapataria e a padaria.
19. Um tcnico de futebol, animado com as vitrias obtidas pela sua equipe nos ltimos quatro jogos, decide
apostar que essa equipe tambm vencer o prximo jogo. Indique a Informao adicional que tornaria menos
provvel a vitria esperada.
a. Sua equipe venceu os ltimos seis jogos, em vez de apenas quatro.
b. Choveu nos ltimos quatro jogos e h previso de que no chover no prximo jogo.
c. Cada um dos ltimos quatro jogos foi ganho por uma diferena de mais de um gol.
d. O artilheiro de sua equipe recuperou-se do estiramento muscular.
e. Dois dos ltimos quatro jogos foram realizados em seu campo e os outros dois, em campo adversrio.
20. Todos os que conhecem Joo e Maria admiram Maria. Alguns que conhecem Maria no a
admiram.
Logo:
a. todos os que conhecem Maria a admiram.
b. ningum admira Maria.
c. alguns que conhecem Maria no conhecem Joo.
d. quem conhece Joo admira Maria.
e. s quem conhece Joo e Maria conhece Maria.
154
3.1.1) O exerccio pede que voc escreva um algoritmo que leia e imprima o nome e as
duas notas de um aluno. Para a soluo deste problema, so necessrias apenas 3
variveis: uma para o nome do aluno, uma para a nota da prova 1 e outra para a nota da
prova 2. O nome uma cadeia de caracteres e as notas so do tipo real, pois o aluno pode
tirar uma nota 7.5, por exemplo. Veja a soluo completa, analise e reflita.
caracter nome[20];
real nota1, nota2;
principal(){
imprima (%s, sua 1a nota foi: %1.2f e a sua 2a nota foi: %1.2f ,
nome,nota1,nota2);
3.1.2) Voc deve escrever apenas o comando que calcule a mdia das duas notas lidas no
exerccio anterior. Isso simples: basta somar as duas notas e dividir a soma por 2.
Observe os parnteses envolvendo a soma das duas notas!
3.1.3) Voc deve escrever um comando que verifique se a mdia calculada no exerccio
anterior maior ou igual a 7. Para isto, voc deve usar o comando condicional se. Caso a
media seja superior ou igual a 7, vamos imprimir uma frase dizendo que o aluno foi
aprovado, caso contrrio, imprimimos uma frase dizendo que foi reprovado. Veja a
soluo:
3.1.4) Aqui voc deve acrescentar ao algoritmo inicial os comandos para clculo da mdia
e critrios de aprovao! Desta maneira a soluo fica completa. Voc ter escrito um
algoritmo que l o nome e as duas notas de um aluno, calcula a mdia das notas e
imprime uma frase dizendo se ele foi aprovado (mdia maior ou igual a 7.0) ou reprovado.
caracter nome[20];
real nota1, nota2, media;
principal(){
imprima (Qual eh o seu nome? );
leia (%s,nome);
imprima(Fim do programa );
}
156
3.2.1) Vamos repetir o trecho de comandos se aninhados e depois resolver cada uma das
situaes propostas. Observe neste trecho que temos apenas 2 comandos: um comando
se que possui outros comandos se dentro dele e o comando C5. Ou seja, o comando
C5 est fora do ninho de comandos se, por isso, ser sempre executado,
independentemente dos valores de B1, B2 e B3!
se (B1)
C1;
seno se (B2)
se (B3) comando se
C2;
seno
{ C3;
C4;
}
C5; comando C5
Resposta: C2 e C5
157
b) homem e respondeu NO
se ((sexo==F ou sexo==f) e resposta == nao)
imprima (Voce eh homem e respondeu nao);
principal()
{ A = 0; /* falso */
B = 1; /* verdadeiro */
C = 0; /* falso */
X = 1.5;
Y = 3.2;
se (C ou (X+Y>5) ou no(A e B))
L = 0;
seno
L = 1;
}
158
Aps a inicializao das variveis, a condio do comando se deve ser avaliada. Como
esta no uma condio simples, vamos analis-la por partes, lembrando que 0 avaliado
como Falso e qualquer outro valor avaliado como Verdadeiro.
C Falso
(X+Y > 5) (1.5 + 3.2 = 4.7 ... 4.7 > 5 ?) como 4.7 no maior que 5, o
resultado Falso
no (A e B) (no (Falso e Verdadeiro) que no(Falso)) que
Verdadeiro
O resultado da expresso fica assim:
Falso ou Falso ou Verdadeiro que Verdadeiro!
Como a condio do comando se foi avaliada como verdadeira, o comando L=0 ser
executado e o algoritmo ser finalizado!
Resposta: L=0
3.2.4) Voc deve escrever os trechos de algoritmo em C que ajudem o IBGE a fazer o
senso populacional de uma certa cidade, sabendo-se que os seguintes dados foram
pedidos aos cidados: SEXO (H= homem, M= mulher) e RENDA (nmero de salrios
mnimos - s.m.). Vamos soluo dos trechos de algoritmo:
a) o total de homens
se (sexo == H ou sexo == h)
++contHomens;
b) o total de mulheres
se (sexo == M ou sexo == m)
++contMulheres;
se (renda <= 4)
++contClasseC;
seno se (renda <= 20)
++contClasseB;
seno ++contClasseA;
O trecho da letra c) pode ser escrito em 3 comandos se separados. Voc deve escolher aquele que
voc considera mais fcil de entender para usar, ok? Ficaria assim:
se (renda<= 4)
++contClasseC;
se (renda > 4 e renda <= 20)
++contClasseB;
se (Renda > 20)
++contClasseA;
159
3.2.5) Fornecidos os dados das candidatas a modelo, voc deve escrever um trecho de
algoritmo para verificar se os dados se enquadram nos seguintes limites: ALTURA: de 1.70
a 1.85 m, PESO: de 48.0 a 60.0 Kg e IDADE: de 17 a 21 anos. Se os dados da candidata
corresponderem aos limites acima, deve ser impressa uma frase dizendo que ela foi
aprovada, caso contrrio, que no foi aprovada. muito simples, basta checar cada um
dos quesitos num nico comando se, unindo-os pelo operador lgico e. O uso do e
indica que, somente se todos os quesitos forem verdadeiros, a candidata ser aprovada.
3.2.6) Voc deve modificar o exerccio anterior para que uma frase seja impressa aps a
verificao de cada quesito dizendo se a candidata foi aprovada ou no em cada um deles e uma
frase final dizendo se foi aprovada ou no como modelo. Observe a estratgia que eu utilizei para
saber se a candidata foi reprovada em algum quesito: eu usei uma varivel inteira que funciona
como uma varivel lgica aprovada. Essa varivel foi inicializada com verdadeiro (1) e somente
no caso de algum quesito ser reprovado, ou seja, no caso de algum seno ser executado, essa
varivel passaria a ter o valor falso (0), indicando a reprovao da candidata. Mas existem outras
solues, claro. Uma delas foi criada por um aluno que usou um contador: cada vez que um
quesito era aprovado, ele somava 1 ao contador; no final se o contador fosse igual a 3 a candidata
estaria aprovada, caso contrrio, teria sido reprovada.
aprovada = 1;
se (altura >= 1.70 e altura <= 1.85)
imprima (quesito altura aprovado!);
seno{
imprima (reprovada no quesito altura);
aprovada = 0;
}
se (peso >=48 e peso <=60)
imprima(quesito peso aprovado!)
seno {
imprima(reprovada no quesito peso.);
aprovada = 0;
}
se (idade >=17 e idade <= 21)
imprima(quesito idade aprovado!)
seno {
imprima(reprovada no quesito idade);
aprovada = 0;
}
se (aprovada)
imprima(Candidata aprovada);
seno
imprima(Candidata reprovada);
160
4.1.2. Faa um programa em C que tem como dado de entrada o nome e o cdigo de origem
de um produto e apresente seu nome e a regio de sua procedncia, de acordo com a
tabela abaixo:
Cdigo de Origem Regio de Procedncia
1 Sul
2 Sudeste
3 Centro-Oeste
4 Norte
5 Nordeste
char nome[20];
int codigo;
int main(){
printf("\n\nFim do programa");
getch();
return 0;
}
162
#include <stdio.h>
#include <conio.h>
int main(){
}
else printf("\nErro nos valores de hora de entrada e saida.");
printf("\n\nFim do programa");
getch();
return 0;
}
163
5.1.12. Escreva um programa em C que leia o valor do salrio atual e calcule e imprima o valor
do novo salrio de um funcionrio. Considere que o funcionrio dever receber um reajuste de
15% caso seu salrio seja menor que R$2000.00. Se o salrio for maior ou igual a 2001.00,
mas menor ou igual a R$5000.00, o reajuste deve ser de 10%. Caso o salrio seja maior que
R$5001.00, o reajuste deve ser de 5%. A estratgia ler o salrio do funcionrio e verificar
se vlido. Se for, calculamos o aumento do salrio de acordo com as faixas informadas.
Depois somamos o aumento no salrio original e calculamos o novo salrio, dando a boa
notcia ao trabalhador!
#include <stdio.h>
#include <conio.h>
int main(){
}
else printf("\nErro no valor do salario. Nao existe salario igual a zero ou
negativo.");
printf("\n\nFim do programa");
getch();
return 0;
}
164
7.1.1. Voc deve escrever um programa que leia e imprima o nome e as duas notas de
vrios alunos. O ltimo aluno ter o nome=FIM. O nico fator um pouco chato na soluo
deste problema simples a leitura de strings em C, que deve ser feita usando-se funes
da biblioteca <string.h>.
/* notas.c: programa que le e imprime 2 notas de vrios alunos */
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
char nome[15];
float nota1, nota2;
int main(){
while (1){
printf(\nQual o seu nome? FIM finaliza );
gets(nome);
if (strcmp(nome,FIM) == 0)
break;
puts(\nFim do programa);
getch();
return 0;
}
165
7.1.2. Voc deve escrever um programa que leia 10 nmeros e calcule e imprima a sua
soma. A estratgia usar o comando for, pois j sabemos que sero lidos 10 nmeros.
importante aplicarmos a regra bsica da programao: TODO SOMADOR E TODO
CONTADOR DEVE SER INICIALIZADO COM ZERO! Alm disso, importante notar que a
impresso da soma dos nmeros feita FORA do comando for. Isso porque preciso
terminar a leitura dos dados para que a soma final tenha sido calculada e possa ser
impressa.
#include <stdio.h>
#include <conio.h>
int main(){
cont=soma=0;
puts(\nFim do programa);
getch();
return 0;
}
166
7.1.3. Voc deve escrever um programa que calcule e imprima N nmeros pares,
comeando do zero. Voc deve perguntar ao usurio quantos nmeros ele deseja gerar
(ou seja, pea-lhe para fornecer o valor de N). Neste caso vamos tambm usar o comando
for, pois sabemos que o usurio quer gerar N nmeros pares!
#include <stdio.h>
#include <conio.h>
int main(){
puts(\nFim do programa);
getch();
return 0;
}
7.1.4.
X Y Resultados
-1 0
1 1 1
-1 2 -2
1 3 3
-1 4 -4
7.1.5.
A cada lao do comando for so impressos 2 nmeros numa mesma linha: positivo
e negativo. O nmero comea de 2 e vai sendo incrementado de 2. cont comea
com zero e vai at 5.
168
Caro aluno, aqui voc encontrar respostas de uma parte dos exerccios da lista 7.2. Voc
deve tentar fazer sozinho primeiro, antes de olhar a resposta. Os outros exerccios voc j
tem condies de resolver sem ajuda. Mas, caso restem dvidas, solicite a ajuda de seu
professor (a)! Boa sorte!
7.2.1)
#include <stdio.h>
#include<conio.h>
int angulo;
int quadrante;
int main(){
printf("\nPrograma para apresentar a qual quadrante um angulo pertence\n");
while (1) {
printf("\nDigite o valor do angulo (0 a 360) -1 finaliza: ");
scanf("%i",&angulo);
if (angulo== -1)
break;
printf("\n\nFim do programa");
getch();
return 0;
}
169
7.2.3.
/*exerc723.c: realiza uma pesquisa de opinio, computando votos em numero e em percentual */
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
int opcao, sexo, afavor=0, contra=0, homens=0,mulheres=0, total;
float porcent;
int main() {
for (; ;) {
system("cls"); // limpa a tela
printf ("\nReferendo sobre a internacionalizacao da Amazonia. Qual eh sua opiniao?");
printf ("\n1 - A favor");
printf ("\n2 - Contra");
printf ("\n0 - Finaliza");
printf ("\nDigite a opcao desejada: ");
scanf ("%i",&opcao);
if (opcao == 0)
break;
while (1) {
printf("\nInforme o seu sexo 1=masculino 2=feminino: ");
scanf("%i", &sexo);
if (sexo == 1) {
++homens;
break;
}
else if (sexo == 2) {
++mulheres;
break;
}
else
printf("\nSexo invalido. Por favor, digite 1 ou 2.\n");
}
switch (opcao) {
case 1: printf("\nObrigada, voto computado!");
++afavor;
break;
printf("\nResultados da pesquisa\n");
printf("----------------------");
printf("\n\n%i votante(s) do sexo masculino.", homens);
if (total > 0) {
porcent = (float) homens/total;
printf("\n%.1f %% dos votantes sao homens",porcent*100);
}
getch();
printf("\n\n\nFim do programa");
getch();
return 0;
}
171
7.2.4.
/*exerc724.c: le n1,n2 e realiza as 4 operacoes*/
#include<stdio.h>
#include<conio.h>
int n1,n2,soma,subtr,mult;
float divisao;
int main() {
while (1) {
printf("\nDigite um numero inteiro ou -1 para finalizar: ");
scanf("%i",&n1);
if (n1 == -1)
break;
soma=n1+n2;
printf("\na soma de %i+%i=%i",n1,n2,soma);
subtr=n1-n2;
printf("\na subtracao de %i-%i",n1,n2,subtr);
mult=n1*n2;
printf("\na multiplicacao de %i+%i=%i",n1,n2,mult);
if (n2!=0) {
divisao=n1/n2;
printf("\na divisao de %i/%i=.3f",n1,n2,divisao);
}
else
printf("\nnao existe divisao por zero");
}
printf("\n\nfim do programa");
getch();
return 0;
}
172
7.2.6.
/*exerc726.c: gera sequencias numericas*/
#include <stdio.h>
#include<conio.h>
int main() {
printf("\nPrograma para gerar sequencias numericas\n");
termo = 2;
printf("\n\n");
cont = 1;
termo = 1;
while (cont<=n) {
printf(" %i ",termo);
termo = termo*-1;
++cont;
7.2.12.
#include <stdio.h>
#include<conio.h>
int main( ) {
printf("\nPrograma que le varios numeros inteiros e calcula sua media\n\n");
while (1) {
printf("Forneca um valor inteiro (flag= -1): ");
scanf("%d",&Valor);
Soma = Soma + Valor;
++Cont;
}
if (Cont > 0) {
Media = Soma/Cont;
printf("\nValor da Media dos: %i nmeros = %.2f \n",Cont, Media);
}
else
printf(\nNenhum valor foi fornecido);
7.2.13.
/*exerc7213.c: calcula as razes de uma equao do 2o grau*/
#include <stdio.h>
#include <conio.h>
#include <math.h>
int main() {
printf(\nCalcula as raizes de equacoes do 2o grau\n);
for ( ; ; ) {
printf(\nDigite o coeficiente a: );
scanf(%f, &a);
printf(\nDigite o coeficiente b: );
scanf(%f, &b);
printf(\nDigite o coeficiente c: );
scanf(%f, &c);
if ( a == 0)
printf(\nNao eh equacao do 2o grau, pois o coeficiente a eh zero);
else {
delta = b*b (4*a*c);
if (delta >= 0) {
raiz1 = - b + sqrt(delta) / (2*a);
raiz2 = - b - sqrt(delta) / (2*a);
printf(\nRaiz 1 = %.2f Raiz2=%.2f, raiz1, raiz2);
}
else
printf(\nNao existem raizes reais);
}
if (resp==n || resp==N)
break;
}
printf ("\n\n\n\n Fim do programa");
getch();
return 0;
}
175
7.2.14.
/*exerc7214.c: mostra nmeros potencia de 2 menores que 1000000 usando long int e
gera numeros impares menores que 100 */
#include <stdio.h>
#include <conio.h>
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;
}
num=1;
while (num<100) {
printf("%i\t",num);
num = num + 2;
if (num%10==1)
getch();
}
}
176
7.2.15.
#include <stdio.h>
#include <conio.h>
int main() {
pi=0;
printf(\nDigite o numero de termos da serie: );
scanf(%ld,&n);
num = 4;
den = 1;
printf("\nO valor de Pi aproximado pela serie com %ld termos = %lf", n, pi));
}
177
7.2.16)
/*exerc7216.c: le numeros e calcula o digito verificador*/
#include <stdio.h>
#include<conio.h>
long int n;
int d1,d2,d3,d4,d5,dv;
int main() {
printf("\nPrograma para ler numeros e calcular o digito verificador\n");
while (1) {
printf("\nDigite um numero inteiro de 5 digitos (-1 finaliza): ");
scanf("%ld",&n);
if (n == -1)
break;
if (dv == 10)
printf("\n\n%ld - x ", n);
else
printf("\n\n%ld - %i",n, dv);
printf("\n\n");
}
else printf("\nEste numero nao tem 5 digitos.\n");
}
printf("\n\nFim do programa");
getch();
return 0;
}
178
7.2.26)
/*exerc7226.c: le o codigo do produto e apresenta sua classificacao*/
#include <stdio.h>
#include<conio.h>
int codigo;
int main() {
printf("\nPrograma para apresentar a classificacao de produtos\n");
while (1) {
printf("\nQual eh o codigo do produto? (1 a 9 ou 0 para finalizar): ");
scanf("%i",&codigo);
if (codigo == 0)
break;
switch (codigo) {
case 1: printf("\nClassificacao do produto %i = ALIMENTO NAO PERECIVEL", codigo);
break;
case 2:
case 3:
case 4: printf("\nClassificacao do produto %i = ALIMENTO PERECIVEL", codigo);
break;
case 5:
case 6: printf("\nClassificacao do produto %i = VESTUARIO", codigo);
break;
printf("\n\nFim do programa");
getch();
return 0;
}
179
Abraos,
Profa. Elisamara de Oliveira, Dra
profaelisa@uol.com.br
180
Bibliografia
AITKEN, P., JONES, B. C - Guia do Programador. Rio de Janeiro: Berkeley Brasil, 1994.