ExerciciosCap5

2620 palavras 11 páginas
Resolução dos Exercícios do Capítulo V
1. Um programa deve ler uma sequência de números inteiros e imprimí-los. O programa deve ser interrompido quando o número lido for zero. Implemente três versões desse programa em C usando respectivamente os comandos iterativos com pré-teste, com pós-teste e um comando de escape. Discuta as soluções apresentadas em termos de redigibilidade e eficiência, indicando a melhor solução apresentada. Pré-Teste

Pós-Teste

main() { main() { int n; int n; scanf ("%d", &n); do { while (n != 0) { scanf ("%d", &n); printf ("n: %d\n", n); if (n) scanf ("%d", &n); printf ("n: %d\n", n);
}
} while (n != 0);
}
}

Comando de Escape main() { int n; for (;;) { scanf ("%d", &n); if ( n == 0) break; printf ("n: %d\n", n);
}
}

A melhor solução em termos de redigibilidade e eficiência é a que utiliza o comando de escape. Ela só faz uma comparação e exige a leitura do valor em apenas um ponto do programa. A solução com pré-teste é também eficiente, embora exija leitura do valor em dois pontos do programa. Portanto, é menos redigível. A solução com pósteste é menos eficiente e redigível pois requer a realização de dois testes em dois pontos do programa a cada passo da iteração. Note que se poderia fazer uma solução com pós-teste que fosse tão eficiente como as demais. Bastaria colocar uma leitura e um teste antes da entrada na iteração. Essa solução não foi apresentada porque corresponde a um comando de pré-teste.
2. Descreva o que ocorre em cada trecho que culmina com impressões no seguinte programa em C, justificando suas afirmações.
#include <stdio.h> void main () { int a, b, c; b = c = 10; a = b++ + b++; //(1) printf("%d\n", a); printf("%d\n", b); a= ++c + ++c; //(2) printf("%d\n", a); printf("%d\n", c); b = 10; a = b++ + b; //(3) printf("%d\n", a); printf("%d\n", b);

1

a = 10; b = 5; if (a>b || ++b>5) //(4) printf("%d\n", b); a = 1; b = 5; if (a>b || ++b>5) //(5) printf("%d\n", b);
}
Esse programa em C é portável? O que ocorreria se um programa

Relacionados