Você está na página 1de 4

Captulo 1

INTRODUO LINGUAGEM DE PROGRAMAO C


1.10 Exerccios de Reviso
1. Quais dos seguintes nomes no podem ser utilizados como identificadores em C? Explique por que.
(a) var (g) structure (b) VAR (h) double (c) int (i) VOID (d) $a (j) void e) a$ (l) struct (f) _10 (m) default

2. Seja a uma varivel do tipo char. Suponha que o cdigo de caracteres ASCII seja utilizado. Que valor (inteiro decimal) ser armazenado em a aps a execuo de cada uma das seguintes instrues:
(a) a = 'G' (b) a = 9 (c) a = '9' (d) a = '1' + '9'

(Sugesto: Consulte uma tabela do cdigo ASCII.) 3. Diga de que tipo so as seguintes constantes numricas:
(a) 10 (b) 3.14 (c) 2.5f (d) 1.6e10L (e) 0L (f) 0

4. Descreva as propriedades de precedncia e associatividade de operadores. 5. Assuma a existncia das seguintes definies de variveis num programa em C:
int float m = 5, n = 4; x =2.5, y = 1.0;

Quais sero os valores das seguintes expresses? (a) m + n + x - y (b) m + x - (n + y) (c) x - y + m + y / n (d) m += n + x - y (e) m /= x*n + y (f) n %= y + m (g) x += y -= m
1

Captulo 1

Introduo Linguagem de Programao C

6. Explique a diferena entre os operadores prefixo e sufixo de incremento. 7. O que efeito colateral de um operador? 8. Quais so os operadores da linguagem C que possuem ordem de avaliao de operandos definida? 9. Dadas as seguintes iniciaes:
int j = 0, m = 1, n = -1;

Quais sero os resultados de avaliao das seguintes expresses em C? (a) m++ - --j (b) m += ++j*2 (c) m * m++ (O resultado desta expresso dependente do compilador; apresente os dois resultados possveis.) 10. Explique por que a instruo abaixo no portvel (apesar de ser aceitvel em C):
j = (i + 1) * (i = 1)

11. Considere o seguinte trecho de programa:


int i, j = 4;

i = j * j++;

Mostre que, se j for avaliado primeiro, a expresso j * j++ resultar em 16 e, se j++ for avaliado primeiro, o resultado ser 20. 12. Aplique parnteses nas expresses abaixo que indiquem o modo como um compilador de C executaria as mesmas: (a) a = b*c == 2 (b) a = b && x != y (c) a = b += c + a 13. A instruo a seguir legal em C? Explique.
(1 + 2) * 4;

14. Descreva a sintaxe (i.e., o formato) e a semntica (i.e., o funcionamento) das seguintes estruturas de controle de C:

Captulo 1

Introduo Linguagem de Programao C

(a) while; (b) do-while; (c) for. 15. (a) Quantas vezes o corpo do lao while do exemplo a seguir ser executado? (b) Quais sero os valores de x e y imediatamente aps a sada desse lao?
long x = 0L, y = 10L;

while (x < y) { x++; y--; }

16. (a) Existe alguma diferena entre a instruo while do exerccio anterior e instruo do-while a seguir? (b) Quantas vezes o corpo do lao do-while ser executado? (c) Quais sero os valores de x e y imediatamente aps a sada desse lao?
long x = 0L, y = 10L;

do { x++; y--; } while (x < y);

17. Na instruo for a seguir, a expresso j++ pode ser substitudo por ++j sem alterar a funcionalidade da instruo? Por que?
for (j = 1; j <= 10; j++) { /* Seqncia de instrues a ser */ /* executada 10 vezes repetidamente */ }

18. Para que serve o uso de instrues break dentro de uma instruo switch? 19. (a) Compare as instrues de controle break e continue. (b) Dentro de que estruturas de controle estas instrues podem ser includas? 20. (a) Descreva o funcionamento da instruo goto. (b) Por que usualmente o uso de goto no incentivado? 21. Ambos os trechos de programa a seguir contm erros:

Captulo 1

Introduo Linguagem de Programao C

Trecho de programa 1
int x = 0; if (x = 10) y += 1;

Trecho de programa 2
int x = 0; if (10 = x) y += 1;

Por que o compilador indica uma ocorrncia de erro no trecho de programa 2, mas o mesmo no ocorre com o trecho de programa 1? 22. Reescreva o seguinte trecho de programa sem utilizar goto, continue, ou break:
int char num = 0; c;

c = getchar(); while (1){ if (c == '\n') break; if (isdigit(c)) continue; if (c == 'a') goto somaNumero; proximoCaracter: c = getchar(); goto finalDoLaco; somaNumero: num++; goto proximoCaracter; finalDoLaco: ; } /* Final do while */

23. Suponha que soma e x sejam variveis do tipo int iniciadas com 0. A instruo a seguir portvel? Explique.
soma = (x = 2) + (++x);

24. Suponha que soma e x sejam variveis do tipo int iniciadas com 0. A instruo a seguir portvel? Explique.
soma = (x = 2, ++x);