Prévia do material em texto
Algoritmos e Laboratório de Programação I
Lista I – Solucionário em C
Exercícios com * indicam que há outra forma de resolução no final do documento
EXERCÍCIO 01:
Sendo A= 3, B= 7 e C= 4, informe se as expressões abaixo são verdadeiras ou
falsas.
a) (A+C) > B F
b) B >= (A + 2) V
c) C = (B A) V
d) (B + A) <= C F
e) (C+A) > B F
EXERCÍCIO 02:
Sendo A=5, B= 4 e C= 3 e D= 6, informe se as expressões abaixo são
verdadeiras ou falsas.
a) (A > C) E (C <= D)
(5 > 3) E (3 <= 6)
Verdadeiro E Verdadeiro
Verdadeiro
b) (A+B) > 10 OU (A + B ) = (C + D)
(5 + 4) > 10 OU (5 + 4) = (3 + 6)
Falso OU Verdadeiro
Verdadeiro
c) (A>=C) E (D >= C)
(5 >= 3) E (6 >= 3)
Verdadeiro E Verdadeiro
Verdadeiro
EXERCÍCIO 03:
a) B = A * C E L1
Substituindo os valores de A, B, C e L1, temos:
7 = 2 * 3.5 E falso
7 = 7 E falso
verdadeiro E falso
O resultado da expressão lógica com o operador E somente será verdadeiro
quando ambos os valores de cada lado do operador forem verdadeiros.
Então, o resultado dessa expressão lógica é: falso.
b) "dia" = S1 OU "frio" != "clima"
Substituindo o valor de S1, temos:
"dia" = "noite" OU "frio" != "clima"
falso OU verdadeiro
O resultado da expressão lógica com o operador OU somente será falso
quando ambos os valores de cada lado do operador forem falsos.
Então, o resultado dessa expressão lógica é: verdadeiro.
c) A + S1 < 5
Substituindo os valores de A e S1, temos:
2 + "noite" < 5
Falso
d) A * C / B > A * B * C
Substituindo os valores de A, B e C, temos:
2 * 3.5 / 7 > 2 * 7 * 3.5
7 / 7 > 14 * 3.5
1 > 49
Falso
e) NÃO FALSO
O operador lógica NÃO denota o oposto do valor lógico seguinte. Então, o
resultado dessa expressão lógica é: verdadeiro.
EXERCÍCIO 04:
Determine o resultado lógico das expressões mencionadas (Verdadeira ou
Falsa). Considere para as respostas os seguintes valores: X= 1, A= 3, B= 5,
C=8 e D=7.
a) NÃO (X > 3) Verdadeiro
b) (X < 1) E (NÃO (B > D)) Falso
c) NÃO (D < 0) E (C > 5) Verdadeiro
d) NÃO ((X > 3) OU (C < 7)) Verdadeiro
e) (A > B) OU (C > B) Verdadeiro
f) (X >= 2) Falso
g) (X < 1) E (B >= D) Falso
h) ( D < 0) OU (C > 5) Verdadeiro
i) NÃO (D > 3) OU (NÃO (B < 7)) Falso
j) (A > B) OU (NÃO (C > B)) Falso
EXERCÍCIO 05:
/*
Efetuar a soma dos números 5 e 10 e imprimir o resultado
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
int p1,p2,soma; //declaração de 3 variáveis inteiras
p1 = 5; //a 1ª parcela inteira é 5
p2 = 10; //a 2ª parcela inteira é 10
soma = p1 + p2; //a soma inteira é 5 + 10
printf("A soma é: %d",soma); //impressão do resultado soma
return 0;
}
EXERCÍCIO 06:
//Efetuar a soma de três números digitados pelo usuário e imprimir o resultado.
#include <stdio.h>
#include <stdlib.h>
int main()
{
//declaração de variáveis do tipo real (float)
float a,b,c,soma;
//leitura dos números informados pelo usuário
printf("Informe o primeiro numero: ");
scanf("%f",&a);
printf("Informe o segundo numero: ");
scanf("%f",&b);
printf("Informe o terceiro numero: ");
scanf("%f",&c);
//a variável soma recebe a soma de a, b e c
soma=a+b+c;
//resultado
printf("A soma eh: %.2f",soma); //%.2f imprime o número real com 2 casas
decimais
return 0;
}
EXERCÍCIO 07:
//Efetuar a multiplicação de dois números digitados pelo usuário e imprimir o resultado.
#include <stdio.h>
#include <stdlib.h>
int main()
{
//declaração de variáveis do tipo inteiro (int)
int a,b,produto;
//leitura dos números informados pelo usuário
printf("Informe o primeiro numero: ");
scanf("%d",&a);
printf("Informe o segundo numero: ");
scanf("%d",&b);
//a variável produto recebe o produto de a por b
produto=a*b;
//resultado
printf("O produto eh: %d",produto);
return 0;
}
EXERCÍCIO 08:
/*
Calcular o aumento que será dado a um funcionário, obtendo do usuário as
seguintes informações : salário atual e a porcentagem de aumento.
Apresentar o novo valor do salário e o valor do aumento.
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
//declaração de variáveis do tipo real (float)
float salario, aumento, novo_salario;
//leitura de dados do funcionário
printf("Informe seu salario atual\n");
scanf ("%f", &salario);
printf ("Informe a porcentagem de aumento\n");
scanf ("%f", &aumento);
//calculo do aumento salarial
aumento=salario*aumento/100;
//calculo do novo salario
novo_salario=salario+aumento;
//impressão dos resultados
printf ("O valor do aumento salarial e' %.2f\n", aumento);
printf ("O valor do novo salario e' %.2f\n", novo_salario);
return 0;
}
EXERCÍCIO 09:
/*
Converter uma quantidade de horas digitadas pelo usuário em minutos.
Informe o resultado em minutos.
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
//declaração das variáveis inteiras (trata-se de quantidade e não frações)
int horas,minutos;
//leitura das horas
printf("Horas: ");
scanf("%d",&horas);
//conversão horas para minutos (X 60)
minutos=horas*60;
//impressão do resultado em minutos
printf("Em minutos, eh %d",minutos);
return 0;
}
EXERCÍCIO 10:
/*
Leitura: salário bruto e número de horas extras
Cálculo: salário líquido = (salário bruto + valor das horas extras) - 8% do total de INSS
Mostrar: salário líquido
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
/*
Declaração de Variáveis:
horas: quantidade de horas extras (int)
bruto: salario bruto (float)
valor_extra: valor de cada hora extra (float)
liquido: salário líquido a ser calculado (float)
*/
int horas;
float bruto,valor_extra,liquido;
//Leitura das Informações
printf("Digite o valor do salário bruto do funcionário: ");
scanf("%f",&bruto);
printf("Digite o valor das horas extras: ");
scanf("%f",&valor_extra);
printf("Digite a quantidade de horas extras trabalhadas pelo funcionário: ");
scanf("%d", &horas);
/*
O cálculo do salário líquido é:
1) Extra = horas * valor_extra (valor extra total recebido)
2) Salario Parcial = Salário Bruto + Extra (sem desconto)
3) INSS = 8% do Salario Parcial, ou seja, 0.8 * Salario Parcial
4) Salario Liquido = Salario Parcial - INSS = (1 - 0.8)* Salario Parcial
= 0.92 * Salario Parcial
*/
liquido = 0.92 * (bruto + horas * valor_extra);
//Impressão do Salário Líquido com duas casas decimais:
printf("O salário líquido do funcionário é de: %.2f", liquido);
return 0;
}
EXERCÍCIO 11:
/*
Leitura do nº de Kw consumido
Preço: 0.12 por kw
Calcular valor a ser pago: 0.12 * qtd_de_kw + 18% do ICMS
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
/*
Declaração de Variáveis
Kw é a quantidade de kw consumido e valor é o valor a pagar
*/
float Kw,valor;printf("Informe a quantidade de KW consumidos: ");
scanf("%f",&Kw);
//1º cálculo: valor será 0.12 por Kw
valor = Kw * 0.12;
//2º cálculo: pagará 100% do valor + 18% deste, ou seja, 118%. Ou seja:
valor = valor * 1.18;
//Impressão do valor:
printf("O total a pagar é %.2f",valor);
return 0;
}
EXERCÍCIO 12:
/*
Calcular a média de combustível gasto pelo usuário, sendo informado a
quantidade de quilômetros rodados e a quantidade de combustível
consumido.
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
//declaração das variáveis reais (float)
float km,comb,media;
//leitura da quantidade de km rodados
printf("Quantidade de KM rodados: ");
scanf("%f",&km);
//leitura da quantidade de combustivel consumido
printf("Quantidade de Combustivel consumido: ");
scanf("%f",&comb);
//cálculo da média (resultado real)
media=comb/km;
//impressão da media com duas casas decimais
printf("A media de combustivel por km eh: %.2f",media);
return 0;
}
EXERCÍCIO 13:
/*
Efetuar a leitura de uma nota e, se o valor for maior ou igual a 60, imprimir
na tela "APROVADO".
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
//declaração da variavel nota
int nota;
//leitura da nota
printf("Nota do aluno(a): ");
scanf("%d",¬a);
//comparação e impressão da mensagem
if(nota>=60) printf("APROVADO");
/*
Como se tem somente um comando dentro do if, pode-se
escrevê-lo direto sem uso do { e }
Pode-se optar por
if(nota>=60)
{
printf("APROVADO");
}
*/
return 0;
}
EXERCÍCIO 14:
/*
Leia uma nota
nota >= 60 -> APROVADO
nota < 60 -> REPROVADO
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
//Declaração da variável nota
float nota;
//Leitura da Nota
printf ("Digite a nota:");
scanf("%f",¬a);
//Verificar se nota é maior ou igual a 60
if(nota>=60)
{
printf ("O aluno está aprovado.\n"); //caso a condição em if for verdadeira
}
else
{
printf ("O aluno está reprovado.\n"); //caso a condição em if for falsa
}
return 0;
}
EXERCÍCIO 15:
/*
Efetuar a leitura de uma nota e, se o valor for maior ou igual a 60, imprimir
na tela "APROVADO", se for menor, imprimir reprovado. Testar ainda se o
valor lido foi maior do que 100 ou menor do que zero. Neste caso, imprimir
"NOTA INVÁLIDA".
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
/*
declaração da variavel nota
Motivo de ser float: suponhamos que a nota é 100.1
Deve ser nota inválida
se fosse inteiro, ele pegaria a parte inteira de
100.1 que é 100 e diria que está aprovado.
Como float ele não comete este erro
*/
float nota;
//leitura da nota
printf("Nota do aluno(a): ");
scanf("%f",¬a);
//comparação e impressão da mensagem
if((nota<0)||(nota>100)) printf("NOTA INVÁLIDA");
else if(nota<60) printf("REPROVADO");
else printf("APROVADO");
return 0;
}
EXERCÍCIO 16:
/*
Ler um número inteiro e informar se o número lido é par ou impar.
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
//Declaraçao da variável inteira
int num;
//Leitura do numero
printf("Informe um numero: ");
scanf("%d",&num);
if(num%2==0) printf("PAR"); //se o resto da divisao por 2 é zero, imprima PAR
else printf("ÍMPAR"); //senão imprima ÍMPAR
return 0;
}
EXERCÍCIO 17:
/*
Ler um número inteiro
Testar se termina com 0 (divisível por 10)
-> Se sim, exiba METADE do numero
-> Se não, exiba "O número digitado não termina com 0"
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
//Declaração da variável inteira num
int num;
//Leitura do numero
printf("Digite um numero: ");
scanf("%d",&num);
//Vamos testar se é divisível por 10
if(num%10==0)
{
printf("A metade deste numero eh %d",num/2); //se sim, imprime metade do
num
//Observe que poderíamos criar outra variável conta=num/2 e imprimir ela
}
else
{
printf("O numero digitado nao termina com 0"); //se não, imprime a msg
}
return 0;
}
EXERCÍCIO 18:
/*
Ler um número e informar se ele é positivo, negativo ou neutro (zero).
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
//declaração de variáveis do tipo inteiro
int num;
//leitura e armazenamento do valor
printf("Digite um numero\n");
scanf ("%d", &num);
//compara e avalia se o valor é positivo, negativo ou neutro e imprime o resultado
if (num==0)
printf ("O valor lido é neutro\n");
else
if (num>0)
printf ("O valor lido é positivo\n");
else
printf ("O valor lido é negativo\n");
return 0;
}
EXERCÍCIO 19:
/*
Faça a leitura do salário atual e do tempo de serviço de um funcionário. A
seguir, calcule o seu salário reajustado. Funcionários com até 1 ano de
empresa, receberão aumento de 10%. Funcionários com mais de um ano de
tempo de serviço, receberão aumento de 20%.
*/
#include <stdio.h>
#include <stdlib.h>
int main(){
//declaração de variáveis
float salario; //salario é real
float tempo; //ao comparar em até 1 ano, pode ser fração de ano
float novo; //salario reajustado
//leitura do salario
printf("Informe o salario: ");
scanf("%f",&salario);
//leitura do tempo de serviço
printf("Informe o tempo de servico em anos: ");
scanf("%f",&tempo);
/*
1ª parte do if
se o tempo é de até um ano, o reajuste é 10%
ou seja, o novo salario é 110% do antigo
ou seja, é o salário antigo multiplicado por 1.1
2ª parte do if
reajuste de 20%, novo salário é 120%, salário antigo por 1.2
*/
if(tempo<=1)
{
novo=1.1*salario;
printf("O novo salario eh de %.2f",novo);
}
else
{
novo=1.2*salario;
printf("O novo salario eh de %.2f",novo);
}
return 0;
}
EXERCÍCIO 20:
/*
Leitura: Ano atual, ano de nascimento
Exibir: sua idade e classificação
-> 0 a 3 anos: Bebê
-> 4 a 10 anos: Criança
-> 11 a 18 anos: Adolescente
-> 19 a 50 anos: Adulta
-> 51 ou mais: Idoso
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
//Declaração de Variáveis (dois anos e uma idade inteiros)
int ano_atual,ano_nasc,idade;
//Leitura de ambos
printf("Informe o ano atual: ");
scanf("%d",&ano_atual);
printf("Informe o ano de nascimento: ");
scanf("%d",&ano_nasc);
//Cálculo da idade
idade = ano_atual - ano_nasc;
//Exibir idade
printf("Sua idade é: %d \n\n",idade); //soltamos dois ENTER's no final pelo \n
//Exibir Classificação
if(idade<0) printf("Idade Inválida \n"); //não existe idade negativa
else if((0<=idade)&&(idade<=3)) printf("Bebê \n"); //comparei como >=0 e <=3
else if((4<=idade)&&(idade<=10)) printf("Criança \n"); //comparei como >=4 e
<=10
else if((10<idade)&&(idade<19)) printf("Adolescente \n"); //comparei como >10
e <19, que é 11 a 18
else if((18<idade)&&(idade<51)) printf("Adulto\n"); //19 a 50
else printf("Idoso \n"); //o quê restou foi 51 ou mais
return 0;
}
EXERCÍCIO 21:
/*
Informar o número do mês do ano e mostrar o nome do mês por extenso.
Caso o número do mês não exista, exibir a mensagem "Mês inválido".
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
//declaração da variável mes que será de 1 a 12
int mes;
//leitura do numero do mes
printf("Informe o numero do mes: ");
scanf("%d",&mes);
/*
comando switch com 12 casos + default
de 1 a 12, irá imprimir o mes correspondente
o default informa que o numero é inválido, ou seja,
se não estar em [1,12], é inválido
Lembre-se do break
*/
switch(mes)
{
case 1: printf("Janeiro");
break;
case 2: printf("Fevereiro");
break;
case 3: printf("Marco");
break;
case 4: printf("Abril");
break;
case 5: printf("Maio");
break;
case 6: printf("Junho");
break;
case 7: printf("Julho");
break;
case 8: printf("Agosto");
break;
case 9: printf("Setembro");
break;
case 10: printf("Outubro");
break;
case 11: printf("Novembro");
break;
case 12: printf("Dezembro");
break;
default: printf("Mes Invalido");
}
return 0;
}
EXERCÍCIO 22:
/*
Faça um algoritmo que receba o valor do salário de uma pessoa e o valor de
um financiamento pretendido. Caso o financiamento seja menor ou igual a 5
vezes o salário da pessoa, o algoritmo deverá escrever "Financiamento
Concedido"; senão, ele deverá escrever "Financiamento Negado".
*/
#include <stdio.h>
#include <stdlib.h>
int main(){
//declaração de variáveis
float salario,financ;
float razao; //razão entre financiamento e salario
//leitura do salario e financiamento
printf("Digite o salario e o valor do financiamento: ");
scanf("%f%f",&salario,&financ);
//cálculo da razão entre financ e salario
razao=financ/salario;
//se a razao for > 5, será negado. Se não, será concedido
if (razao>5) printf("Financiamento Negado");
else printf("Financiamento Concedido");
return 0;
}
EXERCÍCIO 23:
/*
Calcular e mostrar o salário semanal de uma pessoa:
-> número de horas trabalhadas < 40, a pessoa recebe R$15,00 por hora
-> senão recebe R$600,00 + R$21,00 para cada hora a mais de 40 horas
Leia o número de horas trabalhadas e informe o salário.
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
//Declaração de Variável (horas é inteiro e salário é float)
int horas;
float salario;
//Leitura da quantidade de horas
printf("Numero de horas trabalhadas: ");
scanf("%d",&horas);
//Cálculo do Salário
if(horas<40){ //se horas < 40, salario é R$15.00 por hora
salario=horas*15;
}else{ //senão, vai ser 600 + R$21.00 por hora excedente
salario=600+21*(horas-40); //ou seja, hora_excedente = horas - 40
}
//Impressão do salário
printf("O salario semanal desta pessoa eh %.2f",salario);
return 0;
}
EXERCÍCIO 24:
/*
A taxa de juro depende do tempo. Num banco:
1) 5 anos =< tempo ---> 0.95
2) 4 anos =< tempo < 5 anos ---> 0.9
3) 3 anos =< tempo < 4 anos ---> 0.85
4) 2 anos =< tempo < 3 anos ---> 0.75
5) 1 ano =< tempo < 2 anos ---> 0.65
6) tempo < 1 ano ---> 0.55
Receba o tempo em que os fundos foram mantidos em depósito e informe a taxa de
juros correspondente.
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
/*
Declaração de Variáveis:
Perceba que é complicado fornecer frações de anos. É mais fácil informar o
tempo em meses. A partir daí, dividimos por 12 e sabemos a fração de ano
correpondente.
Por isso, duas variáveis: meses (inteiro) e anos (float).
*/
int meses;
float anos;
//Leitura dos meses
printf("Informe o tempo em meses em que os fundos foram mantidos em
deposito: ");
scanf("%d",&meses);
/*
Cálculo da fração de ano correspondente:
Se colocássemos ano=meses/12; estaria errado. Aqui é uma divisao
de dois inteiros.
Ele fornece um numero inteiro. Ex.: 18/12 daria 1. Como anos é float, anos
receberia 1.00
No entanto, anos deve receber 1.5. Logo, convertemos a divisão inteira para
divisão float
Basta colocar (float) na frente
*/
anos=(float)meses/12;
/*
Impressão dos valores correspondentes
Esta é outra maneira de encadear IF's. Repare que no último else, ainda colocamos
uma condição if. Se não o tivéssemos feito, anos negativos poderiam ser
considerados
*/
if(anos>=5) printf("Taxa de Juros de 0.95");
else if(anos<5 && anos>=4) printf("Taxa de Juros de 0.90");
else if(anos<4 && anos>=3) printf("Taxa de Juros de 0.85");
else if(anos<3 && anos>=2) printf("Taxa de Juros de 0.75");
else if(anos<2 && anos>=1) printf("Taxa de Juros de 0.65");
else if(anos<1 && anos>0) printf("Taxa de Juros de 0.55");
return 0;
}
EXERCÍCIO 25:
/*
Classifica-se a classe de peso e taxa de registro de um carro pelo seu ano e peso.
1) Ano <= 1970:
a) peso < 1200 ---> Classe 1 / Taxa de 16.50
b) 1200 =< peso <= 1700 ---> Classe 2 / Taxa de 25.50
c) 1700 < peso ---> Classe 3 / Taxa de 46.50
2) 1971 <= Ano <= 1979:
a) peso < 1200 ---> Classe 4 / Taxa de 27.00
b) 1200 =< peso <= 1700 ---> Classe 5 / Taxa de 30.50
c) 1700 < peso ---> Classe 6 / Taxa de 52.50
3) Ano >= 1980:
a) peso < 3600 ---> Classe 7 / Taxa de 19.50
b) 3600 <= peso ---> Classe 8 / Taxa de 52.50
Programa recebe peso e ano -> informa classe e taxa
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
//Declaração de Variáveis
int ano;
float peso;
//Leitura de ambas
printf("Informe o ano do carro: ");
scanf("%d",&ano);
printf("Informe o peso do carro: ");
scanf("%f",&peso);
//Comparações e Impressões dos Valores Correspondentes
if(ano<=1970) //1º caso (observe esta maneira de encadear IF's)
{
if(peso<1200)
printf("Classe: 1 Taxa de Registro: R$16.50");
else if(peso>=1200 && peso<=1700)
printf("Classe: 2 Taxa de Registro: R$25.50");
else
printf("Classe: 3 Taxa de Registro: R$46.50"); //senão > 1700 (situação
que restou)
}
else if(ano>1970 && ano<1980) //Podemos colocar um "senão se" direto ou colocar
este "se" dentro do "senão"
{
if(peso<1200)
printf("Classe: 4 Taxa de Registro: R$27.00");
else if(peso>=1200 && peso<=1700)
printf("Classe: 5 Taxa de Registro: R$30.50");
else
printf("Classe: 6 Taxa de Registro: R$52.50");
}
else //aqui não precisa de outro if. O quê restou foi ano > = 1980
{
if(peso<3600)
printf("Classe: 7 Taxa de Registro: R$19.50");
else
printf("Classe: 8 Taxa de Registro: R$52.50");
}
return 0;
}
EXERCÍCIO26:
/*
Ler as informações de um aluno:
-> notas em 2 provas (entre 0 e 10)
-> nota de um trabalho (entre 0 e 10)
-> sua frequência (número de ausências)
Condições:
-> reprovado se faltou mais de 15 aulas
-> aprovado se não for reprovado por falta e média >= 6,0
-> Prova final se média < 6,0
Média:
-> peso 3 para a 1ª prova
-> peso 5 para a 2ª prova
-> peso 2 para o trabalho
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
/*
Declaração de Variáveis:
p1,p2: notas das provas
trab: nota do trabalho
media: média final do aluno: 3*p1 + 5*p2 + 2*trab
Essa soma dividido por 10 é a média
freq: total de ausências
*/
float p1,p2,trab,media;
int freq;
//Leitura dos Dados
printf("Informe a nota da 1ª prova: ");
scanf("%f",&p1);
printf("Informe a nota da 2ª prova: ");
scanf("%f",&p2);
printf("Informe a nota do trabalho: ");
scanf("%f",&trab);
printf("Informe a frequência (total de ausências): ");
scanf("%d",&freq);
//Cálculo da Média
media=(3*p1+5*p2+2*trab)/10;
//1º Teste: frequência
if(freq>15) printf("REPROVADO");
else //não foi reprovado por frequência. Agora é a média que qualifica
{
if(media>=6) printf("APROVADO");
else printf("PROVA FINAL");
}
return 0;
}
EXERCÍCIO 27:
/*
Leia um código e apresente o cargo correspondente
Se não existir o código, diga "código inválido"
Código Cargo
101 Vendedor
102 Atendente
103 Auxiliar Técnico
104 Assistente
105 Coordenador de Grupo
106 Gerente
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
int codigo; //criação da variável a ser utilizada na múltipla escolha
//Leitura do Código
printf("Digite o código do cargo do funcionário: ");
scanf("%d", &codigo);
switch(codigo) //código da múltipla escolha
{
case 101: printf("Cargo: Vendedor"); //Se a variável for igual a 101
break; //interrompe aqui. Se não o tiver, continuará executando todas as
tarefas dos outros case
case 102: printf("Cargo: Atendente");
break;
case 103: printf("Cargo: Auxiliar Técnico");
break;
case 104: printf("Cargo: Assistente");
break;
case 105: printf("Cargo: Coordenador de Grupo");
break;
case 106: printf("Cargo: Gerente");
break;
// Caso a variável não assuma os valores acima, o DEFAULT é executado.
default: printf("Código Inválido."); //não precisa de break;
}
return 0;
}
EXERCÍCIO 28:
/*
Código de 1 a 4, que indica o tipo seguinte:
Código Tipo da unidade
1 CD-ROM (700MB)
2 DVD-ROM (4.7GB)
3 DVD-9 (8.54 GB)
4 Blu-Ray (25 GB)
Receba o codigo e informe o tipo correto de unidade de disco.
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
int codigo; //Declaração da variável codigo que será usado na múltipla escolha
//Leitura do Codigo
printf("Informe o código: ");
scanf("%d",&codigo);
switch(codigo){ //múltipla escolha entre 4 casos específicos e um default
case 1: printf("CD-ROM (700MB)"); //caso codigo= =1
break;
case 2: printf("DVD-ROM (4.7GB)"); //caso codigo= =2
break;
case 3: printf("DVD-9 (8.54 GB)"); //caso codigo= =3
break;
case 4: printf("Blu-Ray (25 GB)"); //caso codigo= =4
break;
default: printf("Código Inválido"); //caso codigo não seja 1,2,3 nem 4
}
return 0;
}
EXERCÍCIO 29:
/*
Escreva um programa que receba dois números reais e um código de seleção
do usuário. Se o código digitado for 1, faça o programa adicionar os dois
números previamente digitados e mostrar o resultado; se o código de seleção
for 2, os números devem ser multiplicados; se o código de seleção for 3, o
primeiro número deve ser dividido pelo segundo. Se nenhuma das opções
acima for escolhida, mostrar "Código inválido".
*/
#include <stdio.h>
#include <stdlib.h>
int main(){
//declaração dos dois numeros reais e resultado da operação realizada
float a,b,result;
//declaração do codigo de seleção
int cod;
//leitura dos dois numeros
printf("Insira dois numeros reais : ");
scanf("%f%f",&a,&b);
//leitura do codigo
printf("Insira o codigo: ");
scanf("%d",&cod);
/*
Opções disponíveis:
cod = 1 : somar
cod = 2 : multiplicar
cod = 3 : dividir
outro cod = invalido
*/
switch(cod)
{
case 1: result=a+b;
printf("A soma eh: %.2f",result);
break;
case 2: result=a*b;
printf("O produto eh: %.2f",result);
break;
case 3: result=a/b;
printf("O quociente eh: %.2f",result);
break;
default: printf("Codigo Invalido");
}
return 0;
}
EXERCÍCIO 30:
/*
Transforma a nota de um aluno em conceito. As notas
10 e 9 receberão conceito A, as notas 8 e 7 receberão conceito B, as notas 6
e 5 receberão conceito C e abaixo de 5 conceito D.
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
//declaração de variaveis
int nota;
//leitura da nota do aluno
printf ("Informe o valor da nota\n");
scanf ("%d", ¬a);
//compara a nota e atribui o conceito correspondente
if (nota<0 || nota>10)
printf ("Nota invalida\n");
else
if (nota==9 || nota==10)
printf ("Conceito A\n");
else
if (nota==8 || nota==7)
printf ("Conceito B\n");
else
if (nota==6 || nota==5)
printf ("Conceito C\n");
else
printf ("Conceito D\n");
return 0;
}
EXERCÍCIO 31:
/*
2 valore inteiros positivos entre 1 e 10
se soma < 8, informe média
se soma = 8, informe produto
se soma > 8, informe quociente do maior pelo menor
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
//declaração de variáveis
int n1, n2, soma, produto, aux;
float media, quociente;
//leitura dos inteiros excluindo fora do intervalo [1,10]
do{
printf("Digite dois inteiros entre 1 e 10: ");
scanf ("%d %d",&n1,&n2);
}while((n1<1)||(n1>10)||(n2<1)||(n2>10)); //n1 e n2 menor que 1 e maior que 10
estão fora
//calcula a soma
soma=n1+n2;
//se a soma for menor que 8, pede-se a média
if(soma<8)
{
media=(n1+n2)/2; //cálculo da média
printf("A média eh %.2f",media);
}
else //se a soma não é menor que 8, então
{
if(soma==8) //se soma = 8, pede-se o produto
{
produto=n1*n2; //cálculo do produto
printf("O produto eh %d",produto);
}
else //senão a soma é maior e pede-se o quociente do maoir pelo menor
{
//precisamos ver quem é o maior
if (n1<n2) //queremos jogar o maior no n1. Então se o maior for n2, trocamos
{
aux=n1; //auxiliar recebe n1
n1=n2; //n1 recebe n2
n2=aux; //n2 recebe auxiliar, ou seja, n2 recebeu o valor de n1}
//O quociente pode ser float
quociente=(float)n1/n2; //colocando (float), nós convertemos a divisão inteira
n1/n2
printf("O quociente eh %.2f",quociente);
}
}
return 0;
}
EXERCÍCIO 32:
/*
Escrever um algoritmo que lê 10 valores e conte quantos destes valores são
negativos, escrevendo esta informação.
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
/*
Declaração de Variáveis
numero: numero digitado, que é float
i: variável que será usado no for como variável de controle
cont: contador de números negativos. Começa com 0, pois não existe nenhum
negativo inicialmente
*/
float numero;
int i,cont=0;
for(i=1;i<=10;i++)
/*
i começa com 1 e vai até 10 aumentando de 1 em 1
Ou seja, iremos realizar os comandos abixo 10X, para 10 numeros
*/
{
//Leitura do numero (ocorrerá 10X)
printf("Digite o %dº numero: ",i); //%dº é um recurso estilístico. Aparece
1º,2º,...
scanf("%f",&numero);
if(numero<0) cont++; //se o numero lido for negativo, cont recebe +1
}//aqui o i recebe +1. Se ele continuar <=10, repete mais uma vez. Se não, sai do for
//ao chegar aqui, cont terá recebido a quantidade de negativos entre os 10 numeros
//Impressão da quantidade
printf("A quantidade de numeros negativos são %d",cont);
return 0;
}
EXERCÍCIO 33:
/*
Escreva um algoritmo que leia 20 valores e encontre o maior e o menor
deles. Mostre o resultado.
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
/*
Declaração das Variáveis
maior: armazenará o maior valor
menor: armazenará o menor valor
cont: contador que limitará o programa (vale 1 a 20)
valor: valor lido
*/
int maior,menor,valor,cont=1;
//Leitura do 1º Valor
printf("Digite o valor 1: ");
scanf("%d",&valor); //armazena na variável valor
maior = valor; //inicializa maior com o primeiro valor digitado
menor = valor; //inicializa menor com o primeiro valor digitado
//Perceba que o 1º valor digitado é o maior e o menor até agora
cont++; //incrementa contador. Aqui eu já tive um valor. O próximo será o 2. Logo,
cont=2
do //faça uma vez primeiro...
{
//Leitura dos novos valores
printf("Digite o valor %d: ",cont);
scanf("%d", &valor);
//Vamos comparar com a variavel maior que armazena o maior valor até aqui
if(valor > maior) //se o valor é maior que o maior valor, então
maior = valor; //a variável maior armazena o novo valor
if(valor < menor) //de forma análoga para o menor
menor = valor;
cont++; //Vamos ler o próximo numero
}while(cont<=20); //... e continuaremos repetindo tudo até que cont ultrapasse 20
//Poderíamos ter usado somente while aqui. Seria while(cont<=20){...}
printf("\n\nMaior: %d\nMenor: %d\n", maior, menor); //impressão do maior
valor e do menor
return 0;
}
EXERCÍCIO 34*:
/*
Faça um algoritmo que lê um valor N inteiro e positivo e que calcula e
escreve o fatorial de N (N!).
Lembre-se: Não existe fatorial de número negativo e o exercício não permite de zero
*/
#include <stdio.h>
#include <stdlib.h>
int main(){
/*
Declaração de Variáveis
N foi iniciado com 0 para que entre no 1º while
res é o resultado. Ele receberá ele mesmo multiplicado pela próxima
parcela do fatorial. Para não modificar o produto final, ele
deve ser neutro. Logo, começa com 1 que é o fator neutro da
multiplicação.
*/
int N=0,res=1;
/*
Comando While:
enquanto N<=0, vai ficar solicitando um numero positivo
irá fazer a verificação se este N é > 0. Aí vai parar.
*/
while(N<=0)
{
printf("Informe N: ");
scanf("%d",&N);
}
//Imprimir a mensagem abaixo
printf("O fatorial de %d eh: ",N);
//Código (explicação no final):
while(N>=1)
{
res*=N; //res=res*N;
if(N!=1) printf("%d * ",N);
else printf("%d = ",N);
N--;
}
printf("%d",res);
return 0;
}
/*
Código:
1) Vamos imprimir cada componente do fatorial e um sinal
2) o fatorial será calculado pegando N * (N-1) * (N-2) * ... * 1 = res
Percebe-se que iremos diminuir de 1 unidade o N a cada loop.
Aí iremos imprimir este novo N mais um sinal *.
Quando ele chegar a 1, será o último loop. Imprimiremos 1 =
No próximo, N será zero. Aí pára. Por isso no while, está enquanto N>=1
3) O resultado res receberá ele mesmo multiplicado pelo novo N a cada loop
até chegar a N=1
4) Como dito em (2), se N é diferente de 1, iremos imprimir N e o sinal *
Quando N for 1, ou seja, NÃO(DIFERENTE), aí iremos imprimir N e =
5) Depois retiramos uma unidade de N.
6) Logo em seguida, imprimimos o resultado final já multiplicado por todos os N's
Note que a impressão ocorre sem saltar "ENTER's"
*/
EXERCÍCIO 35:
/*
A prefeitura de uma cidade fez uma pesquisa entre seus habitantes,
coletando dados sobre o salário e número de filhos. A prefeitura deseja
saber:
a) média do salário da população;
b) média do número de filhos;
c) maior salário;
d) percentual de pessoas com salário até R$100,00;
O final da leitura de dados se dará com a entrada de um salário negativo.
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
/*
Declaração de Variáveis:
filhos: quantidade de filhos
salario: recebe o salario informado pelo usuario
contp: contador de população -> cada novo salario é mais um na população
mediaF: média de filhos. Primeiramente somaremos todos os filhos aqui.
Depois, dividiremos este valor pela população (contp) armazenando
nesta mesma variável mediaF
mediaS: média de salário. Análogo à mediaF.
maior: maior salário. Inicialmente será 0. Não existe salário negativo, logo
o menor possível é zero.
perc: percentual de pessoas com salario <= 100. Será uma espécie de contador
primeiramente. Depois usaremos regra de três. Assim,
perc=(perc*100)/contp %
*/
int filhos,contp=0;
float salario,mediaF=0,mediaS=0,maior=0,perc=0;
do{ //faremos uma vez...
//Leitura do 1º salário
printf("Informe o salário: ");
scanf("%f",&salario);
if(salario>=0){ //se salario for positivo ou nulo, faz o restante
contp++; //população aumentou em uma unidade
mediaS+=salario; //somaremos o salario em mediaS (mediaS = mediaS +
salario)
//se o salario é maior que o maior anteriormente registrado, maior recebe ele
if(salario>maior) maior=salario;
//Ver se enquadra na parte menor de 100
if(salario<=100) perc++; //mais um igual ou abaixo de 100
//Leitura do numero de filhos
printf("Numero de Filhos: ");
scanf("%d",&filhos);
mediaF+=filhos; //somaremos os filhos aqui (mediaF = mediaF + filhos)
}
//se salario menor que 0 não entra no if
}while(salario>=0); //...econtinuamos repetindo pra sempre até que salario seja
negativo
//aqui já temos todos os salários registrados
//Cálculo da média do salário da população
mediaS = mediaS/contp;
//Cálculo da média do número de filhos
mediaF = mediaF/contp;
//percentual de pessoas com salário até R$100,00
perc = (perc*100)/contp;
//Impresssão de Informações
if(contp!=0) //contp pode ser 0 se o 1º salario for negativo. Logo não tem que
informar nada
{
printf("\n Média de Salário: %.2f \n",mediaS);
printf("\n Média de Filhos: %.2f \n",mediaF);
printf("\n Maior salário: %.2f \n",maior);
printf("\n Percentual de pessoas com salário até 100: %.2f \n",perc);
}
return 0;
}
EXERCÍCIO 36:
/*
Chico tem 1,50 metro e cresce 2 centímetros por ano, enquanto Zé tem 1,30
metro e cresce 3 centímetros por ano. Construa um algoritmo que calcule e
imprima quantos anos serão necessários para que Zé seja maior que Chico.
*/
#include <stdio.h>
#include <stdlib.h>
int main(){
//declaração de variáveis
int anos=0; //quantidade de anos que se passam até zé ficar maior
float chico=1.5,ze=1.3; //altura de cada um
while(chico>=ze) //enquanto chico maior que ze, ambos aumentam e passa 1 ano por
loop
{
chico=chico+0.02; //chico cresce 0.02
ze+=0.03; //ze cresce 0.03 -> Repare que ze+=0.03; é a mesma coisa que
ze=ze+0.03;
anos++; //passou 1 ano
}
/*
só saiu do while quando ze ficou maior. anos irá valer
a quantidade de anos necessários para isso
*/
printf("Anos: %d",anos); //imprime-se a quantidade de anos
return 0;
}
EXERCÍCIO 37:
/*
Construir um algoritmo que calcule a média aritmética de vários valores
inteiros positivos, lidos externamente. O final da leitura acontecerá quando
for lido um valor negativo.
*/
#include <stdio.h>
#include <stdlib.h>
int main(){
/*
declaração de variáveis
n: numero digitado
cont: quantos numeros foram (inicialmente é zero)
soma: a soma de todos (inicialmente é zero)
A média é soma/cont que pode ser float
Por isso, o cont OU o soma deve ser float. Escolhemos o soma
Se quiser fazer soma como int, media deve ser:
media=(float)cont/soma; -> (float) converte a divisão inteira para real
*/
int n,cont=0;
float soma=0;
//Iremos ler o 1º numero e ficar repetindo enquanto n >= 0 (quando n<0, interrompe)
do{
printf("Informe o numero inteiro e positivo: ");
scanf("%d",&n); //leitura de n
if(n>=0) //se n não é negativo, iremos fazer a soma e acrescentar 1 no contador
cont
{
soma+=n; //é a mesma coisa que soma=soma+n;
cont++; //é a mesma coisa que cont=cont+1;
}
}while(n>=0); //iremos ficar repetindo até que n torne-se negativo
//Agora, n foi negativo. Já somamos todos os anteriores e contamos quantos foram
if(cont!=0) //se cont for igual a 0, quer dizer que não houve numero nenhum. O
negativo foi o 1º
printf("A media aritmetica eh: %.2f",soma/cont); //imprimimos a media
/*
observe que podíamos criar uma variável media=soma/cont;
depois colocaríamos media no printf
Aqui mostro outro jeito: colocar a operação direta no printf
*/
return 0;
}
EXERCÍCIO 38:
/*
- 1,2,3,4 = voto para os respectivos candidatos;
- 5 = voto nulo;
- 6 = voto em branco;
Leia o código, calcule e escreva as seguintes informações:
- total de votos para cada candidato;
- total de votos nulos;
- total de votos em branco;
Como finalizador do conjunto de votos, utilize o valor 0.
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
/*
Declaração de Variáveis
codigo: codigo de votação
c1,c2,c3,c4,nulo,branco: contadores para os candidatos 1,2,3 e 4 e para nulo e
branco
*/
int codigo,c1=0,c2=0,c3=0,c4=0,nulo=0,branco=0;
do{ //faça uma vez....
//Leitura do código
printf("Informe o codigo: ");
scanf("%d",&codigo);
//se codigo é diferente de zero, faça:
if(codigo!=0){
switch(codigo){ //múltipla escolha
case 1: c1++; //+1 voto para o 1
break;
case 2: c2++; //+1 voto para o 2
break;
case 3: c3++; //+1 voto para o 3
break;
case 4: c4++; //+1 voto para o 4
break;
case 5: nulo++; //+1 voto nulo
break;
case 6: branco++; //+1 voto branco
break;
default: printf("\n Código Inválido \n\n"); //codigos negativos e maiores
que 6
}
}
}while(codigo!=0); //... continua repetinfo até codigo ser 0
//Impressão dos resultados
printf("\nTotal de votos para o candidato 1: %d \n",c1);
printf("Total de votos para o candidato 2: %d \n",c2);
printf("Total de votos para o candidato 3: %d \n",c3);
printf("Total de votos para o candidato 4: %d \n",c4);
printf("Total de votos nulos: %d \n",nulo);
printf("Total de votos brancos: %d \n",branco);
return 0;
}
EXERCÍCIO 39:
/*
Escrever um algoritmo que leia uma variável n e calcule a tabuada de 1 até n.
Mostre a tabuada na forma:
1 x n = n
2 x n = 2n
3 x n = 3n
...............
n x n = n2
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
//declaração de variáveis (n é o número e i é usado no for)
int n,i;
//leitura do n
printf("Informe n: ");
scanf("%d",&n);
/*
FOR: iremos imprimir n linhas.
Repare que o 1º número começa em 1 e vai até n (1<=i<=n)
Então usaremos i pra "correr" de 1 a n
O 2º número é sempre o n
O 3º número é i*n (multiplicação)
PRINTF: 3 números inteiros impressos: i, n e o resultado i*n
*/
for(i=1;i<=n;i++)
{
printf("%d X %d = %d \n",i,n,i*n);
}
return 0;
}
EXERCÍCIO 40:
/* Lê os valores n1 e n2 e imprime o intervalo fechado entre esses dois valores. */
#include <stdio.h>
#include <stdlib.h>
int main()
{
//declaração de variaveis
int n1, n2, aux;
//leitura dos inteiros
printf("Digite dois valores inteiros\n");
scanf ("%d%d", &n1,&n2);
//compara n1 e n2 e atribui o menor valor à variavel n1
if (n1>n2)
{
aux=n2;
n2=n1;
n1=aux;
}
printf ("Intervalo fechado entre %d e %d:\n\n", n1, n2);
/* A cada loop o valor de n1 aumenta uma unidade e é impresso.
Quando n1 for maior que n2 sai do loop e realiza o proximo comando*/
while (n1<=n2)
{
printf ("%d\n", n1);
n1++; //n1=n1+1;
}
return 0;
}
EXERCÍCIO 41:
/*
Escrever um algoritmo que leia um número n que indica quantos valores
devem ser lidos a seguir. Para cada número lido, mostre uma tabela
(1 linha e duas colunas) contendo o valor lido e o fatorial deste valor.
(Ver questão 34)
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
/*
Declaração de Variáveis
n: quantidade de valores a calcular o fatorial
numero:numero a ser fatorado
result: é o resultado. Ele receberá ele mesmo multiplicado pela próxima
parcela do fatorial. Para não modificar o produto final, ele
deve ser neutro. Logo, começa com 1 que é o fator neutro da
multiplicação. result será modificado constantemente para cada numero
fator: é a parcela que irei multiplicar com o resultado anterior até que o
fatorial esteja calculado. Começará com 1 e irá até numero
repetir: número de repetições do cálculo do fatorial. Começa com 1 e vai até n
*/
int n,result,fator,numero,repetir=1;
//Leitura da qtd de valores
printf("Quantidade de Valores: ");
scanf("%d",&n);
do{ //faça uma vez...
//"resetando" o resultado e a fator para cada numero
result=1;
fator=1;
//Leia o numero a ser fatorado
printf("Valor: ");
scanf("%d",&numero);
if(numero==0 || numero==1) //fatoriais de 0 e 1 é 1
{
result=1; //resultado direto
}
else //caso seja 2 pra frente...
{
while(fator<=numero) //... result = result * fator até que fator se iguale ao
numero
{
result=result*fator;
fator++;
}
}
/*
aqui, o fatorial do numero já foi calculado
antes de passar para o próximo, temos que imprimir em forma de tabela
Usaremos tabulação: \t
*/
printf("\n Numero: %d \t Fatorial: %d \n\n",numero,result);
repetir++; //repetir aumenta uma unidade. Vamos para o próximo numero
}while(repetir<=n); //... e continue até que repetir se iguale a n (última vez)
//chegando aqui, todos os n valores tiveram seu fatorial calculado e impresso
return 0;
}
EXERCÍCIO 42:
/*
Escrever um algoritmo que leia um número não determinado de valores e
calcule a média aritmética dos valores lidos, a quantidade de valores
positivos, a quantidade de valores negativos e o percentual de valores
negativos e positivos. Mostre os resultados.
ATENÇÃO: o enunciado não deixa claro mas será usado o valor 0 para
simbolizar o fim da entrada de dados
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
/*
Declaração de Variáveis
numero: numero inteiro lido
cont: quantidade total de numeros lidos (inteiro)
media: no 1º momento, será a soma de todos os números e no 2º momento,
media = media/cont. Assim, media será a média aritmética dos numeros (soma/qtd)
c1 e c2: no 1º momento, eles se comportarão como inteiros. Eles serão os
contadores de números positivos e negativos respectivamente. No 2º momento,
c1=(c1*100)/cont, ou seja, c1 será o PERCENTUAL de valores positivos em (cont)
numeros lidos. Aqui ele será float. Por isso, foi declarado como float
*/
int numero,cont=0;
float media=0,c1=0,c2=0;
do //faça uma vez...
{
//Leia o numero
printf("Digite um numero: ");
scanf("%d",&numero);
if(numero!=0) //se o numero for diferente de zero, faça:
{
media+=numero; //a media recebe a soma de todos os numeros
cont++; //cont contará a qtd de numeros lidos
if(numero>0) //se numero é positivo...
{
c1++; //...contador dos positivos c1 recebe +1
}else c2++; //De forma análoga, c2 recebe +1 se for negativo
}
}while(numero!=0); //... até que numero seja 0
//Aqui a media tem a soma de todos os numeros
//Cálculo da Média aritmética
media=media/cont;
//Impressão
printf("\n Média Aritmética: %f",media);
//Aqui c1 e c2 são as quantidades de numeros positivos e negativos
//estou imprimindo valores float com 0 casas decimais. É como se fossem inteiros
printf("\n Quantidade de Valores Positivos: %.0f",c1);
printf("\n Quantidade de Valores Negativos: %.0f",c2);
//Aqui eu modificarei os valores de c1 e c2. Eles virarão percentuais.
c1=(c1*100)/cont;
c2=(c2*100)/cont;
//Agora c1 e c2 mudaram de valor. Irei imprimí-los com 2 casas decimais:
printf("\n Percentual de Valores Positivos: %.2f",c1);
printf("\n Percentual de Valores Negativos: %.2f",c2);
return 0;
}
EXERCÍCIO 43:
/*
Escrever um algoritmo que leia uma quantidade desconhecida de números e
conte quantos deles estão nos seguintes intervalos: [0,25], [26,50], [51,75] e
[76,100] . A entrada de dados deve terminar quando for lido um número
negativo.
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
/*
Declaração de Variáveis
numero: numero lido
c1,c2,c3,c4: contadores de cada intervalo
*/
int numero,c1=0,c2=0,c3=0,c4=0;
do{ //faça uma vez...
//Leia o numero
printf("Numero: ");
scanf("%d",&numero);
if(numero>=0) //se o numero não é negativo, faça:
{
if (numero>=0 && numero<=25) c1++; //intervalo 1
else if(numero>=26 && numero<=50) c2++; //intervalo 2
else if(numero>=51 && numero<=75) c3++; //intervalo 3
else if(numero>=76 && numero<=100) c4++; //intervalo 4
}
}while(numero>=0); //... enquanto numero >= 0
//Impressão dos resultados
printf("\n No intervalo [0,25] tem %d numeros lidos",c1);
printf("\n No intervalo [26,50] tem %d numeros lidos",c2);
printf("\n No intervalo [51,75] tem %d numeros lidos",c3);
printf("\n No intervalo [76,100] tem %d numeros lidos",c4);
return 0;
}
EXERCÍCIO 44:
/*
Faça um algoritmo que leia uma quantidade não determinada de números
positivos. Calcule a quantidade de números pares e ímpares, a média de
valores pares e a média geral dos números lidos. O número que encerrará a
leitura será zero.
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
/*
Declaração de variáveis
n: numero
contp: contador de pares
conti: contador de ímpares
somap: soma dos pares
somat: soma total
As médias serão a soma dividido pelos contadores, que podem ser float
mediap: média dos pares
mediat: média total (Observe que a quantidade total é contp + conti)
*/
int n,contp=0,conti=0,somap=0,somat=0; //inicialização na declaração
float mediap,mediat;
do{
printf("Informe n positivo: ");
scanf("%d",&n); //leitura do 1º n
if(n>0) //Se n for positivo realiza-se as contas
{
somat+=n; //some o n na soma total
if(n%2==0) //se n for par
{
contp++; //iremos acrescentar +1 no contador de pares
somap+=n; //iremos somar o n par ao somap (somap=somap+n)
}
else conti++; //se n for ímpar, somente some +1 no conti
}
}while(n!=0); //continua solicitando n's até que digite 0
//Cálculo das Médias
mediap=(float)somap/contp; //converti a divisão inteira para float
mediat=(float)somat/(contp+conti); //idem a anterior.
//Impressão dos Valores
printf("\n Quantidade de Pares: %d",contp);
printf("\n Quantidade de Ímpares: %d",conti);
printf("\n Média dos Pares: %.2f",mediap);printf("\n Média Total: %.2f",mediat);
return 0;
}
EXERCÍCIO 45:
/*
Uma empresa deseja aumentar seus preços em 20%. Faça um algoritmo que
leia o código e o preço de custo de cada produto e calcule o preço novo.
Calcule também, a média dos preços com e sem aumento. Mostre o código e
o preço novo de cada produto e, no final, as médias. A entrada de dados
deve terminar quando for lido um código de produto negativo.
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
/*
Declaração de Variáveis
codigo: código do produto (negativo sai)
cont: quantidade de produtos
preco: primeiramente será preço atual do produto. Depois será o preço novo do
produto (120% do atual)
media1: primeiramente será a soma dos preços sem aumento. Depois será a média
deles
media2: primeiramente será a soma dos preços com aumento. Depois será a média
deles
*/
int codigo,cont=0;
float preco,media1=0,media2=0;
do //Faça uma vez...
{
//Leitura do código
printf("Codigo: ");
scanf("%d",&codigo);
if(codigo>=0) //códigos negativos são inválidos
{
cont++; //temos +1 produto
//Leitura do preço atual
printf("Preço atual: ");
scanf("%f",&preco);
media1+=preco; //A media1 = media1 + preco (soma dos preços sem aumento)
//Cáluclo do novo preço zlterando o valor de preco
preco=1.2*preco;
media2+=preco; // media2 = media2 + preco, sendo este o NOVO preço COM
aumento
//Impressão do código e do novo preço
printf("\n Codigo: %d Preço Novo: %.2f \n\n",codigo,preco);
}
}while(codigo>=0); //...enquanto codigo >= 0
/*
aqui a media1 e media2 somaram todos os preços possíveis
temos de calcular as médias verdadeira, que é a soma/cont
perceba que se eu colocar um codigo negativo "de cara",
a divisão será 0/0, que é indeterminado e dará erro
*/
if(cont!=0) //evitaremos o 0/0
{
media1=media1/cont; //cálculo da média dos preços antigos
media2/=cont; //cálculo da média dos novos preços
/*
Observe as reduções abaixo:
soma=soma+numero; -> soma+=numero
diferenca=diferenca-numero; -> diferenca-=numero
mult=mult*numero -> mult*=numero
div=div/numero -> div/=numero
Tudo isso é válido e muito útil
*/
//Impressão das Médias:
printf("\n\n Média dos Preços Antigos: %.2f",media1);
printf("\n\n Média dos Preços Novos: %.2f \n",media2);
}
return 0;
}
EXERCÍCIO 46:
/*
Escreva um algoritmo que gere o números de 1000 a 1999 e escreva aqueles
que dividido por 11 dão resto igual a 5.
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
//declaração de variáveis (n será o número que vai de 1000 a 1999)
int n;
for(n=1000;n<=1999;n++) //1000<=n<=1999 e n vai aumentando de 1 a cada loop
{
if(n%11==5) //lembre-se que o resto da divisão é %. Se este for 5 entra no
if
printf("%d \n",n); //iremos imprimir o numero n específico onde n%11==5
}
return 0;
}
EXERCÍCIO 47:
/*
Escreva um algoritmo que lê um valor n inteiro e positivo e que calcula a
seguinte soma:
S := 1 + 1/2 + 1/3 + 1/4 + ... + 1/n
O algoritmo deve escrever cada termo gerado e o valor final de S.
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
/*
Declaração de Variáveis
n: número positivo
i: denominador que varia de 2 a n
S: soma das frações. Será um float. Começa com 1.0, pois n pode
ser 1 ou um numero maior que 1. Em todos, S irá valer pelo menos 1
*/
int n,i;
float S=1.0;
/*
Leitura do numero n
n deve ser positivo. Pede-se o n uma vez. Se for <= 0, continua pedindo
*/
do{
printf("Informe n positivo: ");
scanf("%d",&n);
}while(n<=0);
/*
1º CASO: n= =1
Irei imprimir: S = 1 (cada termo gerado)
S = 1 (valor final de S)
*/
if(n==1)
printf("\n S := 1 \n\n S := 1 \n");
//2º CASO: explicação no final
else
{
printf("\n S := 1 + ");
for(i=2;i<=n;i++)
{
S+=(float)1/i;
if(i!=n) printf("1/%d + ",i);
else printf("1/%d",i);
}
printf("\n\n S := %.2f \n",S);
}
return 0;
}
/*
2º CASO: n é diferente de 1
Primeiro imprime o 1º termo gerado S := 1 +
A partir daqui, o denominador i varia de 2 até o numero n
S será o somatório dos termos 1/i, sendo que seu valor inicial é 1
S é float. Para que a divisão 1/i não seja a parte inteira,
deve-se converter a divisão para float colocando (float) na frente
Se o i for diferente de n (não é o último termo), imprime 1/i e o sinal +
Senão (i= =n, ou seja, é o último termo), só coloca 1/i
Depois de tudo isso, os termos já foram impressos
Agora imprime o valor final de S, com duas casas decimais (escolha arbitrária)
*/
EXERCÍCIO 48:
/*
Escrever um algoritmo que lê 10 valores, um de cada vez, e conte quantos
deles estão no intervalo [10,20] e quantos deles estão fora do intervalo,
escrevendo estas informações.
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
/*
Declaração de Variáveis
numero: numero lido
i: variável de controle do comando de repetição for
cont1: contador de quantos numeros estão no intervalo [10,20]
cont2: contados de quantos estão fora
*/
int numero,i,cont1=0,cont2=0;
//Código que repetirá os comandos 10X
for(i=1;i<=10;i++) //i valerá de 1 a 10
{
//Leitura do numero
printf("Numero: ");
scanf("%d",&numero);
//Teste do intervalo
if(numero>=10 && numero<=20) cont1++; //se está no inetrvalo, cont1 recebe
+1
else cont2++; //senão cont2 recebe +1
}
//Impressão do resultado
printf("\n %d numeros estão no intervalo [10,20] e %d numeros estão fora
\n",cont1,cont2);
return 0;
}
EXERCÍCIO 49:
/*
Escrever um algoritmo que gere e escreva os 5 primeiros números perfeitos.
Um número perfeito é aquele que é igual a soma dos seus divisores EXCLUINDO
ELE MESMO. (Ex.: 6 = 1+2+3; 28= 1+2+4+7+14 etc).
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
/*
Decalaração de Variáveis
numero: será os números de 1 a infinito
iremos testar cada numero até achar os 5 primeiros perfeitos
cont: contador de quantos números perfeitos foram encontrados
i: valor de controle do for
será utilizado para se determinar os divisores do numero
irá valer de 1 até o numero-1, já que o próprio número é desconsiderado
soma: somatório dos divisores
como i irá se alterar constantemente, precisamos somar os divisores
encontrados. No final, se esse somatório for igual ao numero,
temos nosso numero perfeito
*/
int numero=1,cont=0,soma,i;
do //Faça uma vez...
{
soma=0; //resetei a soma para cada numero a ser experimentado
//i irá correr todos os prováveis divisoresde numero exceto ele mesmo
for(i=1;i<numero;i++) //não precisa de { }, pois há só um comando, o if
//se o numero for divisível por i, achamos um divisor
if(numero%i==0) soma+=i; //soma dos divisores recebe o divisor i
//aqui a soma de todos os divisores já foi feita
if (soma==numero) //se a soma for igual ao numero, achamos um perfeito
{
printf(" %d ",numero); //impressão do perfeito
cont++; //achamos um perfeito
}
numero++; //Vamos verificar o próximo número
}while(cont<4); //até que cont torne-se 4
/*
ATENÇÃO:
O exercício pediu os 5 primeiros. O correto seria while(cont<5)
No entanto, os números perfeitos são:
{6,28,496,8.128,33.550.336}
O 5º número é enorme e o computador demora tempo demais para processar
Por comodidade, acharemos os 4 primeiros
*/
return 0;
}
EXERCÍCIO 50*:
/*
Escrever um algoritmo que leia um valor N inteiro e positivo e que calcula o
valor de E. Imprime o resultado de E ao final.
E = 1 + 1 / 1! + 1 / 2! + 1 / 3! + 1 / N!
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
/*
declaração de variáveis
N: numero
cont: será o numero cujo fatorial é o denominador, varia de 1 a N
aux: é o resultado de cada fatorial
E: é a soma acima, começando com 1
*/
int N,cont=1,aux=1;
float E=1;
//leitura do numero até ser >0
do{
printf("Digite um numero inteiro positivo :");
scanf("%d",&N);
}while(N<=0);
//explicação no final
while(cont<=N)
{
aux*=cont;
E+=(float)1/aux;
cont++;
}
//imprimindo o valor de E
printf("E = %.2f",E);
return 0;
}
/*
O cont vai variar de 1 a N.
aux é o valor do fatorial de cont, ou seja, aux = cont !
Suponhamos que o N tenha sido 3.
1º loop) cont vale 1
aux deve ser 1! -> aux = aux * cont, ou seja, aux = 1 * 1 = 1 = 1!
E vai somar-se à divisão em float de 1/1
cont++ faz cont virar 2
2º loop) cont vale 2
aux deve ser 2! -> aux = aux * cont, ou seja, aux = 1 * 2 = 2 = 2!
E vai somar-se à divisão float 1/2
cont++ -> cont = 3
3º loop) cont vale 3 = N -> último loop
aux deve ser 3! -> aux = aux * cont, ou seja, aux = 2 * 3 = 6 = 3!
E vai somar-se à divisão float 1/6
cont++ -> cont = 4, saindo do while
*/
Outras Formas de Solução (Não Comentado):
A) Exercício 34:
#include <stdio.h>
#include <stdlib.h>
int main( )
{
int N,i,result=1;
do{
printf("Digite un numero inteiro positivo: ");
scanf("%d",&N);
}while(N<=0);
for(i=1;i<=N;i++)
{
result=result*i;
}
printf("O fatorial é %d",result);
return 0;
}
B) Exercício 50:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int N,cont,aux=1;
float E=1;
do{
printf("Digite um numero inteiro positivo :");
scanf("%d",&N);
}while(N<=0);
for(cont=1;cont<=N;cont++)
//agrupei o "cont=1", "while(cont<=N)" e cont++" em um único for
{
aux*=cont;
E+=(float)1/aux;
}
printf("E = %.2f",E);
return 0;
}