Algoritmos e Estruturas de Dados 1 Lista de Exercícios 3

Propaganda
Algoritmos e Estruturas de Dados 1
Lista de Exercícios 3
Professor Paulo Gomide
Parte Teórica
1. Explique o que são estruturas complexas homogêneas ou estruturas compostas homogêneas. Qual
é a forma básica de utilização dessas estruturas em C?
2. Sobre as estruturas complexas homogêneas, defina com suas palavras os seguintes termos:
(a) Vetor;
(b) Matriz;
(c) String.
3. É possível criar um vetor com N posições, sendo N uma variável inteira informada pelo usuário
através da entrada padrão (tela)? Por que?
4. Explique a utilidade do caractere de terminação ’\0’ presente no final das strings.
5. Sobre a biblioteca “string.h”:
(a) Descreva suas quatro principais funções, explicitando a finalidade de cada uma;
(b) Explique a forma de uso (parâmetros e retorno) de cada uma dessas quatro funções.
Parte Prática
1. Implemente um programa que leia da entrada padrão (tela) um inteiro 1 ≤ N ≤ 1000 e declare um
vetor chamado “primos” com capacidade para 1000 inteiros. A partir daí, atribua às P primeiras
posições desse vetor, os P números naturais primos existentes entre 1 e 1000, inclusive.
2. Implemente um programa que leia da entrada padrão (tela) um inteiro 1 ≤ P ≤ 1000 e declare um
vetor chamado “primos” com capacidade para 1000 inteiros. A partir daí, atribua às P primeiras
posições desse vetor, os P primeiros números naturais primos.
3. Em Matemática, um número perfeito é um número inteiro para o qual a soma de todos os seus
divisores positivos próprios (excluindo ele mesmo) é igual ao próprio número. Por exemplo, os
números 6 e 28 são números perfeitos, pois: 6 = 1+2+3 e 28 = 1+2+4+7+14. Implemente um programa que leia da entrada padrão (tela) um inteiro 1 ≤ N ≤ 1000 e declare um vetor chamado
“perfeitos” com capacidade para 1000 inteiros. A partir daí, atribua às P primeiras posições desse
vetor, os P números naturais perfeitos existentes entre 1 e 1000, inclusive.
4. Em Matemática, um número perfeito é um número inteiro para o qual a soma de todos os seus
divisores positivos próprios (excluindo ele mesmo) é igual ao próprio número. Por exemplo, os
números 6 e 28 são números perfeitos, pois: 6 = 1+2+3 e 28 = 1+2+4+7+14. Implemente um programa que leia da entrada padrão (tela) um inteiro 1 ≤ P ≤ 1000 e declare um vetor chamado
“perfeitos” com capacidade para 1000 inteiros. A partir daí, atribua às P primeiras posições desse
vetor, os P primeiros números naturais perfeitos.
5. Implemente um programa que declare um vetor V com capacidade para 100 pontos flutuantes e
solicite ao usuário através da saída padrão (tela) que o mesmo digite um número inteiro
1 ≤ N ≤ 100, representando o número de elementos a serem armazenados nesse vetor. A seguir,
solicite ao usuário que o mesmo digite os N elementos que serão armazenados em V . Esses valores
devem ser carregados nas variáveis do seu programa através da entrada padrão (tela). A partir
daí, imprima na saída padrão (tela) os elementos do vetor V cujos índices sejam pares na ordem
inversa, considerando uma precisão de 2 casas decimais.
Entrada:
5
1.20 0.50 -0.30 2.10 -1.70
Saída:
-1.70 -0.30 1.20
6. Implemente um programa que declare um vetor V com capacidade para 100 pontos flutuantes e
solicite ao usuário através da saída padrão (tela) que o mesmo digite um número inteiro
1 ≤ N ≤ 100, representando o número de elementos a serem armazenados nesse vetor. A seguir,
solicite ao usuário que o mesmo digite os N elementos que serão armazenados em V . Esses valores
devem ser carregados nas variáveis do seu programa através da entrada padrão (tela). A partir
daí, imprima na saída padrão (tela) a soma dos elementos do vetor V , considerando uma precisão
de 2 casas decimais.
Entrada:
5
1.20 0.50 -0.30 2.10 -1.70
Saída:
1.80
7. Implemente um programa que declare um vetor V com capacidade para 100 pontos flutuantes e
solicite ao usuário através da saída padrão (tela) que o mesmo digite um número inteiro
1 ≤ N ≤ 100, representando o número de elementos a serem armazenados nesse vetor. A seguir,
solicite ao usuário que o mesmo digite os N elementos que serão armazenados em V . Esses valores
devem ser carregados nas variáveis do seu programa através da entrada padrão (tela). A partir
daí, imprima na saída padrão (tela) a média dos elementos do vetor V , considerando uma precisão
de 2 casas decimais.
Entrada:
5
1.20 0.50 -0.30 2.10 -1.70
Saída:
0.36
8. Implemente um programa que declare um vetor V com capacidade para 100 pontos flutuantes e
solicite ao usuário através da saída padrão (tela) que o mesmo digite um número inteiro
1 ≤ N ≤ 100, representando o número de elementos a serem armazenados nesse vetor. A seguir,
solicite ao usuário que o mesmo digite os N elementos que serão armazenados em V . Esses valores devem ser carregados nas variáveis do seu programa através da entrada padrão (tela). A
partir daí, imprima na saída padrão (tela) o produto dos elementos do vetor V , considerando uma
precisão de 2 casas decimais.
Entrada:
5
1.20 0.50 -0.30 2.10 -1.70
Saída:
0.64
9. O produto interno ou escalar entre um vetor x e um vetor y, ambos de dimensões (n x 1), é um
escalar k obtido por:
k = xT y = x1 y1 + x2 y2 + x3 y3 + · · · + xn yn =
n
X
xi yi .
i=1
Implemente um programa que leia da entrada padrão (tela) dois vetores formados por n números
reais e imprima na saída padrão (tela) o produto interno entre eles com uma precisão de 2 casas
decimais. A entrada do programa será composta por três linhas. Na primeira linha haverá um
inteiro n, sendo 1 ≤ n ≤ 105 , representando o tamanho dos vetores x e y. A segunda linha será
composta por n número reais separados por espaço representando os elementos do vetor x. E a
terceira linha será composta por n número reais separados por espaço representando os elementos
do vetor y.
Entrada 1:
3
5.00 -1.00 2.00
1.00 3.00 4.00
Entrada 2:
5
1.50 -3.00 1.00 -4.00 -1.00
1.00 3.50 4.50 1.25 -10.00
Saída 1:
10.00
Saída 2:
0.50
10. A multiplicação entre duas matrizes A e B é definida quando a matriz A tem um número de
colunas igual ao número de linhas da matriz B. Nestes casos o produto da matriz A, de dimensões
(n x p), com a matriz B, de dimensões (p x m), resulta em uma matriz C, de dimensões (n x m),
tal que:
cij =
p
X
aik bkj , i = 1, 2, 3, . . . , n e j = 1, 2, 3, . . . , m,
k=1
onde os elementos axy , bxy e cxy representam respectivamente os valores presentes na linha x e na
coluna y das matrizes A, B e C.
Implemente um programa que leia da entrada padrão (tela) duas matrizes, uma de dimensões
(n x p) e outra de dimensões (p x m), formada por números reais, e imprima na saída padrão
(tela) o produto entre elas com cada elemento com uma precisão de 2 casas decimais. A entrada
do programa deve ser composta por 2 + n + p linhas. Na primeira linha haverá dois inteiros n
e p separados por espaço, sendo 1 ≤ n,p ≤ 100, representando as dimensões da matriz A. As
n linhas seguintes serão compostas por p números reais representando os elementos da matriz A
separados por espaço. Na terceira linha haverá dois inteiros p e m separados por espaço, sendo
1 ≤ p,m ≤ 100, representando as dimensões da matriz B. E as p linhas seguintes serão compostas
por m números reais representando os elementos da matriz B separados por espaço. A saída
do programa deve apresentar n linhas compostas por m números reais separados por espaço,
representando a matriz C resultante da multiplicação entre as matrizes A e B recebidas.
Entrada:
2 3
1.00 0.00 2.00
-1.00 3.00 1.00
3 4
3.00 1.00 -1.00 1.00
2.00 1.00 0.00 0.00
1.00 0.00 1.00 -1.00
Saída:
5.00 1.00 1.00 -1.00
4.00 2.00 2.00 -2.00
11. Sem usar a função ’strcat’ implementada na biblioteca ’string.h’, implemente um programa que
construa uma string a partir da concatenação de outras duas strings informadas pelo usuário
através da entrada padrão (tela) e imprima a string formada na saída padrão (tela). Considere
que as strings informadas pelo usuário terão no máximo 100 caracteres.
Entrada:
galo ucura
Saída:
galoucura
12. Sem usar a função ’strcat’ implementada na biblioteca ’string.h’, implemente um programa que
construa uma string a partir da concatenação de outras três strings informadas pelo usuário através
da entrada padrão (tela), considerando a ordem inversa em que foram informadas. Considere que
as strings informadas pelo usuário terão no máximo 100 caracteres.
Entrada:
ico et atl
Saída:
atletico
13. Sem usar a função ’strcpy’ implementada na biblioteca ’string.h’, implemente um programa que
receba duas string do usuário através da entrada padrão (tela) e copie a segunda delas na primeira,
fazendo com que as duas strings fiquem idênticas. A seguir imprima as duas strings na saída
padrão (tela). Considere que as strings informadas pelo usuário terão no máximo 100 caracteres.
Entrada:
fluminense atletico
Saída:
atletico atletico
14. Sem usar a função ’strcmp’ implementada na biblioteca ’string.h’, implemente um programa que
receba duas string do usuário através da entrada padrão (tela) e informe qual string é maior, isto
é, qual string é vem antes considerando a ordem lexicográfica. Usando a saída padrão (tela):
• caso a primeira string venha antes da segunda, imprima na tela o número -1;
• caso a segunda string venha antes da primeira, imprima na tela o número 1;
• caso as duas strings sejam idênticas, imprima na tela o número 0.
Considere que as strings informadas pelo usuário terão no máximo 100 caracteres.
Entrada 1:
atletico fluminense
Entrada 2:
fluminense atletico
Entrada 3:
atletico atletico
Saída 1:
-1
Saída 2:
1
Saída 3:
0
15. Implemente um programa que declare um vetor V com capacidade para 100 strings e solicite ao
usuário através da saída padrão (tela) que o mesmo digite um número inteiro 1 ≤ N ≤ 100,
representando o número de strings a serem armazenadas nesse vetor. A seguir, solicite ao usuário
que o mesmo digite as N strings que serão armazenadas em V e mais uma string X a ser buscada.
Todas as strings devem ter no máximo 20 caracteres e devem ser carregadas nas variáveis do seu
programa através da entrada padrão (tela). Armazenados todos os elementos no vetor, percorra os
mesmos a fim de descobrir se a string X pertence ao vetor V criado. Caso pertença, imprima todas
as posições do vetor em que esta string aparece, caso contrário imprima -1. DICA: a utilização das
funções declaradas na biblioteca “string.h” estudadas, podem facilitar muito o seu trabalho.
16. Implemente um programa que declare um vetor V com capacidade para 100 strings e solicite ao
usuário através da saída padrão (tela) que o mesmo digite um número inteiro 1 ≤ N ≤ 100,
representando o número de strings a serem armazenadas nesse vetor. A seguir, solicite ao usuário
que o mesmo digite as N strings que serão armazenadas em V . Todas as strings devem ter no
máximo 20 caracteres. Esses valores devem ser carregados nas variáveis do seu programa através
da entrada padrão (tela). Armazenados todos os elementos, faça uma busca linear no vetor a fim
de encontrar a menor e a maior string do vetor, considerando a ordem lexicográfica. Encontradas
essas duas strings, imprima o resultado da concatenação entre as três strings seguintes: a menor
string encontrada, a string “_” (underline) e a maior string encontrada; e o número de caracteres da
string resultante da concatenação separados por espaço. DICA: a utilização das funções declaradas
na biblioteca “string.h” estudadas, podem facilitar muito o seu trabalho
Entrada:
6
mineiro bahia atletico cruzeiro corinthians gremio
Saída:
atletico_mineiro 16
Bons estudos! ;-)
Download