SIMULADO PROVA Nome (legível e por extenso) Matrícula: Turma/Nome Prof: Questões Nota Revisão 1 (2.0) 2 (1.0) 3 (2.0) 4 (2.0) 5 (2.0) P1 (9,0) AVISOS: 1. A prova é sem consulta e sem perguntas. A interpretação do enunciado faz parte da prova!!! 2. As questões devem ser resolvidas usando a linguagem de programação C. 3. O aluno só pode manter junto a si lápis, borracha e caneta. O empréstimo deste tipo de material para outro aluno é estritamente proibido. 4. Todo papel diferente do distribuído pelo fiscal (independentemente do conteúdo) e/ou qualquer dispositivo eletrônico (celular, tablet, etc) ligado ou não encontrado visível junto ao aluno implicará no recolhimento imediato da prova e a atribuição de nota zero à mesma. 5. Se o espaço para solução de uma questão for insuficiente, utilize um espaço livre na prova. Não se esqueça de deixar tudo indicado!!! As funções de bibliotecas que podem ser usadas nesta prova, quando não houver restrição no enunciado da questão, encontram-se relacionadas na última folha. Espaço reservado para observações do aluno e futuros pedidos de revisão: 1
Questão 1) (2.0 pontos) Escreva a função pi recursiva que calcula π pela fórmula de Leibniz: ππ 4 1 1 + 1 1 +, tal que pppp(0) = 4, 3 5 7 pppp(1) = 4 1 1 = 2.666667,..., pppp(5) = 2.976046,..., pppp(1000) = 3.142592,.... A fórmula geral é 3 nn 1 pppp(nn) = 4 ( 1)kk 2kk + 1 kk=0 Questão 2) (1.0 ponto) Escreva a função palavras que recebe uma cadeia de caracteres com palavras e retorna o número de palavras, supondo que o separador de palavras é um único caractere branco. Por exemplo, a cadeia "Alvo Percival Wulfric Brian Dumbledore" tem 5 palavras e "John Snow" tem 2. 2
Questão 3) (2.0 pontos) Um autor de livros de ficção quer um programa que gere automaticamente as iniciais de nomes de personagens famosos do cinema. Por exemplo, as iniciais de Alvo Percival Wulfric Brian Dumbledore é A.P.W.B.D. e a de John Snow é J.S. Supondo que as palavras dos nomes são separadas apenas por um único caractere branco, escreva a função gerainiciais que recebe um nome e retorna uma nova cadeia contendo as iniciais deste nome, de maneira que a memória alocada tenha o tamanho exato necessário. Use obrigatoriamente a função da questão anterior. 3
Questão 4) (2.0 pontos) Em um experimento estatístico, várias medidas de uma determinada grandeza são coletadas e colocadas em um vetor, com precisão de duas casas decimais. Escreva a função normaliza que recebe o número de medidas coletadas e o vetor com estas medidas e retorna um novo vetor com estas medidas normalizadas pelo maior valor. Por exemplo, para as medidas { 5.5, 3.2, 10.0, 1.5 }, o novo vetor é : {0.55, 0.32, 1.00, 0.15}. Questão 5) (2.0 pontos) Escreva uma função main que testa todas as 4 funções anteriores que foram pedidas nesta prova. Considere obrigatoriamente as seguintes especificações: [1] teste a função pi para qualquer valor inteiro que o usuário fornecer pelo teclado, numa repetição que fica solicitando Entre numero de termos (negativo para sair):, até que o usuário entre um número negativo. [2] use duas cadeias para testes das questões Q2 e Q3: Alvo Percival Wulfric Brian Dumbledore e John Snow. [3] Nos testes com a Q3 e a Q4, libere a memória tão logo seja possível. [4] No teste da Q4 use o vetor { 5.5, 3.2, 10.0, 1.5 } e considere que os valores envolvidos nunca são maiores do que 999.00. [5] O formato de impressão e a quantidade de testes devem seguir rigorosamente o exemplo da figura ao lado. 4
ALGUMAS FUNÇÕES DE BIBLIOTECAS stdio.h: int scanf (char* formato,...); int printf (char* formato,...); FILE* fopen (char* nome, char* modo); int fclose (FILE* fp); int fscanf (FILE* fp, char* formato,...); int fprintf (FILE* fp, char* formato,...); int sprintf(char* str, char* formato,...); char* fgets(char* str, int size, FILE* fp); int sscanf(char* str, char* formato,...); stdlib.h: void* malloc (int nbytes); void free (void* p); math.h: double sqrt (double x); double pow (double x, double exp); double cos (double radianos); double sin (double radianos); string.h: int strlen (char* s); int strcmp (char* s, char *t); char* strcpy (char* destino, char* fonte); char*strncpy(char*destino,char*fonte,int n); char* strcat (char* destino, char* fonte); 5