MINISTÉRIO DA EDUCAÇÃO SECRETARIA DE EDUCAÇÃO PROFISSIONAL E TECNOLÓGICA GERENCIA EDUCACIONAL DE APOIO AO ENSINO COORDENAÇÃO DA ÁREA DE INFORMÁTICA Lógica de Programação Professor Manoel Campos da Silva Filho LISTA DE EXERCÍCIOS GERAIS Desenvolva programas em linguagem C para: ENTRADA E SAÍDA DE DADOS/ESTRUTURA DE SELEÇÃO 1. Ler nome, endereço, telefone e imprimir cada dado em uma linha separada, . 2. Ler nome, sexo e idade e imprimir tais dados em seguida. Se idade menor que 18, imprimir o texto Maior de Idade. Caso contrário imprimir Menor de Idade. 3. Ler um número inteiro e imprimir seu sucessor e seu antecessor, sem alterar o valor original do número. 4. Receber um valor de um produto do teclado e imprimir esse valor com desconto de 10%. Mostrar quanto foi o valor do desconto. 5. Informar três números inteiros e imprimir a média. 6. Informe o tempo gasto em uma viagem (em horas), a velocidade média (em km/h) e calcule o consumo de combustível (em litros), considerando que o veículo percorre 14km para cada litro de combustível gasto. 7. Ler um número inteiro e imprimir seu cubo. 8. Informar o saldo de uma conta poupança e imprimir o saldo com reajuste de 1%. 9. O consumo de energia elétrica é medido em Kilowatt/hora (kWh). Faça um programa para calcular e imprimir o valor em reais de uma conta de energia elétrica. O programa deve solicitar o total de kWh, o valor de 1 kWh, calcular e exibir o valor da conta de energia. 10. O consumo de energia elétrica é medido em Kilowatt/hora (kWh). Faça um programa para calcular e imprimir o valor em reais de uma conta de energia elétrica. O programa deve solicitar o total de kWh, calcular e exibir o valor da conta de energia. No entanto, o valor do kWh é definido de acordo com o total de energia gasto no mês. Para definir tal valor, utilize a tabela abaixo: Faixa de Consumo De 0 a 30 kWh De 31 a 100 kWh De 101 a 220 kWh Acima de 220 kWh Preço (R$/kWh) 0,12761 0,21873 0,32811 0,36454 11. Calcular o tempo gasto em uma viagem de um veículo (em horas) conforme os dados informado pelo usuário: Distância (em km) e velocidade média (em km/h). 12. Fazer simulação de empréstimo bancário. O programa deve solicitar o salário da pessoa e o valor da parcela do empréstimo. Se a parcela for maior que 20% do salário, imprimir : Empréstimo não pode ser concedido. Senão imprimir Empréstimo pode ser concedido. 13. Ler um ano de nascimento e ano atual. Imprimir a idade da pessoa 14. Um comerciante comprou um produto e quer vendê-lo com lucro de 45% se o valor da compra for menor que 20,00; caso contrário, o lucro será de 30%. O programa deve solicitar o valor do produto e imprimir o valor da venda. 15. Informe o tipo de carro (A, B e C). Informe o percurso rodado em km e calcule o consumo estimado, conforme o tipo, sendo A=8, B=9 e C=12 km/litro. 16. Receber dois números e imprimí-los em ordem crescente. 17. Desenvolva um programa que solicite a idade de uma pessoa e informe a sua classe eleitoral de acordo com as informações abaixo. Observe que, nem sempre, um problema descrito em português, por uma pessoa que não não entende de lógica de programação, utilizará as conjunções e/ou corretamente. Em lógica de programação, tais conjunções são denominadas operadores lógicos. Logo, é preciso analisar o problema para identificar se as conjunções “e” e “ou” foram empregadas corretamente, ou seja, se onde foi utilizado um “e” deveria ser tal conjunção realmente (o mesmo vale para “ou). Não eleitor: abaixo de 16 anos Eleitor obrigatório: entre 18 e 65 anos Eleitor facultativo:entre 16 e 17 anos e maior de 65 anos LAÇO DE REPETIÇÃO 18. Criar um algoritmo que leia os limites inferior e superior de um intervalo e imprimir todos os números pares no intervalo e seu somatório. O programa deve verificar se o limite inferior é menor que o limite superior. 19. Apresentar todos os números divisíveis por 4 que sejam menores que 200. 20. Solicitar a idade de várias pessoas e imprimir: Total de pessoas com menos de 21 anos. Total de pessoas com mais de 50 anos. O programa termina quando idade digitada for igual a -1. 21. Solicitar um número entre 1 e 4. Se a pessoa digitar um número diferente, mostrar a mensagem "Valor inválido" e solicitar o número novamente. Se digitar correto mostrar o número digitado. 22. Receber um número e verificar se está entre 100 e 200. Se estiver na faixa, imprimir: "Voce digitou um número entre 100 e 200", Senão estiver na faixa,imprimir:"Voce digitou um número fora da faixa de 100 a 200". 23. Desenvolva um programa que leia um número, calcule e escreva quantos divisores ele possui. 24. Desenvolva um programa que leia um número, calcule e escreva seu fatorial, utilizando a fórmula n! = n (n-1) (n-2) (n-3) ... 1 onde n! representa o fatorial de um número n. O algoritmo pode ter uma variável de nome fatorial para ser utilizada no lugar de n!. 25. Desenvolva um programa que leia um número e informe se ele é primo ou não. Sendo que um número primo é aquele que tem dois divisores, só sendo divisível por 1 e por ele mesmo. 26. Desenvolva um programa que escreva os 5 primeiros números perfeitos. Um número perfeito é aquele que é igual à soma dos seus divisores. Veja exemplos de números perfeitos: 6 = 1+2+3; 28 = 1+2+4+7+14. 27. Desenvolva um programa que solicite um número ao usuário e escreva a tabuada deste número. O programa deve solicitar, ao usuário, um caractere que represente a operação aritmética para qual deve ser montada a tabuada (+, -, * ou /). 28. Desenvolva um programa que escreva todas as letras do alfabeto. 29. Crie um programa para calcular a potência de um número utilizando um laço de repetição. VETOR/STRING/LAÇO DE REPETIÇÃO Dicas: I. O último caractere de toda string em linguagem C é '\0'. Assim, para encontrar o final de uma string, pode-se utilizar um laço que percorra a mesma até encontrar tal caractere. Considerando isto, ao declarar uma string, se precisar, por exemplo, de exatamente 14 caracteres (como no caso de uma string para armazenar um CPF, contendo os pontos e traço), esta deve ser declarada com uma posição a mais para armazenar o '\0' na última posição. Se isto não for feito, o '\0', que delimita o final da string, ocupará o lugar do último dígito do CPF, cortando o mesmo. O '\0' é utilizado pois, não obrigatoriamente todas as posições de uma string vão estar ocupadas em um determinado momento. Assim, tal caractere define até onde a string está preenchida. Desta forma, funções como o printf, ao imprimir uma string, imprimem somente até o caracteres antecessor ao '\0'. O restante dos caracteres que possam estar armazenados após o '\0' são considerados lixo e não são exibidos. II. A função strlen (biblioteca string.h) recebe uma string e retorna o total de caracteres da mesma. Veja exemplo de uso: char nome[50] = “Manoel Campos”; int tamanho = strlen(nome); printf(“Tamanho da string: %d”, tamanho); 30. Ler um nome completo (nome e sobrenome) e depois imprimir apenas o primeiro nome. 31. Receber um nome , calcule e mostre quantos caracteres tem, sem utilizar a função strlen. 32. Receber do teclado uma mensagem e imprimir quantas letras vogais tem esta mensagem. 33. Receber um nome no teclado e imprimir quantas letras "A" tem o nome (considerar maíusculas e minúsculas). 34. Receber do teclado uma mensagem e imprimir a quantidade de cada vogal na mensagem. 35. Receber do teclado um nome e imprimir cada caractere em uma linha diferente. 36. Receber um nome do teclado e imprimí-lo de trás pra frente. 37. Receber do teclado a sigla do estado de uma pessoa e verificar se tal sigla é valida. Não devem ser utilizadas estruturas de seleção para isto. O código deve ser resumido utilizando a seguinte solução: Declare uma variável como abaixo: char estados[100] = “AC AL AM AP BA CE DF ES GO MA MG MS MT PA PB PE PI PR RJ RN RO RR RS SC SE SP TO”; Tal variável é uma string contendo a lista de estados do país. Para verificar se o estado digitado está dentro desta lista, utilize a função strstr da biblioteca string.h. Utilize o comando “man strstr” no terminal (ou outra fonte de ajuda) para verificar como usar a função. 38. Receber do teclado um nome e depois um sobrenome e juntá-los em uma outra variável, separando os dois por um espaço. 39. Entrar com um nome e indicar se o mesmo é válido ou inválido. Considere que um nome válido deve conter apenas caracteres alfabéticos (maíusculos e minúsculos) e espaço. Desconsidere caracteres acentuados. 40. Solicitar no teclado uma frase com no máximo 40 letras. Se o tamanho for maior que 40, dar uma mensagem de entrada inválida e solictar novamente, se passar, imprimir a frase na vertical. 41. Escrever um programa que receba um nome e conte o número de vogais existentes nele. O programa deverá imprimir o numero total de caracteres do nome, quantas vogais tem e a respectiva porcentagem das vogais em relação ao total de caracteres. 42. Receber um nome e, caso o mesmo tenha mais que 10 caracteres, cortar o nome na 10 a posição. Para isto, analise as dicas I e II desta seção. 43. Digitar um nome e exibir o mesmo totalmente em maíusculas. Para isto, utilize a função toupper da biblioteca ctype.h. A função recebe um caractere e retorna o mesmo em maíuscula. 44. Digitar um nome e alterá-lo para maíusculas (armazenando o seu valor em maiúsculas na variável original), exibindo o nome alterado ao final. Para isto, utilize a função toupper da biblioteca ctype.h. A função recebe um caractere e retorna o mesmo em maíuscula. 45. Digitar um nome e exibir o mesmo totalmente em minúsculas. Para isto, utilize a função tolower da biblioteca ctype.h. A função recebe um caractere e retorna o mesmo em minúscula. 46. Digitar um nome e alterá-lo para minúsculas (armazenando o seu valor em minúsculas na variável original), exibindo o nome alterado ao final. Para isto, utilize a função tolower da biblioteca ctype.h. A função recebe um caractere e retorna o mesmo em minúscula. 47. Crie um programa para preencher um vetor de inteiros, de 10 posições, com números digitados pelo usuário. O programa não pode permitir que sejam armazenados números repetidos. 48. Preencher um vetor de 8 elementos inteiros. Mostrar os dados do vetor e informar quantos números são múltiplos de 2 e 3. 49. Crie um programa onde o usuário preenche dois vetores inteiros de 5 posições. O programa deve exibir a soma dos elementos dos dois vetores que estejam na mesma posição. Exibindo o resultado como no exemplo mostrado abaixo: v1 2 3 1 5 4 v2 8 9 6 8 7 Soma 10 12 7 13 11 50. Preencher um vetor de 8 elementos inteiros. Mostrar o vetor na horizontal usando o caractere \t no printf. Calcular a média do vetor. Mostrar quantos números são múltiplos de 5. Quantos números são maiores que 10, quantos são menores que 30 e qual o maior número do vetor. 51. Armazenar em um vetor os nomes de 4 alunos e em outro a média final destes. Mostrar qual o aluno teve a menor nota e qual teve a maior, além de mostrar os alunos aprovados (nota maior ou igual a 5) e os alunos reprovados. Ao final, mostrar o total de alunos aprovados e o total de reprovados. 52. Preencher um vetor com 6 numeros informados pelo usuário e mostrá-los na tela, em ordem inversa, a partir do último até o primeiro. 53. Preencher um vetor com 5 numeros informados pelo usuário e, à medida que for digitado um número, calcular o cubo e armazenar em outro vetor. Mostrar os dois vetores. 54. Preencher um vetor com 5 números informados pelo usuário e, ao final, exibir a moda (o número que mais se repete). Para chegar à solução informatizada, primeiramente é preciso tentar resolver sem o uso de algoritmos computacionais. Desta forma, deve-se primeiramente utilizar lápis e papel para entender como solucionar o problema. Assim, escreva 5 números que desejar em uma folha de papel. A partir daí, pense em como fará para verificar qual o número que mais se repete. Associe tal problema à problemas do mundo real com os quais já conviveu, como por exemplo, a escolha de um líder de turma em uma sala de aula. 55. Calcular a mediana de um conjunto ordenado de dados informados pelo usuário. Considerando tal conjunto de dados ordenados, a mediana será o valor do meio, caso a quantidade de dados seja ímpar. Caso a quantidade seja par, a mediana será a média dos dois valores centrais. O programa deve primeiramente solicitar ao usuário a quantidade de valores que deseja digitar, armazenando tal valor em uma variável int quant. Após a solicitação de tal valor, deve-se declarar um vetor de inteiros, cujo tamanho será o indicado pelo usuário na variável quant. Depois do scanf para a variável quant, declare o vetor como int dados[quant]. Desta forma, o vetor será declarado com o tamanho indicado pelo usuário. Em seguida, o programa deve solicitar a quantidade de números indicado pelo usuário, logo, é preciso utilizar um for que execute “quant” vezes. Dentro do laço, cada valor digitado pelo usuário deve ser armazenado em uma posição diferente no vetor dados. Como os dados precisam estar ordenados para se encontrar a mediana, o programa deve obrigar o usuário a informar os dados em ordem. Assim, após o usuário digitar um valor dentro do for, é preciso verificar se este valor é menor que o valor anterior (lembre-se que estamos usando um vetor, logo, o acesso aos elementos é indexado, assim, podemos acessar um dado em uma determinada posição por meio da instrução dados[i]), se for, deve-se mostrar uma mensagem ao usuário e pedir que ele digite um número maior que o anterior (deve-se exibir o número anterior na mensagem). Para impedir que o usuário avance para o próximo número do conjunto de 5 números, a solicitação do número deve estar dentro de um laço de repetição do { ... } while(condicao), onde a condição deve indicar quando que o usuário precisará voltar e digitar o número novamente. Ao final (fora dos laços de repetição), o programa deve calcular a mediana (como mostrado no início do enunciado) e exibí-la. 56. O desvio padrão é um valor estatístico utilizado para se saber, na média, quanto que os valores em um determinado universo variam acima ou abaixo da média. Considerando por exemplo, as 6 notas de um aluno sendo 9, 9, 9, 1, 1 e 1, a média é 5. Só pela média, tem-se a ideia de que o aluno teve um desempenho regular em todas as avaliações. No entanto, ele teve excelente desempenho nas 3 primeiras e um péssimo nas 3 últimas. Assim, somente a média pode não ser suficiente para se analisar o desempenho do aluno ao longo do semestre. Assim, calculando-se o desvio padrão, se o mesmo tiver um valor alto, isto indica que há muita variação entre as notas do aluno. Logo, quando menor o desvio padrão, menos variação há entre uma nota e outra. Com base nisto, desenvolva um programa que solicite 6 notas de um aluno e calcule a média e o desvio padrão. Para calcular o desvio padrão, primeiramente precisamos obter todas as notas em um laço de repetição, armazenando-as em um vetor. Por questões de simplificação, as notas devem ser inteiras. Em tal laço já podemos fazer a soma das notas para, fora do laço, calcular a média. Com a média calculada, em outro laço precisaremos calcular a diferença de cada nota para a média, que chamados de desvio. Assim, o desvio de cada nota é a nota menos a média. Este desvio indica quanto que a nota varia em relação à média (para mais, se o desvio for positivo, ou para menos, se o desvio for negativo). Após calcular o desvio da nota, precisaremos calcular o seu quadrado (ainda dentro do laço de repetição). Após isto, precisaremos somar os quadrados dos desvios (ainda no laço). Fora do laço de repetição, precisamos calcular a variância, que é a soma do quadrado dos desvios dividido pelo total de notas. Por fim, com a variância podemos calcular o desvio padrão, que é a raiz da variância. Para calcular a raiz quadrada da variância (o desvio padrão), inclua a biblioteca math.h e utilize o seguinte código de exemplo: desvio_padrao = sqrt(variancia); Para compilar este código utilize: gcc codigo_fonte.c -o nome_do_programa -lm 57. MATRIZ/LAÇO DE REPETIÇÃO 58. Declarar uma matriz de 2 linhas por 4 colunas. Cada coluna representa as 2 notas de um aluno (que devem ser digitada pelo usuário). Cada linha representa uma nota de cada um dos 4 alunos. Ao final, o programa deve calcular a média de cada aluno, armazenando tais médias em um vetor de 4 posições. 59. Criar um algoritmo que leia os elementos de uma matriz inteira de 4 x 4 e imprima os elementos da diagonal principal, destacada na figura abaixo. 60. Criar um algoritmo que leia os elementos de uma matriz inteira de 4 x 4 e imprima os elementos da diagonal secundária, destacada na figura abaixo. 61. Criar um algoritmo que leia os elementos de uma matriz inteira de 3 x 3 e armazenar os elementos em outra matriz multiplicando-os por 2. Ao final, a segunda matriz deve ser impressa.