Você está na página 1de 19

Lista de Exercı́cios— Fundamentos de Programação 1 Profs.

Myriam e Ricardo

GABARITO da Lista de Exercı́cios - Operadores, Entrada e Saı́da de Dados

1. Complete o programa abaixo de forma a ler do teclado dois valores em ponto flutuante, armazenando-os nas variáveis
n1 e n2. Efetue a soma de n1 e n2, atribuindo o resultado na variável aux. Imprima o valor de aux com apenas duas
casas decimais - dica: a função printf possui opções de formatação para esta finalidade!
1 # include < stdio .h >
2 int main () {
3 float n1 , n2 aux ;
4
5 printf ( " Digite o primeiro valor : " ) ;
6 scanf ( " % f " , & n1 ) ;
7
8 .......... COMPLETAR ..........
9
10 printf ( " % f " , aux ) ;
11 return 0;
12 }

1 # include < stdio .h >


2 int main () {
3 float n1 , n2 , aux ;
4 printf ( " Digite o primeiro valor : " ) ;
5 scanf ( " % f " , & n1 ) ;
6 printf ( " Digite o segundo valor : " ) ;
7 scanf ( " % f " , & n2 ) ;
8
9 aux = n1 + n2 ;
10 printf ( " A soma dos valores digitados eh : %.2 f " , aux ) ; // .2 f significa imprimir com 2 casa depois do pto decimal
11 return 0;
12 }
2. Modifique o programa anterior para imprimir também os valores de n1 e n2 e rode novamente. Atenção!!! Você deve
considerar que está correto somente quando não houver nenhum aviso (warning) nem erro (error).
O que acontece se você eliminar os comandos de leitura (scanf) do programa e tentar imprimir o conteúdo das variáveis
mesmo assim? Compile, rode e veja as mensagens e resultados.
Solução a
1 # include < stdio .h >
2 int main () {
3 float n1 , n2 , aux ;
4 printf ( " Digite o primeiro valor : " ) ;
5 scanf ( " % f " , & n1 ) ;
6 printf ( " Digite o segundo valor : " ) ;
7 scanf ( " % f " , & n2 ) ;
8
9 aux = n1 + n2 ;
10 printf ( " A soma de %.2 f + %.2 f eh : %.2 f " , n1 , n2 , aux ) ; // .2 f significa imprimir com 2 casa depois do pto decimal
11 return 0;
12 }

Solução b (sem scanf)


1 # include < stdio .h >
2 int main () {
3 float n1 , n2 , aux ;
4 // printf (" Digite o primeiro valor : ") ;
5 // scanf ("% f " , & n1 ) ;
6 // printf (" Digite o segundo valor : ") ;
7 // scanf ("% f " , & n2 ) ;
8
9 aux = n1 + n2 ;
10 printf ( " A soma de %.2 f + %.2 f eh : %.2 f " , n1 , n2 , aux ) ; // agora o programa vai imprimir os lixos de memoria de n1
e n2 e a soma desses lixos
11 return 0;
12 }
3. Implemente um programa que leia três variáveis do teclado, uma de cada tipo: char, int e float (o programa deve
ler nesta ordem, ou seja, primeiro variável tipo char, depois int e depois float). Lembre-se de que uma variável
tipo char armazena um único caractere (letra, sı́mbolo ou dı́gito), então ao fornecer o seu valor via teclado evite uma
sequência de caracteres (forneça apenas um caractere). Ao final, imprima o conteúdo de cada variável. Lembre-se de
usar nomes significativos e de imprimir mensagens adequadas!
1 # include < stdio .h >
2 int main () {
3 int num ;
4 char letra ;
5 float num_pt_flut ;
6
7 printf ( " Entre com uma letra : " ) ;
8 scanf ( " % c " , & letra ) ;
9 printf ( " Entre com um numero inteiro : " ) ;
10 scanf ( " % d " , & num ) ;
11 printf ( " Entre com um numero de ponto flutuante : " ) ;
12 scanf ( " % f " , & num_pt_flut ) ;
13 printf ( " A letra fornecida foi %c , numero inteiro : %d , numero real : % f " , letra , num , num_pt_flut ) ;
14 return 0;
15 }
4. Modifique o programa anterior para que leia primeiro o tipo int e depois os outros. Veja que a nova ordem vai dar
problema na leitura do tipo char. Você consegue corrigir o erro de forma que a ordem int, char e float possa ser
respeitada?
1 # include < stdio .h >
2 int main () {
3 int num ;
4 char letra ;
5 float num_pt_flut ;
6
7 printf ( " Entre com um numero inteiro : " ) ;
8 scanf ( " % d " , & num ) ;
9 printf ( " Entre com uma letra : " ) ;
10 scanf ( " % c " , & letra ) ; // incluir um espaço antes do % c para que o \ n que estah no buffer possa ser
desc onsidera do
11 printf ( " Entre com um numero de ponto flutuante : " ) ;
12 scanf ( " % f " , & num_pt_flut ) ;
13 printf ( " A letra fornecida foi %c , numero inteiro : %d , numero real : % f " , letra , num , num_pt_flut ) ;
14 return 0;
15 }
5. Implemente um programa que leia 2 valores inteiros e armazene-os nas variáveis i1 e i2. Calcule a divisão de i1 por i2
atribuindo o seu resultado na variável divis e o resto da divisão entre i1 e i2, atribuindo o seu resultado na variável
rest. Verifique os resultados para os seguintes valores fornecidos pelo teclado: i1=10 e i2=5 e depois i1=12 e i2=5.
Você consegue explicar a diferença?
1 # include < stdio .h >
2 int main () {
3 int i1 , i2 , divis , rest ;
4 printf ( " Digite o primeiro valor ( inteiro ) : " ) ;
5 scanf ( " % d " , & i1 ) ;
6 printf ( " Digite o segundo valor ( inteiro ) : " ) ;
7 scanf ( " % d " , & i2 ) ;
8 divis = i1 / i2 ;
9 rest = i1 % i2 ; // o operador % realiza o resto da divis~
ao
10 printf ( " O quiciente da divisao de % d por % d eh % d e o resto eh % d " , i1 , i2 , divis , rest ) ;
11 return 0;
12 }
6. Implemente um programa que leia 2 valores inteiros e armazene-os nas variáveis n1 e n2. Calcule a média entre n1 e
n2, atribuindo o seu resultado na variável media. Imprima o valor de media. Qual a saı́da do seu programa para n1=2
e n2=4? E para n1=2 e n2=3? Modifique o programa para que possa calcular e imprimir a média corretamente.
Solução (com erro)
1 # include < stdio .h >
2 int main () {
3 int n1 , n2 ;
4 float aux ;
5 printf ( " Digite o primeiro valor : " ) ;
6 scanf ( " % d " , & n1 ) ;
7 printf ( " Digite o segundo valor : " ) ;
8 scanf ( " % d " , & n2 ) ;
9
10 aux =( n1 + n2 ) /2;
11 printf ( " A media dos valores digitados eh : %.2 f " , aux ) ; // .2 f significa imprimir com 2 casa depois do pto
decimal
12 return 0;
13 }

Solução (corrigida)
1 # include < stdio .h >
2 int main () {
3 int n1 , n2 ; //
4 float aux ;
5 printf ( " Digite o primeiro valor : " ) ;
6 scanf ( " % d " , & n1 ) ;
7 printf ( " Digite o segundo valor : " ) ;
8 scanf ( " % d " , & n2 ) ;
9
10 aux =( n1 + n2 ) /2.0; // ao dividir por um float ( constante 2.0) o problema desaparece
11 printf ( " A media dos valores digitados eh : %.2 f " , aux ) ; // .2 f significa imprimir com 2 casa depois do pto
decimal
12 return 0;
13 }
7. Considere o trecho de código abaixo. Ele lê um número inteiro do teclado e o imprime como se fosse um número em
ponto flutuante. Implemente o programa e observe se ocorre um erro de compilação ou um erro de execução. Qual a
correção necessária para que o programa execute sem erros?
1 # include < stdio .h >
2 int main () {
3 int aux ;
4
5 printf ( " Digite um numero inteiro : " ) ;
6 scanf ( " % d " , & aux ) ;
7 printf ( " % f " , aux ) ;
8 return 0;
9 }

1 // o erro ~ c de execu ~
A A§~
A £o porque a convers ~ ~
A £o de tipos no printf A c possivel ( ler um char e imprimir como int e
vice - versa ) mas nao de int para float
2 # include < stdio .h >
3 int main () {
4 int aux ;
5 printf ( " Digite um numero inteiro : " ) ;
6 scanf ( " % d " , & aux ) ;
7 printf ( " O numero lido e impresso de forma errada eh % f \ n " , aux ) ; // correcao : imprimir como inteiro (% d )
8 printf ( " O numero lido e impresso de forma correta eh % d \ n " , aux ) ;
9 return 0;
10 }
8. Considere o programa abaixo. Ele lê um caractere e o imprime como se fosse um número inteiro. Que número é esse
exibido pelo programa? É um erro de execução ou ele tem algum significado?
1 # include < stdio .h >
2 int main () {
3 char aux ;
4
5 printf ( " Digite um caracter : " ) ;
6 scanf ( " % c " , & aux ) ;
7 printf ( " % d " , aux ) ;
8
9 return 0;
10 }

1 // N~
a o ha erro !
2 # include < stdio .h >
3
4 int main () {
5 char aux ;
6 printf ( " Digite um caractere : " ) ;
7 scanf ( " % c " , & aux ) ;
8 printf ( " % d " , aux ) ; // o valor inteiro impresso corresponde ao codigo ASCII do caractere fornecido como entrada
9 return 0;
10 }
9. Faça um programa que calcule o perı́metro (2base + 2altura) de um retângulo.
1 # include < stdio .h >
2
3 int main ()
4 {
5 float base , altura ;
6
7
8 printf ( " Digite a base e a altura do retangulo : " ) ;
9 scanf ( " % f % f " , & base , & altura ) ;
10
11 printf ( " o perimetro do retangulo de base %.2 f e altura %.2 f eh igual a %.2 f " , base , altura , 2* base +2* altura ) ;
12 return 0;
13 }
10. Faça um programa que calcule e mostre o volume de uma esfera sendo fornecido o valor de seu raio (r). A fórmula
para calcular o volume é: p4{3q  P I  r3 . Considere (atribua) para a constante PI o valor 3.14159. Dica: cuidado com
o resultado de 4/3 ;-)

Exemplos de Entrada Exemplos de Saı́da


3 VOLUME = 113.097
15 VOLUME = 14137.155
1523 VOLUME = 14797486501.627

Solução a
1 # include < stdio .h >
2 # define PI 3.14159
3
4 int main ( )
5 {
6 int r ;
7 double volume ; // com float nao eh possivel armazenar um valor muito grande ( como ultimo teste indicado na lista )
8 printf ( " Entre com o raio da esfera ( inteiro ) : " ) ;
9 scanf ( " % d " , & r ) ;
10 volume = (4.0 / 3.0) * PI * r * r * r ;
11 printf ( " Volume da esfera de raio % d eh igual a : %.3 lf " , r , volume ) ;
12 return 0;
13 }

Solução b
1 // Resoluç~
a o do Ex2 usando a funcao matemática pow (...)
2 # include < stdio .h >
3 # include < math .h >
4 # define PI 3.14159
5
6 int main ( )
7 {
8 int r ;
9 double volume ; // com float nao eh possivel armazenar um valor muito grande ( como ultimo teste indicado na lista )
10 printf ( " Entre com o raio da esfera ( inteiro ) : " ) ;
11 scanf ( " % d " , & r ) ;
12 volume = (4.0 / 3.0) * PI * pow (r ,3) ;
13 printf ( " Volume da esfera de raio % d eh igual a : %.3 lf " , r , volume ) ;
14 return 0;
15 }
11. Faça um programa que leia três valores inteiros e apresente o máximo dos três valores lidos seguido da mensagem “eh
o maior”. Utilize a fórmula:
a b abspa  bq
maxAB 
2
Obs. abs() é uma função da biblioteca stdlib.h! Para isso lembre de incluir stdlib.h de forma similar stdio.h.
1 # include < stdio .h >
2 # include < stdlib .h >
3
4 int main ( void )
5 {
6 int a , b , c , maior ;
7
8 printf ( " Digite 3 valores inteiros ( separados por ENTER ) " ) ;
9 scanf ( " % d " , & a ) ;
10 scanf ( " % d " , & b ) ;
11 scanf ( " % d " , & c ) ;
12
13
14 maior = ( a + b + abs (a - b ) ) /2; // maior entre a e b
15 maior = ( c + maior + abs (c - maior ) ) /2; // maior entre c e ( a e b )
16 printf ( " \ n % d eh maior \ n " , maior ) ;
17 return 0;
18 }
12. Modifique o programa anterior para imprimir também o menor (NÃO use o condicional if - veja se consegue abstrair
como deve ser a fórmula do menor a partir do entendimento de como funciona a fórmula do maior).
1 # include < stdio .h >
2
3
4 int main ( void )
5 {
6 int a , b , c , menor ;
7
8 printf ( " Digite 3 valores inteiros ( separados por ENTER ) " ) ;
9 scanf ( " % d " , & a ) ;
10 scanf ( " % d " , & b ) ;
11 scanf ( " % d " , & c ) ;
12
13
14 menor = ( a + b - abs (a - b ) ) /2; // menor entre a e b
15 menor = ( c + menor - abs (c - menor ) ) /2; // maior entre c e ( a e b )
16 printf ( " \ n % d eh menor \ n " , menor ) ;
17 return 0;
18 }
13. Calcule o consumo médio de um automóvel sendo fornecidos a distância total percorrida (em Km, representada como
um inteiro) e o total de combustı́vel gasto (em litros, representado por um valor real). Apresente o valor que representa
o consumo médio do automóvel com 3 casas após a vı́rgula, seguido da mensagem ”km/l”.

Exemplo de Entrada Exemplo de Saı́da


500 14.286 km/l
35.0

1 # include < stdio .h >


2
3
4 int main ( void )
5 {
6 int distKm ;
7
8 float gastoComb ;
9
10 printf ( " Digite o distancia total percorrida ( somente valor inteiro ) : " ) ;
11 scanf ( " % d " , & distKm ) ;
12 printf ( " Digite o total de combustivel gasto : " ) ;
13 scanf ( " % f " , & gastoComb ) ;
14
15 printf ( " A média de consumo foi de R$ %.3 f km \\ h \ n " , distKm / gastoComb ) ; // tem que duplicar o \ ( km \ h ) para que ele
nao entenda como o inicio de um comando de formatacao
16 return 0;
17 }
14. Faça um programa que leia um número inteiro e informe com quais cédulas podemos representá-lo. Suponha que
estejam disponı́veis apenas notas de R$ 50, R$5 e R$1. Exemplo de resposta: R$ 218 = 4 cédulas de 50, 3 cédulas de
5 e 3 cédulas de 1.
Solução a
1 # include < stdio .h >
2 # include < math .h >
3
4
5
6 int main ( void )
7 {
8 int total ;
9 scanf ( " % d " ,& total ) ;
10 printf ( " \ n % d cedulas de R$ % d .00\ n " , total /50 ,50) ;
11 printf ( " \ n % d cedulas de R$ % d .00\ n " , total %50/5 ,5) ;
12 printf ( " \ n % d cedulas de R$ % d .00\ n " , total %50%5 ,1) ;
13 return 0;
14 }

Solução b
1 # include < stdio .h >
2 # include < math .h >
3
4 # define C1 50
5 # define C2 5
6 # define C3 1
7
8 int main ( void )
9 {
10 int total ;
11 scanf ( " % d " ,& total ) ;
12 printf ( " \ n % d cedulas de R$ % d .00\ n " , total / C1 , C1 ) ;
13 printf ( " \ n % d cedulas de R$ % d .00\ n " , total % C1 / C2 , C2 ) ;
14 printf ( " \ n % d cedulas de R$ % d .00\ n " , total % C1 % C2 / C3 , C3 ) ;
15 return 0;
16 }

Solução c
1 # include < stdio .h >
2 # include < math .h >
3
4
5 int main ( void )
6 {
7 int total , c1 , c2 , c3 , r ;
8 printf ( " Por favor entre com o total a ser dividido em cedulas : " ) ;
9 scanf ( " % d " ,& total ) ;
10 printf ( " Por favor entre com o conjunto de 3 cedulas a serem usadas na divisao : " ) ;
11 scanf ( " % d % d % d " ,& c1 ,& c2 ,& c3 ) ; // assumindo que só ha um conjunto de 3 cédulas possı́vel
12
13 r = total ;
14
15 printf ( " \ n % d cedulas de R$ % d .00\ n " ,r / c1 , c1 ) ;
16 r = r % c1 ;
17 printf ( " \ n % d cedulas de R$ % d .00\ n " ,r / c2 , c2 ) ;
18 r = r % c2 ;
19 printf ( " \ n % d cedulas de R$ % d .00\ n " ,r / c3 , c3 ) ;
20 return 0;
21 }
15. Faça um algoritmo que dado um número de segundos, converta para dias, horas, minutos e segundos. Por exemplo,
7322 segundos correspondem a 0 dias, 2 horas, 2 minutos e 2 segundos.
1 # include < stdio .h >
2 # include < math .h >
3
4 # define DIA_SEG (24*60*60)
5 # define HORA_SEG (60*60)
6 # define MIN_SEG 60
7
8 int main ( void )
9 {
10 int totalSeg , rSeg , dias , horas , mins , segs ;
11 printf ( " Digite o total de segundos : " ) ;
12 scanf ( " % d " , & totalSeg ) ;
13 dias = totalSeg / DIA_SEG ; // quantos dias ( em segundos ) podem ser subtraidos do total de segundos fornecido pelo
usuario
14 rSeg = totalSeg % DIA_SEG ; // quantos segundos restam apos retirar repetidamente os dias
15 horas = rSeg / HORA_SEG ; // quantos horas ( em segundos ) podem ser subtraidas do que restou da retirada dos dias
16 rSeg = rSeg % HORA_SEG ; // quantos segundos restam apos retirar repetidamente as horas
17 mins = rSeg / MIN_SEG ; // quantos minutos ( em segundos ) podem ser subtraidos do que restou da retirada das horas
18 segs = rSeg % MIN_SEG ; // quantos segundos restam apos retirar repetidamente os minutos
19 printf ( " \ n % d correspondem a : % d dias , % d horas , % d min , % d seg \ n " , totalSeg , dias , horas , mins , segs ) ;
20 return 0;
21 }
16. Faça um programa que, dado um número inteiro como entrada, retorne seu último dı́gito.
1 # include < stdio .h >
2
3
4 int main ( void )
5 {
6 int num ;
7
8
9 printf ( " Digite um valor ( inteiro base 10) : " ) ;
10 scanf ( " % d " , & num ) ;
11 printf ( " o ultimo digito de % d eh igual a % d " , num , num %10) ;
12 return 0;
13 }
17. Construa um programa que receba o valor de uma temperatura em graus Celsius (C) e calcule a sua temperatura
correspondente em graus Farenheit (F ):
C
pF  32q  5
9

1 # include < stdio .h >


2
3
4 int main ( void )
5 {
6 float c , f ;
7
8
9 printf ( " Digite a temperatura em graus Celsius : " ) ;
10 scanf ( " % f " , & c ) ;
11 f = c *9.0/5.0 + 32; // c =( f -32) *5/9
12 printf ( " a temperatura de %.2 f graus Celsius corresponde a %.2 f graus Farenheit " ,c , f ) ;
13 return 0;
14 }
18. Construa um programa que calcule o gasto de uma viagem de carro de uma cidade a outra, sabendo:
• O carro utilizado roda 15 Km com 1 litro de gasolina.
• O preço da gasolina é de R$2,60.
• O valor de cada pedágio é de R$8,00.

Seu programa deve receber a distância e a quantidade de pedágios entre as cidades.


Solução a
1 # include < stdio .h >
2 # define RENDIMENTO 15
3 # define PRECOGAS 2.60
4 # define PRECOPEDAG 8
5
6
7 int main ( void )
8 {
9 float distancia , ga s to Fi na n ce ir o ;
10 int quantPedag ;
11
12
13 printf ( " Digite a distancia entre as cidades : " ) ;
14 scanf ( " % f " , & distancia ) ;
15 printf ( " Digite a quantidade de pedagios : " ) ;
16 scanf ( " % d " , & quantPedag ) ;
17 gastoFin an ce i ro = distancia / RENDIMENTO * PRECOGAS + quantPedag * PRECOPEDAG ;
18 printf ( " O gasto financeiro para se viajar %.2 f KM contendo % d pedagios eh de R$ %.2 f " , distancia , quantPedag ,
gas to F in an ce i ro ) ;
19 return 0;
20 }

Solução b
1 # include < stdio .h >
2
3 # define R 15
4 # define G 2.6
5 # define P 8
6
7 int main ( void )
8 {
9 float distancia , ga s to Fi na n ce ir o ;
10 int quantPedag ;
11
12
13 printf ( " Digite a distancia entre as cidades : " ) ;
14 scanf ( " % f " , & distancia ) ;
15 printf ( " Digite a quantidade de pedagios : " ) ;
16 scanf ( " % d " , & quantPedag ) ;
17
18 gastoFin an ce i ro = distancia / R * G + quantPedag * P ;
19 printf ( " O gasto financeiro para se viajar %.2 f KM contendo % d pedagios eh de R$ %.2 f " , distancia , quantPedag ,
gas to F in an ce i ro ) ;
20 return 0;
21 }

Solução c
1 # include < stdio .h >
2
3
4
5 int main ( void )
6 {
7 float distancia , gastoFinanceiro , precogas , precopedag ;
8 int quantPedag , rendimento ;
9
10
11 printf ( " Digite a distancia entre as cidades : " ) ;
12 scanf ( " % f " , & distancia ) ;
13 printf ( " Digite a quantidade de pedagios e o preco unico cobrado na rodovia : " ) ;
14 scanf ( " % d % f " , & quantPedag ,& precopedag ) ;
15 printf ( " Digite o rendimento do carro e o preco da gasolina : " ) ;
16 scanf ( " % d % f " , & rendimento ,& precogas ) ;
17
18 gastoFin an ce i ro = distancia / rendimento * precogas + quantPedag * precopedag ;
19 printf ( " O gasto financeiro para se viajar %.2 f KM contendo % d pedagios eh de R$ %.2 f " , distancia , quantPedag ,
gas to F in an ce i ro ) ;
20 return 0;
21 }
19. Faça um programa que leia 3 valores que correspondem às três notas de um aluno. A seguir, calcule a média do aluno,
sabendo que a primeira nota tem peso 2, a segunda nota tem peso 3 e a terceira nota tem peso 5. Considere que cada
nota pode ir de 0 até 10.0. Imprima a média com 1 dı́gito após o ponto decimal.
1 # include < stdio .h >
2 # define P1 2
3 # define P2 3
4 # define P3 5
5
6 int main ( void )
7 {
8 float n1 , n2 , n3 , media ;
9
10 printf ( " Digite as 3 notas " ) ;
11 scanf ( " % f " , & n1 ) ;
12 scanf ( " % f " , & n2 ) ;
13 scanf ( " % f " , & n3 ) ;
14
15
16 media = ( P1 * n1 + P2 * n2 + P3 * n3 ) /( P1 + P2 + P3 ) ;
17 printf ( " A media ponderada entre as notas %.1 f %.1 f %.1 f eh igual a %.1 f " , n1 , n2 , n3 , media ) ;
18 return 0;
19 }

Você também pode gostar