UNIVERSIDADE SALGADO DE OLIVEIRA CURSO DE ANÁLISE DE SISTEMAS TREINAMENTO – LINGUAGEM DE PROGRAMAÇÃO C PROF: GIULIANO PRADO DE MORAIS GIGLIO 1ª LISTA DE EXERCÍCIOS 1. Usando a função printf(), escreva um programa em C que imprima seu nome em uma linha, sua rua e o número na segunda e sua cidade, estado e CEP na terceira linha. 2. Considere o seguinte problema: é necessário um programa em C que mostre os pagamentos semanais brutos e líquidos de dois indivíduos. O primeiro indivíduo recebe $8.43 por hora e o segundo indivíduo recebe $5,67 por hora. De ambos é descontado 20% do valor bruto a título de impostos e mais 2%, após o desconto dos impostos, para benefícios médicos. a) determine um algoritmo para converter as entradas em saídas. b) teste o algoritmo usando os seguintes dados: o primeiro indivíduo trabalhou 40 horas na semana e o segundo indivíduo trabalhou 35 horas. 3. Uma escola, com cursos em regime semestral, realiza duas avaliações durante o semestre e calcula a média do aluno, da seguinte maneira: MEDIA = (P1 + 2*P2) / 3. Fazer um programa para entrar via teclado com o valor da primeira nota (P1) e o programa deverá calcular e exibir quanto o aluno precisa tirar na segunda nota (P2) para ser aprovado, sabendo que a média de aprovação é igual a cinco. 4. Fazer um programa em C para efetuar a leitura um número indeterminado de números e apresentar os números que são divisíveis por 2 e 3. 5. Exibir a soma dos números inteiros positivos do intervalo de 1 a 1000. 6. Fazer um algoritmo que leia 20 idades de pessoas. Calcule e escreva a idade média deste grupo. 7. Fazer um algoritmo que leia um conjunto de idades de pessoas. O final do conjunto de valores é conhecido através do valor -1. Calcule e escreva a idade média deste conjunto. 8. Fazer um algoritmo que leia a nota final de 50 alunos e escreva: a) o total de reprovados; b) a nota média da turma; c) a menor e maior nota da turma. É considerado aprovado o aluno com nota final maior ou igual a 6,0. 9. Fazer um algoritmo que calcule e escreva a tabuada de 5. 10. Escreva, teste e execute um programa em C que faça o seguinte: Dado o tempo atual (horas e minutos) em um relógio de 24Hs, adicione um número inteiro de horas e diga qual o novo horário e quantos dias depois ele estará. (Nota: Use /24 e %24, e indique meia-noite como 0:00h, em vez de 24:00Hs. Exemplo: 17:30 + 37 horas = 6:30, dois dias depois. 1 11. O seguinte algoritmo, descoberto por Euclides, nos dá um meio simples para determinar o maior divisor comum (MDC) de dois inteiros positivos e: Divida o maior número pelo menor e guarde o resto. Divida o menor número pelo resto, e novamente guarde o resto. Continue dividindo o resto anterior pelo resto atual até que ele seja igual a zero. Nesse ponto o último resto não-nulo é máximo divisor comum. Faça um programa C que implemente esse algoritmo Euclidiano. 12. Escreva um programa para mostrar as seguintes mensagens: Digite um mês (use 1 para janeiro, etc.): Digite um dia do mês: a. Faça seu programa receber e armazenar um número na variável mes após mostrar a primeira mensagem e receber e armazenar um outro número na variável dia após mostrar a segunda mensagem. Se o mês digitado não estiver entre 1 e 12 inclusive, imprimir uma mensagem dizendo ao usuário que o mês digitado é inválido. Se o dia digitado não estiver entre 1 e 31, imprimir uma mensagem dizendo ao usuário que o dia digitado é inválido. b. Que fará seu programa se o usuário digitar um número com ponto decimal para o mês? Como você pode garantir que seus comandos if testam se um número é inteiro? c. Em um ano não bissexto, fevereiro tem 28 dias, os meses de janeiro, março, maio, julho, agosto, outubro e dezembro têm 31 dias e todos os outros têm 30 dias. Usando esta informação, modifique o programa do exercício 2a para dar uma mensagem quando um dia inválido for digitado para o mês dado. Para este programa ignore anos bissextos. 13. Todos os anos que são múltiplos de 400, ou são múltiplos de 4 e não são múltiplos de 100, são anos bissextos. Por exemplo, como 1600 é múltiplo de 400, o ano 1600 é bissexto. Similarmente, já que 1988 é múltiplo de 4 e não é múltiplo de 100, o ano 1988 também é bissexto. a. Usando esta informação, escreva um programa em C que receba o ano como entrada de dados, determine se o ano é bissexto, e dê uma mensagem apropriada dizendo se o ano digitado é bissexto ou não. b. Usando o código escrito no exercício 13a, refaça o exercício 12c de tal forma que anos bissextos sejam levados em consideração. 14. Os seguintes dados foram coletados em uma recente viagem de automóvel. 2 a. Escreva um programa em C que receba a quilometragem e o consumo em litros e calcule o consumo médio por quilômetro de cada segmento da viagem. O consumo médio é obtido com a diferença de quilometragem entre dois abastecimentos, dividindo-a pelo número de litros do último abastecimento. b. Modifique o programa do exercício 14a para também calcular e mostrar o consumo médio cumulativo ao final de cada trecho (a cada abastecimento). O consumo médio cumulativo é calculado com a diferença entre a quilometragem de um abastecimento e a quilometragem do início da viagem, dividindo-a pela soma dos litros de todos abastecimentos até então. 15. Para o cálculo do relatório de suas transações mensais, uma certa loja de livros mantém as seguintes informações para cada livro em estoque: • Número de identificação do livro; • Quantidade em estoque no início do mês; • Número de cópias recebidas no mês; • Número de cópias vendidas no mês. _ _ _ _ Escreva um programa em C que receba estes dados para cada livro e então imprima o número de identificação e a nova quantidade em estoque, usando a relação: Nova quantidade = Quantidade em estoque no início do mês + Número cópias recebidas no mês - Número de cópias vendidas no mês Seu programa deve usar um laço while com uma condição de contagem fixa, de tal forma que somente seja processada a informação para três livros. 16. a. Escreva um programa em que você possa entrar com os seguintes valores em um vetor chamado preços: 10.95, 16.32, 12.15, 8.22, 15.98, 26.22, 13.54, 6.45, 17.59. Depois os dados devem ser impressos na tela. b. Reescreva o Exercício 16a fazendo com que ele tenha uma saída assim: 10.95 8.22 13.54 16.32 15.98 6.45 12.15 26.22 17.59 17. Escreva um programa para entrada de 10 números inteiros em um vetor com o nome de fmax e que determine o número máximo entrado. Seu programa deve conter apenas um “loop” e deve retornar o valor máximo e o elemento do vetor em que ele está armazenado (dica: utilize o primeiro elemento lido como máximo para depois entrar no “loop”). b. Reescreva o exercício, mantendo o vetor e o número máximo, mas apresentando as seguintes mensagens: O valor máximo é:_____ Ele foi o _____ elemento digitado. Seu programa deve colocar no lugar das linhas os valores corretos. 3 18. Escreva um programa que especifique três vetores com os nomes de preço, quantidade e total. Cada vetor deve ser capaz de manter 10 elementos. Usando um “loop” for, preencha os vetores preco e quantidade. O vetor total deve ser preenchido com a multiplicação do vetor preco pelo quantidade (por exemplo, total[i]=preço[i]*quantidade[i]). Depois que você digitar todos os dados seu programa deve imprimir a seguinte tabela: preço ------- quantidade ------------- total ------ 19. a. Escreva um programa para entrada de 10 números reais em um vetor com o nome de raw. Depois que você digitar os 10 números seu programa deve fazer 10 “loops” nesse vetor, pegando sempre o menor número e colocando em um outro vetor chamado ordenado. Dica, quando seu programa estiver terminado o vetor ordenado estará ordenado dos menores para os maiores números (tenha certeza que você anulou o menor valor que foi selecionado durante cada “loop” para que o número não seja selecionado novamente. Você precisará de um outro for dentro do primeiro, para selecionar o menor valor por ciclo.). 20. a. Escreva um programa que informe ao usuário quantas vogais foram digitadas em uma seqüência cd caracteres que o usuário digitar. Seu programa deve imprimir quantas vogais foram digitadas. b. Adicione o programa do exercício 20a uma função que gere um gráfico dizendo quantas vogais a, e, i, o, u foram digitadas. a e i o u ******* ** **** * ***** 21. Formule uma estrutura que permita guardar informação relativa a cassetes de vídeo, nomeadamente: titulo, atores ( 3), tipo de vídeo ( ação, romance, drama, etc.), duração (minutos). a. Escreva uma função que tendo como argumentos de entrada: o ponteiro para uma lista simplesmente ligada, definida em 3, e a informação relativa a um vídeo, efetue a inserção de um nó com a referida informação. b. Escreva uma função que efetue a listagem, no CRT, dos vídeos existentes na lista. c. Escreva uma função que verifique a existência de um vídeo na lista e devolva o ponteiro para o nó onde se encontra o vídeo (passe a informação do vídeo em causa por argumentos de referência). d. Escreva uma função que aceitando como argumento: a lista resultante em a), e um inteiro ( 0, 1, 2, 3, 4) ordene a lista segundo o 1º campo, 2º campo... e. Escreva uma função que aceitando como argumento a lista resultante em a), a inverta. 4