Você está na página 1de 9

Lista de exercícios de programação: Programas com laços de repetição, usando WHILE e DO-

WHILE.
1. Faça um programa que lê uma série de números. O programa deve parar de ler números quando o
usuário informar um número negativo. O programa deve calcular a média dos números pares lidos e a
média dos números ímpares lidos. Atenção, deve-se calcular 2 médias.
2. Faça um programa que lê uma série de números inteiros. Caso o número seja par e negativo, o
programa o exibe na tela. O programa deve parar de ler números quando for informado um valor que não é
simultaneamente par e positivo.
3. Faça um programa que leia uma série de números positivos e determine qual é o maior e qual é o
menor deles. O programa deve parar de ler números quando for informado um número negativo.
4. Você precisa desenvolver um programa para auxiliar a gestão de estoque de um mercado. O
programa deve ler um valor de referência. Em seguida, o programa deve ler dados relacionados a uma série
de produtos do mercado. Para cada produto, o programa deve ler o seu código numérico e a sua quantidade
em estoque. O programa deve contar quantos produtos possuem quantidade superior ao valor de referência,
quantos possuem quantidade inferior ao valor de referência e quantos possuem quantidade igual ao valor de
referência. O programa deve parar de ler dados quando o usuário digitar o código zero para o produto.
5. Faça um programa que lê um valor que representa a meta de arrecadação de dinheiro em uma
campanha. A seguir, faça um programa que lê valores doados para a campanha. O programa deve continuar
lendo doações até que o valor arrecadado atinja a meta. Ou seja, a campanha deve parar quando a
arrecadação for igual ou superior à meta.
6. Considere o seguinte programa. Ele lê um valor n, que indica quantos números ele deve ler. A
seguir, ele lê cada um desses n números e os imprime na tela. Modifique este programa para que ele não
precise ler a quantidade n de números. O programa modificado deve parar de ler números quando for
digitado um valor negativo (e, neste caso, o valor não deve ser impresso).

1. #include <stdio.h>
2. int main(){
3. int n,i;
4. float valor;
5. printf("Informe a quantidade de numeros\n");
6. scanf("%d",&n);
7. for(i=0;i<n;i++){
8. printf("Informe o valor\n");
9. scanf("%f",&valor);
10. printf("%f\n",valor);
11. }
12. return 0;
13. }

7. Elaborar um programa que:


a) calcule e escreva o valor da série abaixo com precisão menor que 0,01;
b) indique quantos termos foram usados.
INF01202 - Lista Exercícios 3 - pg.

8. [Algoritmos Estruturados - H. Farrer et al.] Fazer um programa que calcule o valor de e x através
da série:

de modo que o mesmo difira do valor calculado através da função EXP de, no máximo, 0,0001. O valor
de x deve ser lido. O programa deverá escrever o valor de x, o valor calculado através da série, o valor
dado pela função EXP e o número de termos utilizados da série.
9. Faça um programa que lê um número inteiro (cujo número máximo de dígitos não é conhecido a
priori) e que exibe a soma de todos os seus dígitos. Por exemplo, caso a entrada fosse 12345, o programa
deveria exibir como saída 15.
10. [Algoritmos estruturados - Harry Farrer et al.] Para n inteiros positivos fornecidos, indique os que
são números perfeitos.
Obs.: Número perfeito é aquele cuja soma de seus divisores, exceto ele próprio, é igual ao número.
Ex.: 6 = 1 + 2 + 3.
11. Blablazópolis é uma cidade com 10 mil habitantes, enquanto Qualquerzópolis é uma cidade com
20 mil habitantes. A cada ano que passa, o número de habitantes de Blablazópolis aumenta em 3 mil,
enquanto o número de habitantes de Qualquerzópolis aumenta em 2 mil. Faça um programa que calcula
quantos anos serão necessários para Blablazópolis ultrapassar Qualquerzópolis em termos de número de
habitantes.
12. [Programação em Pascal - Byron S. Gottfried] Um número primo é um inteiro positivo que é
divisível só por si e por 1. Calcule e imprima os primeiros n números primos. (Sugestão: um número n será
primo se nenhum dos quocientes n/2, n/3, n/4, . . . n/sqrt(n) for inteiro.) (Teste o seu programa calculando
os primeiros 20 números primos.)

13. Faça um programa que exibe o seguinte menu de opções na tela:


1) Soma
2) Subtração
3) Multiplicação
4) Divisão
5) Sair
A seguir, o programa deve ler um número que corresponde à opção do usuário. Caso o usuário informe
a opção 5, o programa deve finalizar. Caso o usuário informe uma das opções entre 1, 2, 3 e 4, o
programa deve ler dois valores reais N1 e N2, realizar a operação correspondente e exibir o resultado da
operação.
INF01202 - Lista Exercícios 3 - pg.

14. Você deve fazer um algoritmo para auxiliar o DETRAN a processar as multas. O programa deve
ler o código de cada motorista e, para cada motorista, uma série de multas. Quando o usuário digita um
valor de multa menor ou igual a zero, o programa deve parar de ler multas deste motorista. Quando o
usuário digita o código zero para o motorista, o programa deve parar de ler códigos de motoristas e finalizar
a leitura de dados. O programa deve exibir o total de multas de cada motorista, bem como o total
arrecadado pelo governo em multas (ou seja, a soma de todas as multas de todos os motoristas
considerados). O programa deve determinar também qual o maior montante em multas acumulado por um
motorista.

15. Você deve desenvolver um programa que controla uma balança de carga de caminhão.
Inicialmente, o programa lê um valor que representa o limite de carga do caminhão. A seguir, o programa lê
o peso de uma série de objetos que o caminhão deve transportar. Para cada objeto incluído na carga, o
programa deve verificar se o peso dos objetos já ultrapassou o limite da carga ou não. Caso o limite não
tenha sido ultrapassado, deve-se exibir a mensagem “É possível incluir mais objetos”. Caso o limite seja
ultrapassado, deve-se exibir a mensagem “Limite ultrapassado. Retire o último objeto”. Além disso, quando
o limite for alcançado, o programa deve parar de ler pesos de objetos.

16. Faça um programa para auxiliar em uma entrevista do IBGE sobre a idade da população. O
programa deve exibir na tela um menu com as seguintes opções:
0 – Parar
1 – Informar idade
O programa deve ler a opção escolhida pelo usuário. Caso a opção seja 0, o programa deve parar de ler
idades (significando que a entrevista terminou). Caso o usuário informe 1, o programa deve ler a idade
de uma nova pessoa. O programa deve continuar a exibir o menu e ler dados até o usuário selecionar a
opção 0. Ao fim, o programa deve informar a média das idades das pessoas entrevistadas.

17. Faça um programa que lê uma série de números informados pelo usuário. O programa deve parar
de ler números quando for informado um número negativo. Para cada número N lido, o programa deve
exibir todos os números entre 0 e N. Por exemplo:
• Se o usuário informar 5, deve-se exibir: 0,1,2,3,4,5
• Se o usuário informar 4, deve-se exibir:0,1,2,3,4
• Se o usuário informar -1, o programa deve parar.

18. Faça um programa que lê um número inicial. A seguir, o programa deve continuar lendo números,
caso o número lido seja maior que o anterior. Se o número lido for menor, o programa deve parar de ler
números. Ao fim, o programa deve informar o maior número lido. Ex:
• Primeiro número lido: 3
• Segundo número lido: 4. Como 4 é maior que 3, deve-se continuar.
• Terceiro número lido: 8. Como 8 é maior que 4, deve-se continuar.
• Quarto número lido: 6. Como 6 é menor que 8, deve-se parar.
• O maior número lido foi 8.
INF01202 - Lista Exercícios 3 - pg.

19. Faça um programa que lê uma série de números entre 0 e 70 informados pelo usuário (o programa
deve pedir para o usuário informar cada um deles). O programa deve parar de ler números quando for
informado um número negativo. Se o número for maior que 70, o programa deve informar a mensagem
“Informe outro número”. Caso o número informado seja maior ou igual a zero e menor ou iguala 70, o
programa deve exibir uma série de N símbolos “*”. Por exemplo:
 Se o usuário informar 5, deve-se exibir: *****
 Se o usuário informar 12, deve-se exibir:************
 Se o usuário informar -1, o programa deve parar.

20. Os alunos de uma universidade foram entrevistados. De cada um deles foram colhidas as
seguintes informações: o código do curso que freqüenta (1-engenharia; 2-computação; 3-administração) e a
idade. Faça um programa que processe estes dados e que forneça as seguintes informações:
a) número de alunos por curso;
b) número de alunos com idade entre 20 e 25 anos, por curso; e
c) qual o curso com menor média de idade.

21. Fazer um programa que calcule o resultado final das eleições para a presidência de um clube,
sabendo-se que:
a) existem três chapas concorrendo;
b) os eleitores votaram fornecendo o número da chapa escolhida;
c) Não é sabido o número de membros votantes
O programa deverá processar os votos recebidos e fornecer o total de votos de cada uma das chapas, o
total de votos em branco e o total de votos nulos. Além disso, o programa deverá verificar se a chapa
mais votada é vencedora no primeiro turno da eleição (mais de 50% dos votos) ou se deverá ocorrer um
segundo turno.

22. Foi realizada uma pesquisa em Porto Alegre, com um número desconhecido de pessoas. De cada
entrevistado foram colhidos os seguintes dados:
a) clube de preferência (1-Grêmio; 2-Internacional; 3-Outros);
b) salário;
c) cidade de origem (0-Porto Alegre; 1-Outras).
Deseja-se saber:
1) número de torcedores por clube;
2) média salarial dos torcedores do Grêmio e do Internacional;
3) número de pessoas nascidas em Porto Alegre que não torcem por nenhum dos dois primeiros
clubes;
4) número de pessoas entrevistadas.

23. Uma sorveteria vende 5 produtos diferentes, cada um com um preço, de acordo com a tabela
abaixo:
Código Produto Preço (R$)

A refrigerante 0,60
B casquinha simples 1,00
C casquinha dupla 1,20
D sundae 1,50
E banana split 2,00
INF01202 - Lista Exercícios 3 - pg.

Faça um programa que processe diversas vendas. O programa deverá apresentar um menu indicando os
preços dos produtos. Cada venda efetuada pode ser composta por diversas unidades de diversos
produtos. Os produtos são identificados através de seus códigos. A cada venda efetuada informar o
preço a pagar. No final do dia o programa deverá emitir um relatório com as seguintes informações:
a) número total de itens vendidos em cada produto;
b) total pago para cada produto;
c) total arrecadado (somando todos os produtos); e
d) média de valor pago por pedido.
24. Uma confecção fabrica os produtos da tabela abaixo, identificados pelo seu código e com o preço
correspondente:

CÓDIGO PRODUTO PREÇO UNITÁRIO (R$)


1 camiseta branca 7,00
2 camiseta colorida 9,00
3 moleton 17,00
4 calça comprida 12,00
5 abrigo 25,00
6 boné 5,00

Faça um programa que processe diversos pedidos feitos a esta confecção. Em cada pedido serão
especificados os produtos pedidos, identificados através de seu código, e a quantidade pedida de cada
produto. O programa deverá calcular o total a pagar de cada pedido. No final dos pedidos, o programa
deverá fornecer um relatório de vendas, com as seguintes informações:
a) número de unidades vendidadas de cada produto;
b) total de unidades vendidas no período;
c) total vendido em reais;
d) valor médio de pedido (em reais); e
e) número de pedidos processados.
25. [Algoritmos Estruturados - Farrer] Uma pesquisa sobre algumas características físicas da
população de uma determinada região coletou os seguintes dados, referentes a cada habitante, para análise:
a) sexo (masculino, feminino);
b) cor dos olhos (azuis, verdes, castanhos);
c) cor dos cabelos (louros, castanhos, pretos);
d) idade em anos.
Para cada habitante foi preenchido um cartão com estes dados e o último cartão, que não corresponde a
ninguém, contém o valor de idade igual a -1. Fazer um programa que determine e escreva:
a) a maior idade dos habitantes;
b) a porcentagem de indivíduos do sexo feminino cuja idade está entre 18 e 35 anos, inclusive, e que
tenham olhos verdes e cabelos louros.

26. [Théorie et Pratique du Langage PASCAL - Nebut] Dois jogadores lançam ao mesmo tempo um
dado. O jogador que tem o maior resultado marca um ponto. O jogo termina quando um dos jogadores
obtiver 11 pontos. Escrever um programa que simule este jogo de dados. (É necessário utilizar recursos
para gerar números aleatórios)

27. [Pascal Estruturado - H. Farrer et al.] Um determinado material radioativo perde metade de sua
massa a cada 50 segundos. Dada a massa inicial, em gramas, fazer um programa que determine o tempo
necessário para que essa massa se torne menor do que 0,5 grama. Escreva a massa inicial, a massa final e o
tempo calculado em horas, minutos e segundos.
INF01202 - Lista Exercícios 3 - pg.

28. [Pascal Estruturado - H. Farrer et al.] Deseja-se fazer uma pesquisa a respeito do consumo
mensal de energia elétrica em uma determinada cidade. Para isso são fornecidos os seguintes dados de
vários consumidores:
• quantidade de kWh consumidos durante o mês;
• código do tipo de consumidor (residencial, comercial, industrial).
Valor final: quantidade = 0 e codigo = 0.
Calcular:
• o menor e o maior consumo de consumidor residencial.
• o maior consumo dos consumidores comerciais e industriais;
• o total de consumo para cada um dos tipos de consumidores;
• a média geral de consumo industrial;
Escrever os resultados.

29. Foi feita uma pesquisa de audiência de canal de TV em várias casas de uma certa cidade, num
determinado dia. Para cada casa visitada, foi anotado o número do canal (4, 5, 7, 12) e o número de pessoas
que o estavam assistindo na casa. Quando a televisão estava desligada, nada era anotado, ou seja esta casa
não entrava na pesquisa.
Fazer um programa que:
• leia um número indeterminado de dados, sendo o valor final o canal igual a zero;
• calcule a percentagem de audiência para cada emissora;
Escrever: o número do canal e sua respectiva percentagem.

30. Faça uma versão incremental do cálculo da média de um conjunto de valores maiores ou iguais a
zero informados pelo usuário, à medida que ele os informa, sem manter em memória todos os valores
informados. O programa deve continuamente pedir para o usuário informar um valor e logo a seguir, exibir
a média de todos os valores que ele informou até o momento. A exibição da média deve ser realizada a cada
valor informado pelo usuário e não apenas no fim. O programa deve parar de efetuar as operações quando o
usuário informar um valor menor ou igual a zero. Exemplo de execução:
Informe um valor: 1
Média atual: 1
Informe um valor: 2
Média atual: 1.5
Informe um valor: 3
Média atual: 2
Informe um valor: 0
31. A conjectura de Collatz diz que se escolhermos qualquer número X, se ele for par, dividimos X
por 2; se X for ímpar multiplicamos X por 3 e adicionamos 1, realizando o processo repetidamente, em
algum momento obtemos o número 1. Faça um programa que leia um número X e um número R que indica
o máximo de repetições que devem ser feitas. O programa deve informar quantas repetições foram
realizadas para chegar a 1, realizando o processo acima, caso o número de repetições seja menor que R.
Caso contrário, o programa deve informar que não foi possível chegar a 1 com R repetições. Para os
curiosos, aqui e aqui tem mais duas referências interessantes sobre a conjectura. Abaixo a recorrência que é
utilizada para calcular cada um dos termos:

X n− 1
X n=
{ 2
, se X for par
3 × X n −1 +1 , se X for ímpar
INF01202 - Lista Exercícios 3 - pg.

32. Faça um programa que leia inicialmente 4 valores, x1,y1, x2,y2, tal que o par x1,y1 representa as
cordenadas do canto inferior esquerdo de um retângulo e o par x2, y2 representa as coordenadas do canto
superior direito deste retângulo. A seguir, o programa deve ler pares de valores x e y, cada qual
representando um novo ponto. Caso o ponto de encontre dentro do retângulo formado pelos ponto iniciais,
o programa deve calcular a distância do ponto lido e o ponto central do retângulo (dado pela média das
coordenadas x1 e x2, e y1 e y2). O programa deve parar de ler pontos quando for informado um ponto que
está fora do retângulo formado pelos pontos inicialmente lidos.

33. Dizemos que um número inteiro n2 está contido literalmente em outro número inteiro n1, quando
a sequência de dígitos que forma o número n2 é uma subsequência da sequência de dígitos que forma o
número n1. Por exemplo:
123 está contido literalmente em 1234
234 está contido literalmente em 1234
23 está contigo literalmente em 1234
456 está contido literalmente em 321456987
Faça um programa que leia os números inteiros n1 e n2, tal que n1 deve ser maior ou igual a n2 e que
informe se n2 está contigo literalmente em n1 ou não. Note que não sabemos qual é o limite máximo de
dígitos que n1 e n2 podem possuir.

34. A persistência multiplicativa de um número inteiro é o número de vezes que os dígitos deste
número devem ser multiplicados, para que o resultado chegue a um único dígito. Você deve fazer um
programa que lê um valor entre 0 e 9999. Se o usuário informar um número fora deste intervalo, o
programa deve informar o usuário que o número informado não é válido e pedir para o usuário informar
outro número. Este processo deve ser repetido até o usuário informar um número dentro do intervalo.
Depois disso, o programa deve calcular a persistência multiplicativa do número informado. Por exemplo, se
o usuário informar o número 6423, a persistência aditiva é 3, porque:
6*4*2*3=144
1*4*4=16
1*6=6
35. O método da descida de gradiente (ou do máximo declive) é um método de otimização iterativo
utilizado para encontrar pontos mínimos em uma função (diferenciável) f(x). Este método tem diversas
aplicações em muitas áreas e é utilizado durante o processo de treinamento de redes neurais artificiais (uma
das abordagens desenvolvidas na área de Inteligência Artificial). A ideia básica do método é, a partir de um
ponto de partida qualquer (valo específico de x arbitrário), sistemática e iterativamente, identificar valores
de x que se aproximam sucessivamente do valor de x que para o qual f(x) é o valor mínimo. Esse processo
é realizado de forma que, a cada passo, toma-se a direção do gradiente da função (que corresponde ao
declive máximo da função naquele ponto). Metaforicamente, o “trajeto” que o método realiza (ao longo dos
valores que ele visita) é semelhante ao de um rio, percorrendo um terreno acidentado, na direção do
máximo declive em cada ponto. Em funções unidimensionais, o gradiente de f(x) é sua derivada (f’(x)),
que define a taxa de variação da função em x. A partir de um valor x n , o próximo valor, denotado por
x n+1 , visitado pelo método é definido como:
x n+1=x n− p . f '( x)
onde f’(x) é a derivada de f(x), e p é o tamanho do passo. Com valores de p pequenos, o processo leva mais
passos para encontrar o valor mínimo. Com valores de p grandes, eventualmente, o processo fica oscilando
em volta do mínimo, sem ser capaz de encontrá-lo.
Assumindo a função
INF01202 - Lista Exercícios 3 - pg.

f ( x)=6 x ²−12 x +3
f(x) tem seu valor mínimo quando x=1. Note também que:
f ' (x)=12 x−12
Faça um programa em c que recebe como entradas:
• Um valor x_inic, que indica o valor inicial de x.
• Um valor para p, que indica o tamanho do passo
• Um valor t, que indica a tolerância (imprecisão aceitável)
• Um valor m, que indica a quantidade máxima de iterações.
O programa deve realizar o processo de descida de gradiente a partir do valor x_inic, considerando o
passo p, a tolerância t e a quantidade máxima de iterações m. Note que a tolerância é a diferença máxima
aceitável entre dois valores consecutivos de x identificados (por exemplo, 0.01). Assim, o processo deve
parar quando for identificado um valor x que difere do valor anterior por um valor menor que t, ou se o
processo realizou uma quantidade m de iterações, sem encontrar o valor. As figuras a seguir demonstram o
processo realizado pelo método com os valores p=0.03 e p=0.15, respectivamente.

Note que com p=0.03 o processo de aproxima sucessivamente do valor mínimo de f(x), enquanto com
p=0.15 o processo não é capaz de encontrar o mínimo e fica oscilando. É importante notar também que
algumas funções podem possuir diferentes “mínimos locais” e, dependendo do x inicial selecionado, o
processo pode ficar preso em um mínimo local, sem conseguir encontrar o mínimo global.
Você pode testar o método com diferentes funções, mas lembre-se de determinar a derivada
correspondente.
INF01202 - Lista Exercícios 3 - pg.

Você também pode gostar