Buscar

Engenharia de Software

Prévia do material em texto

CENTRO UNIVERSITÁRIO DO PLANALTO CENTRAL APPARECIDO DOS SANTOS 
CURSO DE GRADUAÇÃO EM ENGENHARIA DE SOFTWARE, BACHARELADO 
Aprovado pelo Conselho Superior dia 07 de dezembro de 2018, Resolução nº 16/2018 de 10 de Dezembro de 2018 
[Em vigor para os alunos que ingressaram a partir do 1° semestre letivo de 2019.1] 
 
ALGORITMOS E PROGRAMAÇÃO – Prof. Romes Heriberto 
 
GABARITO - REVISÃO 
 
1. O que será mostrado no console quando executar o código abaixo: 
 
 
a) 2, 3, 4, 5, 6 
b) 2, 4, 6 
c) 2, 4 
d) 2 
e) nenhuma das anteriores 
 
 
2. Desenvolva um programa em C que calcula quantas rotações as 
turbinas de um avião Boeing 737 farão durante um voo de Brasília, Brasil, 
 
 
 
 
 
até Sydney, Austrália. Considere que a duração do voo é de 
aproximadamente 20 horas e que as turbinas de um Boeing 737 giram a 
aproximadamente 10,000 RPM (rotações por minuto) durante o voo. 
 
RESPOSTA: 
 
#include <stdio.h> 
 
int main() { 
 // Constantes 
 int rpm = 10000; // Rotações por minuto 
 int tempo_voo_horas = 20; // Tempo de voo em horas 
 
 // Converter tempo de voo para minutos 
 int tempo_voo_minutos = tempo_voo_horas * 60; 
 
 // Calcular rotações totais durante o voo 
 long rotações_totais = rpm * tempo_voo_minutos; 
 
 // Saída 
 printf("Durante um voo de Brasília a Sydney em um Boeing 737,\n"); 
 printf("as turbinas farão aproximadamente %ld rotações.\n", 
rotações_totais); 
 
 return 0; 
} 
 
 
RESPOSTA ALTERNATIVA: 
 
#include <stdio.h> 
 
// Definição de constantes 
#define RPM 10000 // Rotações por minuto das turbinas 
 
 
 
 
 
#define TEMPO_VOO_HORAS 20 // Tempo de voo em horas 
 
int main() { 
 // Converter tempo de voo para minutos 
 int tempo_voo_minutos = TEMPO_VOO_HORAS * 60; 
 
 // Calcular rotações totais durante o voo 
 long rotações_totais = RPM * tempo_voo_minutos; 
 
 // Saída 
 printf("Durante um voo de Brasília a Sydney em um Boeing 737,\n"); 
 printf("as turbinas farão aproximadamente %ld rotações.\n", 
rotações_totais); 
 
 return 0; 
} 
 
 
 
3. Refatore o código anterior para que o usuário possa inserir o número 
de horas que o avião está em voo e o sistema retorna o número rotações da 
turbina. 
 
#include <stdio.h> 
 
// Definição de constante 
#define RPM 10000 // Rotações por minuto das turbinas 
 
int main() { 
 // Variável para armazenar o tempo de voo inserido pelo usuário 
 float tempo_voo_horas; 
 
 // Solicitar ao usuário o tempo de voo em horas 
 printf("Digite o número de horas que o avião está em voo: "); 
 
 
 
 
 
 scanf("%f", &tempo_voo_horas); 
 
 // Converter tempo de voo para minutos 
 float tempo_voo_minutos = tempo_voo_horas * 60; 
 
 // Calcular rotações totais durante o voo 
 long rotações_totais = RPM * tempo_voo_minutos; 
 
 // Saída 
 printf("Durante um voo de %.2f horas em um Boeing 737,\n", 
tempo_voo_horas); 
 printf("as turbinas farão aproximadamente %ld rotações.\n", 
rotações_totais); 
 
 return 0; 
} 
 
 
4. Sobre o conceito de definição de Funções e Procedimentos em C, 
assinale a alternativa INCORRETA: 
 
a) Funções são sub-rotinas que realizam uma tarefa específica e retornam 
um valor ao final da sua execução. Elas aceitam parâmetros como entrada 
de dados e utilizam esses parâmetros para realizar seus cálculos ou 
operações. 
b) Procedimentos são sub-rotinas que realizam uma tarefa específica, mas 
ao contrário das funções, não retornam um valor. 
c) Os procedimentos são definidos com um tipo de retorno void para indicar 
que não haverá retorno de valor. 
d) Os procedimentos não aceitam parâmetros como entrada de dados 
enquanto as funções utilizam esses parâmetros para realizar suas 
operações. 
e) Funções sempre retornam um valor e a própria definição da função 
especifica o tipo de retorno. 
 
 
 
 
 
a) Correta: Funções em C são sub-rotinas que realizam tarefas específicas 
e podem retornar um valor ao final da execução. Elas podem aceitar 
parâmetros como entrada de dados para realizar operações específicas. 
 
b) Correta: Procedimentos em C são sub-rotinas que realizam tarefas 
específicas, mas ao contrário das funções, não retornam um valor. Eles 
são definidos com o tipo de retorno void, indicando que não há retorno de 
valor. 
 
c) Correta: Os procedimentos são definidos com void como tipo de retorno 
para indicar explicitamente que não há retorno de valor. Exemplo: 
 
void imprimirMensagem() { 
 printf("Esta é uma mensagem do procedimento.\n"); 
} 
 
d) Incorreta: Procedimentos também podem aceitar parâmetros como 
entrada de dados, da mesma forma que as funções. Os parâmetros 
permitem que procedimentos e funções recebam dados para realizar suas 
operações. Exemplo de procedimento com parâmetros: 
 
void imprimirNumero(int num) { 
 printf("O número recebido é: %d\n", num); 
} 
 
Correta: Funções em C sempre retornam um valor e o tipo de retorno é 
especificado na definição da função. Exemplo de função: 
 
int somar(int a, int b) { 
 return a + b; 
} 
 
 
 
 
 
 
 
5. Crie um programa em C capaz de somar dois números inteiros 
inseridos pelo usuário no terminal, entregar o resultado e imprimir uma 
mensagem: “Cálculo realizado com sucesso!”. 
OBS: Utilize Função para calcular a soma de dois números e Procedimento 
para imprimir uma mensagem. 
 
#include <stdio.h> 
 
// Função para calcular a soma de dois números inteiros 
int somar(int a, int b) { 
 return a + b; 
} 
 
// Procedimento para imprimir uma mensagem 
void imprimirMensagem() { 
 printf("Cálculo realizado com sucesso!\n"); 
} 
 
int main() { 
 int num1, num2; 
 
 // Solicitar os números ao usuário 
 printf("Digite o primeiro número: "); 
 scanf("%d", &num1); 
 printf("Digite o segundo número: "); 
 scanf("%d", &num2); 
 
 // Chamar a função para somar os números 
 int resultado = somar(num1, num2); 
 
 // Imprimir o resultado da soma 
 printf("A soma de %d e %d é: %d\n", num1, num2, resultado); 
 
 // Chamar o procedimento para imprimir a mensagem 
 
 
 
 
 
 imprimirMensagem(); 
 
 return 0; 
} 
 
 
 
6. Desenvolva um programa em C que determine se um número inserido 
pelo usuário é primo. Um número é considerado primo se for maior que 
1 e não tiver divisores positivos além de 1 e ele mesmo. 
OBS: A biblioteca stdbool.h foi introduzida no padrão C99 da 
linguagem C para facilitar o uso de valores booleanos (true ou false). 
Antes de sua introdução, os programadores em C frequentemente 
usavam valores inteiros (int) para representar valores booleanos, com 
0 significando false e qualquer valor diferente de zero significando true. 
A inclusão de stdbool.h padronizou essa prática, tornando o código 
mais legível e semântico. A stdbool.h define um novo tipo de dado 
booleano chamado bool, com dois macros: ‘true’ e ‘false’. 
 
#include <stdio.h> 
#include <stdbool.h> // Para utilizar bool, true e false 
 
// Função para verificar se um número é primo 
bool ehPrimo(int numero) { 
 // Caso especial para números menores ou iguais a 1 
 if (numero <= 1) { 
 return false; 
 } 
 
 // Verificar divisibilidade por números de 2 até numero-1 
 for (int i = 2; i < numero; i++) { 
 if (numero % i == 0) { 
 return false; // Não é primo 
 } 
 
 
 
 
 
 } 
 
 return true; // É primo 
} 
 
int main() { 
 int num; 
 
 // Solicitar número ao usuário 
 printf("Digite um número inteiro positivo: "); 
 scanf("%d", &num); 
 
 // Verificar se o número é primo e imprimir o resultado 
 if (ehPrimo(num)) { 
 printf("%d é um número primo.\n", num); 
 } else { 
 printf("%d não é um número primo.\n", num); 
 }return 0; 
} 
 
 
7. Considere o código a seguir e julgue os itens: 
 
 
 
 
 
 
 
a) Se ‘qtde_iteracoes’ for menor que 30, o loop imprimirá todos os números 
pares até ‘qtde_iteracoes’. 
b) O comando ‘continue’ (linha 14) passa para a próxima iteração do loop 
while, pulando as instruções subsequentes. 
c) A saída do terminal, caso o usuário insira o algarismo ‘5’ será: “Loop: 1 - 
Loop: 3” 
d) break e continue possuem a mesma representatividade e apresentam 
resultados iguais, quando usadas. 
e) O loop while incrementa ‘cont’ de 1 em 1 até qtde_iteracoes, mesmo em 
números maiores que 30. 
 
8. Analise o código a seguir e escolha a alternativa correta sobre o 
funcionamento do programa. 
 
 
 
 
 
 
a) O programa solicitará a kilometragem do veículo e, se for 7000, 
imprimirá "Revisão dos pneus". 
b) Se o usuário digitar 15000, o programa imprimirá "Troca do filtro de ar". 
c) Caso a kilometragem digitada pelo usuário não seja 5000, 10000, 15000, 
20000 ou 30000, o programa imprimirá "Kilometragem inválida". 
d) O programa solicitará a kilometragem do veículo e, se for 12000, 
imprimirá "Alinhamento e balanceamento". 
 
e) Se o usuário digitar 25000, o programa imprimirá "Revisão completa". 
 
 
9. Considere o código a seguir: 
#include <stdio.h> 
 
// Função para calcular o IMC 
float calcularIMC(float peso, float altura) { 
 
 
 
 
 
 return peso / (altura * altura); 
} 
 
// Função para sugerir a categoria do IMC 
void categoriaIMC(float imc) { 
 int imc_int = (int)imc; // Convertendo o IMC para inteiro para usar no 
switch-case 
 switch (imc_int) { 
 case 0 ... 18: 
 printf("Abaixo do peso \n"); 
 break; 
 case 19 ... 24: 
 printf("Peso normal \n"); 
 break; 
 case 25 ... 29: 
 printf("Sobrepeso \n"); 
 break; 
 case 30 ... 34: 
 printf("Obesidade grau I \n"); 
 break; 
 case 35 ... 39: 
 printf("Obesidade grau II (severa) \n"); 
 break; 
 default: 
 if (imc_int < 0) { 
 printf("IMC inválido. \n"); 
 } else { 
 printf("Obesidade grau III (mórbida) \n"); 
 } 
 break; 
 } 
} 
 
int main() { 
 
 
 
 
 
 float peso, altura, imc; 
 
 printf("Digite o seu peso (kg): \n"); 
 scanf("%f", &peso); // Entrada de dados para o peso 
 
 printf("Digite a sua altura (m): \n"); 
 scanf("%f", &altura); // Entrada de dados para a altura 
 
 imc = calcularIMC(peso, altura); // Calcula o IMC 
 printf("Seu IMC é: %.2f\n", imc); 
 
 categoriaIMC(imc); // Sugere a categoria do IMC 
 
 return 0; 
} 
 
Assinale a alternativa correta: 
A. O programa solicitará o peso e a altura do usuário, e se o IMC for 22, 
imprimirá "Sobrepeso". 
B. Se o usuário tiver um IMC de 28, o programa imprimirá "Obesidade grau 
I". 
C. Caso o IMC do usuário seja 17, o programa imprimirá "Abaixo do peso". 
 
D. O programa solicitará o peso e a altura do usuário, e se o IMC for 32, 
imprimirá "Obesidade grau II (severa)". 
E. Se o usuário tiver um IMC de 36, o programa imprimirá "Peso normal". 
 
10. Analise o código a seguir e escolha a alternativa correta sobre o 
funcionamento do programa que preenche e imprime uma matriz 3x3. 
 
#include <stdio.h> 
 
int main() { 
 int matriz[3][3]; 
 
 
 
 
 
 int i, j; 
 
 // Preenchendo a matriz com valores fornecidos pelo usuário 
 for (i = 0; i < 3; i++) { 
 for (j = 0; j < 3; j++) { 
 printf("Digite o valor para matriz[%d][%d]: ", i, j); 
 scanf("%d", &matriz[i][j]); 
 } 
 } 
 
 // Imprimindo a matriz 
 printf("A matriz inserida é:\n"); 
 for (i = 0; i < 3; i++) { 
 for (j = 0; j < 3; j++) { 
 printf("%d ", matriz[i][j]); 
 } 
 printf("\n"); 
 } 
 
 return 0; 
} 
 
 
a) O programa solicitará 9 valores do usuário e os armazenará em uma 
matriz 3x3, imprimindo a matriz resultante. 
 
b) O programa preencherá a matriz automaticamente com valores de 1 a 9 
e os imprimirá. 
 
c). O programa solicitará 3 valores do usuário, preencherá a primeira linha 
da matriz com esses valores e imprimirá apenas essa linha. 
 
d). O programa imprimirá a matriz sem solicitar valores do usuário, usando 
valores padrão de 0 a 8. 
 
 
 
 
 
 
e). O programa solicitará 9 valores do usuário e os armazenará em uma 
matriz 3x3, mas imprimirá a matriz transposta. 
 
 
 
11. Analise o código a seguir e escolha a alternativa correta sobre 
seu funcionamento. 
#include <stdio.h> 
 
int main() { 
 int vetor[5] = {1, 2, 3, 4, 5}; 
 int i; 
 
 for (i = 0; i < 5; i++) { 
 printf("%d ", vetor[i]); 
 } 
 
 return 0; 
} 
 
Assinale a alternativa correta: 
a) O programa imprimirá 1 1 1 1 1. 
b) O programa imprimirá 1 2 3 4 5. 
c) O programa imprimirá 5 4 3 2 1. 
d) O programa causará um erro de compilação. 
e) O programa imprimirá 0 0 0 0 0. 
 
12. Analise o código a seguir e escolha a alternativa correta sobre 
seu funcionamento. 
#include <stdio.h> 
 
int main() { 
 int matriz[2][2] = {{1, 2}, {3, 4}}; 
 
 
 
 
 
 int i, j; 
 
 for (i = 0; i < 2; i++) { 
 for (j = 0; j < 2; j++) { 
 printf("%d ", matriz[i][j]); 
 } 
 printf("\n"); 
 } 
 
 return 0; 
} 
 
 
Assinale a alternativa correta: 
a) O programa imprimirá 1 2 3 4 em uma linha. 
b) O programa imprimirá 1 2 em uma linha e 3 4 em outra linha. 
c) O programa imprimirá 4 3 2 1 em uma linha. 
d) O programa imprimirá 2 1 em uma linha e 4 3 em outra linha. 
e) O programa causará um erro de compilação. 
 
13. Analise o código a seguir e escolha a alternativa correta sobre 
seu funcionamento. 
 
#include <stdio.h> 
 
int main() { 
 int nota = 3; 
 
 switch (nota) { 
 case 5: 
 printf("Aluno EM RECUPERACAO\n"); 
 break; 
 case 3: 
 printf("Aluno REPROVADO\n"); 
 
 
 
 
 
 break; 
 case 7: 
 printf("Aluno APROVADO\n"); 
 break; 
 default: 
 printf("Nota invalida\n"); 
 } 
 
 return 0; 
} 
 
Assinale a alternativa correta: 
a) O programa imprimirá Aluno EM RECUPERACAO. 
b) O programa imprimirá Nota invalida. 
c) O programa imprimirá Aluno REPROVADO. 
d) O programa imprimirá Aluno APROVADO. 
e) O programa causará um erro de compilação. 
 
14. Analise o código a seguir e escolha a alternativa correta sobre 
seu funcionamento. 
 
 
 
#include <stdio.h> 
 
int main() { 
 int vetor[10]; 
 printf("O tamanho do vetor em bytes é: %lu\n", 
sizeof(vetor)); 
 
 return 0; 
} 
 
Assinale a alternativa correta: 
 
 
 
 
 
a) O programa imprimirá O tamanho do vetor em bytes é: 10. 
b) O programa imprimirá O tamanho do vetor em bytes é: 20. 
c) O programa imprimirá O tamanho do vetor em bytes é: 40. 
d) O programa imprimirá O tamanho do vetor em bytes é: 80. 
e) Nenhuma das anteriores 
 
15. Analise o código a seguir e escolha a alternativa correta sobre 
seu funcionamento. 
#include <stdio.h> 
#define PI 3.14 
 
int main() { 
 float raio = 5.0; 
 float area = PI * raio * raio; 
 printf("A área do círculo é: %.2f\n", area); 
 
 return 0; 
} 
 
 
 
Assinale a alternativa correta: 
a) O programa imprimirá A área do círculo é: 25.00. 
b) O programa imprimirá A área do círculo é: 31.40. 
c) O programa imprimirá A área do círculo é: 7.850. 
d) O programa imprimirá A área do círculo é: 314.00. 
e) Nenhuma das anteriores. 
 
QUESTÃO BÔNUUS: 
 
Desenvolva um programa em C em que o usuário insere quantos números 
quiserpara um vetor e o sistema retorna o vetor e informa o número de 
elementos que o compõem. 
 
 
 
 
 
 
#include <stdio.h> 
#include <stdlib.h> // Para usar malloc e realloc 
 
int main() { 
 int *vetor = NULL; // Inicializa o ponteiro do vetor como NULL 
 int tamanho = 0; // Contador para o tamanho atual do vetor 
 int capacidade = 0; // Contador para a capacidade máxima do vetor 
 int num; // Variável para armazenar o número inserido pelo 
usuário 
 
 printf("Insira números para o vetor (digite 0 para terminar):\n"); 
 
 // Loop para ler os números inseridos pelo usuário 
 do { 
 printf("Digite um número (ou 0 para terminar): "); 
 scanf("%d", &num); 
 
 if (num != 0) { 
 // Aumenta a capacidade se necessário 
 if (tamanho >= capacidade) { 
 capacidade += 10; // Aumenta a capacidade em blocos de 10 
elementos 
 vetor = (int *)realloc(vetor, capacidade * sizeof(int)); // Realoca 
o vetor com a nova capacidade 
 if (vetor == NULL) { 
 printf("Erro ao alocar memória!\n"); 
 return 1; // Encerra o programa em caso de erro na alocação 
 } 
 } 
 
 vetor[tamanho] = num; // Armazena o número no vetor 
 tamanho++; // Incrementa o tamanho do vetor 
 } 
 } while (num != 0); 
 
 
 
 
 
 
 // Exibe os elementos do vetor e o número de elementos 
 printf("O vetor contém os seguintes números:\n"); 
 for (int i = 0; i < tamanho; i++) { 
 printf("%d ", vetor[i]); 
 } 
 printf("\nNúmero de elementos no vetor: %d\n", tamanho); 
 
 // Libera a memória alocada para o vetor 
 free(vetor); 
 
 return 0; 
} 
 
Crie um programa em C onde o aluno deve definir uma estrutura Produto 
com os campos codigo (int), nome (array de char com tamanho máximo de 
50 caracteres), e preco (float). Em seguida, o aluno deve declarar um vetor 
produtos de tamanho 10 utilizando a estrutura Produto. Utilize o operador 
sizeof para calcular e exibir o tamanho em bytes de um único elemento da 
estrutura Produto, bem como o número de elementos no vetor produtos. 
 
#include <stdio.h> 
 
// Definição da estrutura Produto 
struct Produto { 
 int codigo; 
 char nome[50]; 
 float preco; 
}; 
 
int main() { 
 struct Produto produtos[10]; // Vetor de 10 elementos do tipo Produto 
 int tamanho_produto = sizeof(struct Produto); // Tamanho de um 
elemento da estrutura Produto 
 
 
 
 
 
 int num_elementos = sizeof(produtos) / sizeof(struct Produto); // Número 
de elementos no vetor produtos 
 
 printf("Tamanho de um elemento da estrutura Produto: %d bytes\n", 
tamanho_produto); 
 printf("Número de elementos no vetor 'produtos': %d\n", 
num_elementos); 
 
 return 0; 
}

Mais conteúdos dessa disciplina