• Matéria: Informática
  • Autor: joaosilva17490
  • Perguntado 6 anos atrás

Preciso de ajuda nesse exercício:
Escreva um programa em C que leia números inteiros no intervalo [0-50] e os armazene em um vetor com 10 posições. Preencha um segundo vetor apenas com os números ímpares do primeiro vetor. Imprima os dois vetores, 2 elementos por linha(um de cada vetor).
Resposta:
#include stdio.h>
#include stdlib.h>
int main()
{
int h, i = 0, j = 0, num[10], impar[10];
printf("Digite 10 números inteiros no intervalo de 0 a 50:\n");
for (h = 0; h < 9; h++)
{
scanf(" %d ", &num [h]);
if (num [h] % 2 == 0);
else impar [j++] = num [h];
}
printf("\nNúmeros digitados: ");
for (h = 0; h < 10; h++)
printf(" %d ", num [h]);
printf("\nNúmeros impares digitados: ");
for(i = 0; i < j ; i++)
printf(" %d ", impar [i]);
}
PS: Na a hora de dar os números digitados em printf("\nNúmeros digitados: "); todos os números com 0 não aparecem, por exemplo: se a minha sequência é 1, 2, 3, 4, 5, 6, 7, 8, 9 e 10; em printf("\nNúmeros digitados: "); a resposta dada é: 1, 2, 3, 4, 5, 6, 7, 8, 9 e 0. gostaria de ajuda pra resolver isso.

Respostas

respondido por: fqpl059
0

Idetifiquei alguns erros na sua resolução, então irei citar alguns deles abaixo e deixar um código que atenda a todos os critérios da questão.

ERROS.

Após uma análise do seu código, precebi um erro de lógica em:

\mathtt{for (h = 0; h &lt; 9; h++)}

O código deveria estar executando apenas 9 vezes, mas nos testes ele executa 10 vezes. O problema foi causado por:

\mathtt{scanf("~\%d~",~\&amp;num~[h]);}

Esses espaços em " %d " e &num [h] devem ser removidos:

\mathtt{scanf("\%d",~\&amp;num[h]);}

Visto que o loop executava apenas 9 vezes, o último valor não era atualizado, sendo impresso 0.

ALGORITMO.

Abaixo você encontra um código otimizado e que atende a todos os requisitos da questão.

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main(void) {
  4. // declaramos as variáveis
  5. int c, num;
  6. int impares = 0;
  7. int nums[10], nums_imp[10];
  8. // recebemos os valores
  9. printf("Informe 10 números entre 0 e 50.\n");
  10. for(c=0; c<10; c++){
  11.  while(1){
  12.   printf("%d de 10: ", c+1);
  13.   scanf("%d", &num);
  14.   // Verifica se o valor está no intervalo
  15.   if(num > 0 && num <= 50){
  16.    break; // sai do while
  17.   }else{
  18.    printf("O valor está fora do itervalo! Tente novamente.\n");
  19.   }
  20.  }
  21.  // adiciona o valor no vetor
  22.  nums[c] = num;
  23.  // verificamos se o número é ímpar
  24.  if(num % 2 != 0){
  25.   nums_imp[impares++] = num;
  26.  }
  27. }
  28. // Imprimimos os dois vetores
  29. printf("\nOs resultados foram:\n");
  30. for(c=0; c<10; c++){
  31.  // verifica se há números ímpares
  32.  if(c < impares){
  33.   printf("%d, %d\n", nums[c], nums_imp[c]);
  34.  }else{
  35.   // mostra apenas o primeiro vetor
  36.   printf("%d\n", nums[c]);
  37.  }
  38.  
  39. }
  40. return 0;
  41. }

Veja mais questões sobre Linguagem C:

  • https://brainly.com.br/tarefa/20289505
  • https://brainly.com.br/tarefa/20250802
  • https://brainly.com.br/tarefa/20265822
Anexos:
Perguntas similares