Baixe o app para aproveitar ainda mais
Prévia do material em texto
Núcleo de Informática Bacharel em Sistemas de Informação Algoritmos Prof. Hilton Cardoso Marins Junior CONCEITOS INICIAIS EM C 1) Copie os programas abaixo para o seu ambiente de desenvolvimento e faça as devidas alterações para que seja possível executá-los. #include <stdio.h> main{}( printf("Existem %d semanas no ano. ", 56) ) #include <stdio.h> main(){ int a=1; b=2; c=3; printf("Os numeros sao: %d, %d e %d\n",a,b,c,d) } ENTRADA E SAÍDA DE DADOS 2) Qual será a saída do programa abaixo? #include <stdio.h> main(){ printf("%s\n%s\n%s","um","dois","tres"); } 3) Faça um programa que receba três notas e calcule a média aritmética entre elas. 4) Faça um programa que receba três notas, seus respectivos pesos, e calcule a média ponderada dessas notas. 5) Faça um programa que receba o salário de um funcionário e o percentual de aumento, calcule e mostre o valor do aumento e o novo salário. 6) Faça um programa que receba o salário-base de um funcionário, calcule e mostre o salário a receber, sabendo-se que esse funcionário tem gratificação de 5% sobre o salário-base e paga imposto de 7% sobre salário-base. 7) Faça um programa que receba um número positivo e maior que zero, calcule e mostre: a. O número digitado ao quadrado. b. O número digitado ao cubo. c. A metade do número digitado. d. O sucessor do número digitado. 8) O custo ao consumidor de um carro novo é a soma do preço de fábrica com o percentual de lucro do distribuidor e dos impostos aplicados ao preço de fábrica. Faça um programa que receba o preço de fábrica de um veículo, o percentual de lucro do distribuidor e o percentual de impostos. Calcule e mostre: a. O valor correspondente ao lucro do distribuidor. b. O valor correspondente aos impostos; c. O preço final do veículo. 9) Faça um programa que receba o número de horas trabalhadas e o valor do salário mínimo. Calcule e mostre o salário a receber seguindo as regras abaixo: a. A hora trabalhada vale a metade do salário mínimo. b. O salário bruto equivale ao número de horas trabalhadas multiplicado pelo valor da hora trabalhada. c. O imposto equivale a 3% do salário bruto. d. O salário a receber equivale ao salário bruto menos o imposto. 10) Um trabalhador recebeu seu salário e o depositou em sua conta corrente bancária. Esse trabalhador emitiu dois cheques e agora deseja saber seu saldo atual. Sabe-se que cada operação bancária de retirada paga CPMF de 0,38% e o saldo inicial da conta está zerado. Faça um programa que receba o valor do salário e dos dois cheques emitidos e calcule o saldo atual. 11) João comprou um saco de ração com peso em quilos. João possui dois gatos para os quais fornece a quantidade de ração em gramas. Faça um programa que receba o peso do saco de ração e a quantidade de ração fornecida para cada gato. Calcule e mostre quanto restará de ração no saco após cinco dias. 12) Faça um programa que receba a medida do ângulo formado por uma escada apoiada no chão e encostada na parede (ângulo entre a escada e o chão) e a altura da parede onde está a ponta da escada. Calcule e mostre a medida desta escada. CONTROLE DO FLUXO DE EXECUÇÃO - ALTERNATIVA 13) Quais as saídas produzidas pelo algoritmo abaixo? início inteiro: A, B; A = 1; B = 2; se (A > B) então A = 5; senão B = 10; fim-se; imprima(A,B); fim. 14) Implemente o algoritmo anterior em linguagem C. 15) Leia o algoritmo abaixo e responda: a. Se B1 = verdadeiro, B2 = verdadeiro, B3 = falso, quais os comandos que serão executados? b. Se B1 = falso, B2 = verdadeiro, B3 = falso, quais os comandos que serão executados? c. Quais os valores de B1, B2, B3 para que somente o comando C5 seja executado? d. Se B1 = falso, B2 = verdadeiro, B3 = verdadeiro, quais os comandos que serão executados? início ...... se (B1) então C1; senão se (B2) então se (B3) então C2; senão C3; C4; fim-se; fim-se; fim-se; C5; fim. 16) Para os valores (a=5) (b=7) e (c=9), assinale com X a seqüência de execução dos algoritmos abaixo e informe qual o valor da variável c ao final da execução: Se (a=5) e (b=7) entao ( ) c = c+1 ( ) senao ( ) c = c-1 ( ) fim_se ( ) Se (a=5) e (b<6) entao ( ) c = 1 ( ) senao ( ) Se (c=8) entao ( ) c = 2 ( ) senao ( ) c = 3 ( ) fim_se ( ) fim_se ( ) 17) Indique a saída dos trechos de pseudocódigo listados abaixo. Considere os seguintes valores: A=2, B=3, C=5, D=9 e E=6. se nao (D > 5) entao X = (A + B) * D senão X = (A - B) / C fim_se imprima(X) se (A > 2) e (B < 7) entao X = (A + 2) * (B - 2) senao X = (A + B) / D * (C + D) fim_se imprima(X) se (A = 2) ou ( B < 7) entao X = (A + 2) * (B – 2) senao X = (A + B) / D * (C + D) fim_se imprima(X) se nao (A > 2) ou nao (B < 7) entao X = A + E senao X = A / E fim_se imprima(X) se nao (A > 3) e não (B < 5) entao X = A + D senao X = D / B fim_se imprima(X) se (C >=2) e (B <= 7) entao X = (A + D)/2 senao X = D * C fim_se imprima(X) se (A > 2) ou nao (B < 7) entao X = A + B - 2 senao X = A - B fim_se imprima(X) 18) Faça um programa que gere um número aleatório de 0 a 9, receba um palpite via teclado e informe se o palpite é certo ou errado. Dicas: a) A instrução srand (time(NULL) ); faz com que o número gerado varie a cada execução do programa. Portanto só deve ser executada uma vez a cada execução do programa. b) A instrução numeroGerado = rand(); gera um número aleatório e atribui este valor à variável numeroGerado. c) As funções srand(), rand e time exigem a declaração da biblioteca time.h d) O operador % é chamado operador módulo ou resto da divisão. Assim, x = y % 10; atribui á variável x o resto da divisão de y por 10. Ou seja, se y = 23, x receberá o valor 3. e) O número gerado com a função rand() é grande. Se aplicarmos o operador módulo deste número grande por 10, por exemplo, teremos sempre o resto da divisão por 10, o que será um número de zero a 9. f) Teste de igualdade em C é feito com == e não apenas com um =. 19) Com base na tabela abaixo, criar um programa capaz de ler o código de um item e a quantidade deste item. A seguir, o programa deve calcular e mostrar o valor da conta a pagar. CÓDIGO ESPECIFICAÇÃO PREÇO UNITÀRIO 1 Cachorro Quente R$ 4.00 2 X-Salada R$ 4.50 3 X-Bacon R$ 5.00 4 Torrada simples R$ 2.00 5 Refrigerante R$ 1.50 20) Codificar um programa para verificar se 3 números inteiros podem ser lados de um triangulo. Informar também o tipo do triangulo: eqüilátero, isósceles ou escaleno. Dica: cada lado do triângulo é menor que a soma dos outros dois lados. 21) Uma livraria está fazendo uma promoção para pagamento à vista em que o comprador pode escolher entre dois critérios de desconto: Critério A: R$ 0,25 por livro + RS$ 7,50 fixo. Critério B: R$ 0,50 por livro + RS$ 2,50 fixo. Faça um programa em que o usuário digita a quantidade de livros que deseja comprar e o programa informa qual é a melhor opção de desconto. 22) Codificar um programa para verificar se um número é par ou ímpar. 23) Codificar um programa para verificar se um número é divisível por outro. 24) Faça um programa que receba 3 números via teclado e imprima o maior deles. 25) Faça um programa para calcular a(s) raízes reais de uma equação do segundo grau. O programa deverá receber os 3 coeficientes enão deverá aceitar o coeficiente de x2 igual a zero. 26) Faça um programa que recebe dois números e efetua a adição. Caso o valor somado seja maior que 20, este deverá ser apresentado somando-se a ele 8; caso o valor somado seja menor ou igual a 20, este deverá ser apresentado subtraindo-se 5. 27) Uma empresa abriu uma linha de crédito para os funcionários. O valor da prestação não pode ultrapassar 30% do salário. Faça um programa que receba o salário, o valor do empréstimo e o número de prestações e informe se o empréstimo pode ser concedido. Nenhum dos valores informados pode ser zero ou negativo. 28) Fazer um programa que mostre uma questão de múltipla escolha com 5 opções (letras a, b, c, d, e). Sabendo a resposta certa, receber a opção do usuário e informar a letra que o usuário marcou e se a resposta está certa ou errada. Usar o tipo char para armazenar a variável de teste do switch. Ela pode ser lida do teclado com scanf e a máscara %c ou com a função getchar() (opcao = getchar()). Na comparação do case, deve-se colocar o valor a ser comparado entre aspas simples: case 'a':, por exemplo. 29) Fazer um programa que lê dois números, lê a operação desejada ( + - * / ), faz a operação pedida e mostra o resultado. A operação escolhida deve ser armazenada em uma variável do tipo char. CONTROLE DO FLUXO DE EXECUÇÃO – REPETIÇÃO COM FOR 30) Modique o exercício 18 de modo que o usuário informe quantas tentativas de adivinhação quer fazer. O programa permite então que ele tente este número de vezes informado ou acaba caso ele acerte antes. Obs.: O comando break interrompe o laço (for, while ou do...while). 31) Fazer um programa que tenha um menu que permita ao usuário escolher 5 opções de exibição de potências. As opções permitem escolher as potências de 2, 3, 5, 10 ou 15. De acordo com a opção escolhida, o programa exibirá todas as potências do número escolhido que sejam menores que 10000. 32) Considere a progressão geométrica (PG) 1, 2, 4, 8, 16, 32, .... e um inteiro positivo n. Deseja-se que um programa faça: a. Imprimir os n primeiros termos. b. Calcular e imprimir a soma dos n primeiros termos da PG sem utilizar a fórmula da soma. 33) Considere uma progressão aritmética (PA). Faça um programa que receba o termo inicial a1, a razão r e o número de termos a serem gerados. Em seguida, a PA é impressa, com 10 termos por linha. Ao final, depois de imprimir todos os termos desejados, deve-se imprimir a soma dos termos da PA. Faça uma verificação de acerto através da fórmula da soma dos termos da PA dada pela expressão abaixo: 34) Faça um programa que receba um número n e gere os n primeiros números da sequência de Fibonacci, Definida na fórmula: 35) Faça um programa que leia um valor inteiro não negativo e imprima todos os pares de números inteiros não negativos cuja soma seja igual a este número. Considere que o par x,y é diferente de y, x e deve ser impresso duas vezes. Dica que pode ser uma usada em uma solução: a inicialização do for (primeira opção entre parênteses), pode conter mais de uma variável. Por exemplo: for (x = 0, y = 100; etc. . . ). 36) Faça um programa que receba 10 números via teclado e imprima a soma dos números cujos quadrados sejam menores que 225. 37) Ler um número e imprimir todos os seus divisores. 38) Considere o programa (analisado em sala de aula) abaixo: main(){ int linha,coluna; for (linha=1;linha<=5;linha++){ for (coluna=1;coluna<=5;coluna++){ printf("\t[%d,%d]",linha, coluna); } printf("\n"); } } A saída será a seguinte: [1,1] [1,2] [1,3] [1,4] [1,5] [2,1] [2,2] [2,3] [2,4] [2,5] [3,1] [3,2] [3,3] [3,4] [3,5] [4,1] [4,2] [4,3] [4,4] [4,5] [5,1] [5,2] [5,3] [5,4] [5,5] Considerando a saída como uma matriz, modique o programa acima para que apenas a diagonal principal e os dados acima dela sejam impressos. Com as modificações propostas a saída deverá ser assim: [1,1] [1,2] [1,3] [1,4] [1,5] [2,2] [2,3] [2,4] [2,5] [3,3] [3,4] [3,5] [4,4] [4,5] [5,5] 39) Codificar um programa para calcular o valor de P dado por: P = 3/2 + 5/4 + 7/6 + 9/8 + ........ + 101/100 40) Codificar um programa para calcular o valor de H, sendo que N deverá ser lido. H = 1 + 1/2 + 1/3 + 1/4 + .......+ 1/N 41) Codificar um programa que calcule e mostre a soma dos números pares e a soma dos números impares entre X e Y, onde X e Y deverão ser lidos. 42) Codificar um programa para calcular o fatorial de um número informado pelo usuário. CONTROLE DO FLUXO DE EXECUÇÃO – REPETIÇÃO COM WHILE e DO...WHILE 43) Modifique o programa do exercício 30 de modo que o usuário possa tentar adivinhar o número quantas vezes desejar, tendo a opção de abandonar o programa quando quiser. Aumente agora o intervalo de números gerados para [0.. 99]. 44) Fazer um programa com o seguinte menu: 1. Informa preço da passagem 2. Informa quantos preços já foram informados 3. Informa total em R$ já informados 4. Sai do programa Para a opção 1, o programa recebe o destino e se é viagem só de ida ou de ida e volta e informa o preço, segundo a tabela abaixo: 45) Fazer um programa que leia uma quantidade desconhecida de números e imprima, no final, o maior deles, o menor deles e quantos números foram digitados. Para terminar de informar números e finalizar o programa o usuário deve informar 999. 46) Fazer um programa com o seguinte menu: a. Soma vários números b. Multiplica vários números c. Sai do programa Cada opção do menu faz o que o nome sugere. 47) Fazer um programa que leia X e N e informe quantos múltiplos de X existem entre 1 e N . Use while ou do-while e não use divisão. Exemplo: Se X = 8 e N = 30, a saída do programa será 3. Pois existem 3 múltiplos de 8 entre 1 e 30 (8, 16 e 24). 48) Existem três candidatos a uma vaga no Senado. Feita a eleição, os votos são registrados da seguinte forma: Codificar um programa capaz de informar: o candidato vencedor, a quantidade de votos em branco, nulos e o número de eleitores que compareceram às urnas. ESTRUTURAS DE DADOS HOMOGÊNEAS - VETOR 49) Qual será a configuração do vetor num depois de executado o trecho de programa abaixo? int num[5][5], i , j; for (i=0; i<5; i++){ for (j=0; j<5; j++){ if (i>j){ num[i][j]=1; } if (i==j){ num[i][j]=0; } if (i<j){ num[i][j]=-1; } } } 50) Faça um programa que receba via teclado 8 notas de uma turma. Depois de lidas todas as notas, calcule e imprima a média da turma. As notas devem ser armazenadas em um vetor de reais (float). 51) Ler 2 vetores de inteiros com 11 elementos cada um. Em seguida, gerar um vetor soma onde cada elemento corresponda à soma dos dois elementos correspondentes dos vetores lidos. Gerar outro vetor produto cujos elementos correspondam ao produto dos elementos de mesma posição dos vetores lidos. Exibir os 4 vetores na tela. 52) Ler um vetor com 8 elementos do tipo float e imprimir seus elementos de trás pra frente (do último ao primeiro). 53) Ler 2 vetores com 7 elementos do tipo inteiro cada um e concatená-los em um terceiro vetor. 54) Fazer um programa que receba 15 valores inteiros e os grave em um vetor. Depois desta etapa, percorra o vetor e identifique o maior e o menor elemento do vetor. Informe os Voto Significado 1 candidato 1 2 candidato 2 3 candidato 3 4 voto branco 5 voto nulo 0 1 2 3 4 0 1 2 3 4 valores e a posição que eles ocupam no vetor. Depois destaetapa, some os elementos do vetor e exiba o valor desta soma. 55) Fazer um programa que leia a senha do usuário e informe se a senha está correta ou incorreta. Considere que a senha correta está gravada no código fonte do programa. 56) Fazer um programa que leia uma string e a imprima de trás pra frente. Exemplo: Digitado: ifsudestemg Impresso: gmetsedus 57) Fazer um programa que preencha automaticamente uma matriz 3X3 com 0, 1, 2, 3, 4, ... Em seguida, o programa recebe, via teclado, os elementos de outra matriz 3X3. Por fim, o programa calcula e exibe a matriz soma das duas primeiras matrizes. 58) Fazer um programa que leia os elementos de uma matriz 4X4. Em seguida, o programa calcula e exibe a soma dos elementos da diagonal principal. 59) Codificar um programa para simular a verificação se o dado usado em um determinado jogo é “viciado” ou não. Considere que dado não “viciado” é aquele em que não há grande variação na quantidade de vezes que cada face é sorteada ao final de vários lançamentos. O programa deve permitir que o usuário escolha o número de faces do dado (mínimo de 2) e a quantidade de lançamentos a serem simulados. Após fazer a simulação, o programa deverá emitir um relatório apresentando a quantidade de vezes que cada face fora sorteada. 60) Fazer um programa com o seguinte menu: 1. Inserir notas 2. Exibir nota do aluno 3. Modifica nota 4. Média do aluno 5. Média da turma na disciplina 6. Média geral da turma 7. Exibir todas as notas 8. Sair Dicas: A turma tem 5 alunos e cada aluno tem 3 disciplinas. As notas devem ser inseridas em uma matriz 5X3. Considere que as opções 2, 3, 4, 5, 6 e 7 só podem ser executadas se a opção 1 já tiver sido executada. Considere que a opção 1 só pode ser executada uma vez. A opção 2 pede o número do aluno e exibe suas notas. A opção 3 pede o número do aluno e da disciplina, lê a nova nota e substitui a antiga pela nova. A opção 4 pede o número do aluno, calcula e exibe sua média. A opção 5 pede o número da disciplina, calcula e exibe a média da turma na disciplina. MODULARIZAÇÃO: FUNÇÕES 61) Considerando a função abaixo. int M(int K, int L){ if (K > L){ return 1; } if (K == L){ return 0; } if (K < L){ return -1; } } Calcule: a) M(3,2) b) M(3,2) + M(2,3) + M(2,2) c) M(2 * M(3,2), M(2,3 + 2)) 62) Considerando a função: int X(int A, int B, int C){ if ((A > B) && (B > C)){ return A; } if ((A < B) && (B < C)){ return A; }else{ return (A + B + C) / 3; } } Calcule: a) X(10, 8, -1) b) X(1, 3, 5) c) X(5, 2, -1) d) X(X(10, 8, -1), 6 * X(1, 3, 5), 2) 63) Fazer um programa que execute até que o usuário decida encerrar. Na execução, o programa recebe 2 números, o usuário escolhe a operação desejada ( + - * / ) e o programa efetua a operação desejada. Use chamadas de funções para executar as operações. Não permita divisão por zero. 64) Refaça o programa que calcula as raízes de um equação do 2º. grau usando funções. As seguintes funções devem ser criadas e usadas: float calculaDelta(float, float, float): recebe os coeficientes da equação e retorna o valor de delta. float calculaRaizUm(float, float, float): recebe os coeficientes a e b da equação, recebe o valor de delta e retorna o valor de uma das raízes da equação. float calculaRaizDois(float, float, float): recebe os coeficientes a e b da equação, recebe o valor de delta e retorna o valor da outra raíz da equação. 65) Fazer um programa que gere e imprima um vetor com 20 números inteiros. Estes números devem ser aleatórios e gerados pela função int geraInt(int limiteSuperior). Esta função gera aleatoriamente um número inteiro entre 0 e limiteSuperior. 66) Faça um programa com um menu contendo as seguintes opções: gera vetor, exibe vetor, acha maior, acha menor, calcula média dos elementos, calcula soma dos elementos, calcula produto dos elementos, sai do programa. Considere que o vetor em questão tem 15 elementos reais. Implemente cada opção do menu através da chamada de uma função específica. 67) Codificar uma função que calcule o saldo final de uma aplicação financeira levando em consideração: a) que haverá um único deposito inicial. b) que a cada dia o valor aplicado deverá ser atualizado por uma taxa de juros. c) que o valor permanecerá aplicado por um prazo em dias. A função deverá obrigatoriamente possuir o seguinte protótipo: float aplica(double d, double t, int p); onde: d = valor do depósito inicial t = taxa de juros diária p = prazo em dias da aplicação 68) Números palíndromos são aqueles que escritos da direita para a esquerda têm o mesmo valor. Ex. 929, 545, 97379. Codifique uma função que seja capaz de receber um número inteiro e retornar o seu respectivo palíndromo. Obs.: Para que seja possível testar a função, será necessário codificar um programa que solicite os dados necessários a serem passados como parâmetros para a função. 69) Codificar um programa capaz de verificar através de uma função, se um número é ou não palíndromo de outro. A função deve receber os dois números e retornar “verdadeiro” ou “falso”. ESTRUTURAS DE DADOS HETEROGÊNEAS - Struct 70) Faça um programa para ler o nome de diversas cidades e suas respectivas populações. Após esta etapa, o programa deverá imprimir o nome da cidade mais populosa. Não use vetor. 71) Faça um programa que leia as seguintes informações sobre os alunos de uma turma: nome, nota do 1º bimestre, nota do 2º bimestre, nota do 3º bimestre, nota do 4º bimestre e quantidade de faltas. Não use vetor. O programa deverá emitir um relatório que mostre para cada aluno o nome, a média das notas e a situação (aprovado ou reprovado). Considere aprovado o aluno com média >= 70 e quantidade de faltas <= 25. Ao final o programa deverá imprimir a quantidade de aprovados, quantidade de reprovados, percentual de aprovados, percentual e reprovados, a média da turma, quantidade de alunos abaixo da média da turma e quantidade de alunos acima da média da turma. 72) Refaça os dois programas anteriores usando vetor.
Compartilhar