Você está na página 1de 11

Exerccios de Linguagem C

Aula 1 Aspectos bsicos


1. Fazer um programa para receber um nmero inteiro de segundos do usurio e imprimir a quantidade correspondente em horas, minutos e segundos. 2. Fazer um programa para receber 3 valores inteiros do usurio e mostrar a sua mdia (que pode no ser inteira).

Aula 2 Estruturas condicionais


3. Fazer um programa para ler um nmero do usurio e determinar se este nmero par ou no par. 4. Fazer um programa para receber valores inteiros X, Y e Z do usurio e determinar se estes valores podem formar os lados de um tringulo. Em caso afirmativo, informar se o tringulo eqiltero, issceles ou escaleno. 5. Fazer um programa que recebe 3 valores no inteiros do usurio e mostra o maior deles, o menor deles e a mdia. 6. Fazer um programa que recebe um smbolo de operao do usurio (+, -, / ou *) e dois nmeros reais. O programa deve retornar o resultado da operao recebida sobre estes dois nmeros.

Aula 3- Estruturas de repetio


7. O nmero 3025 possui a seguinte caracterstica: 30 + 25 = 55 -> 55*55 = 3025. Fazer um programa para obter todos os nmeros de 4 algarismos com a mesma caracterstica do nmero 3025. 8. Fazer um programa para mostrar os 100 primeiros termos da srie de Fibonacci. 9. Fazer um programa para mostrar todos os nmeros perfeitos entre 1 e 100. 10. Fazer um programa para receber um nmero inteiro do usurio e determinar se este nmero primo ou no. 11. Fazer um programa para receber um nmero do usurio e decomp-lo em fatores primos. 12. Fazer um programa para receber dois nmeros do usurio e calcular o seu MDC utilizando o mtodo de Euclides. O programa deve continuar pedindo dois nmeros at que 0 e 0 sejam fornecidos.

13. Fazer um programa para receber dois nmeros inteiros do usurio e mostrar o seu MMC (mnimo mltiplo comum). 14. Dada a afirmao: A tem o dobro da idade que B tinha quando A tinha a idade que B tem. Quando B tiver a idade de A, somaro 81 anos.. Fazer um programa para calcular as idades de A e B no mtodo fora bruta. 15. Fazer um programa para medir os reflexos do usurio. O programa deve: a. Mostrar a palavra Saque aps um tempo aleatrio b. Contar o tempo (em qualquer unidade) at que o usurio digite uma tecla e mostrar esse tempo. c. Dicas: random() e kbhit(). 16. Fazer um programa para mostrar a soma de todos os nmeros 4 do domin. 17. Fazer um programa no qual o usurio vai entrando sucessivamente com valores positivos. Quando o usurio entrar com um valor negativo o programa pra de pedir valores e calcula a mdia dos valores j fornecidos. 18. Fazer um programa para receber dois nmeros do tipo unsigned int do usurio e determinar se um nmero permutao do outro ou no. Ex: 431 permutao de 143, 42 permutao de 204, 1211 permutao de 1112, etc. 19. Fazer um programa que sorteie um nmero de 0 a 100 e que permita que o usurio (sem conhecer o nmero sorteado) tente acertar. Caso no acerte, o programa deve imprimir uma mensagem informando se o nmero sorteado maior ou menor que a tentativa feita. Ao acertar o nmero, o programa deve imprimir a quantidade de tentativas feitas. 20. Escreva um programa que calcule o salrio semanal de um trabalhador. As entradas so o nmero de horas trabalhadas na semana e o valor da hora. At 40 h/semana no se acrescenta nenhum adicional. Acima de 40h e at 60h h um bnus de 50% para essas horas. Acima de 60h h um bnus de 100% para essas horas. 21. Fazer um programa para encontrar todos os pares de nmeros amigveis entre 1 e 100000. Um par de nmeros amigvel quando cada um deles igual soma dos divisores do outro.

22. Faa um programa que sorteie um nmero aleatrio entre 0 e 500 e pergunte ao usurio qual o "nmero mgico". O programa dever indicar se a tentativa efetuada pelo usurio maior ou menor que o nmero mgico e contar o nmero de tentativas. Quando o usurio conseguir acertar o nmero o programa dever classicar o usurio 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 23. Faa um programa que receba do usurio o nmero de lados e o tamanho dos lados de um polgono regular e imprima o valor da rea do polgono. O programa deve utilizar uma estrutura switch-case para decidir que frmula de clculo utilizar, de acordo com o nmero de lados do polgono. Se o nmero de lados for diferente de 3, 4 ou 6 o programa deve informar: no sei calcular a rea. reas: a. Tringulo: A = L*L*1.73/4 b. Quadrado: A = L*L c. Hexgono: A = 6*L*L*1.73/4; 24. Um pecuarista possui uma determinada quantia de bois, que possuem um identificador numrico (de 1 a n) cada um. Faa 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 no h mais bois a serem digitados; b. mostre a lista de todos os bois com seus identificadores e tambm 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. Faa o mesmo programa considerando que o nmero de bois fixo e igual a dez. 25. Escrever um programa para ler um nmero inteiro do usurio e exibir o maior nmero primo que seja menor do que o nmero digitado. 26. Fazer um programa para exibir os n primeiros mltiplos simultneos de dois nmeros dados.

Aula 4 Funes
27. Implementar a funo RAIZQUADRADA. Esta funo deve: a. Receber um nmero do tipo float como parmetro. b. Retornar a raiz quadrada do nmero recebido, de tal maneira que esta raiz, quando elevada ao quadrado, apresente um erro mximo de 0.01% em relao ao valor do parmetro. 28. Implementar a funo INVERTE que recebe um nmero unsigned int como parmetro e retorna este nmero escrito ao contrrio. Ex: 431 <-> 134. 29. Implementar a funo doubl POWER (double base, doubl expoente), que retorna o valor de base elevado a expoente. Dicas: a. Transformar o expoente em uma razo de inteiros (multiplicando ambos por 10 at o numerador ficar inteiro). b. Simplificar a razo de inteiros com sucessivas divises de numerador e denominador. c. Calcular basenumerador

d. Calcular (basenumerador)1/denominador . Utilizar a funo de raiz anteriormente implementada. e. Se basenumerador estourar a faixa dos doubl, dividir numerador e denominador por 10 e repetir. f. Se numerador for negativo, resultado 1/resultado. 30. Fazer uma funo que recebe um ms e um ano como parmetros e retorna o nmero de dias daquele ms daquele ano. Dica: um ano bissexto quando mltiplo de 4 e no mltiplo de 100, ou tambm quando mltiplo de 400. 31. Faa uma funo que recebe, por parmetro, a hora de inicio e a hora de trmino de um jogo, ambas subdivididas em 2 valores distintos: horas e minutos. A funo deve retornar, a durao do jogo em minutos, considerando que o tempo mximo de durao de um jogo de 24 horas e que o jogo pode comear em um dia e terminar no outro.

Aula 5 Recursividade
32. Escreva a funo para clculo do N-simo termo da srie de Fibonacci utilizando recursividade. 33. Implementar a funo EXP com as seguintes caractersticas: a. Recebe um valor de base e um valor de expoente como parmetros do tipo unsigned int. b. Recebe o endereo de uma varivel, do tipo unsigned int, em cujo contedo ser armazenado o resultado de baseexpoente. c. Retorna 1 se foi bem sucedida e 0 se a exponenciao no pde ser calculada devido a estouro. d. Utiliza a caracterstica recursiva da exponenciao: i. Baseexp = base.baseexp-1 , exp > 0 ii. Baseexp = 1, exp ==0 34. Considere uma partida de futebol entre duas equipes A x B, cujo placar final m x n, em que m e n so nmeros de gols marcados por A e B, respectivamente. Escreva um algoritmo recursivo que imprima todas as possveis sucesses de gols marcados. Por exemplo, para um placar final de 3 x 1, as possveis sucesses de gols so AAAB, AABA, ABAA e BAAA. 35. Torre de Hani: considerando 3 torres, o objetivo transferir 3 discos que esto 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 funo recursiva que mostra a seqncia de movimentos para resolver o problema da Torre de Hani.

Aula 6 Ponteiros

36. Exerccio 33. 37. Fazer uma funo FATORES que: a. Recebe 3 parmetros: um vetor de inteiros, um nmero inteiro n passado por valor e outro nmero x passado como ponteiro. b. Retorna um nmero inteiro. c. Decompe o nmero n em fatores primos e armazena-os nas posies do vetor. O contedo de x deve receber o nmero de fatores primos encontrados. Caso o nmero de fatores encontrados seja maior que 10, a funo deve retornar 1, do contrrio deve retornar 0. 38. Fazer uma funo para: a. Receber dois ponteiros para char (char*) como parmetro e um nmero representando uma certa quantidade de caracteres. b. procurar, no vetor apontado pelo parmetro 1, o primeiro caracter de espao ( ) ou o fim de vetor (representado pela quantidade fornecida no parmetro 3). c. copiar os caracteres anteriores ao espao no vetor indicado pelo segundo parmetro. d. retornar o nmero de caracteres copiados. 39. Fazer um programa para: a. Receber uma frase do usurio, caracter a caracter usando getch() e armazenando no vetor (mx. 30 caracteres). Quando o usurio digita enter (\r) a recepo finalizada. b. mostrar cada palavra da frase em uma linha separada, utilizando a funo do exerccio 3. 40. Fazer um programa para: a. declarar variveis a, b, c, d do tipo int. b. declarar variveis e, f, g, h do tipo float. c. declarar vetor v de 10 elementos do tipo char. d. declarar varivel x do tipo int. e. criar um ponteiro apontando para o endereo de a. f. incrementar o ponteiro, mostrando o contedo do endereo apontado (em forma de nmero). Caso o endereo coincida com o endereo de alguma outra varivel, informar o fato. 41. Fazer uma funo com as seguintes caractersticas: a. recebe dois nmeros inteiros do usurio. b. retorna 1 se os nmeros so iguais, 0 se so diferentes e 1 se a soma ou o produto estoura a faixa dos inteiros. Alm disso, retorna a soma e o produto dos dois nmeros. c. Fazer um programa para receber dois nmeros do usurio, chamar a funo e mostrar se os nmeros so iguais. Alm disso, mostrar sua soma e seu produto. 42. Fazer uma funo que: a. receba 3 ponteiros para nmeros como parmetros: A, B e C.

b. ordene de tal forma que, ao final da funo, A contenha o menor nmero e C o maior. A funo deve usar os ponteiros para acessar os valores dos nmeros por referncia. c. Fazer um programa que receba 3 nmeros do usurio, chame a funo e mostre os nmeros ordenados. 43. Escreva uma funo CALCULA que: a. receba como parmetros duas variveis inteiras, X e Y; b. retorne em X a soma de X e Y; c. retorne em Y a subtrao de X e Y. Pergunta: a passagem dos parmetros para a funo deve ser por valor ou por referncia?

44. Fazer uma funo DIVS que: a. recebe como parmetro um nmero inteiro n por valor e dois nmeros inteiros max e min por referncia; b. retorna 0 se o nmero num primo e 1 caso contrrio. Se o nmero no for primo, as variveis max e min devem assumir os valores do menor e do maior divisores inteiros do nmero, respectivamente, desconsiderando o nmero 1 e o prprio nmero num.

Aula 7 Vetores
45. Faa um programa que dado o vetor unidimensional [2; 4; 35; 50; 23; 17; 9; 12; 27; 5] retorne: a. maior valor b. mdia dos valores c. os valores dispostos em ordem crescente d. sub conjunto de valores primos que est contido no vetor 46. Faa um programa que: a. leia 7 valores inteiros e os armazene em um vetor. Listar o vetor com as referidas posies de armazenamento de cada valor. b. oferea uma funo de pesquisa onde dado um valor inteiro qualquer de entrada retornar a posio deste valor dentro do vetor, e caso este valor no esteja presente no vetor retornar 1. c. oferea uma funo que troque os valores contido no vetor pela seguinte poltica: cada elemento i dentro do vetor ser substitudo pela soma de todos os (i-1) elementos mais o elemento i. Por exemplo, dado um vetor [1; 2; 3; 4; 5] aps a aplicao da funo teramos esse vetor preenchido com os seguintes valores [1; 3; 6; 10; 15]. Para esta tarefa utilize um vetor auxiliar. 47. Faa um programa que, dados dois vetores bidimensionais (matrizes A e B) com dimenses de no mximo 5x5 elementos, retorne: a. a soma destas duas matrizes

b. a soma das diagonais de cada matriz c. a multiplicao das duas matrizes 48. Faa um programa para: a. receber as dimenses M e N da matriz A (M e N <= 5) b. receber os MxN elementos da matriz A c. receber as dimenses J e K da matriz B (J e K <=5, J = N) d. receber os JxK elementos da matriz B e. calcular e mostrar a matriz C, de dimenses MxK, que o produto das matrizes A e B. 49. Faa um programa para receber do usurio a dimenso de um vetor (mx. 20), os elementos desse vetor e efetuar a sua ordenao utilizando o mtodo da bolha (bubble-sort). 50. Vamos supor que vrias pedras do jogo de xadrez esto no tabuleiro. Para facilitar a indicao das peas, vamos convencionar: 1 pees 3 torres 5 reis 0 ausncia de peas 2 cavalos 4 bispos 6 rainhas O tabuleiro o seguinte: 1 1 0 1 0 0 1 1 3 0 0 0 1 0 0 0 0 1 0 0 0 3 6 5 5 0 0 1 4 1 6 0 4 0 1 1 0 0 0 1 0 1 0 0 0 0 0 1 2 0 6 0 1 1 1 0 1 0 0 1 0 1 0 6

a) Construa um programa que determine a soma total entre pees ou bispos e a quantidade de posies com ausncia de peas; b) Escreva outro programa que determine qual a quantidade de cada tipo de pea no tabuleiro. 51. A distncia entre vrias cidades dada pela tabela abaixo (em km): 1 00 15 30 05 12 2 15 00 10 17 28 3 30 10 00 03 11 4 05 17 03 00 80 5 12 28 11 80 00

1 2 3 4 5

a) Construa um programa que leia a tabela acima e informe ao usurio a distncia entre duas cidades por ele requisitadas, at que ele entre com o cdigo 0 para ambas as cidades;

b) Elabore um programa que imprima a tabela sem repeties, isto , se a distncia entre as cidades 1 e 3 foi emitida, no necessrio emitir a distncia entre 3 e 1; c) Dado um determinado percurso, imprima o total percorrido: Exemplo: dado o percurso 1, 2, 3, 2, 5, 1, 4, teremos: 15 + 10 + 10 + 28 + 12 + 5 = 80 km. 52. Um cinema que possui capacidade de 20 lugares est sempre lotado. Certo dia cada espectador respondeu a um questionrio, onde constava: - sua idade; - sua opinio em relao ao filme, que podia ser: timo, bom, regular, ruim ou pssimo. Elabore um programa que, recebendo estes dados calcule e mostre: a. b. c. d. a quantidade de respostas timo; a diferena percentual entre respostas bom e regular; a mdia de idade das pessoas que responderam ruim; a porcentagem de respostas pssimo e a maior idade que utilizou esta opo; e. a diferena de idade entre a maior idade que respondeu timo e a maior idade que respondeu ruim. 53. Faa um programa que receba uma matriz 5x5 valores do tipo int do usurio, um valor de cada vez, e imprima a sua matriz transposta (Obs: a matriz transposta obtida permutando-se as linhas e as colunas de uma matriz. 54. Escreva um programa que leia uma matriz n x m do usurio e a transforme em um vetor unidimensional de n.m posies

Aula 8 Strings
55. Faa um programa que dado um nome completo, retorne a abreviatura deste nome. No se devem abreviar as preposies como: do, de, etc. A abreviatura deve vir separada por pontos. Ex: Paulo Jose de Almeida Prado. Abreviatura: P.J.A.P. 56. Faa um programa que dado 2 palavras, determine: a. Se as palavras so iguais; b. Caso as palavras sejam diferentes, qual delas tem maior comprimento (no esquecer a possibilidade de existirem palavras diferentes de mesmo tamanho); c. Verifique se a segunda palavra uma sub string da primeira: Exemplo: Palavra 1= casamento Palavra 2 = casa

57. Faa um programa onde o usurio digita 3 informaes a respeito de uma pessoa: Nome, endereo e telefone. Concatene essas trs informaes em uma nica string e faa uma contagem de quantas letras do alfabeto esto presentes nesta string (considerando as redundncias) e tambm de dgitos numricos. Os espaos e os caracteres de pontuao devem ser ignorados(as funes de contagem j fazem isso). Dica: use as funes int isalpha(char cr) e int isdigit(char cr). Exemplo: Nome: Ana Claudia Endereo: Rui Barbosa, 234 Tel: 234-0912 Resultado: Quantidade de letras pertencentes ao alfabeto = 20. Quantidade de dgitos numricos = 10 58. Fazer um programa para: a. Receber uma string de no mximo 100 caracteres b. Receber uma segunda string e contar quantas vezes a segunda string ocorre dentro da primeira.

59. Fazer um programa para: a. Receber uma string do usurio. b. Contar quantos ditongos ou hiatos existem na string c. Contar quantas duplas de letras repetidas existem na string. 60. Fazer um programa para cadastro e dilogo de login. O programa deve: a. Cadastrar um nome de usurio via teclado. O nome de usurio tem, no mximo, 8 caracteres, sendo vlidos somente os caracteres numricos e as letras maisculas ou minsculas. Somente os caracteres vlidos devem ser exibidos no console durante a digitao do nome de usurio. b. Cadastrar uma senha do usurio via teclado. Esta segue as mesmas regras do nome de usurio, com a diferena de que so exibidos somente asteriscos no console medida que a senha digitada. c. Receber um novo nome de usurio e uma nova senha, utilizando os mesmos procedimentos descritos nos itens a e b. d. Comparar o nome de usurio cadastrado com o recebido posteriormente e a senha cadastrada com a senha recebida. Caso sejam idnticos, informar OK, do contrrio informar Acesso negado. 61. Elabore um programa que, dado 2 vetores inteiros de 20 posies, efetue as respectivas operaes indicadas por um terceiro vetor de caracteres de 20 posies tambm fornecido pelo usurio, contendo as quatro operaes aritmticas em qualquer combinao, armazenando os resultados num quarto vetor.

62. Elaborar um programa em C que leia uma frase e armazene-a em um vetor de caracteres (cuidado com a leitura!). Depois crie uma funo para contar o nmero de espaos em branco na frase, outra para contar o nmero de vogais, e outra para contar o nmero de consoantes. 63. Com o vetor do exerccio 8, faa uma funo que transfira as consoantes para um vetor e as vogais para outro. Depois mostre cada um dos vetores. 64. Escreva um programa que utilize uma funo "replace" que aceita um string como parmetro e retorna um inteiro. A funo substitui todos os espaos do seu parmetro pelo caracter '-', e retorna o nmero de substituies feitas. O programa que a usa dever testar a sua funcionalidade. 65. Escreva um programa que leia texto do teclado, linha a linha, at chegar ao fim de texto (Ctrl-D ou Ctrl-Z). O programa dever escrever uma estatstica do texto lido: n de palavras, nmero de linhas em branco, n total de linhas, n de letras. O programa dever usar funes separadas para cada uma das suas tarefas. 66. Fazer um programa que receba uma string de no mximo 20 caracteres do usurio e mostre o contedo desta string de forma invertida. 67. Faa um programa que receba uma string do usurio (mx. 20 caracteres) e um caracter qualquer. O programa deve remover todas as ocorrncias do caracter da string e mostrar o resultado. 68. Um dos sistemas de encriptao mais antigos atribudo a Jlio Csar: se uma letra a ser encriptada a letra de nmero N do alfabeto, substitua-a com a letra (N+K), onde K um nmero inteiro constante (Csar utilizava K = 3). Usualmente consideramos o espao como zero e todos os clculos so realizados com mdulo-27. Dessa forma, para K = 1 a mensagem Ataque ao amanhecer se torna bubrfabpabnboifdfs. Faa um programa que receba como entrada uma mensagem e um valor de J e retorne a mensagem criptografada pelo cdigo de Csar. Fraquezas: apenas 26 chaves possveis. possvel utilizar conhecimento da linguagem para facilitar a busca. 69. Faa um programa que receba como entradas uma lista de nomes em ordem aleatria e ordene essa lista em ordem alfabtica. 70. Faa um programa que inverta a ordem das letras de uma string. Utilize o cdigo do exerccio 14 para incrementar o cdigo de Csar adicionando a inverso da mensagem encriptada. 71. Para evitar fraudes, uma mquina de preenchimento de cheques deve preencher as dezenas no utilizadas no valor numrico com asteriscos. Considerando que na loja X no so aceitos cheques de valores maiores que R$ 10.000,00, faa um programa que imprimia na tela o valor numrico do cheque e seu valor por extenso.

72. Escrever uma funo que:

a. receba dois strings como parmetro, bem como um valor inteiro representando uma posio. b. insira o segundo string no primeiro, na posio indicada pelo valor. c. Fazer um programa que receba dois strings do usurio, o valor da posio, chame a funo anteriormente implementada e exiba o resultado ao usurio. 73. Fazer um programa para receber uma string do usurio (mx. 50 caracteres) e fazer uma estatstica dos caracteres digitados. Por exemplo, para a string "O EXERCICIO E FACIL", a estatstica mostrada ser 'O' = 2, ' '=3, 'E' = 3, 'X' = 1, 'R' = 1, 'C' = 3, 'I' = 3, 'F' = 1, 'A' = 1, 'L' = 1

Aula 9 Estruturas de dados


74. Fazer um programa que receba trs nomes de no mximo 15 caracteres cada um (nomes com mais de 15 caracteres devem ser rejeitados) e as idades das respectivas pessoas em um vetor de estruturas de dados. Aps o recebimento, listar os 3 nomes e idades que nela foram armazenados. 75. Fazer um programa de dilogo de login semelhante ao exerccio 6 de strings, com a diferena de que possvel cadastrar no mximo 10 nomes de usurio e suas respectivas senhas (nomes de usurio repetidos devem ser descartados). No dilogo de login, o programa deve testar se o usurio fornecido existe e se a sua senha confere.

Aula 10 Alocao Dinmica


76. Fazer um programa que receba do usurio a quantidade N de nmeros a ser digitada. Em seguida, o programa deve alocar dinamicamente um vetor de N inteiros, receber N nmeros do usurio e armazenar no vetor, e mostrar o maior valor do vetor, o menor valor do vetor e a mdia dos valores.

Você também pode gostar