Exercícios de Linguagem C Aspectos básicos 1. Fazer um programa para receber um número inteiro de segundos do usuário e imprimir a quantidade correspondente em horas, minutos e segundos. 2. Fazer um programa para receber 3 valores inteiros do usuário e mostrar a sua média (que pode não ser inteira). 3. Fazer um programa para ler um número do usuário e determinar se este número é par ou não par. 4. Fazer um programa para receber valores inteiros X, Y e Z do usuário e determinar se estes valores podem formar os lados de um triângulo. Em caso afirmativo, informar se o triângulo é eqüilátero, isósceles ou escaleno. 5. Fazer um programa que recebe 3 valores não inteiros do usuário e mostra o maior deles, o menor deles e a média. 6. Fazer um programa que recebe um símbolo de operação do usuário (+, -, / ou *) e dois números reais. O programa deve retornar o resultado da operação recebida sobre estes dois números. 7. O número 3025 possui a seguinte característica: 30 + 25 = 55 -> 55*55 = 3025. Fazer um programa para obter todos os números de 4 algarismos com a mesma característica do número 3025. 8. Seja N um número quadrado perfeito. Se somarmos os números ímpares consecutivos (1+3+5+7+9+...) até que esta soma seja igual a N, o número M de termos somados será igual a raiz quadrada de N. Exemplo: N = 16 16 = 1 + 3 + 5 + 7 M = 4 termos. Logo, a raiz quadrada de 16 é 4. Fazer um programa em C para ler um número inteiro e positivo N e responder se N é quadrado perfeito. 9. Durante uma corrida de automóveis com N voltas de duração foram anotados para um piloto, na ordem, os tempos registrados em cada volta. Fazer um programa em C para ler os tempos das N voltas, calcular e imprimir: melhor tempo; a volta em que o melhor tempo ocorreu; tempo médio das N voltas; 10. Fazer um programa em C para calcular a soma dos N primeiros múltiplos de um inteiro K, onde N e K são lidos e são números inteiros e positivos. 11. Fazer um programa para mostrar os 100 primeiros termos da série de Fibonacci.
12. Fazer um programa para mostrar todos os números perfeitos entre 1 e 100. 13. Fazer um programa para receber um número inteiro do usuário e determinar se este número é primo ou não. 14. Fazer um programa para receber um número do usuário e decompô-lo em fatores primos. 15. Fazer um programa para receber dois números do usuário e calcular o seu MDC utilizando o método de Euclides. O programa deve continuar pedindo dois números até que 0 e 0 sejam fornecidos. 16. Fazer um programa para receber dois números inteiros do usuário e mostrar o seu MMC (mínimo múltiplo comum). 17. Dado dois vetores, A (5 elementos) e B (8 elementos), faça um programa em C que imprima todos os elementos comuns aos dois vetores. 18. Faça um programa que determina o máximo e o mínimo de um conjunto de n números inteiros armazenados num vetor A de 10 elementos. 19. Suponha um vetor N com 10 elementos e outro vetor M com 10 elementos. Faça um programa em C que calcule o produto escalar P de A por B. (Isto é, P = A[1]*B[1] + A[2]*B[2] +... A[N]+B[N]). 20. Fazer um programa em C que leia uma frase de até 50 caracteres(utilizar o comando gets) e imprima a frase sem os espaços em branco. Imprimir também a quantidade de espaços em branco da frase. 21. Fazer um programa em C para ler um vetor de inteiros positivos de 50 posições. Imprimir a quantidade de números pares e de múltiplos de 5 22. Dada a afirmação: A tem o dobro da idade que B tinha quando A tinha a idade que B tem. Quando B tiver a idade de A, somarão 81 anos.. Fazer um programa para calcular as idades de A e B no método força bruta. 23. Fazer um programa para medir os reflexos do usuário. O programa deve: a. Mostrar a palavra Saque após um tempo aleatório b. Contar o tempo (em qualquer unidade) até que o usuário digite uma tecla e mostrar esse tempo. c. Dicas: random() e kbhit(). 24. Fazer um programa para mostrar a soma de todos os números 4 do dominó. 25. Fazer um programa no qual o usuário vai entrando sucessivamente com valores positivos. Quando o usuário entrar com um valor negativo o programa pára de pedir valores e calcula a média dos valores já fornecidos.
26. Fazer um programa para receber dois números do tipo unsigned int do usuário e determinar se um número é permutação do outro ou não. Ex: 431 é permutação de 143, 42 é permutação de 204, 1211 é permutação de 1112, etc. 27. Fazer um programa que sorteie um número de 0 a 100 e que permita que o usuário (sem conhecer o número sorteado) tente acertar. Caso não acerte, o programa deve imprimir uma mensagem informando se o número sorteado é maior ou menor que a tentativa feita. Ao acertar o número, o programa deve imprimir a quantidade de tentativas feitas. 28. Escreva um programa que calcule o salário semanal de um trabalhador. As entradas são o número de horas trabalhadas na semana e o valor da hora. Até 40 h/semana não se acrescenta nenhum adicional. Acima de 40h e até 60h há um bônus de 50% para essas horas. Acima de 60h há um bônus de 100% para essas horas. 29. Fazer um programa para encontrar todos os pares de números amigáveis entre 1 e 100000. Um par de números é amigável quando cada um deles é igual à soma dos divisores do outro. 30. Faça um programa que sorteie um número aleatório entre 0 e 500 e pergunte ao usuário qual é o "número mágico". O programa deverá indicar se a tentativa efetuada pelo usuário é maior ou menor que o número mágico e contar o número de tentativas. Quando o usuário conseguir acertar o número o programa deverá classificar o usuário como: a. De 1 a 3 tentativas: muito sortudo b. De 4 a 6 tentativas: sortudo c. De 7 a 10 tentativas: normal d. > 10 tentativas: tente novamente 31. Faça um programa que receba do usuário o número de lados e o tamanho dos lados de um polígono regular e imprima o valor da área do polígono. O programa deve utilizar uma estrutura switch-case para decidir que fórmula de cálculo utilizar, de acordo com o número de lados do polígono. Se o número de lados for diferente de 3, 4 ou 6 o programa deve informar: não sei calcular a área. Áreas: a. Triângulo: A = L*L*1.73/4 b. Quadrado: A = L*L c. Hexágono: A = 6*L*L*1.73/4; 32. Um pecuarista possui uma determinada quantia de bois, que possuem um identificador numérico (de 1 a n) cada um. Faça um programa que: a. receba o peso de cada boi, um por vez, e o armazene em um vetor. Se o peso digitado for 0 significa que não há mais bois a serem digitados;
b. mostre a lista de todos os bois com seus identificadores e também os identificadores do boi mais gordo e do boi mais magro. Se houver dois ou mais bois mais gordos ou mais magros mostrar o de menor identificador; c. Faça o mesmo programa considerando que o número de bois é fixo e igual a dez. 33. Escrever um programa para ler um número inteiro do usuário e exibir o maior número primo que seja menor do que o número digitado. 34. Fazer um programa para exibir os n primeiros múltiplos simultâneos de dois números dados. 35. Implementar a função RAIZQUADRADA. Esta função deve: a. Receber um número do tipo float como parâmetro. b. Retornar a raiz quadrada do número recebido, de tal maneira que esta raiz, quando elevada ao quadrado, apresente um erro máximo de 0.01% em relação ao valor do parâmetro. 36. Implementar a função INVERTE que recebe um número unsigned int como parâmetro e retorna este número escrito ao contrário. Ex: 431 <-> 134. 37. Implementar a função doublé POWER (double base, doublé expoente), que retorna o valor de base elevado a expoente. Dicas: a. Transformar o expoente em uma razão de inteiros (multiplicando ambos por 10 até o numerador ficar inteiro). b. Simplificar a razão de inteiros com sucessivas divisões de numerador e denominador. c. Calcular base numerador d. Calcular (base numerador ) 1/denominador. Utilizar a função de raiz anteriormente implementada. e. Se base numerador estourar a faixa dos doublé, dividir numerador e denominador por 10 e repetir. f. Se numerador for negativo, resultado é 1/resultado. 38. Fazer uma função que recebe um mês e um ano como parâmetros e retorna o número de dias daquele mês daquele ano. Dica: um ano é bissexto quando é múltiplo de 4 e não múltiplo de 100, ou também quando é múltiplo de 400. 39. Faça uma função que recebe, por parâmetro, a hora de inicio e a hora de término de um jogo, ambas subdivididas em 2 valores distintos: horas e minutos. A função deve retornar, a duração do jogo em minutos, considerando que o tempo máximo de duração de um jogo é de 24 horas e que o jogo pode começar em um dia e terminar no outro. Recursividade
40. Escreva a função para cálculo do N-ésimo termo da série de Fibonacci utilizando recursividade. 41. Implementar a função EXP com as seguintes características: a. Recebe um valor de base e um valor de expoente como parâmetros do tipo unsigned int. b. Recebe o endereço de uma variável, do tipo unsigned int, em cujo conteúdo será armazenado o resultado de base expoente. c. Retorna 1 se foi bem sucedida e 0 se a exponenciação não pôde ser calculada devido a estouro. d. Utiliza a característica recursiva da exponenciação: i. Base exp = base.base exp-1, exp > 0 ii. Base exp = 1, exp ==0 42. Considere uma partida de futebol entre duas equipes A x B, cujo placar final é m x n, em que m e n são números de gols marcados por A e B, respectivamente. Escreva um algoritmo recursivo que imprima todas as possíveis sucessões de gols marcados. Por exemplo, para um placar final de 3 x 1, as possíveis sucessões de gols são AAAB, AABA, ABAA e BAAA. 43. Torre de Hanói: considerando 3 torres, o objetivo é transferir 3 discos que estão na torre A para a torre C, usando uma torre B como auxiliar. Somente o último disco de cima de uma pilha pode ser deslocado para outra, e um disco maior nunca pode ser colocado sobre um menor. Implementar uma função recursiva que mostra a seqüência de movimentos para resolver o problema da Torre de Hanói.