Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Programação linguagem C: exercícios e respostas, Manuais, Projetos, Pesquisas de Teoria dos Jogos

Aprendendo a programar: programando a linguagem C + exercícios e respostas

Tipologia: Manuais, Projetos, Pesquisas

Antes de 2010

Compartilhado em 21/06/2009

usuário desconhecido
usuário desconhecido 🇧🇷

1 / 59

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Aprendendo
a
Programar
Programando
na
Linguagem C
Para Iniciantes
Jaime Evaristo
Respostas dos Exercícios
Propostos
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b

Pré-visualização parcial do texto

Baixe Programação linguagem C: exercícios e respostas e outras Manuais, Projetos, Pesquisas em PDF para Teoria dos Jogos, somente na Docsity!

Aprendendo

a

Programar

Programando

na

Linguagem C

Para Iniciantes

Jaime Evaristo

Respostas dos Exercícios

Propostos

Capítulo 1

  1. Naturalmente, na primeira travessia um índio levaria um branco até a outra margem e voltaria sozinho. A questão é a segunda: não poderia atravessar um índio e um branco, pois ao chegar na outra margem haveria dois brancos e um índio; não poderiam atravessar dois índio, pois o terceiro ficaria com dois brancos. A solução é atravessar dois brancos e um deles retornar. A terceira travessia só pode ser feita por dois índios, pois já existem dois brancos na outra margem. A questão é o retorno. A única possibilidade é retornar um índio e um branco! Temos então o seguinte algoritmo:
  2. Atravessem um índio e um branco.
  3. Retorne o índio.
  4. Atravessem dois brancos.
  5. Retorne um branco.
  6. Atravessem dois índios.
  7. Retornem um índio e um branco.
  8. Atravessem dois índios.
  9. Retorne um branco.
  10. Atravessem dois brancos.
  11. Retorne um branco.
  12. Atravessem dois brancos.
  13. Indicando por 1, 2, 3, 4, ... os discos na ordem crescente dos seus diâmetros, temos para o caso n = 2:
  14. Disco 1 da origem para auxiliar.
  15. Disco 2 da origem para o destino.
  16. Disco 1 da auxiliar para o destino. Para o caso n = 3, basta observar que é necessário apenas transportar os dois discos 1 e 2 da origem para auxiliar (que é o caso anterior), transportar o disco três da origem para o destino e os discos 1 e 2 da torre auxiliar para o destino (que é, novamente, o caso anterior).
  17. Disco 1 da origem para destino.
  18. Disco 2 da origem para auxiliar.
  19. Disco 1 do destino para auxilia.
  20. Disco 3 da origem para destino.
  21. Disco 1 da auxiliar para origem.
  22. Disco 2 da auxiliar para o destino.
  23. Disco 1 da origem para o destino.
  24. Indiquemos por P(m, n) = 0 se m e n têm o mesmo peso e P(m, n) > 0 se a esfera m é mais pesada que a esfera n. Temos então a seguinte proposta:
  25. Pese as esferas 1 e 2.
  26. Se P(1, 2) = 0, pese as esferas 1 e 3. 2.1 Se P(1, 3) > 0 então forneça como resposta: a esfera 3 tem peso menor que as esferas 1 e 2.
  1. A(baterista, baixista).
  2. V(baterista).
  3. A(guitarrista, vocal).
  4. V(baixista)
  5. A(baixista, baterista)

Capítulo 2

1.a) (((9) + sqrt((9)(9) 436))/(23)) = ((9 + sqrt(81 – 72))/6) = ((9 + sqrt(9))/6) = = ((9 + 3)/6) = (12/6) = 2. 1.b) ((pow(3, 2) == 9) && (acos(0) == 0)) || (4 % 8 == 3) = (1 && 0) || 0 = 0 || 0 = 0. 2.a) /Programa que converte uma temperatura dada em graus Fahrenheit para graus Celsius / #include <stdio.h> main() { float Fahrenheit, Celsius; printf("Digite a temperatura em Fahrenheit"); scanf("%f", &Fahrenheit); Celsius = 5 * (Fahrenheit 32)/9; printf("A temperatura de %.2f Fahrenheit corresponde a %.2f Celsius ", Fahrenheit, Celsius); } 2.b) /Programa que inverte um numero com tres algarismos/ #include <stdio.h> main() { int Num, Invert, Unid, Dez, Cent; printf("Digite o numero a inverter "); scanf("%d", &Num); Unid = Num % 10; Dez = (Num % 100)/10; Cent = Num/100; Invert = Unid100 + Dez10 + Cent; printf("Invertendose %d obtemos %d \n", Num, Invert); } 2.c /Programa para somar duas frações/ #include <stdio.h> main() { int Num1, Den1, Num2, Den2, Num, Den; printf("Digite os termos das fracoes \n");

scanf("%d %d %d %d", &Num1, &Den1, &Num2, &Den2); Num = Num1Den2 + Num2Den1; Den = Den1Den2; printf("(%d/%d) + (%d/%d) = (%d/%d)", Num1, Den1, Num2, Den2, Num, Den); } 2.d) / Programa que determina o maior multiplo de um inteiro menor ou igual a outro inteiro/ #include <stdio.h> main() { int Num, Divisor, MaiorMultiplo; printf("Digite o inteiro do qual ser o número procurado deve ser multiplo \n"); scanf("%d", &Divisor); printf("Digite o inteiro que deve ser maior do o que múltiplo procurado\n"); scanf("%d", &Num); MaiorMultiplo = Num Num % Divisor; printf(" \n O maior multiplo de %d menor do que ou igual %d e' %d \n", Divisor, Num, MaiorMultiplo); } 2.e) /Programa para calcular o perimetro de um poligono regular de n lados inscrito numa circunferencia de raio r/ #include <stdio.h> #include <math.h> main() { const float Pi = 3.1416; float r, Perim, Seno; int n; printf("Digite o numero de lados do poligono e o raio \n"); scanf("%d %f", &n, &r); Perim = 2nrsin(Pi/n); printf("Perimetro do poligono regular de %d lados inscrito numa circunferencia de raio %.2f: %.2f \n", n, r, Perim); }

  1. /Programa para permutar os conteudos de duas variaveis sem utilizar uma variavel auxiliar/ #include <stdio.h> main() { float x, y; printf("Digite os dois numeros \n"); scanf("%f %f", &x, &y); printf("Conteudos antes da troca x = %0.1f, y = %0.1f \n", x, y); x = x + y; y = x y;

#include <stdio.h> main() { int s, Saque, Notas100, Notas50, Notas10, Notas5, Notas1; printf("Digite o valor do saque: "); scanf("%d", &Saque); Notas100 = Saque/100; s = Saque % 100; Notas50 = s/50; s = s % 50; Notas10 = s/10; s = s % 10; Notas5 = s/5; Notas1 = s % 5; printf("Valor do saque: %d \n Distribuicao da notas: \n %d de 100 \n %d notas de 50 \n %d notas de 10 \n %d notas de 5 \n %d notas de 1", Saque, Notas100, Notas50, Notas10, Notas5, Notas1); }

  1. /Programa para determinar a prestação de um financiamento/ #include <math.h> main() { float Valor, i, Coef, Pot, Prestacao; int n; printf("Digite o valor do financiamento: "); scanf("%f", &Valor); printf("Digite o valor da taxa: "); scanf("%f", &i); i = i/100; puts("Digite o número de prestações: "); scanf("%d", &n); Pot = pow(1 + i, n); Coef = (Pot 1)/(iPot); Prestacao = Valor/Coef; printf("Financiamento: %.2f\n Taxa: %.2f\n Número de prestações: %d\n Valor da prestação: %.2f", Valor, 100i, n, Prestacao); }

Capítulo 3

  1. /Programa que determina o intervalo de tempo decorrido entre dois instantes/ main() { int h1, min1, s1, h2, min2, s2, h, min, s;

puts("Digite o instante inicial (horas, minutos e segundos)"); scanf("%d %d %d", &h1, &min1, &s1); puts("Digite o instante final (horas, minutos e segundos)"); scanf("%d %d %d", &h2, &min2, &s2); h = h2 h1; min = min2 min1; s = s2 s1; if ((h < 0) || ((h == 0) && (min < 0)) || ((h == 0) && (min == 0) && (s < 0))) puts("Dados invalidos! O segundo instante é anterior ao primeiro"); else { if (s < 0) { min = min 1; s = s + 60; } if (min < 0) { h = h 1; min = min + 60; } printf( "Entre os instantes %d h %d min %d s e %d h %d min %d s passaramse %d h %d min %d s", h1, min1, s1, h2, min2, s2, h, min, s); } }

  1. /Programa para arredondar um numero dado/ #include <stdio.h> main() { float Num, ParteFrac; int Arredondamento; printf("Digite um numero "); scanf("%f", &Num); Arredondamento = Num; ParteFrac = Num Arredondamento; if (ParteFrac >= 0.5) Arredondamento = Arredondamento + 1; printf("Aredondando %f obtemos %d ", Num, Arredondamento); }
  2. /Programa para verificar se um inteiro dado e um quadrado perfeito/ #include <stdio.h> #include <math.h> main() {
  1. /Programa para verificar se um triangulo de lados dados e retangulo/ #include <stdio.h> main() { float a, b, c, Hip, Cat1, Cat2; printf("Digite os comprimentos dos lados: \n"); scanf("%f %f %f", &a, &b, &c); Cat1 = b; Cat2 = c; if ((a < b + c) && (b < a + c) && (c < a +b)) { if ((a > b) && (a > c)) Hip = a; else if (b > c) { Hip = b; Cat1 = a; } else { Hip = c; Cat2 = a; } if (HipHip == Cat1Cat1 + Cat2*Cat2) printf("Triangulo retangulo de hipotenusa %0.2f e catetos %0.2f e %0.2f", Hip, Cat1, Cat2); else printf("O triangulo de lados %0.2f, %0.2f e %0.2f nao e retangulo", a, b, c); } else printf("Os numeros dados nao sao comprimentos dos lados de um triangulo"); }
    1. /Programa para determinar as raizes de uma equacao do segundo grau/ #include <stdio.h> #include <math.h> main() { float a, b, c, Imag, Real, Delta, x1, x2; printf("Digite os coeficientes \n"); scanf("%f %f %f", &a, &b, &c); if (a != 0) { Real = b/(2a); Delta = bb 4ac; if (Delta >= 0)

Imag = sqrt(Delta)/(2a); x1 = Real + Imag; x2 = Real Imag; printf("As raizes da equacao de coeficientes %.2f, %.2f e %.2f sao %.2f e %.2f ", a, b, c, x1, x2); } else { Imag = sqrt(Delta)/(2a); printf("As raizes da equacao de coeficientes %.2f , %.2f e %.2f sao %.2f + %.2fi e %.2f %.2fi ", a, b, c, Real, Imag, Real, Imag); } } else printf("A equacao nao e do segundo grau"); }

  1. /* Programa para determinar a idade de uma pessoa em anos, meses e dias*/ #include <stdio.h> main() { int DiaNasc, MesNasc, AnoNasc, DiaAtual, MesAtual, AnoAtual, Anos, Meses, Dias; printf("Digite a data do nascimento \n"); scanf("%d %d %d", &DiaNasc, &MesNasc, &AnoNasc); printf("Digite a data de hoje \n"); scanf("%d %d %d", &DiaAtual, &MesAtual, &AnoAtual); Anos = AnoAtual AnoNasc; Meses = MesAtual MesNasc; Dias = DiaAtual DiaNasc; if ((Anos < 0) || ((Anos == 0) && (Meses < 0)) || ((Anos == 0) && (Meses == 0) && (Dias < 0))) printf("Data de nascimento invalida"); else { if (Meses < 0) { Anos = Anos 1; Meses = Meses + 12; } if (Dias < 0) { if (Meses > 0) Meses = Meses 1; else Anos = Anos 1;
  1. /Programa para calcular a soma dos quadrados dos n primeiros inteiros positivos, n dado/ #include <stdio.h> main() { int n, i, Soma; printf("Digite o valor de n: \n"); scanf("%d", &n); Soma = 0; for (i = 1; i <= n; i++) Soma = Soma + ii; printf("A soma dos quadrados dos %d primeiros numeros naturais e %d \n", n, Soma); } 3.a) /Programa para calcular a soma dos n primeiros termos de uma sequencia/ #include <stdio.h> main() { float Soma, Num, Den; int n, i; printf("Digite o valor de n: \n"); scanf("%d", &n); Num = 1; Den = 2; Soma = 0.5; for (i = 1; i < n; i++) { Num = Num + 2; Den = Den + 3; Soma = Soma + Num/Den; } printf("A soma dos %d primeiros numeros da sequencia dada e %f \n", n, Soma); } 3.b) /Programa para calcular a soma dos n primeiros termos de uma sequencia*/ #include <stdio.h> main() { float Soma;

int n, i; printf("Digite o valor de n: \n"); scanf("%d", &n); Soma = 0; for (i = 1; i <= n; i++) if (i % 2 == 1) Soma = Soma + 1.0/i; else Soma = Soma 1.0/i; printf("A soma dos %d primeiros numeros da sequencia dada e %f \n", n, Soma); }

  1. /Programa para determinar o minimo multiplo comum de dois numeros positivos/ #include <stdio.h> main() { int x, y, a, b, Mmc; printf("Digite os dois numeros \n"); scanf("%d %d", &x, &y); a = x; b = y; if (x < y) { a = y; b = x; } Mmc = a; while (Mmc % b != 0) Mmc = Mmc + a; printf("mmc(%d, %d) = %d \n", x, y, Mmc); }
  2. /Programa para determinar os numeros perfeitos menores que um inteiro dado/ #include <stdio.h> main() { int Num, i, Soma, j; Num = 1; while (Num != 1) { printf("Digite o numero (1 p/ encerrar) \n"); scanf("%d", &Num); printf("Numeros perfeitos menores que %d: \n", Num); for (i = 2; i < Num; i = i + 1) { Soma = i + 1; for (j = 2; j <= i/2; j++)

int Num, NumAlg, n; Num = 1; while (Num != 1) { printf("Digite o numero (1 p/ encerrar) \n"); scanf("%d", &Num); NumAlg = 1; while (pow10(NumAlg) < Num) NumAlg = NumAlg + 1; printf("%d possui %d algarismo(s) \n", Num, NumAlg); } }

  1. /Programa para verificar se um inteiro maior que 2 e' um produto de dois primos/ #include <stdio.h> #include <math.h> main() { int Num, Fator1, Fator2, r, i; Num = 1; while (Num != 1) { printf("Digite o numero (1 p/ encerrar) \n"); scanf("%d", &Num); r = sqrt(Num); Fator1 = 2; while ((Num % Fator1 != 0) && (Fator1 <= r)) Fator1 = Fator1 + 1; if (Fator1 > r) printf("%d é primo\n", Num); else { Fator2 = Num/Fator1; r = sqrt(Fator2); i = 2; while ((Fator2 % i != 0) && (i <= r)) i = i + 1; if (i <= r) printf("%d nao e produto de dois primos \n", Num); else printf("%d e' produto dos primos %d e %d \n", Num, Fator1, Fator2); } } }
  2. /Programa para determinar a decomposição em fatores primos de um inteiro/ #include <stdio.h> main()

int Num, i, n, Mult; Num = 1; while (Num != 1) { printf("Digite o numero (1 p/ encerrar) \n"); scanf("%d", &Num); n = Num; printf("Decomposicao em fatores primos de %d: \n", Num); i = 2; while (n > 1) { Mult = 0; while (n % i == 0) { n = n/i; Mult = Mult + 1; } if (Mult > 0) printf("%d com multiplicidade %d \n", i, Mult); i = i + 1; } } }

  1. Ver solução na seção 5.6 do capítulo 5.
  2. /* Programa que determina o nesimo termo da sequencia de Fibbonaci*/ #include <stdio.h> main() { int n, i, Ant1, Ant2, Termo; printf("Digite n \n"); scanf("%d", &n); Termo = 1; Ant1 = 1; Ant2 = 0; i = 1; while (i < n) { Termo = Ant1 + Ant2; Ant2 = Ant1; Ant1 = Termo; i = i + 1; } printf(" O termo de ordem %d da sequencia de Fibbonaci e' %d \n", n, Termo); }

if (j == SomaDivisoresMenores(x)) printf("%10ld %20ld\n", j, x); } }

  1. /Programa que gera subconjuntos com tres elementos/ #include <stdio.h> main() { int n, i, j, k; printf("Digite o valor de n: \n"); scanf("%d", &n); for (i = 1; i <= n 2; i++) for (j = i + 1; j <= n 1; j++) for (k = j + 1; k <= n; k++) printf("{%d, %d, %d}\n", i, j, k); }

Capítulo 5

  1. /Funcao para determinar o kesimo digito de um numero/ /Funcao que retorna o numero de algarismos de um inteiro/ int NumAlg(int n) { int i = 1; while (pow10(i) < n) i = i + 1; return (i); } int KDigito(int n, int k) { int i, Potencia, Resto; if (k <= NumAlg(n)) { Potencia = pow10(k); Resto = n % Potencia; Potencia = pow10(k – 1); return (Resto/Potencia); } else return(1); }
  2. /Funcao iterativa para o calculo do fatorial impar/

long int FatImpar(int n) { long int Fat; int i; if (n % 2 == 1) { Fat = 1; for (i = 3; i <= n; i = i + 2) Fat = Fat * i; return (Fat); } else return(1); } /Funcao recursiva para o calculo do fatorial impar/ long int FatImparRec(int n) { if (n % 2 == 1) if (n == 1) return(1); else return(n*FatImparRec(n 2)); else return(1); }

  1. /Programa para determinar o fatorial primo de um inteiro dado/ #include <stdio.h> #include <math.h> /Funcao que recebe um inteiro e verifica se ele e primo/ int Primo(int x) { int j; j = 2; while ((x % j != 0) && (j <= sqrt(x))) j = j + 1; if (j <= sqrt(x)) return(0); else return(1); } main() { int Num, j; long FatPrim; printf("Digite o inteiro \n");