Simulado de Prova
1) Dada a definição da função alg abaixo,
int alg(int a, int b)
{
if(b == 1) return a;
else return alg(a+1, b-1) + a * b;
}
Que valor a seguinte chamada devolve?
alg ( 2 , 6 ) = __________________
Justifique através do preenchimento da tabela ao lado:
a | b | alg (a,b) |
2) Crie uma função em C que receba por parâmetro dois vetores de números reais e um número inteiro que represente o tamanho destes vetores; a função deve calcular a chamada distância quadrática de dois vetores. Este cálculo soma os quadrados das diferenças dos valores correspondentes dos dois vetores, ou seja, (A[0] - B[0])² + (A[1] - B[1])² + (A[2] - B[2])² + … + (A[10] - B[10])². Pronto! A assinatura da função é assim: double distanciaQuadratica (double A[ ], double B[ ], int N).
Exemplo:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ||||
A | 0 | 3 | -2 | 7 | 9 | 11 | 15 | 0 | 0 | 0 | 0 | |||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ||||
B | 0 | 4 | 0 | 7 | 9 | 11 | 15 | 0 | 1 | 0 | 1 |
No exemplo acima, o resultado seria: (0)² + (3-4)² + (-2-0)² + (7-7)² + (9-9)² + (11-11)² + (15-15)² + (0-0)² + (0-1)² + (0-0)² + (0-1)² = 7
OBS.: USE COMANDOS DE REPETIÇÃO, POIS OS VETORES PODEM SER DE TAMANHO ARBITRÁRIO (O ACIMA É SÓ UM EXEMPLO).
3) Crie uma função em C para calcular e retornar a soma dos elementos que não estão na borda de uma matriz. Exemplo: dada a matriz abaixo, a função retornará: 6 + 7 + 10 + 11 = 34.
0
1
2
3
0
1
2
3
4
1
5
6
7
8
2
9
10
11
12
3
13
14
15
16
O protótipo da função é: int somaCentro ( int L, int C, int mat [ L ] [ C ] )
Use repetição para criar seu código. Lembre-se que a função deverá funcionar para matrizes de quaisquer tamanhos.
4) Crie uma função RECURSIVA para calcular a soma dos quadrados dos números positivos até N. Para valores negativos de N, a função deve retornar o valor dela para o módulo do número, ou seja, o correspondente positivo. O protótipo da função é assim: int somaQuadrados (int N)
Exemplos:
se N for 10, a função somaQuadrados deverá retornar o valor de 1² + 2² + 3² + …. + 8² + 9² + 10² = 385
se N for 5, a função somaQuadrados deverá retornar o valor de 1² + 2² + 3² + 4² + 5² = 55
se N for 0, a função somaQuadrados deverá retornar o valor 0
se N for -5, a função somaQuadrados deverá retornar o mesmo que somaQuadrados(5) = 55
5) a) Qual o valor de y no final do programa?
b) Escreva um /* comentário */ em cada comando de atribuição explicando o que ele faz e o valor da variável à esquerda do '=' após sua execução.
c) Explique o porquê de a atribuição *q = 10 causar problemas.
int main()
{
int x, y, *p, *q;
y = 19;
p = &y;
x = *p;
x = 7;
(*p)++;
x--;
(*p) = (*p) + x;
printf ("y = %d\n", y);
*q = 10;
return 0;
}
6) Comente o trecho abaixo linha-a-linha e mostre o que será impresso pelo comando printf:
int * p = &a;
int * q = &b;
int * r = &c;
*r = *p;
*p = *q;
*q = *r;
printf("%d - %d", a, b);
7) Comente o trecho abaixo linha-a-linha e mostre o que será impresso pelo comando printf:
int * p = &(vet[2]);
int i;
for ( i = 1; i <= 6; i++ )
{ printf ("%d - ", *p);
p++;
}
8) Por que o primeiro scanf abaixo usa o operador '&' e o segundo não?
scanf("%d", &x);
char nome[50];
scanf("%s", nome);
9) Faça uma função que crie uma figura de uma bandeira existente:
https://thumbs.dreamstime.com/b/bandeiras-de-pa%C3%ADses-13821928.jpg
Dicas:
-Pense numa imagem de 200 linhas por 300 colunas.
-Para facilitar sua vida, escolha uma bandeira como a do Chade (3 listras verticais: azul, amarelo e vermelho), a da Costa do Marfim (3 listras verticais: laranja, branco e verde), a da França (3 listras verticais: azul, branco e vermelho), etc.
10) Faça uma função que crie uma figura semelhante a isto:
= = = = = = = = = = =
=
= = = = = = = =
= = =
= = = = = =
= = = = =
= = = =
= = = = = = =
= =
= = = = = = = = =
11) Faça uma função recursiva que pinte uma imagem de branco. Ela seria mais ou menos assim:
{ ....
}
Dicas:
-Se a coordenada inicioX ou inicioY estiver fora da imagem, que tem dimensões 'linhas' e 'colunas', nada será feito
-Se na coordenada (inicioX, inicioY) já houver o tom branco (maxValor), nada será feito
-Se na coordenada (inicioX, inicioY) não houver o tom branco, pinto com essa cor (maxValor)
-Invoco o procedimento recursivo para a coordenada de cima, de baixo, da esquerda e da direita
-Pronto!!!
Uma resposta possível:
{ if(inicioX>=0 && inicioX<linhas && inicioY>=0 && inicioY<colunas && original[inicioX][inicioY] != maxValor)
{ original[inicioX][inicioY] = maxValor;
pintarBranco(original, linhas, colunas, maxValor, inicioX+1, inicioY);
pintarBranco(original, linhas, colunas, maxValor, inicioX-1, inicioY);
pintarBranco(original, linhas, colunas, maxValor, inicioX, inicioY-1);
pintarBranco(original, linhas, colunas, maxValor, inicioX, inicioY+1);
}
}
12) Refaça a funcionamento do PROCURAR no Cadastro de Amigos que já fizemos de modo a trabalhar mesmo com pedaços de nomes (dica: pesquise uma função chamada "strstr").
DICA: exemplo de uso da função strstr()
#include <string.h>
int main () {
char texto[20] = "Joao da Silva";
char pedaco1[10] = "Silva";
char pedaco2[10] = "Santos";
if(strstr(texto, pedaco1) != NULL)
printf("O pedaco %s existe dentro de %s\n",
pedaco1, texto);
else printf("O pedaco %s NAO existe dentro de %s\n",
pedaco1, texto);
if(strstr(texto, pedaco2) != NULL)
printf("O pedaco %s existe dentro de %s\n",
pedaco2, texto);
else printf("O pedaco %s NAO existe dentro de %s\n",
pedaco2, texto);
return 0;
}
13) Crie uma funcionalidade de alterar (Update do crUd) para o nosso Cadastro de Amigos.
Comentários
Postar um comentário