Baixe o app para aproveitar ainda mais
Prévia do material em texto
Estudo Comparativo Atividade I B – 22/04/20 1 2 3 4 5 6 7 Nome: Luana Cesar Aguiar RA: 27168 · Justifique todas as respostas segundo corresponda. · Casos de cola acarretarão zero em todos os envolvidos. · Só utilizar a folha de enunciados para responder as questões. 1) Escreva os valores das variáveis para cada instrução do programa abaixo. Qual a saída do programa? int main(int argc, char *argv[]) { Teste de mesa a b p1 p2 4 3 &a &a 4 3 &4 7 ... ... ... ... 8 21 21 8 int a,b,*p1, *p2; a = 4; b = 3; p1 = &a; p2 = p1; *p2 = *p1 + 3; b = b * (*p1); (*p2)++; p1 = &b; printf("%d %d\n", *p1, *p2); printf("%d %d\n", a, b); } 2) Dada a seguinte sequência de instruções: int i=10, j=20; int *pti, *ptj; pti = &i; ptj = &j; Qual (ais) expressão (ôes) não é (são) válida (s)? a) (&*pti)++; R:Correta, levando que o valor de pti esta equivale ao endereçamento. b) i = (*pi)***pj; R: Correta levando em conta que *pi equivale a i e *pj equivale a j então poderíamos traduzir isso para i = (i)+++j que equivaleria a isso i = (i) + (++j). c) i = pti-ptj; R: Correta, pois um ponteiro está recebendo um endereço de um inteiro d) pti == ptj; R: Correta, pois os valores serão o mesmo e) *pti += ptj; R: Errado, pois o conteúdo de `pj` é um inteiro e está recebendo um endereço) * 3) Os programas (trechos de código) abaixo possuem erros. Qual(is)? Como deveriam ser os programas para não apresentarem erros? a) void main() { int x, *p; x = 100; p = x; printf(“Valor de p: %d.\n”, *p); } R: O código executa não traz o que é esperado que é o valor que está a referenciado por esse ponteiro, pelo seguinte motivo na hora que fala p=x, a gente não passa nada pois ela é um tipo de variável de ponteiro, e para passar algo primeiramente precisa se referenciar algum valor no caso para isso passamos o endereço de memória, e assim conseguimos pegar o valor que está armazenado em x, desse modo para fazer essa alteração necessita um & ou seja &x b) char *a, *b; a = "abacate"; b = "uva”; if (a < b) printf ("%s vem antes de %s no dicionário", a, b); else printf ("%s vem depois de %s no dicionário", a, b); R: O código pois tem uma função que em c consegue contar a quantidade de caracteres em uma string para isso normalmente se usa um loop e um apontador apontando para o primeiro elemento e em seguida fazer um contador que conta a quantidades de passada até que seja nulo caracter nulo em c = '\0'. 4) Dado o código a seguir: int vetor[10]; int *ponteiro; ponteiro = &vetor[0]; Determinar quais são válidas e quais não justificando a resposta. a) ponteiro[3] = 678; R: Não é valido pois ponteiro não pode executar um vetor. b) *pa = *(a+ 2); R: Válida, pois, pa irá fazer apontamento para o endereço de memória. c) vetor = ponteiro; R: Não é valido, pois não tem um endereço de memória. d) vetor = vetor + 5; R: Valido, pois o vetor pode depois incrementar. e) ++vetor; R: Não é valido, pois não tem como incrementa um vetor sem uma variável. 5) Suponha que os elementos do vetor v são do tipo int e cada int ocupa 4 bytes no seu computador. Se o endereço de v[0] é 39000, qual o valor da expressão v + 3? R: Se v (ou o endereço de v[0]), que representa o primeiro item do vetor está no byte de endereço 39000, logoo índice v[3] (ou v + 3) estará no byte 39000 + 8*3 = 39024. Nota: em máquinas de 32 bits, inteiros ocupam32 bits (4 bytes) 6) Analise o trecho de código escrito na linguagem C apresentado a seguir: É CORRETO afirmar que: a) Sua execução apresentará uma mensagem de erro. b) O código possui erros léxicos e sintáticos. c) A sua execução apresentará na tela o resultado: %p\nx1 %p\nx2. d) A sua execução apresentará dois valores iguais.-Correta e) A sua execução não apresentará mensagens ou resultados. 7) A linguagem de programação C está entre as linguagens de programação mais utilizadas para desenvolvimento de bibliotecas e sistemas operacionais pelas suas características de portabilidade e desempenho. É uma linguagem baseada em ponteiros que possui diversas formas de acesso ao conteúdo da memória. Dada uma matriz A com n colunas armazenada continuamente na memória, a lista de expressões que contém formas equivalentes de acesso ao mesmo conteúdo da memória é a) A[i][j], (&A+i*n+j), e A[i*n+j] b) A[i][j], &(A+i*n*j), e A[i*n*j] c) A[i][j], (*A+i*n*j), e A[i*n*j]. d) A[i][j], *(A+i*n+j), e A[i*n+j].-Correta
Compartilhar