Simulado Prova C

Questão 1 — Condicionais múltiplas + laço

Escreva um programa que leia um número inteiro N (N ≥ 1).
Usando um laço, imprima apenas os números de 1 até N que:

  • sejam múltiplos de 3,
  • não sejam múltiplos de 4,
  • estejam entre 10 e 200 (inclusive).
    Se nenhum número atender aos critérios, imprimir:
    Nenhum número atende aos critérios.

#include <stdio.h>

int atende_criterios(int num) {
    return (num % 3 == 0) &&
           (num % 4 != 0) &&
           (num >= 10) &&
           (num <= 200);
}

void imprimir_numeros_validos(int N) {
    int i = 1;
    int encontrado = 0;  // flag para saber se achou pelo menos um

    while (i <= N) {
        if (atende_criterios(i)) {
            if (encontrado) {
                printf(" ");
            }
            printf("\n%d", i);
            encontrado = 1;
        }
        i++;
    }

    if (!encontrado) {
        printf("Nenhum numero atende aos criterios.");
    }

}

int main() {
    int N;
    scanf("%d", &N);
    imprimir_numeros_validos(N);
    return 0;
}

Questão 2 — Condicionais + laço + soma condicional

Faça um programa que leia números inteiros enquanto o valor digitado for diferente de -1.
Usando um laço while, some apenas os números ímpares e positivos.
Ao digitar -1, o programa deve exibir a soma final.


#include <stdio.h>

// Verifica se o número é ímpar e positivo
int eh_impar_positivo(int num) {
    return (num > 0) && (num % 2 == 1);
}

int ler_e_somar() {
    int soma = 0;
    int valor;

    scanf("%d", &valor);
    while (valor != -1) {
        if (eh_impar_positivo(valor)) {
            soma += valor;
        }
        scanf("%d", &valor);
    }

    return soma;
}

int main() {
    int resultado = ler_e_somar();
    printf("Soma dos impares positivos = %d\n", resultado);
    return 0;
}

Questão 3 — Vetor + laços + análise numérica

Leia um inteiro T (T ≥ 5) e depois leia T valores inteiros em um vetor.
O programa deve determinar:

  • o maior valor,
  • o menor valor,
  • quantos valores estão acima da média do vetor

#include <stdio.h>

#define MAX_T 1000 

// Lê T valores e armazena no vetor
void ler_vetor(int vetor[], int T) {
    int i = 0;
    while (i < T) {
        scanf("%d", &vetor[i]);
        i++;
    }
}

// Retorna o maior valor do vetor
int maior_valor(int vetor[], int T) {
    int maior = vetor[0];
    int i = 1;
    while (i < T) {
        if (vetor[i] > maior) {
            maior = vetor[i];
        }
        i++;
    }
    return maior;
}

// Retorna o menor valor do vetor
int menor_valor(int vetor[], int T) {
    int menor = vetor[0];
    int i = 1;
    while (i < T) {
        if (vetor[i] < menor) {
            menor = vetor[i];
        }
        i++;
    }
    return menor;
}

// Calcula a média dos valores no vetor
double calcular_media(int vetor[], int T) {
    int soma = 0;
    int i = 0;
    while (i < T) {
        soma += vetor[i];
        i++;
    }
    return (double)soma / T;
}

// Conta quantos valores estão acima da média
int contar_acima_da_media(int vetor[], int T, double media) {
    int cont = 0;
    int i = 0;
    while (i < T) {
        if (vetor[i] > media) {
            cont++;
        }
        i++;
    }
    return cont;
}

int main() {
    int T;
    scanf("%d", &T);

    int vetor[MAX_T];
    ler_vetor(vetor, T);

    int maior = maior_valor(vetor, T);
    int menor = menor_valor(vetor, T);
    double media = calcular_media(vetor, T);
    int acima = contar_acima_da_media(vetor, T, media);

    printf("Maior valor = %d\n", maior);
    printf("Menor valor = %d\n", menor);
    printf("Acima da media = %d\n", acima);

    return 0;
}

Questão 4 — Vetor + laço + condicional composta

Leia um vetor de 12 números inteiros representando vendas mensais.
Com um laço, conte:

  • quantos meses tiveram vendas acima de 500,
  • quantos ficaram abaixo de 100,
  • quantos ficaram entre 200 e 300 (inclusive).

#include <stdio.h>

#define TAM 12

void ler_vendas(int vendas[]) {
    int i = 0;
    while (i < TAM) {
        scanf("%d", &vendas[i]);
        i++;
    }
}

int contar_acima_500(int vendas[]) {
    int cont = 0, i = 0;
    while (i < TAM) {
        if (vendas[i] > 500) cont++;
        i++;
    }
    return cont;
}

int contar_abaixo_100(int vendas[]) {
    int cont = 0, i = 0;
    while (i < TAM) {
        if (vendas[i] < 100) cont++;
        i++;
    }
    return cont;
}

int contar_entre_200_e_300(int vendas[]) {
    int cont = 0, i = 0;
    while (i < TAM) {
        if (vendas[i] >= 200 && vendas[i] <= 300) cont++;
        i++;
    }
    return cont;
}

int main() {
    int vendas[TAM];
    ler_vendas(vendas);

    printf("Acima de 500 = %d\n", contar_acima_500(vendas));
    printf("Abaixo de 100 = %d\n", contar_abaixo_100(vendas));
    printf("Entre 200 e 300 = %d\n", contar_entre_200_e_300(vendas));

    return 0;
}

Questão 5 — Condicionais + laço do…while + cálculo cumulativo

Leia números inteiros repetidamente em um laço do…while.
O programa deve parar quando for digitado um número múltiplo de 10.
Durante o laço, some apenas números que:

  • sejam positivos,
  • sejam menores que 100,
  • não sejam múltiplos de 4.
    Ao terminar, imprimir a soma final.

#include <stdio.h>
// Verifica se o número deve ser somado
int deve_somar(int num) {
    return (num > 0) &&          // positivo
           (num < 100) &&        // menor que 100
           (num % 4 != 0);       // não múltiplo de 4
}

int main() {
    int soma = 0;
    int numero;

    do {
        scanf("%d", &numero);

        // Só soma se NÃO for múltiplo de 10 (pois se for, é o sinal de parada)
        if (numero % 10 != 0) {
            if (deve_somar(numero)) {
                soma += numero;
            }
        }
    } while (numero % 10 != 0);  // repete enquanto NÃO for múltiplo de 10

    printf("Soma final = %d\n", soma);
    return 0;
}
Rolar para cima