Baixe o app para aproveitar ainda mais
Prévia do material em texto
Avaliação Online 1 Entrega 5 abr em 23:59 Pontos 15 Perguntas 10 Disponível 30 mar em 0:00 - 5 abr em 23:59 7 dias Limite de tempo 120 Minutos Tentativas permitidas 2 Instruções Histórico de tentativas Tentativa Tempo Pontuação MAIS RECENTE Tentativa 1 77 minutos 13,5 de 15 As respostas corretas estarão disponíveis em 6 abr em 0:00. Pontuação desta tentativa: 13,5 de 15 Enviado 1 abr em 18:19 Esta tentativa levou 77 minutos. Leia com atenção as orientações abaixo antes de iniciar esta prova: Serão permitidas duas tentativas para realizar esta avaliação, prevalecendo a maior nota. Programe-se para realizar suas avaliações com tranquilidade, pois você terá 120 minutos cronometrados (por tentativa) para conclusão e envio das respostas. Ao iniciar a avaliação o cronômetro não para, independentemente da plataforma estar aberta ou não; Durante a realização da prova: Será exibido uma questão por vez, podendo “Avançar” ou “Voltar” quando necessário dentro do período da tentativa; A tentativa somente será contabilizada após clicar no botão “Enviar”. Fazer o teste novamente 1,5 / 1,5 ptsPergunta 1 A linguagem C não possui um tipo string explícito. Não existe palavra reservada que declare uma variável para armazenar uma string. Em vez disto, você aloca espaço na memória para uma string definindo uma matriz de caracteres. Uma matriz de caracteres algumas vezes se https://newtonpaiva.instructure.com/courses/10791/quizzes/23713/history?version=1 https://newtonpaiva.instructure.com/courses/10791/quizzes/23713/take?user_id=18108 parece com qualquer outra variável. Por exemplo, você pode mostrar uma string inteira na tela numa única operação printf e usar uma variedade de funções para ler uma string do teclado e armazenar numa variável de entrada. Fonte: Disponível em:< https://www.unicamp.br/fea/ortega/info/aula09.htm> Acesso.08. Ago.2019. Nesse contexto, avalie as asserções a seguir e a relação proposta entre elas: I - A leitura de valores string pode ser feita da mesma forma que a leitura de outros tipos. PORQUE II - utilizando-se scanf com a string de controle %s a entrada é formatada para o tipo texto. A respeito dessas asserções, assinale a opção correta. As asserções I e II são proposições falsas. As asserções I e II são proposições verdadeiras, e a II é uma justificativa correta da I. A leitura de valores string pode ser feita da mesma forma que a leitura de outros tipos, utilizando scanf com a string de controle %s, que formata a entrada para o tipo texto. Para ler o nome declarado, o comando de entrada dado por scanf(“%s”,&nome);. Como apresentado na unidade 1, no tópico 1.1.3. Linguagem de Programação As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa correta da I. A asserção I é uma proposição falsa e a II é uma proposição verdadeira. A asserção I é uma proposição verdadeira, e a II é uma proposição falsa. 1,5 / 1,5 ptsPergunta 2 Analise o código a seguir. int main() { int linha; int coluna; int i; int somaprod; int mat1[3][3]={{5,4,3},{1,3,4},{5,7,9}}; int mat2[3][3]={{1,0,0},{0,1,0},{0,0,1}}; int mat3[3][3]; int M1L=3, M1C=3, M2L=3, M2C=3; for(linha=0; linha<M1L; linha++) for(coluna=0; coluna<M2C; coluna++){ somaprod=0; for(i=0;i<M1L; i++) somaprod+=mat1[linha][i]*mat2[i][coluna]; mat3[linha][coluna]=somaprod; } for(linha=0; linha<M1L; linha++){ for(coluna=0; coluna<M2C; coluna++) printf("%d ", mat3[linha][coluna]); printf("\n"); } system("PAUSE"); return 0; } Após a execução do código anterior é correto o que se afirma em: O valor de mat3[2][2] = 9 O algoritmo descrito no texto, inicialmente declara três matrizes mat1, mat2 e, mat 3 , sendo cada uma delas de dimensão 3x3.Posteriormente inicializa das duas primeiras, e, em seguida, realiza a multiplicação destas , armazenando seu resultado em mat3, por fim o algoritmo imprime a matriz resultante. Importante observar que mat2 consiste na matriz identidade, logo o produto de mat1 por mat2 consiste em mat1 , o qual é armazenada em mat3. Como apresentado na unidade 1, no tópico 1.1.4. Linguagem de Programação O valor de mat3[1][2] = 6. O valor de mat3[1][1] = 8. O valor de mat3[0][1] = 3. O valor de mat3[2][1] = 21. 0 / 1,5 ptsPergunta 3IncorretaIncorreta Quando se observa um código de programação, com a chance de simular seu funcionamento, é possível descobrir muita coisa, desde como ele manipula os valores até de que tipo são esses valores, mesmo que isso não esteja explícito no código. No caso de vetores e matrizes de caracteres, strings e vetores de strings, o que os diferencia é a forma como são manipulados no código, e não propriamente a forma como são declarados. No código abaixo, é possível ver a declaração e uso de uma estrutura. Considerando que a estrutura só é utilizada dessa forma, observe o código: char nomes[10][21]; for(i=0;i<=9;i++) { for(j=0;j<=20;j++) { printf("Digite o próximo valor:"); scanf("%c",&nomes[i][j]); } } Nesta situação, pode-se afirmar que foi declarado no começo do código um(a): Vetor de strings. String. Vetor de caracteres. Matriz de strings. Matriz de caracteres. Strings referem-se a uma forma de manipulação dos vetores de caracteres que, quando são lidos utilizando a string de controle (%s) no scanf( ) ou um comando de entrada próprio – o gets( ) –, são reconhecidos como uma palavra ou texto, e não somente como um conjunto de caracteres. A estrutura não é um string, mas, sim, uma matriz de caracteres por não ser manipulada como string ao receber os dados. 1,5 / 1,5 ptsPergunta 4 O programador, que estava desenvolvendo um programa para a escola onde você trabalha, criou uma lógica que compara a palavra Aluno com o conteúdo da variável str. Para que a comparação seja feita de forma simplificada, foi utilizada a função strlwr, da biblioteca string.h; porém, o desenvolvedor começou o código e não pôde terminá-lo. Como você tem um conhecimento avançado em programação, foi chamado para continuar o desenvolvimento do programa e viu que o programador havia começado a configurar a comparação da string (str) com a palavra (Aluno) utilizando o strlwr, e a única coisa que faltou para terminar foi a constante literal da comparação. Com base nas informações apresentadas, de que modo deve ser escrita a constante no código para que a comparação com a função strlwr(str) seja executada quando o usuário escrever Aluno? “ALUNO ou aluno” “aluno” “ALUNO” “Aluno ou aluno” “Aluno” A função strlwr retorna o conteúdo da string minúsculo. No caso proposto na questão, independentemente da forma como o usuário digitar a palavra aluno (Aluno, ALUNO, aluno, AlUnO, ALuNo), ele retornará que são iguais se a constante a ser comparada for “aluno”. 1,5 / 1,5 ptsPergunta 5 Analise o seguinte código em linguagem C. #include <stdio.h> #include <stdlib.h> int main(){ int *pt1=NULL, *pt2=NULL; int valor1, valor2, resultado; valor1=47; valor2=50; pt1=&valor1; pt2=&valor2; resultado=*pt1+*pt2; printf(“%i \n”,resultado); system(“PAUSE”); return 0; } Sobre o código apresentado é correto o que se afirmar em: A expressão valor1=47;faz referência ao endereço de memória da variável valor. A variável resultado irá armazenar o valor inteiro 97. O programa apresentado declara as variáveis valor1, valor2 e resultado, como sendo do tipo inteiro, bem como os ponteiros *pt1, *pt2 também sendo do tipo inteiro. Posteriormente, a variável resultado recebe a soma dos valore que pt1 e pt2 apontam, portanto 97. Como apresentado na unidade 2 no tópico 2.1.5 Linguagem de Programação A expressão pt1=&valor1 atribui o valor contido em valor1 a pt1. A variável resultado apresentará erro ao tentar somar os ponteiros.A variável resultado será um ponteiro nulo. 1,5 / 1,5 ptsPergunta 6 Analise o seguinte código escrito em linguagem C. #include<stdlib.h> #include<stdio.h> #define MAX 1000 int main(){ int *ptvetor, i,vet[MAX]; for(i=0;i<MAX;i++){ vet[i]=i+1; } ptvetor=vet; for(i=0;i<MAX;i++){ printf(“%p - %i\n”,ptvetor, *ptvetor); ptvetor++; } Sobre o código apresentado é correto o que se afirmar em: As expressões printf(“%p - %i\n”,ptvetor, *ptvetor); mostram um mesmo resultado. A variável *ptvetor é um vetor de inteiros. A variável *ptvetor é um ponteiro para números inteiros. A variável *ptvetor é um ponteiro para números inteiros, tendo sido declarada no início do programa. Como apresentado na unidade 2 no tópico 2.1.6 Linguagem de Programação A expressão vet[i]=i+1; consiste em uma aritmética de ponteiros. A expressão ptvetor++; soma uma unidade na variável vetor. 1,5 / 1,5 ptsPergunta 7 Em C, uma variável que contém um endereço de memória é uma variável do tipo ponteiro. Um valor, que é um endereço (como &a) é um valor de ponteiro. Quando um ponteiro (a variável) contém um determinado endereço, dizemos que ele aponta para o endereço de memória. Além disso, se o valor deste ponteiro é o endereço de uma outra variável qualquer, dizemos que tal ponteiro aponta para esta outra variável. Diponível em;< http://www.inf.ufpr.br/cursos/ci067/Docs/NotasAula/notas- 28_Ponteiros.html> Acesso.06. Ago.2019. Nesse contexto, considere pt1 um ponteiro, em seguida julgue as afirmações que se seguem. I – A expressão pt1 ++; acessa o próximo endereço de memória. II – A expressão (*pt1)-=2; acesso dois endereços de memória para traz. III – A expressão pt1=pt1+9; acessa dez endereços de memória frente. Está(ão) correta(s) a(s) afirmativa(s): I e II, somente. II, somente. II e III, somente. I, somente. Apenas a afirmação I está correta, as a segunda afirmação II está incorreta, pois a expressão (*pt1)-=2; acessa o conteúdo apontado subtraído de 2 e a terceira expressão pt1=pt1+9;// acessa 9 endereços à frente. Como apresentado na unidade 2 no tópico 2.1.5 Linguagem de Programação. III, somente. 1,5 / 1,5 ptsPergunta 8 A implementação abaixo, em linguagem C, faz uso do recurso de alocação dinâmica e retorna valores armazenados e um vetor V. Selecione abaixo qual resultado corresponde ao resultado da codificação. # include <stdio.h> # include <stdlib.h> int main () { int *v,n =5; v = (int *) malloc ( sizeof (int)*n); int i; for (i=0;i<n;i++) v[i] = i*i; for (i=0;i<n;i++) printf ("%d,", v[i]); free (v); return 0; } 0, 1, 4, 9, 16, 0, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 1, 1, 1, 1, 1,5 / 1,5 ptsPergunta 9 Analise o seguinte código computacional. # include <stdio.h> # include <stdlib.h> int main (){ int *pi; pi = (int *) malloc(sizeof(int)); printf(“\n Digite um numero : “); scanf(“%d”, pi); printf(“\n primeira impressao: %d\n”, *pi); free(pi); printf(“\n segunda impressao: %d\n\n”, *pi); system (“pause”); return 0; } Considerando o código apresentado, julgue as afirmações que se seguem. I - A variável *pi é um número inteiro. II - O primeiro printf irá mostrar o endereço de memória relativo a *pi. III – O programa aloca dinamicamente o número de bytes para um número inteiro. Está(ão) correta(s) a(s) afirmativa(s): I e II, somente. II, somente. I, somente. III, somente. Apenas a terceira afirmação está correta, a primeira afirmação está incorreta, pois a variável *pi é um ponteiro para um número inteiro, já a segunda afirmação está incorreta, pois o primeiro printf irá mostrar o valor armazenado em *pi , lido a partir do teclado. Como apresentado na unidade 3 no tópico 3.1.2.1 Linguagem de Programação. II e III, somente. 1,5 / 1,5 ptsPergunta 10 Analise a codificação a seguir: #include <stdio.h> #include <stdlib.h> struct x{ int a; int b; int c; }; int main(void){ struct x estrutura; int *y = malloc ( 2* sizeof(estrutura)); printf("%li", sizeof(estrutura)); } Considerando que o tipo inteiro (int) aloca 4 bytes na arquiterura utilizada por esse programa, conclui-se que, usando alocação dinâmica na codificação, a quantidade de bytes alocados para uma variável do tipo x será de: 16 bytes. 64 bytes. 32 bytes. 12 bytes. 128 bytes. Pontuação do teste: 13,5 de 15
Compartilhar