Baixe o app para aproveitar ainda mais
Prévia do material em texto
Lista de Exercícios – Linguagens C e C++ 1. Identifique o erro em cada um dos segmentos seguintes de programa e indique como pode ser corrigido. primeiro trecho de código segundo trecho de código int g(void) { printf(“\n dentro da função g”); int h(void) { printf (“\n dentro da função h”); } } int soma (int x, int y) { int resultado = x+y; } terceiro trecho de código quarto trecho de código int soma (int n) { if (n == 0) return (0); else n + soma(n-1); } void f (double a) { float a; printf (“\n valor de a : %f”, a); } 2. Reescreva a definição de função abaixo eliminando os erros de sintaxe e de semântica existentes. 3. Identifique e corrija os erros de sintaxe presentes no trecho de código em linguagem C apresentado abaixo: { Float altura, max_alt_turma, min_alt_turma, med_alt_turma; Float med_alt_masc, max_alt_masc, min_alt_masc, med_alt_fem, max_alt_fem, min_alt_masc, Float soma_masc; soma_fem; Int cont_masc, cont_fem, cont_turma; Int n_turma, sexo; n_turma = 50; cont_masc = cont_fem = 0; max_altura_masc = max_alt_fem = max_alt_turma = 0; min_alt_masc = min_alt_fem = min_alt_turma = 5; soma_masc = soma_fem = 0; int proc maximo (float *A, int m); { float n; int val; for (n = 0, val = 1e38; n < m; n++); { if (val < A[n]) val = *(A+n); }; } int proc maximo (float *A, int m); { float n; int val; for (n = 0, val = 1e38; n < m; n++); { if (val < A[n]) val = *(A+n); }; return (val); } for ( cont_turma = 0; cont_turma < n_turma; ++cont_turma) { /*as próximas duas linhas realizam a leitura dos dados de entrada. Não existem erros nestas linhas! */ printf (“\nEntre com a altura (em metros) e o sexo do aluno (1 = masc; 2 = fem) :”); scanf(“%f %d”, &altura, &sexo); if (sexo == 1) { soma_masc += altura; if (max_altura_masc < altura) max_altura_masc = altura; if ((min_alt_masc > altura) min_alt_masc = altura; cont_masc = cont_masc + 1; } else { soma_fem += altura; if (max_alt_fem < altura) max_alt_fem = altura; if (min_alt_fem > altura) min_alt_fem = altura; cont_fem = cont_fem + 1; } } med_alt_masc = soma_masc / cont_masc; med_alt_fem = soma_fem / cont_fem; med_alt_turma = (soma_masc + soma_fem) / cont_turma; if (max_alt_masc >= max_alt_fem) max_alt_turma = max_alt_masc else max_alt_turma = max_altura_fem; if (min_alt_masc >= min_alt_fem) min_alt_turma = min_alt_fem; else min_alt_turma = min_alt_masc; } { Float altura, max_alt_turma, min_alt_turma, med_alt_turma; Float med_alt_masc, max_alt_masc, min_alt_masc, med_alt_fem, max_alt_fem, min_alt_masc, Float soma_masc; soma_fem; Int cont_masc, cont_fem, cont_turma; Int n_turma, sexo; n_turma = 50; cont_masc = cont_fem = 0; max_altura_masc = max_alt_fem = max_alt_turma = 0; min_alt_masc = min_alt_fem = min_alt_turma = 5; soma_masc = soma_fem = 0; for ( cont_turma = 0; cont_turma < n_turma; ++cont_turma) { /*as próximas duas linhas realizam a leitura dos dados de entrada. Não existem erros nestas linhas! */ printf (“\nEntre com a altura (em metros) e o sexo do aluno (1 = masc; 2 = fem) :”); scanf(“%f %d”, &altura, &sexo); if (sexo == 1) { soma_masc += altura; if (max_altura_masc < altura) max_altura_masc = altura; if ((min_alt_masc > altura) min_alt_masc = altura; cont_masc = cont_masc + 1; } else { soma_fem += altura; if (max_alt_fem < altura) max_alt_fem = altura; if (min_alt_fem > altura) min_alt_fem = altura; cont_fem = cont_fem + 1; } } med_alt_masc = soma_masc / cont_masc; med_alt_fem = soma_fem / cont_fem; med_alt_turma = (soma_masc + soma_fem) / cont_turma; if (max_alt_masc >= max_alt_fem) max_alt_turma = max_alt_masc else max_alt_turma = max_altura_fem; if (min_alt_masc >= min_alt_fem) min_alt_turma = min_alt_fem; else min_alt_turma = min_alt_masc; } 4. Construir um algoritmo para calcular o valor de s, usando os 20 primeiros termos da série: 20 ....... 7654321 xxxxxxxx s +−+−+−= , onde x é um valor fornecido pelo usuário. 5. Construir um algoritmo que leia a altura e o sexo (codificado como 1 – masculino, 2 – feminino) de um grupo de N pessoas (N também deve ser lido), calcule e escreva: � Média da altura das mulheres e média da altura dos homens; � Maior e a menor altura da turma; � Média da altura da turma. 6. Dado um número inteiro positivo (na base 10), construa um algoritmo para transformá-lo em binário. 7. Implemente em linguagem C(C++) o algoritmo desenvolvido na questão 1. 8. Implemente em linguagem C(C++) o algoritmo desenvolvido na questão 2. 9. Implemente em linguagem C(C++) o algoritmo desenvolvido na questão 3. 10. O fatorial de um número inteiro n é dado pela expressão: 1.2.3......)2(.)1(.! −−= nnnn , para n ≥ 1 e 0 ! = 1 (exemplos : 5 ! = 5 . 4 . 3 . 2 . 1, 3 ! = 3 . 2 . 1). Construir um algoritmo estruturado para calcular o fatorial de um número inteiro n dado (lido). Não deixe de considerar o caso n = 0! Implemente o algoritmo com o uso da linguagem de programação C (C++). 11. O valor de ex pode ser obtido, com boa aproximação, a partir dos 15 primeiros termos da série abaixo: ....... !7!6!5!4!3!2!1 1 7654321 ++++++++= xxxxxxx ex i. Construir um algoritmo estruturado para obter o valor de ex , sendo x um número inteiro dado (leitura). Não é necessário apresentar o algoritmo para o cálculo do fatorial nesta questão. ii. Implemente em linguagem C(C++) o algoritmo desenvolvido (indique o cálculo do fatorial por fatorial(i), onde i corresponde ao número cujo fatorial deve ser calculado). 12. Em uma eleição presidencial existem 5 candidatos. Os votos foram registrados em fichas. Cada ficha contém um dos códigos relacionados abaixo: � 1, 2, 3, 4, 5 – voto para os respectivos candidatos; � 6 – voto nulo; � 7 – voto em branco. Construa um algoritmo que: � Leia a fichas; � Calcule : o o total de votos para cada candidato; o Total de votos nulos; o Total de votos em branco; o O percentual de ocorrência para cada um dos códigos. � Escreva todos os valores obtidos no item anterior; Implemente o programa em linguagem C(C++). 13. Ler um array unidimensional A com 15 elementos. Construir um array do mesmo tipo, sendo que cada elemento do array B seja o fatorial do elemento correspondente da matriz A. 14. Ler12 elementos inteiros para um array unidimensional A. Construir um array B de mesmo tipo e dimensão, observando a seguinte lei de formação: “Todo o elemento do array A que for ímpar deverá ser multiplicado por 2; caso contrário, deve-se armazenar o fatorial do elemento do array A. Apresente os arrays A e B no final da execução. 15. Leia dois vetores A e B, com os dados ordenados, construa um algoritmo (em português estruturado) para intercalar os vetores A e B de tal modo que o novo vetor C também esteja ordenado. Faça a implementação na linguagem C(C++) utilizando sintaxe de arrays. Exemplo: A 1 3 4 7 B 2 5 6 8 C 1 2 3 4 5 6 7 8 16. (a) Construir um algoritmo que leia dois arrays unidimensionais, contendo, cada um 30 elementos numéricos, e construa um terceiro array, de 60 elementos, intercalando os elementos dos dois arrays lidos. Os arrays de entrada e o construído devem ser impressos no final do processo. Exemplo: A 1 10 4.7 7.2 B 0.1 5.7 5 8.1 C 1 0.1 10 5.7 4.7 5 7.2 8.1(b) Implemente em linguagem C (C++) o algoritmo desenvolvido. (c) Generalize o programa desenvolvido no item (b), de forma a aceitar a entrada de arrays de até 100 elementos. (indique as modificações efetuadas no algoritmo). 17. (a) Construir um algoritmo que leia dois arrays unidimensionais, contendo, cada um 30 elementos numéricos, e construa um terceiro array, de 60 elementos, intercalando o inverso dos elementos dos dois arrays lidos. Os arrays de entrada e o construído devem ser impressos no final do processo. Exemplo: A 1 10 4.7 7.2 B 0.1 5.7 5 8.1 C 1/1 1/0.1 1/10 1/5.7 1/4.7 1/5 1/7.2 1/8.1 (b) Implemente em linguagem C (C++) o algoritmo desenvolvido. (c) Generalize o programa desenvolvido no item (b), de forma a aceitar a entrada de arrays de até 100 elementos. (indique as modificações efetuadas no algoritmo). 18. (a) Vamos considerar uma planilha de 21 linhas por 11 colunas, a qual será representada por um array bidimensional. Desenvolva um algoritmo que faça a leitura, a partir do teclado, dos valores numéricos das primeiras 20 linhas e 10 colunas da planilha. Realizada a leitura, armazenar a soma dos valores de cada linha na linha correspondente da última coluna. Finalmente, armazenar a soma dos valores de cada coluna na coluna correspondente da última linha da planilha. (b) Implemente em linguagem C (C++) o algoritmo desenvolvido. 19. Considere o desenvolvimento de uma agenda que contenha nomes, endereços e telefones (residencial e comercial) de 10 pessoas. Defina uma estrutura adequada , o algoritmo estruturado e a codificação, em linguagem C(C++), de um programa que, por meio de um menu de opções, execute as seguintes etapas: a) Cadastro de registros; b) Pesquisa os registros cadastrados em busca de um dado nome; c) Classifique por ordem de nome os registros cadastrados. d) Apresente todos os registros e) Sai do programa cadastro. Atenção: Simplifique a resolução. Primeiro preocupe-se com a parte funcional, ou seja, como fazer para cadastrar, como fazer para pesquisar registros já cadastrados (lembre-se dos primeiros exercícios), como classificar os registros por nome, etc. Somente então se preocupe com o menu. Para controle do menu associe a cada opção uma letra. Utilize uma estrutura condicional do tipo switch para o controle. 20. Criar um programa, em linguagem C(C++), que realiza as quatro operações matemáticas básicas, a saber, soma (utilize o símbolo +), subtração (símbolo -), multiplicação (símbolo *) e divisão (símbolo /) e pode ser desligada com o comando Fim (utilize a tecla F). O programa deve operar por meio de um menu simples que requisita o tipo de operação a executar (utilizando os símbolos acima), em seguida requisita os dois operandos e, finalmente, apresenta o resultado da operação. Uma vez apresentado o resultado da operação, a calculadora requisita a nova operação e repete-se o processo. Utilize uma estrutura condicional do tipo switch para controle da operação. Deve-se apresentar o algoritmo em linguagem natural ou na forma de diagrama de blocos, com um nível de detalhamento que permita a tradução direta para a linguagem C(C++). 21. Criar um programa, em linguagem C(C++), para avaliar expressões a partir da interpretação dos operadores AND bit a bit (símbolo &), OR bit a bit (símbolo | ) e XOR bit a bit (símbolo ^). Apresente como saída os dados de entrada e o resultado da expressão avaliada em notação decimal e também as representações binárias correspondentes. (O algoritmo é obrigatório!). 22. Escreva um programa que lê uma seqüência de caracteres (string) de qualquer tamanho a partir do teclado e conta o número de ocorrências de cada um dos diferentes caracteres contidos na seqüência. Exemplo: a letra A ocorre 3 vezes na seqüência de caracteres BANANA, enquanto a letra N ocorre duas vezes e B apenas uma vez. 23. Desenvolver um programa em linguagem C(C++) que permita realizar o produto interno de dois arrays unidimensionais denominados A (array linha) e B (array coluna), conforme expressão a seguir: BAC .= , ou � = = n i ii BAC 1 . , Note que o índice i varia de 1 até o número de elementos do array. O número de elementos dos arrays A e B deve ser igual e deve ser fornecido pelo usuário, assim como os valores de cada um dos elementos de cada um dos arrays. (Apresentar o algoritmo obrigatoriamente!). 24. Desenvolver um programa em linguagem C(C++) que permita realizar o produto de uma matriz (array bidimensional) quadrada e um array unidimensional, denominados A (array bidimensional) e b (array coluna) respectivamente, conforme expressão a seguir: bAC .= , ou � = = n j jjii bAC 1 , . , com i = 1, 2, 3, ..., n Note que os índices i e j variam de 1 até o número de elementos do array (n). A quantidade de elementos dos arrays A e b deve ser fornecida pelo usuário, assim como os valores de cada um dos elementos de cada um dos arrays. (Apresentar o algoritmo obrigatoriamente!). 25. Elaborar um programa em linguagem C(C++) que possibilite calcular a área total de uma residência (sala, cozinha, banheiro, quartos, área de serviço, quintal, garagem, etc.). O programa deverá solicitar a entrada do nome, a largura e o comprimento de um determinado cômodo. Em seguida deverá apresentar o nome e a área calculada do cômodo e também uma mensagem solicitando do usuário a confirmação de continuar calculando novos cômodos. Caso o usuário responda NÃO, o programa deverá reapresentar o nome e área calculada de todos os cômodos e o valor total acumulado da área residencial. (Apresentar o algoritmo obrigatoriamente!). 26. Desenvolver um programa em linguagem C que permita realizar o produto de duas matrizes (arrays bidimensionais) de ordem n x m e m x k, denominadas, respectivamente, A e B, resultando numa matriz C de ordem n x k, conforme expressão a seguir: BAC .= , ou � = = m k jkkiji BAC 1 ,,, . , com i = 1, 2, 3, ..., n e j = 1, 2, ... k A ordem das matrizes A e B deve ser fornecida pelo usuário, assim como os valores de cada um dos elementos de cada um dos arrays. Imprimir no dispositivo padrão de saída os arrays de entrada e o calculado. (Observação: Considere matrizes estáticas de, no máximo, 20x20 elementos. Não se esqueça de informar o usuário sobre esta limitaçao!). 27. Considere o desenvolvimento de uma agenda que contenha nomes, endereços e telefones (residencial e comercial) de 10 pessoas. Defina uma struct adequada , o algoritmo estruturado e a codificação, em linguagem C, de um programa que, por meio de um menu de opções, execute as seguintes etapas: a) Altera dados de um registro identificado pelo nome. O tipo de dado a ser alterado deve ser fornecido pelo usuário por meio de um menu auxiliar. b) Pesquisa os registros cadastrados em busca de um dado nome; c) Apresente todos os registros d) Sai do programa cadastro. 28. Considere as structs data, endereço e pessoa definidas a seguir: struct endereco struct data struct pessoa char rua [256]; unsigned int numero; char cidade [30]; unsigned long int cep; unsigned char dia, mes; unsigned short int ano; char nome [128]; endereco residencia; endereco comercial; data nascimento; a. Escreva um programa que lê os dados de uma pessoa, fornecidos pelo usuário, e os armazena na struct pessoa. (Lembre-se de utilizar as funções para manipulação de strings da biblioteca do C). b. Escreva um programa que armazena um array unidimensional de structs pessoa. O número de pessoas é determinado pelo usuário (Lembre-se de avisar o usuário se existir limitação no número máximo de pessoas no cadastro). Os dadosde todas as pessoas são fornecidos pelo usuário. (Lembre-se de não utilizar espaço em branco na entrada da string (nome da pessoa, rua e cidade). Para separar palavras deve-se usar o caracter de sublinhado – ex: Rua_Bom_Jardim, Joao_da_Silva.). (Obviamente, o programa desenvolvido no item anterior pode ser utilizado aqui, com pequenas modificações, para a leitura dos dados!) 29. Desenvolver um algoritmo para uma Agenda de Compromissos que permita armazenar compromissos fornecidos pelo usuário. A agenda deve conter: A. Um título para o compromisso (uma string) B. A data do compromisso (dia / mes / ano) C. A hora do compromisso (hora : minuto) D. Pessoa a contatar (uma string) E. Telefone de contato (string) Cada compromisso deve ser armazenado como uma struct e o programa deve permitir agendar o compromisso a partir de dados fornecidos pelo usuário utilizando o teclado. O número de compromissos a agendar deve ser definido pelo usuário. Implemente a leitura e o cadastro em funções distintas. A agenda deve ser declarada global e outros parâmetros, se necessários, devem ser passados por valor ou referência. 30. Considere as structs data, endereço e pessoa definidas a seguir: struct endereco struct data struct pessoa char rua [256]; unsigned int numero; char cidade [30]; unsigned long int cep; unsigned char dia, mes; unsigned short int ano; char nome [128]; endereco residencia; endereco comercial; data nascimento; a) Defina uma nova struct, denominada agenda, cujos dados membros são: um array de pessoas, o número máximo permitido no array e o número de pessoas já cadastradas. (ATENÇÃO: você é quem define os tipos de cada dado. Considere atentamente a questão. Considere somente arrays estáticos.) b) Faça um programa que permita a inclusão dos dados de várias pessoas na agenda, verificando antes se o nome dado já não se encontra armazenado. (O programa não aceita a existência de homônimos!). 31. Dada uma matriz de 1000 linhas e 80 colunas, contendo um texto, faça um algoritmo para compactar e descompactar o texto, isto é, cada palavra deve ser armazenada uma única vez. Considere as seguintes sugestões: a. leia a matriz; b. construa um array unidimensional onde cada elemento é uma struct contendo: i. um array unidimensional de 20 elementos para armazenar a palavra, ou sinais de pontuação (ponto, vírgula, ponto e vírgula, ponto de exclamação, ponto de interrogação e dois pontos) [isto significa que nenhuma palavra pode ter mais que 20 caracteres]; ii. um array unidimensional de 30 elementos para armazenas as posições onde a palavra ocorre na matriz [isto significa que nenhuma palavra ocorre mais de 30 vezes no texto]; (ATENÇÃO: Estude atentamente o armazenaemnto de elementos de um array bidimensional na linguagem C) . c. considere que uma palavra é sempre delimitada por espaços em branco ou espaço em branco e caracteres de pontuação. 32. Desenvolva um programa para calcular a média e desvio padrão da temperatura em uma semana, num mes ou num ano e apresentá-los ao usuário. Em cada caso deve-se considerar a leitura de um dado de temperatura por unidade. A unidade corresponde a um dia para o caso de cálculo de média na semana ou no mes e unidade deve corresponder a um mes no caso de média de temperatura no ano. O tipo de média e os dados de temperatura devem ser fornecidos pelo usuário. Observe que a leitura de temperatura, no caso de cálculo da média por mês, deve considerar o mes (Janeiro, fevereiro, março abril, ..., dezembro) e os anos bissextos. Atenção: Exige-se o uso de arrays com alocação dinâmica. Não devem ser utilizadas funções!!! Exemplo de operação: Deseja calcular a média de temperatura por semana (S), mes (M) ou ano (A) ? (Utilize F para terminar!): entrada do usuário :S Forneça a temperatura para o Domingo : (entrada do usuário) Forneça a temperatura para a Segunda-feira : (entrada do usuário) Forneça a temperatura para a Terça-feira : (entrada do usuário) Forneça a temperatura para a Quarta-feira : (entrada do usuário) Forneça a temperatura para a Quinta-feira : (entrada do usuário) Forneça a temperatura para a Sexta-feira : (entrada do usuário) Forneça a temperatura para o Sabado : (entrada do usuário) Média Calculada e desvio padrão: valor calculado +- (desvio) Deseja calcular a média de temperatura por semana (S), mês (M) ou ano (A) ? (Utilize F para terminar!): entrada do usuário :F O comportamento para a entrada de dados para as outras opções fica por conta do programador. Cálculo da Média : = � = = N i iTN T 1 1 Cálculo do Desvio Padrão: ( ) 21 1 2 1 1 /N i i TTN � � � � � � − − = � = σ 33. A função floor pode ser utilizada para arredondar um valor para o inteiro mais próximo. O comando y = floor (x + 0.5); // declaração em math.h : double floor (double a); arredonda o valor numérico x para o inteiro mais próximo e atribui o resultado a y. Escreva um programa que leia a média (sem arredondamento) de todos os alunos da classe e use o comando precedente para arredondar cada uma dessas notas para o valor inteiro mais próximo. O número de alunos da classe, as notas lidas, assim como as arredondadas, devem ser armazenadas em vetores. Os vetores devem ser alocados dinamicamente. A leitura dos valores deve ser feita no programa principal (main) e o aluno deve implementar uma função que calcule o arredondamento. O programa deve imprimir uma tabela com os valores originais e os valores arredondados (ao lado). Esta impressão deve ser feita por meio de uma função denominada imprime. (ATENÇÃO à passagem de parâmetros!!!). 34. Considere o controle de um almoxarifado. Neste almoxarifado, são armazenados diferentes tipos de peças (até 10000) e o controle é feito por fichas que contêm: - Uma descrição da peça: (uma seqüência de caracteres de até 128 caracteres); - O nome de 3 fornecedores : (cada um corresponde a uma seqüência de caracteres de até 64 caracteres); - O endereço de cada um dos fornecedores : (uma seqüência de até 512 caracteres); - Número de peças em estoque (no máximo 60000 peças por item); Crie um programa que permita cadastrar a peça, os fornecedores e seus endereços. O programa deve permitir definir o número total de peças em estoque, incluir e excluir um certo número de peças e deve avisar o usuário quando o número de peças em estoque passa a ser inferior a um número pré-estabelecido (um limite mínimo de peças no estoque). Utilize uma ou mais structs para o cadastro. Não utilize funções. 35. Uma matriz esparsa corresponde a um array bidimensional contendo um grande número de elementos iguais a zero, conforme figura abaixo. Para reduzir o consumo de memória, tais matrizes podem ser armazenadas a partir de um de vários esquemas especiais de armazenamento compacto. Nestes esquemas, somente os elementos não nulos são armazenados. Lembrando que um array bidimensional na linguagem C é armazenado por linha, uma forma econômica de armazenar o array bidimensional acima é apresentado a seguir: Escreva um programa que, dada a matriz esparsa armazene somente os valores diferentes de zero a partir do esquema mostrado acima. 36. Desenvolver um algoritmo, com posterior implementação em linguagem C, para calcular a integral de uma função representada por uma tabela de dados (x, y) cujo número de elementos é fornecido pelo usuário. Os dados da tabela são fornecidos a partir do teclado. O programa deve conter uma função para leitura, uma para saída e outra para a integração. Todos os dados devem ser transmitidos às funçõespor parâmetros e não declarados globais. A integração será realizada utilizando a regra dos trapézios, apresentada a seguir: ( ) � � � � � � + +∆=� � � � � � + ∆ ≅= �� − == + 1 1 0 0 1 22 )( 0 n i i n n i ii x x y yy xyyxdxxyI n com ∆x = (xi+1 – xi). A saída deve conter a tabela fornecida na entrada e o valor calculado da integral. Exemplo: x 1 2 3 4 y 1 4 9 16 ∆x = 1 Integral exata (de 1 a 4): 21 Integral aproximada: 21,5 � � � � 00080 00300 07000 05002 [ ] [ ]83752: 1713941: valorvetor posiçãovetor
Compartilhar