Você está na página 1de 12

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.

b.

c.
d.

e.

f.

Transformar o expoente em uma razo de inteiros (multiplicando ambos


por 10 at o numerador ficar inteiro).
Simplificar a razo de inteiros com sucessivas divises de numerador e
denominador.
Calcular basenumerador
Calcular (basenumerador)1/denominador . Utilizar a funo de raiz anteriormente
implementada.
Se basenumerador estourar a faixa dos doubl, dividir numerador e
denominador por 10 e repetir.
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 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.
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
2
3
4
5

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

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
55. Fazer um programa para:
a. receber 3 notas parciais do aluno em um vetor e a nota do exame em uma
varivel separada (-1 se o aluno no fez exame).
b. chamar a funo SITUACAO, com as seguintes caractersticas:
i. Parmetros: vetor de notas parciais e nota do exame
ii. Retorno: 0 se o aluno est reprovado direto, 1 se o aluno est
reprovado em exame, 2 se o aluno est aprovado em exame e 3 se
ele est aprovado direto.

Aula 8 Strings
56. 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.
57. 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
58. 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
59. 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.
60. 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.
61. 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.
62. 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.
63. 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.
64. 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.
65. 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.
66. 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.
67. Fazer um programa que receba uma string de no mximo 20 caracteres do
usurio e mostre o contedo desta string de forma invertida.
68. 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.
69. 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.

70. Faa um programa que receba como entradas uma lista de nomes em ordem
aleatria e ordene essa lista em ordem alfabtica.
71. 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.
72. 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.
73. 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.
74. 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


75. 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.
76. 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


77. 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.

Aula 11 Arquivos
78. Implementar um programa de gerenciamento de high scores. O programa deve:
a. carregar os high scores de um arquivo e mostrar. Cada high score
composto de um nome (max. 10 caracteres) e um inteiro (pontuao)
b. pedir ao usurio o seu nome e a sua pontuao no jogo.
c. posicionar os dados do usurio na tabela de highest scores (max. 5) e
regravar no arquivo.

Você também pode gostar