INF1007 - Programação II
P1 - 19/09/2014
Nome (legível e por extenso)
Matrícula:
Turma/Nome Prof:
Questões
1.a
(1.5)
1.b
(3.0)
2
(2.0)
3.a
(2.0)
3.b
(1.5)
P1
(10,0)
G1
(90%P1)
Nota
Revisão
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);
char* strdup (char* s);
void qsort (void *v, int n, int tam, int (*cmp)(const void*, const void*));
void * bsearch(void * info, void * v, int n, int tam, int (*cmp)(const void *, const void *));
NESTA PROVA VOCE PODE USÁ-LAS EM QUALQUER QUESTÃO
Espaço reservado para observações do aluno e futuros pedidos de revisão:
AVISOS:
1.
2.
3.
4.
A prova é sem consulta e sem perguntas. A interpretação do enunciado faz parte da prova!!!
As questões devem ser resolvidas usando a linguagem de programação C.
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.
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.
1
INF1007 - Programação II
P1 - 19/09/2014
Questão 1.a) (1.5 pontos) Escreva a função ultNome que:
- recebe (o ponteiro para) uma cadeia de caracteres contendo o nome completo de uma pessoa. Ou
seja, recebe o endereço do primeiro caractere de uma cadeia de caracteres.
- retorna um ponteiro para a cadeia de caracteres do último nome dessa pessoa. Isto é, o endereço
do primeiro caractere do último nome, sem criar nenhuma nova cadeia de caracteres.
Cadeias de caracteres vazias ou contendo apenas espaços em branco não são aceitas como nomes.
Assim, assuma que a cadeia recebida pela função contém ao menos um nome.
Exemplos: Se o nome completo for “Maria Clara Donato”, será retornado o endereço do caractere ‘D’. A
função retorna também o endereço do caractere ‘D’ se o nome completo for apenas “Donato”.
Solução:
2
INF1007 - Programação II
P1 - 19/09/2014
Questão 1.b) (3.0 pontos) Escreva a função criaNome que gera automaticamente e retorna o nome completo
de um bebê, a partir do primeiro nome dado ao bebê, do nome completo de solteira da mãe e do nome
completo do pai. O nome do bebê é composto pelo seu primeiro nome + último nome da mãe + último nome
do pai, separados por espaços.
Função criaNome:
- recebe uma cadeia com o primeiro nome do bebê, uma cadeia com o nome completo da mãe e
uma cadeia com o nome completo do pai;
- cria e retorna uma nova cadeia contendo o nome completo do bebê, gerado de acordo com o
critério descrito. Utilizar alocação dinâmica de memória do tamanho exato necessário Retorna NULL
quando não for possível alocar dinamicamente. Essa função deve usar, adequadamente, a função do
item 1.a, mesmo que você não a tenha feito.
Exemplo: a seguinte chamada da função com os argumentos:
criaNome("Pedro", "Ana Luiza Resende", "Rui Alberto Medeiros")
retornaria (um ponteiro para) uma nova cadeia contendo o nome "Pedro Resende Medeiros"
Solução:
3
INF1007 - Programação II
P1 - 19/09/2014
Questão 2) (2.0 pontos) Escreva a função recursiva contaAprovados que:
- recebe dois vetores de float com as notas da primeira prova e da segunda prova dos alunos de
uma turma e o número de alunos dessa turma;
- retorna o número de alunos aprovados, ou seja, o número de alunos cuja média aritmética das
duas notas é maior ou igual a 6.0.
Exemplo:
Para p1 = {1.0, 8.0, 6.0, 10.0, 0.0, 7.0, 1.0} e p2 = {10.0, 4.0, 5.5, 3.0, 0.0, 7.0, 1.0}, há 3 alunos aprovados.
Obs. Uma possível definição recursiva considera que um vetor ou é vazio ou é definido pelo seu primeiro
elemento seguido de um sub-vetor com os elementos subsequentes.
Solução:
4
INF1007 - Programação II
P1 - 19/09/2014
Questão 3: Considere o tipo estruturado Ponto que representa um ponto no plano:
struct ponto
{
float x, y;
};
typedef struct ponto Ponto;
Considere também o tipo estruturado Retangulo que representa um retângulo no plano, com base paralela
ao eixo x. Para isso são armazenadas as coordenadas x e y do vértice inferior esquerdo (que é um ponto no
plano), a base e a altura desse retângulo.
struct retangulo
{
Ponto vie; /* vertice inferior esquerdo */
float base;
float altura;
};
typedef struct retangulo Retangulo;
3.a (2.0 pontos) Escreva a função obtemVertSupDir que:
- recebe um ponteiro para Retangulo
- calcula e retorna um ponto com as coordenadas x e y que correspondem ao vértice superior
direito desse retângulo. Atenção: o retorno da função não é um ponteiro para Ponto.
Assuma que todos os dados são consistentes.
Exemplo: Se as coordenadas x e y do vértice inferior esquerdo são 3.5 e 2.0, com base 3.0 e altura 1.8, as
coordenadas x e y do vértice superior direito serão: 6.5 e 3.8.
3.b (1.5 ponto) Escreva uma função main que chama a função obtemVertSupDir e exibe os valores do
ponto do retângulo correspondentes ao vértice superior direito retornado pela mesma. Crie as variáveis
necessárias, atribua valores que julgar apropriados, chame a função do item 3.a (mesmo que você não a
tenha feito) e exiba o resultado obtido. O importante é que sua função main seja consistente.
Solução:
5
INF1007 - Programação II
P1 - 19/09/2014
Solução:
6
Download

INF1007 - Programação II P1