Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Programação Avançada I, Exercícios de Programação em C

Lista de exercícios de Programação Avançada I. Programação C

Tipologia: Exercícios

2019

Compartilhado em 23/11/2019

bruna-borges-85
bruna-borges-85 🇧🇷

1 documento

1 / 21

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Lista de Exercícios Propostos
Programação Avançada
NEA35 / NCA210 / EE833/ CC8210
Pier Ricchetti
Denis Gabos
Ivandro Sanches
Esther Colombini
José Salim
Carlos Thomaz
2011
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15

Pré-visualização parcial do texto

Baixe Programação Avançada I e outras Exercícios em PDF para Programação em C, somente na Docsity!

Lista de Exercícios Propostos

Programação Avançada

NEA35 / NCA210 / EE833/ CC

Pier Ricchetti

Denis Gabos

Ivandro Sanches

Esther Colombini

José Salim

Carlos Thomaz

  1. [Ref1] Desenvolva um programa que apresente o MMC (mínimo múltiplo comum) de dois

números informados pelo usuário. O MMC entre dois números é o menor número que é

divisível pelos dois números. Matematicamente, o MMC é o produto dos divisores primos dos

dois números, comuns ou não, ambos com as suas multiplicidades. Para se obter os divisores

primos, realiza-se divisões sucessivas pelos primos que são divisores de pelo menos um dos

números. A figura baixo mostra o cálculo do mínimo múltiplo comum dos números 360 e 420. Logo, se o usuário informar os números 360 e 420, deve receber como saída 2520.

  1. Escreva um programa que imprima todos os caracteres da tabela ASCII e o código

correspondente a este caracter. Faça isso para os 255 carateres da tabela ASCII.

Exemplo parcial da saída:

  1. Desenvolva a função insereOrdenado (cuja assinatura encontra-se a seguir) que recebe

como parâmetro um vetor e um número inteiro positivo. A função deve inserir o número

passado como parâmetro na sua posição correta no vetor. Considere que o vetor é composto

de números que devem estar armazenados em ordem crescente e que a função re-organize este vetor para acomodar o novo valor. A função deve retornar a posição do vetor onde o

valor foi inserido.

int insereOrdenado (int vetor[], int n)

  1. [Ref1] Escreva um programa para determinar o número de algarismos de um número

inteiro positivo dado. Para testar o programa, apresente o valor 12345 e o número 5 deverá

ser indicado como saída.

  1. [Ref1] Um inteiro positivo x é dito uma potência prima se existem dois inteiros positivos p

e k , com p primo, tais que x = pk. Escreva uma função que receba um inteiro e verifique se ele é uma potência prima.

  1. [Ref1] Escreva uma função que receba duas datas, divididas em dia, mês e ano, e apresnte

o número de dias entre estas duas datas. Considere anos bissextos (um ano é bissexto se for

múltiplo de 4 e não múltiplo de 100 ou se ele for múltiplo de 400) e a diferença de dias entre

os meses.

int contaDias (int dia1, int dia 2, int mes1, int mes2, int ano1, int ano2)

Utilize a função main a seguir para testar o seu programa. Se o programa estiver correto, a

entrada dos valores 10/10/2007 e 03/04/2010, nesta ordem, apresentará o resultado 907.

int main(void) { int Dia1, Mes1, Ano1, Dia2, Mes2, Ano2, NumDias; printf("Data inicial (dd/mm/aaaa)\n"); scanf("%d/%d/%d", &Dia1, &Mes1, &Ano1); printf("Data final (dd/mm/aaaa)\n"); scanf("%d/%d/%d", &Dia2, &Mes2, &Ano2); NumDias = contaDias (Dia1, Dia2, Mes1, Mes2, Ano1, Ano2); printf("\nData inicial: %d/%d/%d e Data final: %d/%d/%d Numeros de dias: %d", Dia1, Mes1, Ano1, Dia2, Mes2, Ano2, NumDias); getch(); return 0; }

  1. [Ref1] Escreva uma função que receba um vetor e o decomponha em dois outros vetores,

um contendo as componentes de ordem ímpar e o outro contendo as componentes de ordem par. Por exemplo, se o vetordado for v = {3, 5, 6, 8, 1, 4, 2, 3, 7}, o vetor deve gerar os vetores

u = {3, 6, 1, 2, 7} e w = {5, 8, 4, 3}.

  1. [Ref1] A matemática prova que a conversão de um número do sistema decimal para o

sistema binário pode ser feita através de divisões sucessivas do número e dos quocientes

sucessivamente obtidos por 2, sendo então o número binário dado pela sequência iniciada

por 1 e seguida pelos restos obtidos nas divisões sucessivas, na ordem inversa em que são

obtidos. Por exemplo, para se converter 22 do sistema decimal para o sistema binário temos:

22 % 2 = 0; 11 % 2 = 1; 5 % 2 = 1; 2 % 2 = 0 e, portanto, 22 = (10110) 2. Escreva uma função que

converta um número positivo dado no sistema decimal de numeração para o sistema binário,

usando o algoritmo acima.

  1. A multiplicação de uma matriz A por uma matriz B só é possível se o número de colunas

de A for igual ao número de linhas de B. Sendo A uma matriz de dimensão MxN e B uma matriz de dimensão NxP, a matriz resultado será de dimensão MxP, onde cada elemento é

obtido pela seguinte fórmula geral:

Desenvolva um programa que receba as matrizes A e B e calcule a multiplicação das duas,

armazenando o resultado em C. Os valores M, N e P são constantes definidas no programa.

  1. Escreva um programa que determine o número de palavras de um texto armazenado em um arquivo.
  2. Escreva um programa que gere automaticamente um login para o usuário baseado em seu

nome completo. O programa deve solicitar que o usuário entre com seu nome completo e

deve imprimir o login gerado para o usuário seguindo a regra de que o login é composto pelas

letras iniciais do nome do usuário. Por exemplo, se o usuário informar “João da Silva Sauro” o

valor apresentado deve ser JSS.

  1. [Ref1] Imagine uma pesquisa foi realizada com 20 pessoas a respeito de salário, idade, número de filhos e sexo. Desenvola um programa que recebe os dados coletados na pesquisa

e fornece a média salarial, a média das idades e o número de mulheres cujo salário é maior

R$ 500,00.

  1. [Ref1] Escreva um programa que, dado um arquivo cujos registros possuem os campos

Nome (do tipo vetor de strings) e Salario (do tipo float), gere um arquivo dos registros cujo

campo Salario é maior que 5.000,00.

  1. Considere o arquivo texto Notas.txt exemplificado abaixo:

Maria Antonieta 10. Luis XV 9. Henrique VII 9. Elizabeth 5.

...

  1. Escreva um programa que imprima na saída padrão (tela) um losango vazado com todos

os lados de tamanho N, formado por conjuntos de letras 'o's separadas por espaços. Segue

exemplo de execução:

  1. Desenvolva um programa que leia uma lista de nomes de autores armazenadas no

arquivo lista.txt e que gere um novo arquivo, saida.txt, com o nome dos autores no formato:

Ultimo Sobrenome, Inicial do Primeiro Nome. Inicial do Segundo Nome. , etc. O exemplo a

seguir mostra uma possível configuração para estes arquivos.

Arquivo lista.txt

Ademauro Volponi Alvaro Romanelli Cardoso Edson Paladini Veiga Fabio Lima Marcello Bellodi …

Arquivo saida.txt Volponi, A. Cardoso A. R Veiga, E. P. Lima, F. Bellodi, M. …

  1. Usando ponteiros escreva uma função concatena que receba duas strings e que insira a

segunda string no final da primeira.

void concatena(char *string1, char *string2)

Utilize a seguinte função principal para testar seu programa. Se o seu programa estiver

correto, os valores “João” e “da Silva” para as strings 1 e 2, respectivamente, imprimirão na tela: Strings antes da concatenação João da Silva Strings apos a concatenação Joãoda Silva da Silva

//---------------------------------------- Funcao main de teste ------------------------------------------ int main(void) { char str1[255], str2[255]; printf("Informe a primeira string: "); gets(str1); printf("Informe a segunda string: ");

gets(str2); printf("Strings antes da concatenação\n"); printf("String 1: %s\n", str1); printf("String 2: %s\n", str2); concatena(str1, str2); printf("Strings apos a concatenação\n"); printf("String 1: %s\n", str1); printf("String 2: %s\n", str2); getchar(); return 0; }

#include <conio.h> #include <stdio.h>

  1. Acompanhe o programa abaixo e informe que valor será apresentado na tela.

int main(void) { int v[10], *pt, i; pt = v; for (i=0; i<10; ++i) v[i]=0; for (i=0; i<10; i+=2) *(pt+i)=6; for (i=1; i<10; i+=2) (pt+i)=4; printf("Vetor: [ "); for (i=0; i<10; ++i) { printf("%d ",(pt+i)); } printf("]\n"); }

  1. Existem 7 erros no programa a seguir. Quais são?

main[] { Int x,y,m,n; printf('Digite m:\n'); scanf("%d",m); printf("Digite n:"\n); scanf("%d",&n); do { if (m>n) x=m; y=n; else x=n; y=m; r = x%y; x = y; y = r; } while(r!=0) printf("MDC(%d,%d) = %d\n",m,n,x); }

/* Programa 3 */ int main() { float v[5], aux, *p, q; int i, j; printf("Informe os valores:"); for(i=0; i<5; i++) { scanf("%f", v+i); fflush(stdin); } for(i=0; i<4; ++i) for(j=(i+1); j<5; j++) { p=(v+i); q=(v+j); if (p < q) { aux=q; q=p; p=aux; } } printf("Resultado final:"); for(i=0; i<5; i++) printf("%.2f ",(v+i)); system("PAUSE"); } Valores a serem testdos: 3.5 4.7 5 10 12 Saída esperada: Resultado Final:12.00 10.00 5.00 4.70 3.

  1. Os divisores do número 6 são 3, 2 e 1. Note que 3+2+1=6. Por isso, 6 é dito um número

perfeito. Encontre três números perfeitos pelo seu programa a ser implementado em C.

  1. Implemente um programa que recebe três números inteiros, a, b e c; após isso, o programa deverá informar ao usuário se é ou não é possível formar um triângulo como esses três valores. No caso de ser possível, deverá também informar se o triângulo resultante é equilátero, isósceles ou escaleno.
  2. Implemente um programa que recebe do usuário um número inteiro representando uma duração em segundos e, como saída, imprime a quantidade correspondente em horas, minutos e segundos.
  3. Implemente uma função que recebe como argumentos o valor de um mês (de 1 a 12) e de um ano a partir de 1583. A função deverá retornar o número de dias daquele mês para o ano dado. Dicas: um ano é bissexto quando é múltiplo de 4 e não múltiplo de 100, contudo, anos múltiplos de 400 são bissextos. O Calendário Gregoriano vigora desde 15 de outubro de 1582)
  4. Implemente uma função recursiva que calcula o N -ésimo termo, F ( N ), da série de Fibonacci: 0,1,1,2,3,5,8,13,21,34,55,89,144,233,... onde

F (0) = 0

F (1) = 1

F ( N ) = F ( N -1) + F ( N -2), N > 1

  1. Implementar a função

int comparastring( char *string1, char *string2 );

que retorna 0 se string1 for idêntico a string2 e retorna -1 se string1 for diferente de string2.

  1. Implemente a função somasub() que:  recebe como argumentos de entrada os inteiros a e b;  retorna em a o valor da soma a+b;  retorna em b a subtração a-b.

Responda: para os resultados serem os esperados, a passagem dos argumentos a e b para a função deve ser feita por valor ou por referência?

  1. Escreva um programa que recebe do usuário os valores n e m inteiros mais um vetor de inteiros de tamanho 1x( n. m ) e o imprime na forma de uma matriz n x m. Por exemplo, ao receber n = 4, m = 2 e o vetor 1x8:

a b c d e f g h

imprime a matriz 4x2:

a b

c d

e f

g h

  1. A distância em km entre quatro cidades pode ser dada pela matriz 1 2 3 4 1 0 20 40 50 2 20 0 30 60 3 40 30 0 70 4 50 60 70 0 Implemente um programa que:

a. dadas duas cidades, imprime a distância entre elas

  1. Elaborar um programa-fonte em Linguagem C para captar dados quaisquer, via teclado, armazenando-os em uma matriz quadrada de ordem 4. A seguir, exibir estes dados em tela, com os valores dos elementos devidamente identificados.
  2. Elaborar uma função para a leitura de uma matriz de M linhas e N colunas.
  3. Elaborar uma função para a exibição de uma matriz de M linhas e N colunas.
  4. Elaborar um programa-fonte em Linguagem C para definir previamente uma matriz quadrada de ordem 3, contendo valores quaisquer, a seguir calcular a matriz transposta, salvando-a obriagoriamente em memória. Finalmente, exibir a matriz original e a matriz transposta na tela, com mensagens adequadas.
  5. Elaborar uma função para a soma de duas matrizes de M linhas e N colunas.
  6. Escreva um programa em linguagem C para:

 ler uma matriz de dimensão 5x5;  exibir a matriz com os elementos acima da diagonal principal multiplicados por 0 (zero) e abaixo da diagonal principal multiplicados por 3;  calcular e exibir a média dos elementos da diagonal principal.

  1. Escreva um programa para ler uma matriz 100 X 100 de números inteiros e calcular a soma dos elementos de cada linha da matriz; estas 100 somas deverão ser armazenadas num vetor.
  2. Elaborar um programa-fonte em Linguagem C para obter dados (inteiros ou reais), via teclado, para uma matriz quadrada de ordem 3; exibir esta matriz na tela, com mensagens adequadas. A seguir, determinar a linha da matriz cuja soma de seus elementos é máxima. Exibir o resultado na tela.
  3. Deseja-se fazer um levantamento a respeito da ausência de alunos à primeira prova de Projeto de Algoritmos para cada uma das 5 turmas existentes. Suponha, para efeito de simplificação, que cada turma tem exatamente 90 alunos. Faça um programa em C que leia, para cada aluno, uma letra que indique se este estava presente ou não (por exemplo, ‘A’ para ausente e ‘P’ para presente) e armazene todas estas informações numa matriz. A seguir, calcule e exiba na tela a porcentagem de ausência para cada turma. Também, indique na tela quais delas tiveram porcentagem de ausência maior que 5%.
  4. Escreva um programa em C para ler valores inteiros quaisquer via teclado para uma matriz 5X5, e processá-la da seguinte maneira: os elementos que estão na diagonal SECUNDÁRIA da matriz devem ser multiplicados por 2 (dois) e aqueles que não estão nesta diagonal devem ser multiplicados por -1 (menos um). VOCÊ DEVERÁ USAR COMANDOS DE REPETIÇÃO (IMAGINE SE A MATRIZ EM QUESTÃO FOSSE DE TAMANHHO 100 X 100 !).

A = -2 5 8 -64 20 DIAGONAL SECUNDÁRIA

  1. Escreva um programa em C para ler valores inteiros quaisquer via teclado para uma

matriz 5X5, e processá-la da seguinte maneira: os elementos que estão nas “bordas” da

matriz (veja exemplo) devem ser multiplicados por 2 (dois) e aqueles que não estão nestas

bordas (“miolo”) devem ser multiplicados por -1 (menos um). VOCÊ DEVERÁ USAR

COMANDOS DE REPETIÇÃO (IMAGINE SE A MATRIZ EM QUESTÃO FOSSE DE TAMANHHO 100 X 100 !).

1 2 -10 4 3 A = -2 5 8 -64 20 7 10 9 5 - 8 0 84 14 45 15 9 -7 0 9

  1. Faça um programa que:  Leia as notas dos alunos pertencentes a quatro classes de 60 alunos cada. As notas são armazenadas numa matriz, da seguinte forma:

ALUNOS

Sala 1 0

Sala 2 1

Sala 3 2

Sala 4 3

 Mostre na tela qual foi a sala que obteve a maior média dentre as quatro salas.  Mostre qual a sala que contém o melhor aluno e qual a que contém o pior. Informe também o número destes dois alunos.

  1. Dada uma matriz A (de M linhas e N colunas) e uma matriz B (de N linhas e P colunas), elabore uma função para calcular a matriz C (de M linhas e P colunas), que é o produto de A por B. Note que: Ci,j = (somatória de k = 1 até N) Ai,k * Bk,j
  2. Elaborar uma função para o cálculo do determinante de uma matriz quadrada de ordem M.
  3. Faça um programa em C que leia 40 números inteiros do teclado, armazene-os num vetor, e informe quantas DUPLAS de números seguidos e iguais estão no conjunto dos dados teclados. Observe o exemplo abaixo: 3 5 5 -1 7 7 7 ................

Resposta: Há 3 duplas de números seguidos e iguais.

  1. Codificar em C um programa que solicite um vetor de 50 números diferentes ao usuário e imprima estes números em ordem crescente, para qualquer ordem de entrada.
  2. Elaborar um programa que calcule e imprima todos os termos da seqüência: 4, 8, 12, 16, 20, ... 500
  3. Dados 2 valores A e B, com A < B, elaborar um programa para calcular e imprimir todos os múltiplos de A menores que B.
  4. Dada a função Y = X^2 - 5X + 13, elaborar um programa que calcule o valor de Y e imprima o par X, Y, com X variando de -3,5 até 3,5, com passo 0,5.
  5. Dado o valor N (inteiro e par), elaborar um programa que calcula e imprima o valor da soma: X/2 + X/4 + X/6 + X/8 + ... + X/N
  6. Elaborar um programa para calcular e imprimir a média de idade de um grupo de pessoas. A entrada de dados deverá ser encerrada quando for digitada uma idade negativa. (Chama-se este tipo de entrada de sentinela)
  7. Elaborar um programa que calcula e imprime o valor de PI através da série abaixo. Calcule

o valor com precisão de 0,0000000001.

PI = 4 * (1 - 1/3 + 1/5 - 1/7 + 1/9 -...)

  1. Um vetor A possui 30 elementos. Elabore um programa para ler todos os elementos do vetor e imprimir a soma destes elementos.
  1. Dado um vetor de N elementos reais (N < 50), elabore um programa que calcule e imprima a soma de todos os números positivos.
  2. Dado um vetor de N elementos reais (N < 90), elabore um programa para calcular e imprimir a porcentagem de números negativos.
  3. Dados dois vetores de 20 elementos cada, criar um terceiro vetor (de 40 elementos) com os elementos do primeiro vetor seguidos dos elementos do segundo.
  4. Dados dois vetores de 20 elementos cada, criar um terceiro vetor (de 40 elementos) com os elementos do primeiro vetor intercalados com os elementos do segundo.
  5. São dadas as coordenadas (X,Y) dos N vértices de um polígono. Elaborar um programa para calcular e imprimir o tamanho do maior lado do polígono. Sugestão: use dois vetores para guardar os valores X e Y dos pontos dos vértices e um vetor LADO para guardar o tamanho dos lados.
  6. É dada a idade (valor inteiro) de 20 alunos de uma classe. Elabore um programa que calcule e imprima:  a idade média da classe;  a quantidade de alunos com idade superior a média;  a quantidade de alunos com idade igual a média;  a quantidade de alunos com idade inferior a média.
  7. Dada uma palavra com no máximo 20 caracteres, elabore um programa para imprimir a palavra invertida.
  8. Uma palavra Palíndroma é aquela que é lida da mesma maneira da esquerda para a direita ou ao contrário (ex: radar). Elabore um programa que verifica se uma palavra é palíndroma.
  9. Dado um texto com no máximo 200 caracteres, elabore um programa que converta todo o texto para letras maiúsculas.
  10. Dado um texto com no máximo 200 caracteres, elabore um programa que imprima a quantidade de vogais presentes no texto.
  11. Dado um texto com no máximo 200 caracteres e duas palavras, elabore um programa que troque todas as ocorrências da primeira palavra pela segunda e imprima o texto resultante.
  12. Uma empresa possui 20 linhas com modems que podem ser conectados a um provedor de acesso. Faça um programa que leia a quantidade de minutos gastos pelos modems (os guarde em um vetor) e o custo em reais de cada minuto de uso. Implemente e teste: a) uma função que calcule o gasto total em minutos;

-Porcentagem de pessoas que não freqüentam a escola e com idade -acima de 18 anos -Porcentagem de pessoas com 1o. Grau completo e com idade menor que 18 anos -Porcentagem de pessoas com 1o. Grau completo e com idade a -partir de 18 anos -Porcentagem de pessoas com do sexo feminino com o 1o. Grau ---c completo e maior de 18 anos -Porcentagem de pessoas com do sexo feminino com o 2o. Grau --completo e maior de 18 anos

  1. Em votações dentro de cada sala de aula, deverão ser eleitos o representante, o substituto e o auxiliar, para representar os alunos daquela sala, junto à coordenadoria da escola. Cada aluno deverá votar em um único colega, qualquer um, desde que seja de sua sala, incluindo-se ele mesmo, através do respectivo número de matrícula. O critério adotado será:  aluno mais votado daquela sala será o representante;  segundo aluno mais votado daquela sala será o substituto;  terceiro aluno mais votado daquela sala será o auxiliar; Desenvolva um programa que receba os votos e apresente os eleitos.
  2. Faça um algoritmo para ler uma quantidade ilimitada de números do teclado (ou seja, não faça um programa que leia apenas dois ou três números, mas que leia tantos números quanto for necessário), parando apenas quando for digitado um número negativo, e que calcule e mostre na tela a divisão da soma dos números pares pela soma dos números ímpares digitados. Lembre-se que para descobrir se um número é par ou ímpar basta calcular o resto da divisão deste por dois. Segue abaixo um exemplo do funcionamento que se espera do referido programa:

Digite números: (o programa encerrará quando for digitado um número negativo)

4

3

6

7

5

10

FIM. O resultado é 1.333333.

4 + 6 +10 = 1. 3 + 7 + 5

  1. Elaborar um algoritmo que leia o ano de nascimento para uma quantidade indeterminada de pessoas, calcule cada idade, e apresente a idade maior e a menor.
  2. Desenvolva um programa que:  recebe uma frase  apresenta o número de palavras desta frase (obs: poderá haver qualquer número de espaços entre as palavras)