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
- 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:
- Atravessem um índio e um branco.
- Retorne o índio.
- Atravessem dois brancos.
- Retorne um branco.
- Atravessem dois índios.
- Retornem um índio e um branco.
- Atravessem dois índios.
- Retorne um branco.
- Atravessem dois brancos.
- Retorne um branco.
- Atravessem dois brancos.
- Indicando por 1, 2, 3, 4, ... os discos na ordem crescente dos seus diâmetros, temos para o caso n = 2:
- Disco 1 da origem para auxiliar.
- Disco 2 da origem para o destino.
- 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).
- Disco 1 da origem para destino.
- Disco 2 da origem para auxiliar.
- Disco 1 do destino para auxilia.
- Disco 3 da origem para destino.
- Disco 1 da auxiliar para origem.
- Disco 2 da auxiliar para o destino.
- Disco 1 da origem para o destino.
- 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:
- Pese as esferas 1 e 2.
- 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.
- A(baterista, baixista).
- V(baterista).
- A(guitarrista, vocal).
- V(baixista)
- 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); }
- /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); }
- /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
- /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); } }
- /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); }
- /Programa para verificar se um inteiro dado e um quadrado perfeito/ #include <stdio.h> #include <math.h> main() {
- /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"); }
- /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"); }
- /* 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;
- /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); }
- /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); }
- /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); } }
- /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); } } }
- /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; } } }
- Ver solução na seção 5.6 do capítulo 5.
- /* 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); } }
- /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
- /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); }
- /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); }
- /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");