Buscar

Atividade ECL- Luana Aguiar RA 27168

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

Continue navegando