Prévia do material em texto
ESTRUTURA DE DADOS CCT0753_A8_201801076693_V4 Lupa Calc. Vídeo PPT MP3 Aluno: SÉRGIO RICARDO SIMÃO Matrícula: 201801076693 Disciplina: CCT0753 - ESTRUTURA DE DADOS Período Acad.: 2018.3 EAD (GT) / EX Prezado (a) Aluno(a), Você fará agora seu TESTE DE CONHECIMENTO! Lembre-se que este exercício é opcional, mas não valerá ponto para sua avaliação. O mesmo será composto de questões de múltipla escolha. Após responde cada questão, você terá acesso ao gabarito comentado e/ou à explicação da mesma. Aproveite para se familiarizar com este modelo de questões que será usado na sua AV e AVS. 1. Dr. Pei Tam possui uma lista não ordenada de pacientes de seu consultório em que registra apenas o nome endereço e o telefone de cada paciente. Como não há limites para o crescimento de sua lista, como se pode implementar a inserção de um novo paciente na lista, sabendo que cada paciente é do tipo Paciente e a lista é do tipo List assim definidos : struct Paciente { long int matricula; string nome, endereco e tel; }; struct List { Paciente p; struct List *link; }; List insereCliente(List *i, Paciente pac) { List novo[]; novo[0].p = pac; novo[0].link = i; return novo; } List * inserePac(List *i, Paciente pt){ List *novo ; novo->p = pt; novo->link = i; return novo; } List * inserePac(List *i, Paciente pac) { List *novo = new List; novo.p = pac; novo.link = i; return novo; } List * inserePac(List *i) { List *novo = new List; Paciente pat; novo->p = pat; novo->link = i; return novo; } List * inserePac(List *i, Paciente pt) { List *novo = new List; novo->p = pt; novo->link =i; return novo; } Gabarito Coment. 2. Sou uma empresária que quer crescer e por isso, tenho que aumentar progressivamente a minha lista de clientes, sem limitar este crescimento. Assim, à medida que novos clientes são cadastrados, posso, se necessário, contratar mais e mais empregados. Marque a opção que especifica o tipo de lista e o tipo de alocação de memória mais adequados para este problema. fila dinâmica e alocação dinâmica de memória fila encadeada e alocação dinâmica de memória lista encadeada e alocação dinâmica de memória pilha dinâmica e alocação dinâmica de memória lista sequencial e alocação dinâmica de memória Gabarito Coment. 3. O conceito de ponteiros foi estudado em uma de nossas aulas. Sendo assim, leia atentamente as afirmativas abaixo e assinale a opção correta. I A variável ponteiro não precisa ser declarada. II A variável ponteiro armazena endereço. III Quanto se usa &nomeDaVariávelPonteiro com o comando cout, é exibido o endereço da variável apontada pela variável ponteiro. IV Quando se usa nomeDaVariávelPonteiro com o comando cout, é exibido o endereço da variável ponteiro. V Quando se usa *nomeDaVariávelPonteiro com o comando cout, é exibido o conteúdo da variável apontada pela variável ponteiro. IV e V estão corretas I, II e IV estão corretas I IV e V estão corretas II e V estão corretas Somente a II está correta Gabarito Coment. 4. Considere int *ptr, *qtr, *r; int a = 10, b = 20; Após executar cada instrução conforme a ordem dada a seguir : ptr = &a; qtr = &b; *ptr = *ptr + *qtr; ++(*qtr); r = qtr; qtr = ptr; assinale a opção que mostra, correta e respectivamente, os valores de *ptr, *qtr , *r , a e b . 30 20 20 10 20 30 20 0 30 21 30 21 21 10 20 30 30 21 10 20 30 30 21 30 21 5. Em uma aplicação que usa apenas o processo de alocação estática de memória é correto afirmar que: A memória utilizada pela aplicação é totalmente alocada após o inicio de sua execução Toda a memória utilizada pela aplicação não muda durante toda a sua execução Apenas a memória associada às variáveis do tipo vetor é alocada após o inicio da execução da aplicação A memória utilizada pela aplicação é inicialmente estática, mas pode mudar Todas as afirmações acima são incorretas Gabarito Coment. 6. Admita a seguinte estrutura de nó de uma lista simplesmente encadeada: struct tno { int chave; tno *proximo; }; Admita, agora, a seguinte declaração de uma variável do tipo nó: tno *no; Qual das alternativas a seguir traz uma operação válida sobre essa variável? no->proximo = -10; no->proximo = new tno; no.chave = 5; no->chave = new int; no.proximo = no; Explicação: Analisando cada item : no.chave = 5; >> Como no é ponteiro então temos que usar a seta para acessar os campos da área apontada por no. no->proximo = -10; >> O campo proximo é de ponteiro então não pode receber inteiro. no->chave = new int; >> O campo chave é de inteiro então não deve receber endereço de inteiro. O operador new aloca memória e retorna o endereço da área alocada. no->proximo = new tno; >> É correto porque o campo proximo é campo de ponteiro e pode receber outro ponteiro, pode receber NULL ou pode receber endereço da área alocada com new, como foi o caso. no.proximo = no; >> Incorreto porque não pode se pode usar o ponto para acessar campo de struct apontada pelo ponteiro no. 7. Qual o valor de x no final do programa? int main() { int x, *p, y; x = 2; p = &x; y = *p; y = 5; (*p)++; (*p) = (*p) - y; return(0); } 5 Nenhuma das anteriores. O programa possui um erro de sintaxe. 8 2 -2 Explicação: Analisando passo a passo : int main() { int x, *p, y; x = 2; p = &x; // p aponta para x, sendo que x recebeu 2 y = *p; //y recebeu o conteúdo da área apontada por p, ou seja, y recebeu *p que é 2 y = 5; //y recebeu 5 (*p)++; //A área apontada por p recebeu 3 Ou seja, x recebeu 3 (*p) = (*p) - y; //*p, que é x recebeu 3 - 5. Ou seja, *p recebeu -2 return(0); } Como p aponta para x e *p recebeu -2, então x recebeu -2 8. Seja uma lista encadeada cujo nodo é representado por: struct nodo{ int valor; nodo prox; }; Esta estrutura possui um ponteiro de referência que aponta sempre para o primeiro nodo da lista, sendo este declarado como: nodo *lista; Numa lista encadeada seu último nodo possui o campo prox sempre igual a NULL. Marque a opção que representa o trecho de código onde um ponteiro auxiliar é capaz de percorre a lista até seu último nodo: nodo *aux=lista; while(aux->prox)aux=aux->prox; nodo *aux=lista; while(aux)aux->prox=aux; nodo *lista=aux; while(aux->prox)aux=aux->prox;nodo *aux=lista; while(lista->prox)aux=aux->prox; nodo *aux=lista; while(aux->prox)aux->prox=aux->prox; Explicação: nodo *aux=lista; while(aux->prox)aux=aux->prox; Legenda: Questão não respondida Questão não gravada Questão gravada Exercício inciado em 20/11/2018 11:48:05.