Baixe o app para aproveitar ainda mais
Prévia do material em texto
1) int w, x, y, z; // Declaração das variáveis w, x, y e z int i = 4; int j = 5; // Inicialização das variáveis i e j com os valores 4 e 5, respectivamente { // Início do primeiro bloco int j = 7; // Declaração e inicialização da variável j local com o valor 7 i = 6; // Atribuição do valor 6 à variável i w = i + j; // Atribuição da soma de i e j à variável w } // Fim do primeiro bloco x = i + j; // Atribuição da soma de i e j à variável x { // Início do segundo bloco int i = 8; // Declaração e inicialização da variável i local com o valor 8 y = i + j; // Atribuição da soma de i e j à variável y } // Fim do segundo bloco z = i + j; // Atribuição da soma de i e j à variável z · w: Dentro do primeiro bloco, i é atualizado para 6 e j local é 7, então w = 6 + 7 = 13 · x: Fora dos blocos, i é mantido como 6 e j global é 5, então x = 6 + 5 = 11 · y: Dentro do segundo bloco, i local é 8 e j é 5, então y = 8 + 5 = 13 · z: Fora dos blocos, i é mantido como 6 e j é 5, então z = 6 + 5 = 11 Portanto, os valores atribuídos serão: w x y z 13 11 13 11 2) int w, x, y, z; // Declaração das variáveis w, x, y e z int i = 3; int j = 4; // Inicialização das variáveis i e j com os valores 3 e 4, respectivamente { // Início do primeiro bloco int i = 5; // Declaração e inicialização da variável i local com o valor 5 w = i + j; // Atribuição da soma de i e j à variável w } // Fim do primeiro bloco x = i + j; // Atribuição da soma de i e j à variável x { // Início do segundo bloco int j = 6; // Declaração e inicialização da variável j local com o valor 6 i = 7; // Atribuição do valor 7 à variável i y = i + j; // Atribuição da soma de i e j à variável y } // Fim do segundo bloco z = i + j; // Atribuição da soma de i e j à variável z · w: Dentro do primeiro bloco, i local é 5 e j é 4, então w = 5 + 4 = 9 · x: Fora dos blocos, i global é 3 e j global é 4, então x = 3 + 4 = 7 · y: Dentro do segundo bloco, i é atualizado para 7 e j local é 6, então y = 7 + 6 = 13 · z: Fora dos blocos, i global é 7 e j global é 4, então z = 7 + 4 = 11 Portanto, os valores atribuídos serão: w x y z 9 7 13 11 3) { int w, x, y, z; /* Bloco B1 */ { int x, z; /* Bloco B2 */ { int w, x; /* Bloco B3 */ } } { int w, x; /* Bloco B4 */ { int y, z; /* Bloco B5 */ } } } · Bloco B1 int w, x, y, z: Escopo dentro do Bloco B1. · Bloco B2: int x, z: Escopo dentro do Bloco B2. Esta declaração de x e z tem precedência sobre as declarações no Bloco B1. · Bloco B3: int w, x: Escopo dentro do Bloco B3. Esta declaração de w e x tem precedência sobre as declarações no Bloco B1 e Bloco B2. · Bloco B4: int w, x: Escopo dentro do Bloco B4. Esta declaração de w e x tem precedência sobre as declarações no Bloco B1, Bloco B2 e Bloco B3. · Bloco B5: int y, z: Escopo dentro do Bloco B5. Esta declaração de y e z tem precedência sobre as declarações no Bloco B1, Bloco B2, Bloco B3 e Bloco B4. As declarações dentro de cada bloco podem ocultar as declarações com os mesmos nomes de blocos externos. Isso é conhecido como escopo léxico ou escopo estático. 4) #define a (x+1) int x = 2; void b() { x = a; printf("%d\n", x); } void c() { int x = 1; printf("%d\n"), a; } void main() {b(); c(); } · #define a (x+1) Define uma macro a que expande para x + 1 · int x = 2; Declara e inicializa a variável global x com o valor 2 · void b() { x = a; printf("%d\n", x); } Define uma função b() que atribui o valor de a (ou seja, x + 1) à variável global x e imprime o valor resultante · void c() { int x = 1; printf("%d\n"), a; } Define uma função c() que declara e inicializa uma variável local x com o valor 1 e imprime o valor de a (ou seja, x + 1). No entanto, há um erro de sintaxe, pois a chamada printf("%d\n"), a; está fora dos parênteses da função printf · void main() {b(); c(); } Chama as funções b() e c() Ao executar as funções e ver o resultado: · Na função b(), x é atribuído com x + 1, que é 2 + 1, resultando em x = 3 · Na função c(), dentro do escopo da função c(), a variável local x é 1, então a é substituído por x + 1, que é 1 + 1, resultando em a = 2. Entretanto, há um erro de sintaxe na função c(), então a chamada printf("%d\n"), a; não será executada corretamente. Ao executar o programa, será impresso: O segundo valor que deveria ser impresso não será exibido devido ao erro de sintaxe na função c() 3
Compartilhar