Você está na página 1de 3

LINGUAGENS DE PROGAMAO 1. Dado o programa abaixo, qual ser a sada?

(responda antes de executar o programa)


#include <stdlib.h> #include <stdio.h> union N1 { int i; int j; double d; }; struct N2 { int i; int j; double d; }; int main() { printf(" union: %ld\n", sizeof(union N1)); printf("struct: %ld\n", sizeof(struct N2)); return 0; }

/* %ld -> tipo long */

Salve o programa como lab01.c, compile, execute e verifique sua respostas.


gcc -o lab01 lab01.c ./lab01

Explique rapidamente (2 linhas) porque esses valores foram obtidos. 2. Sabemos que C armazena arrays (vetores, matrizes, etc.) em linha e que podemos utilizar a seguinte equao de equivalncia para matrizes: addr(m[i,j]) = addr(m[0,0]) + (i * nmero_de_cols * sizeof(tipo)) + ( j * sizeof(tipo)) ) onde addr( ) representa o endereo da posio da matriz isso pseudocdigo, em C seria o &. No programa abaixo, ptr aponta para o incio da matriz mat. Escreva a expresso faltando, de forma que ela recupere o valor de value da posio lin e col, utilizando o ponteiro ptr. Obs: a sada esperada do programa 8 == 8.
#include <stdlib.h> #include <stdio.h> int mat[4][3] = { { 1, 2, 3}, { 4, 5, 6}, { 7, 8, 9}, {10, 11, 12} }; int main() { int value; int *ptr; int lin = 2; int col = 1;

ptr = (int*)mat; value = _________________________________; printf("%d == %d\n", mat[lin][col], value); return EXIT_SUCCESS; }

3. Por que a varivel value da funo show() mostra os valores informados na funo main?
#include <stdlib.h> #include <stdio.h> void show() { int value; printf("%d\n", value); } int* get_address() int tmp; return &tmp; } {

int main() { int *ptr; ptr = get_address(); *ptr = 123; show(); *ptr = 456; show(); *ptr = 789; show(); return 0; }

4. Qual a sada esperada para programa abaixo? (responda antes de executar)


#include <stdlib.h> #include <stdio.h> struct char char char char }; Chars { a; b; c; d;

union Values { struct Chars chs; int num; }; int main() { union Values vs; printf("%ld\n", sizeof(union Values)); vs.num = 0; vs.chs.a = 1; /* A */ printf("%d\n", vs.num); vs.num = 0; vs.chs.d = 1; /* D */ printf("%d\n", vs.num);

return 0; }

5. Qual o deslocamento de cada um dos campos da estrutura abaixo?


struct Person { int idade; char nome[30]; char endereco[30]; double salario; };

5.1. O programa abaixo imprime o endereo da varivel p. Complete o programa abaixo, de tal forma a imprimir na tela os deslocamentos descritos no item anterior.
#include <stdlib.h> #include <stdio.h> struct Person { int idade; char nome[30]; char endereco[30]; double salario; }; int main() { struct Person p; printf("%ld\n", (long)&p); /* Complete aqui */ return 0; }

Você também pode gostar