Vous êtes sur la page 1sur 7

Programao de Computadores 1

Lista 1
Prof. Glauber M. Cabral
glauber@decsi.ufop.br
DECSI - ICEA - UFOP
4 de Abril de 2014

Instrues para a entrega da lista


1. A entrega da lista individual, mas o estudo em grupo altamente recomendado!
2. No pratique plgio! Seja esperto e tente resolver todos os exerccios. Plgio no o
ajudar na hora da prova. :D
3. Cada aluno deve enviar um arquivo ZIP com o nome pc1_lista1_TURMA_MATRICULA.zip, em
que:
TURMA o cdigo de dois dgitos da turma do aluno;
MATRICULA o cdigo de matrcula do aluno sem os ponto-finais separadores.
4. O arquivo ZIP deve possuir uma pasta de mesmo nome, ou seja, com o nome
pc1_lista1_TURMA_MATRICULA.
5. Na pasta citada deve estar um arquivo-fonte para cada exerccio, no formato exercicio_NUMERO.c,
em que NUMERO o nmero do exerccio na lista.
6. As respostas para os exerccios das sees 1 e 2 devem estar em um arquivo de texto simples em
codificao UTF-8 com nome respostas.txt contendo as respostas para cada item. Utilize o Bloco de
Notas do Windows e escolha Salvar Como, escolhendo a Codificao UTF-8.

Variveis e Tipos de Dados

1. Voc, como programador, responsvel por modelar os problemas reais no computador. Como parte
disto, voc deve escolher os tipos das variveis que armazenaro os dados no seu programa. Para
cada problema abaixo, defina o tipo de varivel que deve ser usada.
a) O nmero de portas de uma casa.
b) A idade dos alunos ingressantes.
c) O conceito para avaliao de desempenho de um aluno, medido em A, B, C, D e E.
d) O conceito para avaliao de desempenho de um aluno, medido em um intervalo de 0 (inclusive)
a 10 (inclusive), com incrementos de 0, 5.
e) O salrio de um funcionrio.
f ) A resposta para uma pergunta cujas respostas possveis so Verdadeiro ou Falso.
g) A resposta para uma pergunta cujas respostas possveis so a, b, c, d e e.
1

2. Sobre o funcionamento do tipo de dados char, responda o que est armazenado na varivel abaixo
em cada linha:
char numero;
numero = 9;
numero = 9;

Expresses Lgicas e Relacionais

3. Supondo as declaraes int A = 3, int B = 7 e int C = 4, calcule o valor as expresses abaixo:


a) (A + C) > B
b) B >= (A + 2)
c) C == (B A)
d) (B + A) <= C
e) (C + A) > B
4. Supondo as declaraes int A = 5, int B = 4, int C = 3 e int D = 6, calcule o valor as expresses
abaixo:
a) (A > C) && (C <= D)
b) (A + B) > 10 || (A + B) == (C + D)
c) (A >= C)&& (D >= C)
5. Supondo as declaraes int A = 5, int B = 4, int C = 3, char C1 = 'A', char C2 = 'a' e int L =0, calcule o valor as expresses abaixo:
a) B == A C && L
b) C1 == C2 || 'F' != 'Q'
c) A + C < 5
d) A C / B > A B C
e) ! L
6. Supondo as declaraes int A = 3, int B = 5, int C = 8, int D = 7 e int X = 1, calcule o valor as
expresses abaixo:
a) !( X > 3)
b) (X < 1) && (!(B > D))
c) !( D < 0) && (C > 5)
d) !( (X > 3) || (C < 7) )
e) (A > B) || (C > B)
f ) X >= 2
g) (X < 1) && (B >= D)
h) (D < 0) || (C > 5)
i) !( D > 3) || !( B < 7)

Entrada e Sada

7. Codifique um programa que leia dois valores inteiros nas variveis a e b e troque os valores contidos
nas variveis. Para verificar a troca, imprima o contedo das variveis aps a leitura e aps a troca
dos valores.
2

8. Codifique um programa que pergunte ao usurio a altura e a base de um retngulo e imprima a rea
e o permetro deste retngulo.
9. Codifique um programa que pergunte ao usurio o raio de um crculo e imprima a rea e o permetro
deste crculo.
10. Codifique um programa que leia os trs lados de um tringulo e imprima a rea e o permetro deste
tringulo. Para o clculo da rea, deve-se utilizar a frmula de Heron:
Area =

aux(aux lado1 )(aux lado2 )(aux lado3 )

em que
aux =

4
11.
12.
13.
14.
15.
16.
17.
18.

lado1 + lado2 + lado3


2

Desvios Condicionais: if

Codifique um programa que, dado um nmero, o classifique como par ou mpar.


Codifique um programa que, dado um nmero, o classifique como positivo, negativo ou neutro (0).
Codifique um programa que leia um par ordenado (x, y) e informe a qual quadrante ele pertence.
Codifique um programa que leia um intervalo (deve-se ler o valor inferior e o valor superior do
intervalo) e um nmero. O programa deve dizer se o nmero lido est dentro ou fora do intervalo
informado.
Codifique um programa que leia dois nmeros e os imprima em ordem decrescente.
Codifique um programa que leia trs nmeros e imprima o maior deles.
Codifique um programa que leia trs nmeros e os imprima em ordem crescente.
Codifique um programa que, dados dois valores inteiros entre 1 e 10, calcule e imprima:
a mdia dos nmeros, caso a soma deles seja menor que 8;
o produto entre os nmeros, caso a soma deles seja igual a 8;
a diviso do maior nmero pelo menor, caso a soma deles seja maior que 8.

Desvios Condicionais: switch

19. Codifique um programa que leia um caractere de operao aritmtica (+, , , /), dois nmeros e
exiba na tela a operao, seguida do seu resultado.
20. Codifique um programa que leia um nmero de 1 a 12, indicativo um ms, e imprima o nomedo ms
correspondente, por extenso.
21. Codifique um programa que pergunte um cdigo de funcionrio e, de acordo com o valor digitado,
apresente o cargo correspondente, segundo a tabela abaixo. Caso seja digitado um cdigo que no
esteja na tabela, deve-se avisar que o cdigo invlido.
22. Codifique um programa que leia a nota de um aluno e exiba o conceito correspondente, segundo as
seguintes regras:

As notas 10 e 9 equivalem ao conceito A;


As notas 8 e 7 equivalem ao conceito B;
As notas 6 e 5 equivalem ao conceito C;
Notas abaixo de 5 equivalem ao conceito D.
3

Cdigo
101
102
103
104
105
106

Cargo
Vendedor
Atendente
Auxiliar Tcnico
Assistente
Coordenador de Grupo
Gerente

23. Codifique um programa que leia um caractere (C, c, F ou f ) indicando a unidade de medida da
temperatura de entrada e uma temperatura de entrada. O programa deve realizar a converso da
temperatura inserida, da unidade de entrada para a outra unidade dispnvel, utilizando a seguinte
frmula de Converso: C = (5/9) (F 32). A sada do programa deve exigir a temperatura aps
converso, com 2 casas decimais, e a unidade da temperatura aps converso.

Estruturas de Repetio

24. Codifique um programa que leia 10 valores, conte quantos destes valores so negativos e imprima
esta informao.
25. Escreva um programa que leia 6 valores e encontre o maior e o menor deles. Mostre o resultado.
26. Faa um programa que l um valor N inteiro e positivo e que calcula e escreve o fatorial de N (N!).
27. A prefeitura de uma cidade fez uma pesquisa entre seus habitantes, coletando dados sobre o salrio
e nmero de filhos. A prefeitura deseja saber:

mdia do salrio da populao;


mdia do nmero de filhos;
maior salrio;
percentual de pessoas com salrio at R$100,00;

O final da leitura de dados se dar com a entrada de um salrio negativo.


28. Escrever um programa que leia um nmero inteiro n e calcule a tabuada de n. Mostre a tabuada na
forma:
1 n = __
2 n = __
...
n n = __
29. Escrever um programa que leia um nmero no determinado de valores e calcule a mdia aritmtica
dos valores lidos, a quantidade de valores positivos, a quantidade de valores negativos e o percentual
de valores negativos e positivos. Mostre os resultados. O nmero que encerrar a leitura ser zero.
30. Faa um programa que leia uma quantidade no determinada de nmeros positivos. Calcule a
quantidade de nmeros pares e mpares, a mdia de valores pares e a mdia geral dos nmeros lidos.
O nmero que encerrar a leitura ser zero.
31. Escrever um programa que l 10 valores, um de cada vez, e conte quantos deles esto no intervalo
[10,20] e quantos deles esto fora do intervalo, escrevendo estas informaes.
4

32. Escrever um programa que gere e escreva os 4 primeiros nmeros perfeitos. Um nmero perfeito
aquele que igual a soma dos seus divisores exceto o prprio nmero. (Ex.: 6 = 1 + 2 + 3; 28 =
1+2+4+7+14 etc).
33. Elabore um programa em C para calcular a raiz quadrada de um nmero positivo, usando o roteiro
abaixo, baseado no mtodo de aproximaes sucessivas de Newton. O programa dever prover 25
aproximaes.
Seja Y o nmero do qual se deseja a raiz quadrada. Obtemos:
a primeira aproximao para a raiz quadrada de Y por X1 = Y2 ;
2
n +Y
as demais aproximaes para a raiz quadrada de Y por Xn+1 = X2X
n

Funes

34. Codifique uma funo que receba por parmetro a idade de uma pessoa, expressa em anos, meses e
dias, e retorne essa idade expressa em dias. Desconsidere anos bissextos.
35. Codifique uma funo que receba a mdia final de um aluno passado por parmetro e retorne o seu
conceito (atravs de uma varivel char), conforme a Tabela 1:
Nota
De 0 a 49
De 50 a 69
De 70 a 89
De 90 a 100

Conceito
D
C
B
A

Tabela 1:
36. Codifique uma funo com a assinatura int contaimpar(int n1, int n2) que retorne o nmero de
inteiros impares que existem entre n1 e n2 (inclusive ambos, se for o caso). Caso o valor de n2 seja
menor que o de n1, a funo deve tratar o invervalo como sendo de n2 at n1 sem que o invocador
da funo perceba.
Ex :
n = contaimpar ( 1 0 , 1 9 ) ; / n r e c e b e 5 ( r e f e r e n t e a : 1 1 , 1 3 , 1 5 , 1 7 , 1 9 ) /
n = contaimpar ( 5 , 1 ) ; / n r e c e b e 3 ( r e f e r e n t e a : 1 , 3 , 5 ) /
37. Codifique uma funo com a assinatura void estacao(int dia, int mes) que exiba no vdeo qual a
estao do ano correspondente data passada por parmetro. Lembre-se que a primavera comea
em 23 de setembro, o vero em 21 de dezembro, o outono em 21 de maro e o inverno em 21 de
junho.
Ex:
estacao ( 2 5 , 1 0 ) ; / Deve i m p r i m i r a mensagem : 25/10 e primavera . /
estacao ( 2 9 , 1 2 ) ; / Deve i m p r i m i r a mensagem : 29/12 e v e r a o . /
38. Codifique uma funo com a assinatura int somaintervalo(int n1, int n2) que retorne a soma dos
nmeros inteiros que existem no intervalo fechado entre n1 e n2 (ou seja, incluindo n1 e n2). Caso
o valor de n2 seja menor que o de n1, a funo deve tratar o invervalo como sendo de n2 at n1 sem
que o invocador da funo perceba.
Ex:
5

n=somaintervalo ( 3 , 6 ) ; / n r e c e b e 18 ( r e f e r e n t e a : 3 + 4 + 5 + 6 ) /
n=somaintervalo ( 5 , 5 ) ; / n r e c e b e 5 ( r e f e r e n t e a : 5 ) /
n=somaintervalo ( 2 ,3) ; / n r e c e b e 3 ( r e f e r e n t e a : 2 + 1 + 0 + 1 + 2+ 3 ) /
n=somaintervalo ( 4 , 0 ) ; / n r e c e b e 10 ( r e f e r e n t e a : 4 + 3 + 2 + 1 + 0 ) /
39. Codifique uma funo com a assinatura int multiplica_intervalo(int n1, int n2) que retorne o
produto dos nmeros inteiros que existem no intervalo fechado entre n1 e n2 (ou seja, incluindo n1
e n2), excluindo-se o nmero 0, caso esteja no intervalo. Caso o valor de n2 seja menor que o de n1,
a funo deve tratar o invervalo como sendo de n2 at n1 sem que o invocador da funo perceba.
Ex:
n=multiplica_intervalo ( 3 , 6 ) ; / n r e c e b e 360 ( r e f e r e n t e a : 3 4 5 6 ) /
n=multiplica_intervalo ( 5 , 5 ) ; / n r e c e b e 5 ( r e f e r e n t e a : 5 ) /
n=multiplica_intervalo ( 2 ,3) ; / n r e c e b e 12 ( r e f e r e n t e a : 2 1 1 2 3 ) /
40. Codifique uma funo que receba um nmero inteiro n passado por parmetro e devolve o primeiro
nmero da srie de fibonacci que maior ou igual a n.
41. Para o programa a seguir:
1

#i n c l u d e <s t d i o . h>

2
3
4

i n t soma1 ( i n t q , i n t c ) ;
i n t soma2 ( i n t ra ) ;

5
6
7

int i = 10;
int j = 20;

8
9
10

i n t main ( ) {
i n t i , k , ra , p ;

11

p = 10;
ra = 5 ;

12
13
14

f o r ( i = 0 ; i< 3 ; i++){
k = soma1 ( ra , p ) ;
ra = soma2 ( k ) ;
printf ( "%d , %d\n " , ra , k ) ;
}

15
16
17
18
19
20
21
22

return 0;

23
24
25
26

i n t soma1 ( i n t q , i n t c ) {
i n t soma = q+i+c ;
r e t u r n soma ;
6

27

28
29
30
31
32
33

i n t soma2 ( i n t ra ) {
int k = j ;
ra = ra + k ;
r e t u r n ra ;
}

a) Determine quais so as variveis locais e globais deste programa, identificando a que funo
pertence cada varivel local.
b) Mostre o que ser impresso na tela do computador quando for executado este programa.