Prévia do material em texto
Algoritmos e Programação 3.11 Identifique e corrija os erros em cada um dos itens seguintes (Nota: pode haver mais de um erro em cada conjunto de linhas de código): a) if (idade >= 65); printf("Idade e maior que ou igual a 65\n"); else printf("Idade e menor que 65\n"); if (idade >= 65) printf("Idade e maior que ou igual a 65\n"); else printf("Idade e menor que 65\n"); b) int x = 1, total; while (x <= 10) { total += x; + +x; } int x = 1, total = 0; while (x <= 10) {total += x; + +x; } c) While (x <= 100) total += x; + +x; while (x <= 100) {total += x; + +x; } d) while (y > 0) { printf("%d\n", y); ++y; } while (y > 0) {printf("%d\n", y); --y; } 3.13 O que o seguinte programa imprime? ttinclude <stdio.h> main() {int x = 1, total = 0, y; while (x <= 10) { y = x * x; printf("%d\n", y); total += y); ++x; } printf("O total e %d\n", total); return 0; } 1 4 9 16 25 36 49 64 81 100 O total e 365 3.15 Formule um algoritmo em pseudocódigo que faça o seguinte: a) Obtenha dois números a partir do teclado, calcule a soma dos números e exiba o resultado. Obter o primeiro número e o segundo número Definir a soma com o valor do primeiro número mais o segundo número Imprimir a soma b) Obtenha dois números a partir do teclado, determine o maior (se houver) e o exiba. Obter o primeiro número e o segundo número Se o primeiro número for maior que o segundo número Imprimir o primeiro número senão Se o segundo número for maior que o primeiro Imprimir o segundo número senão Imprimir “números iguais” c) Obtenha uma série de números positivos a partir do teclado, determine sua soma e a exiba. Admita que o usuário deve digitar o valor sentinela — 1 para indicar o "final da entrada de dados". Inicializar total com o valor zero Obter o primeiro número Enquanto o usuário não fornecer o valor sentinela de -1 Adicionar o número ao total. Obter o próximo número (possivelmente o valor sentinela) Definir a soma com o valor total Imprimir a soma 3.16 Determine se cada uma das sentenças seguintes é verdadeira ou falsa. Se a sentença for falsa, explique por quê. a) A experiência demonstrou que a parte mais difícil de resolver um problema em computador é produzir um programa em C. Falsa. A experiência demonstrou que a parte mais difícil de resolver um problema em um computador é desenvolver o algoritmo para a solução. Normalmente, depois de o algoritmo correto ter sido especificado, o processo de produzir um programa funcional em C fica simples. b) O valor sentinela deve ser tal que não possa ser confundido com um valor válido de dados. Verdadeiro. c) As linhas de fluxo indicam as ações a serem realizadas. Falso. As linhas de fluxo indicam a ordem em que as ações devem ser executadas. d) As condições escritas no interior dos símbolos de decisão sempre contêm operadores aritméticos (i.e., +, -, *, / e %). Falso. O símbolo de decisão contém uma expressão que pode ser verdadeira ou falsa. e) No refinamento top-down em etapas, cada refinamento é uma representação completa do algoritmo. Verdadeiro. Para os Exercícios 3.17 a 3.21, realize cada um dos seguintes passos: 1. Leia a definição do problema. 2. Formule o algoritmo usando o pseudocódigo e o refinamento top-down em etapas. 3. Escreva um programa em C. 4. Teste, depure e execute o programa em C. 3.17 Tendo em vista o alto preço da gasolina, os motoristas estão preocupados com a quilometragem percorrida por seus automóveis. Um motorista fez o controle recompletando várias vezes o tanque e registrando os quilômetros percorridos e os litros de gasolina necessários para encher o tanque. Desenvolva um programa em C que receba como dados a quilometragem dirigida e os litros usados para recompletar o tanque. O programa deve calcular e exibir a quilometragem por litro obtida para cada recompletamento. Depois de processar todas as informações, o programa deve calcular e exibir a média de quilômetros por litro obtida para todos os recompletamentos. Entre com os litros consumidos (-1 para finalizar): 12.8 Entre com os km percorridos: 287 A taxa km/litro para esse tanque foi 22.421875 Entre com os litros consumidos (-1 para finalizar): 10.3 Entre com os km percorridos: 200 A taxa km/litro para esse tanque foi 19.417475 Entre com os litros consumidos (-1 para finalizar): 5 Entre com os km percorridos: 120 A taxa km/litro para esse tanque foi 24.000000 Entre com os litros consumidos (-1 para finalizar): -1 A taxa total de km/litro foi 21.601423 float litro, km, total=0; int contador=0; printf("Entre com os litros consumidos (-1 para finalizar):"); scanf("%f", &litro); if(litro<=0)printf("Nenhum valor foi fornecido\n"); else{ while(litro>0){printf("Entre com os km percorridos:"); scanf("%f", &km); printf("A taxa km/litro para esse tanque foi %f\n", km/litro); total+=km/litro; ++contador; printf("Entre com os litros consumidos (-1 para finalizar):"); scanf("%f", &litro); } printf("A taxa total de km/litro foi %f\n", total/contador); } 3.18 Desenvolva um programa em C que determine se um cliente de uma loja de departamentos excedeu o limite de crédito de sua conta. Os seguintes dados de cada cliente estão disponíveis: 1. Número da conta 2. Saldo devedor no início do mês 3. Total de itens cobrados do cliente no mês em questão 4. Total de créditos aplicados à conta do cliente no mês cm questão. 5. Limite de crédito permitido. O programa deve receber esses dados, calcular o novo saldo (= saldo devedor inicial + cobranças — créditos) e determinar se o novo saldo supera o limite de crédito do cliente. Para os clientes cujo limite de crédito foi excedido, o programa deve exibir o número da conta do cliente, o limite de crédito e a mensagem "Limite de Crédito Excedido". Entre com o número da conta (-1 para finalizar): 100 Entre com o saldo inicial: 5394.78 Entre com o total de cobranças: 1000.00 Entre com o total de créditos: 500.00 Entre com o limite de credito: 5500.00 Conta: 100 Limite de credito: 5500.00 Saldo: 5894.78 Limite de Credito Excedido. Entre com o número da conta (-1 para finalizar): 200 Entre com o saldo inicial: 1000.00 Entre com o total de cobranças: 123.45 Entre com o total de créditos: 321.00 Entre com o limite de credito: 1500.00 Entre com o número da conta (-1 para finalizar): 300 Entre com o saldo inicial: 500.00 Entre com o total de cobranças: 274.73 Entre com o total de créditos: 100.00 Entre com o limite de credito: 800.00 Entre com o número da conta (-1 para finalizar): -1 float saldoinicial, cobrancas, creditos, limite; int conta; printf("Entre com o número da conta (-1 para finalizar):"); scanf("%d", &conta); while(conta!=-1){printf("Entre com o saldo inicial:"); scanf("%f", &saldoinicial); printf("Entre com o total de cobranças:"); scanf("%f", &cobrancas); printf("Entre com o total de créditos:"); scanf("%f", &creditos); printf("Entre com o limite de crédito:"); scanf("%f", &limite); printf("Conta: %d\n", conta); printf("Limite de crédito: %.2f\n", limite); printf("Saldo: %.2f\n", saldoinicial+cobrancas-creditos); if((saldoinicial+cobrancas-creditos)>limite)printf("Limite de Crédito Excedido\n"); printf("Entre com o número da conta (-1 para finalizar):"); scanf("%d", &conta); } 3.19 Uma grande companhia química paga seus vendedores por comissão. Os vendedores recebem $200 por semana mais 9 por cento de suas vendas brutas naquela semana. Por exemplo, um vendedor que vender o equivalente a $5000 em produtos químicos em uma semana recebe $200 mais 9 por cento de $5000, ou um total de $650. Desenvolva um programa em C que receba as vendas brutas de cada vendedor na última semana, calcule seu salário e oexiba. Processe os dados de um vendedor de cada vez. Entre com a venda em dólares (-1 para finalizar): 5000.00 Salário: $650.00 Entre com a venda em dólares (-1 para finalizar): 1234.56 Salário: $311.11 Entre com a venda em dólares (-1 para finalizar): 1088.89 Salário: $298.00 Entre com a venda em dólares (-1 para finalizar): -1 float venda; printf("Entre com a venda em dólares (-1 para finalizar):"); scanf("%f", &venda); while(venda!=-1){printf("Salário: $%.2f\n", 0.09*venda+200); printf("Entre com a venda em dólares (-1 para finalizar):"); scanf("%f", &venda); } 3.23 Escreva um programa em C que utilize um loop para imprimir os números de 1 a 10, lado a lado na mesma linha e com 3 espaços entre eles. int x=1; while(x<=10){printf("%d ",x); ++x; } 3.35 Um palíndromo é um número ou texto que é lido da mesma forma tanto da direita para a esquerda como da esquerda para a direita. Por exemplo, cada um dos inteiros seguintes, de cinco dígitos, é palíndromo: 12321,55555,45554 e 11611. Escreva um programa que leia um inteiro de cinco dígitos e determine se ele é palíndromo ou não. (Sugestão: Use os operadores divisão e resto, ou modulus, para separar o número em seus algarismos isolados.) int n, a1, a2, a4, a5; printf("Entre com um número de 5 dígitos:"); scanf("%d", &n); if(n<10000||n>99999)printf("Número não tem 5 dígitos\n"); else{ a1=n/10000; a2=(n%10000)/1000; a4=(((n%10000)%1000)%100)/10; a5=(((n%10000)%1000)%100)%10; if(a1==a5&&a2==a4)printf("O número %d é palíndromo\n", n); else printf("O número %d Não é palíndromo\n", n); }