Disciplina: Programação Estruturada
Aluno:_________________________________Turma:_________Data:___/___/
PROVA 1 –Teórica - GABARITO
1. Escreva um programa em C que leia um caractere. Se o caractere for um número,
o programa deve mostrar seu valor elevado ao cubo; caso contrário, deve mostrar o
seu código ASCII.
#include <stdio.h>
#include <math.h>
#include <conio.h>
void main()
char opcao;
int valor;
printf("\n\ndigite um caractere: ");
scanf("%c",&opcao);
if ((opcao >= ´0´) && (opcao <= ´9´)) /* poderia ter utilizado 48 e 57
{
valor = opcao - ´0´;
printf("\nvalor ao cubo e %.1lf",pow(valor,3));
}
else
printf("\ncaractere em ASCII e %d", opcao);
getch();
}
2. Descreva quais são os problemas dos trechos dos códigos abaixo.
a)
x=10;
for (y=10;y!=x;++y) printf (“%d”,y);
printf (“%d”,y);
Resposta: há uma condição falsa, o teste “y!=x” será sempre falso e nunca
haverá entrada no corpo do for
b)
main()
int erro[10], i;
for (i=0;i<100;i++) erro[i]=1;
Resposta: não há erro de compilação, mas não há verificação de limites do
vetor e atribuições são feitas para áreas de memória não reservadas
3. Escreva um programa em C que peça para o usuário entrar um número
correspondente a um mês do ano e que então apresente na tela o nome do mês, sem
utilizar o comando if. O programa deve continuar pedindo um número
correspondente até que o usuário digite um número negativo.
#include <stdio.h>
#include <conio.h>
void main()
int opcao = 0;
clrscr();
puts(" digite um numero");
scanf("%d",&opcao);
while (opcao >= 0) {
switch (opcao) {
case 1: puts("1-janeiro");
break;
case 2: puts("2-fevereiro");
break;
case 3: puts("3-marco");
break;
case 4: puts("4-abril");
break;
case 5: puts("5-maio");
break;
case 6: puts("6-junho");
break;
case 7: puts("7-julho");
break;
case 8: puts("8-agosto");
break;
case 9: puts("9-setembro");
break;
case 10:puts("10-outubro");
break;
case 11:puts("11-novembro");
break;
case 12:puts("12-dezembro");
break;
}
puts(" digite um numero");
scanf("%d",&opcao);
}
4. Responda o que se pede abaixo:
Qual é a diferença entre compilador, interpretador e montador? Diga se
C é uma linguagem compilada ou interpretada.
Para que o computador nos entenda, precisamos utilizar uma linguagem que lhe seja
compreensível. A linguagem mais próxima do entendimento do computador é a linguagem
de máquina e é dita de baixo nível. Podemos usar linguagens mais próximas da natural, ou
seja, as de alto nível. Para que linguagens de diversos tipos sejam traduzidas para a
linguagem de máquina, utilizamos um tradutor. A importância de um tradutor deve-se ao
fato de podermos aliar linguagens de alto nível (definidas segundo regras formais próprias,
como o inglês ou o português) a linguagens de baixo nível ou linguagens de máquina, que
são extremamente trabalhosas e difíceis de serem compreendidas pelo ser humano.
Tradutores que traduzem de uma linguagem de alto nível para uma linguagem de
máquina são chamados compiladores e tradutores que traduzem Assembly para uma
linguagem de máquina são chamados montadores. Uma linguagem que necessita que o
programa fonte seja sempre compilado antes de uma execução é chamada linguagem
interpretada e o seu tradutor é chamado interpretador. Um exemplo de uma linguagem
interpretada seria o BASIC, mas, hoje em dia, a maior parte das linguagens não necessita de
uma compilação para cada execução e muitos dos compiladores possuem o recurso de criar
programas executáveis, ou seja, programas que podem ser rodados diretamente, através de
uma chamada por meio do sistema operacional, sem a necessidade do compilador. C é uma
linguagem compilada.
Qual é a razão de erros na linguagem C em tempo de execução serem
pouco verificados?
A linguagem C foi feita de programadores para programadores, ou seja, pensava-se que o
programador devia ter domínio sobre os problemas de execução já que ele saberia como
funcionaria internamente a linguagem e com isso o compilador poderia executar mais
eficientemente o código, passando imediatamente o controle para o programador de modo
que ele se ativesse aos problemas específicos do seu programa.
C é uma linguagem estruturada? Explique.
C pode ser considerada uma linguagem estruturada porque segue uma seqüência lógica
feita através de comandos com tomada de decisão e definição do fluxo de controle a ser
tomado. Além disso, C possui chamadas a rotinas (funções) e retomada do fluxo de
controle após a execução dessas rotinas, o que também a caracteriza como uma linguagem
estruturada.
C é uma linguagem de alto nível ou de baixo nível? Explique.
C é uma linguagem de alto nível com recursos de uma linguagem de baixo nível, ou seja,
possui comandos próximos aos da linguagem humana (printf, if-then, for etc) e recursos das
linguagens de máquina (acesso a endereços de memória, uso de registradores, manipulação
de bits etc).
5. Escreva um programa que faça uma leitura de três valores e os mostre na tela em
ordem crescente.
#include <stdio.h>
#include <conio.h>
void main()
{
int a, b, c;
clrscr();
puts("\ndigite um numero: ");
scanf("%d",&a);
puts("\ndigite um numero: ");
scanf("%d",&b);
puts("\ndigite um numero: ");
scanf("%d",&c);
printf ("\nORDEM CRESCENTE:");
if ((a <= b) && (a <= c))
if (b <= c) printf ("\n%d %d %d", a, b, c);
else printf("\n%d %d %d", a, c, b);
else
if ((b <= a) && (b <= c))
if (a <= c) printf ("\n%d %d %d", b, a, c);
else printf ("\n%d %d %d", b, c, a);
else
if (b <= a) printf ("\n%d %d %d", c, b, a);
else printf ("\n%d %d %d", c, a, b);
getch();
}