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; }