Linguagem C_Exercicios Propostos Solucao_3

Page 1


Linguagem C

25.ª Edição Atualizada e Aumentada

FCA Editora (c) 2025

3

EXERCÍCIOS PROPOSTOS – SOLUÇÃO

3.1 As variáveis do tipo float ou double podem conter erros de arredondamento, devido ao conjunto de operações a que poderão ter sido sujeitas e devido ao formato usado para a sua representação em memória. Pode acontecer que uma variável contenha um valor próximo de 0.0 (por exemplo, 0.00000001 ), o que representa, então, verdade, e não falso, como seria esperado pelo programador.

3.2

a) Verdade.

b) Verdade. É a própria estrutura da linguagem que o determina.

c) Falso.

d) Verdade. Mesmo um bloco é considerado uma única instrução, apesar de poder conter várias instruções no seu interior.

e) Falso. O programador organiza o código como bem entender.

f) Verdade. Qualquer delas tem associado um valor que pode ser analisado e avaliado como valor lógico.

3.3 A instrução if-else contém apenas uma instrução a seguir ao if. O compilador verifica se, a seguir a essa instrução, aparece a palavra else. Caso não apareça, é porque o if terminou (isto é, não tem else ) e a próxima instrução não pertence ao if. O mesmo se passa em relação ao else

3.4 Sim, nada o impede.

3.5 Não.

3.6 Sim. O extrato da esquerda verifica se x é igual a zero. Caso seja, escreve a string XXX , senão, escreve YYY. O extrato da direita não faz um teste, mas uma atribuição do valor zero a x , alterando o valor da variável. Como em C qualquer atribuição devolve o valor atribuído, o valor da atribuição é zero, sendo este o valor que vai ser avaliado pela instrução if. Como em C zero representa falso, o programa vai sempre escrever YYY no ecrã, independentemente do valor presente inicialmente na variável x. Acresce o facto de a variável x ser alterada e ficar com ovalor zero.

3.7 d) Leitura do código.

3.8 c) Mais legível do que outro que não esteja indentado.

3.9 d) Um compilador não faz qualquer tipo de verificação da indentação.

3.10 Vantagens:

■ A instrução if-else permite o teste de condições que não estão limitadas a valores constantes;

■ A instrução if-else permite a verificação de mais de uma condição: if (x>10 && x<100)

Desvantagens:

■ Quando o número de condições é muito elevado, if-else encadeados podem tornar o código particularmente difícil de ler;

■ A instrução switch permite processar diversos case, controlando-os com a instrução break

3.11 Não se pode utilizar a instrução break num if. A instrução break pode apenas ser usada no switch (e em ciclos, como verá no Capítulo 4).

3.12

3.13

a) Falso.

b) Verdade.

c) Verdade. /* Notar que é uma atribuição */

d) Falso. /* Notar que é uma atribuição */

a) Falso.

b) Verdade.

c) Falso, pois o resultado da expressão é zero.

d) Verdade.

3.14 if (x == 0 && y <= 32) printf("Sucesso!!!"); 3.15

3.15.1 break dentro de um if

3.15.2 Em C, if não tem then

3.15.3 switch não tem else, mas default . 3.16

1: #include <stdio.h> 2: /* Versão 1 */ 3: int main(void)

4: { 5: int n;

6: printf("Introd. um nº: "); scanf("%d", &n);

7: 8: if (n==0)

9: printf("Número é igual a zero\n"); 10: else

11: printf("Número não é igual a zero\n");

12:

13: return 0; 14: } PROG0326A.C

1: #include <stdio.h> 2: /* Versão 2 */ 3: int main(void)

3.17

4: { 5: int n;

6: printf("Introd. um nº: "); scanf("%d", &n);

7:

8: if (!n)

9: printf("Número é igual a zero\n"); 10: else

11: printf("Número não é igual a zero\n"); 12:

13: return 0; 14: }

PROG0326B.C

1: #include <stdio.h>

2: /* Versão 3 */

3: int main(void)

4: {

5: int n;

6: printf("Introd. um nº: "); scanf("%d", &n);

7:

8: if (n!=0)

9: printf("Número não é igual a zero\n"); 10: else

11: printf("Número é igual a zero\n"); 12:

13: return 0; 14: }

PROG0326C.C

1: #include <stdio.h>

2: /* Versão 4 */

3: int main(void)

4: { 5: int n;

6: printf("Introd. um nº: "); scanf("%d", &n);

7:

8: if (n)

9: printf("Número não é igual a zero\n"); 10: else

11: printf("Número é igual a zero\n"); 12: 13: return 0; 14: }

PROG0326D.C

1: #include <stdio.h> 2: int main(void)

3: { 4: int n; 5: printf("Introd. um nº: ");scanf("%d", &n); 6: switch (n)

7: { 8: case 0: printf("Número é igual a zero\n");

9: break; 10: default: printf("Número não é igual a zero\n"); 11: }

12: return 0; 13: }

PROG0327.C

3.18

3.19

1: #include <stdio.h>

2: int main(void)

3: { 4: int ano;

5: printf("Introd. um anoº: ");scanf("%d", &ano);

6: if (ano%4 == 0)

7: printf("Ano é Bissexto\n"); 8: else

9: printf("Ano não é Bissexto\n"); 10: return 0; 11: }

a)

b)

1: #include <stdio.h>

2: int main(void)

3: { 4: int mes, n_dias;

5: printf("Introd. o nº do mes 1..12: "); 6: scanf("%d", &mes);

7:

8: if (mes == 2)

9: n_dias = 28; 10: else

11: if (mes == 4 || mes == 6 || mes == 9 || mes == 11) 12: n_dias = 30; 13: else

14: n_dias = 31; 15:

16: printf("O mes %d tem %d dias\n", mes, n_dias); 17: return 0; 18: }

PROG0329A.C

1: #include <stdio.h>

2: int main(void)

3: { 4: int mes, n_dias; 5: printf("Introd. o nº do mes 1..12: "); 6: scanf("%d", &mes);

7: 8: switch(mes)

9: { 10: case 2: n_dias = 28; 11: break; 12: case 4: 13: case 6: 14: case 9: 15: case 11: n_dias = 30; 16: break; 17: default: n_dias = 31; 18: }

19:

20: printf("O mes %d tem %d dias\n", mes, n_dias); 21: return 0; 22: }

PROG0329B.C

PROG0328.C

c)

1: #include <stdio.h>

2: int main(void)

3: { 4: int mes, n_dias=0; 5: printf("Introd. o nº do mes 1..12: "); 6: scanf("%d", &mes); 7: 8: switch(mes)

9: { 10: case 1: /* 31 dias */ 11: case 3: 12: case 5: 13: case 7: 14: case 8: 15: case 10: 16: case 12: n_dias = n_dias + 1; 17: 18: case 4: /* 30 dias */ 19: case 6: 20: case 9:

21: case 11: n_dias = n_dias + 2; 22:

23: default: n_dias = n_dias + 28; 24: }

25:

26: printf("O mes %d tem %d dias\n", mes, n_dias); 27: return 0; 28: }

PROG0329C.C

NOTA

Todos os meses têm, pelo menos, 28 dias. No entanto, alguns têm de apresentar 30 dias (2 + 28) e outros 31 dias (1 + 2 + 28).

1: #include <stdio.h> 2:

3: int main(void)

4: { 5: int dia, mes, ano; 6: printf("Data: dd mm aaaa: "); 7: scanf("%d %d %d", &dia, &mes, &ano); 8: switch(mes)

9: { 10: case 2: if (dia >=1 && dia <= 28 + (ano%4==0)) 11: printf("Data Valida"); 12: else

13: printf("Data Invalida"); 14: break; 15: case 4: 16: case 6: 17: case 9:

18: case 11: if (dia >=1 && dia <= 30)

19: printf("Data Valida"); 20: else

21: printf("Data Invalida");

22: break;

23: default: if (mes <1 || mes > 12)

24: printf("Data Invalida");

25: else

26: if (dia >=1 && dia <= 31)

27: printf("Data Valida");

28: else

29: printf("Data Invalida");

30: }

31:

32: return 0;

33: }

PROG0330.C

De notar que a expressão ano%4==0 devolve o valor 1 ou 0 , consoante o ano seja múltiplo de 4 ou não. Este valor é, então, adicionado a 28 , de modo a obter o valor 29 ou 28 , conforme o ano seja bissexto ou não.

Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.