As questões devem ser implementadas em C.
Desenvolva um programa que leia dois valores
e
e mostre os seguintes resultados: (1)
a. Todos os números em
.
b. Todos os números ímpares em
.
c. Todos os números impares em
múltiplos de 3 .
Desenvolva um programa que leia dois valores
a. Todos os números em
b. Todos os números ímpares em
c. Todos os números impares em
Passo 1
O enunciado pede um programa em C que leia dois valores inteiros
e
com a condição
e mostre três coisas:
- (a) todos os números no intervalo
; - (b) todos os números ímpares no intervalo
; - (c) todos os números ímpares em
que sejam múltiplos de .
Informações relevantes dadas:
- Os valores de entrada são inteiros (vamos assumir tipo inteiro em C).
- O intervalo é inclusivo: ambos
e fazem parte de . - A condição
está garantida pelo enunciado (opcionalmente pode-se tratar caso contrário).
Passo 2
Escolha de método: usar laços (loops) simples. A solução mais direta e didática é percorrer os inteiros de
até
com um laço
e imprimir conforme a condição pedida. Isso é apropriado para provas e para implementação em C sem bibliotecas extras.
Explicação de “percorrer o intervalo”: significa usar um contador
que toma valores
ou seja, um laço do tipo
.
Passo 3
Como detectar números ímpares: usar o resto da divisão inteira (operador “módulo”). Um inteiro
é ímpar quando
Em C o operador é o símbolo
, então o teste em código será
.
Exemplos rápidos:
(par),
(ímpar).
Passo 4
Como detectar múltiplos de
: um inteiro
é múltiplo de
quando
Em C o teste é
.
Combinação para (c): selecionar
tal que
e
ao mesmo tempo, isto é,
ímpar e divisível por
. Em C:
.
Passo 5
Formato de saída: para ficar legível na prova e em testes automáticos, é comum imprimir cada lista em uma linha, com os números separados por espaços. Também é útil imprimir um cabeçalho curto antes de cada lista para identificar a seção (por exemplo, “Todos:”, “Impares:”, “Impares multiplos de 3:”).
Decisão de implementação fácil para provas: usar três laços separados (um para cada item). Isso simplifica a lógica e é perfeitamente eficiente para intervalos de tamanho razoável.
Passo 6
Detalhes de implementação em C:
- Incluir <stdio.h>.
- Ler
e com scanf("%d %d", &a, &b). - (Opcional) Se desejar robustez, trocar os valores caso
, mas como o enunciado garante isso não é obrigatório. Para ser amigável, o programa abaixo faz a troca caso o usuário não respeite a condição. - Usar laços
com um inteiro que vai de até . - Para imprimir uma lista sem espaço final extra, controlar se é o primeiro elemento (variável booleana/inteira
first) e imprimir um espaço antes dos elementos subsequentes.
Passo 7
Exemplo rápido de lógica (em palavras, traduzível diretamente para C):
- Ler
e . - Imprimir cabeçalho da parte (a).
- Para
indo de até : imprimir separado por espaço. - Repetir para parte (b) mas só imprimindo quando
. - Repetir para parte (c) só imprimindo quando
e .
Passo 8
Dicas de prova e atenção:
- Lembre-se que o operador de resto em C é
e funciona também com números negativos (comportamento definido em C99/C11 para inteiros, mas para provas normalmente os exemplos são não-problemáticos). Se houver negativos, os testes com e ainda distinguem pares/ímpares e múltiplos respectivamente. - Sempre usar o laço com condição
para garantir inclusão de . - Teste mentalmente com um exemplo:
, . Resultado esperado: - Todos:
- Ímpares:
- Ímpares múltiplos de 3:
- Todos:
Resposta
#include <stdio.h>
int main(void) {
int a, b;
if (scanf("%d %d", &a, &b) != 2) return 0;
int a, b;
if (scanf("%d %d", &a, &b) != 2) return 0;
/* Garantir a <= b por segurança (enunciado diz que já vale) */
if (a > b) {
int t = a; a = b; b = t;
}
/* (a) Todos os números em [a,b] */
printf("Todos os numeros em [%d,%d]:\n", a, b);
for (int n = a; n <= b; ++n) {
if (n != a) printf(" ");
printf("%d", n);
}
printf("\n");
/* (b) Todos os números ímpares em [a,b] */
printf("Numeros impares em [%d,%d]:\n", a, b);
int first = 1;
for (int n = a; n <= b; ++n) {
if (n % 2 != 0) {
if (!first) printf(" ");
printf("%d", n);
first = 0;
}
}
printf("\n");
/* \text{(c)} Todos os números ímpares em [a,b] múltiplos de 3 */
printf("Numeros impares multiplos de 3 em [%d,%d]:\n", a, b);
first = 1;
for (int n = a; n <= b; ++n) {
if ((n % 2 != 0) && (n % 3 == 0)) {
if (!first) printf(" ");
printf("%d", n);
first = 0;
}
}
printf("\n");
return 0;
}